- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在为我的服务器网络编写自己的 GUI 商店,并且面临两个奇怪的问题。
第一个问题是,每当我想要获得 2 个项目 ID 为 161 和两个不同元 ID(0 和 1)的叶子时,我只会返回元 ID 2。
这是我在调试中尝试获取项目数据时得到的结果: Problem 1
这就是我在库存中得到的: Problem 1
但应该是这样的(例如):161/0 或 161/1
我从 Spigot/Bukkit 本身获取此项目元,因此我自己无论如何都不会获取它。
我遇到的下一个问题是,每当我想购买羊毛时,它只能完美地工作到第 9 个字节,然后它上面的所有内容每次都会返回给我橙色羊毛或粘土或玻璃。
这就是我显示项目的方式:
if(t == ShopType.SHOP_DECORATION){
inv = Bukkit.createInventory(null, 54, "Shop: Decoration");
createDisplay(Material.WOOL, (byte)0, inv, 0, null, getShopLore("wool"));
createDisplay(Material.WOOL, (byte)1, inv, 1, null, getShopLore("wool2"));
createDisplay(Material.WOOL, (byte)2, inv, 2, null, getShopLore("wool3"));
createDisplay(Material.WOOL, (byte)3, inv, 3, null, getShopLore("wool4"));
createDisplay(Material.WOOL, (byte)4, inv, 4, null, getShopLore("wool5"));
createDisplay(Material.WOOL, (byte)5, inv, 5, null, getShopLore("wool6"));
createDisplay(Material.WOOL, (byte)6, inv, 6, null, getShopLore("wool7"));
createDisplay(Material.WOOL, (byte)7, inv, 7, null, getShopLore("wool8"));
createDisplay(Material.WOOL, (byte)8, inv, 8, null, getShopLore("wool9"));
createDisplay(Material.WOOL, (byte)9, inv, 9, null, getShopLore("woola"));
createDisplay(Material.WOOL, (byte)10, inv, 10, null, getShopLore("woolb"));
createDisplay(Material.WOOL, (byte)11, inv, 11, null, getShopLore("woolc"));
createDisplay(Material.WOOL, (byte)12, inv, 12, null, getShopLore("woold"));
createDisplay(Material.WOOL, (byte)13, inv, 13, null, getShopLore("woole"));
createDisplay(Material.WOOL, (byte)14, inv, 14, null, getShopLore("woolf"));
createDisplay(Material.WOOL, (byte)15, inv, 15, null, getShopLore("woolg"));
createDisplay(Material.STAINED_GLASS, (byte)0, inv, 16, null, getShopLore("glass"));
createDisplay(Material.STAINED_GLASS, (byte)1, inv, 17, null, getShopLore("glass2"));
createDisplay(Material.STAINED_GLASS, (byte)2, inv, 18, null, getShopLore("glass3"));
createDisplay(Material.STAINED_GLASS, (byte)3, inv, 19, null, getShopLore("glass4"));
createDisplay(Material.STAINED_GLASS, (byte)4, inv, 20, null, getShopLore("glass5"));
createDisplay(Material.STAINED_GLASS, (byte)5, inv, 21, null, getShopLore("glass6"));
createDisplay(Material.STAINED_GLASS, (byte)6, inv, 22, null, getShopLore("glass7"));
createDisplay(Material.STAINED_GLASS, (byte)7, inv, 23, null, getShopLore("glass8"));
createDisplay(Material.STAINED_GLASS, (byte)8, inv, 24, null, getShopLore("glass9"));
createDisplay(Material.STAINED_GLASS, (byte)9, inv, 25, null, getShopLore("glassa"));
createDisplay(Material.STAINED_GLASS, (byte)10, inv, 26, null, getShopLore("glassb"));
createDisplay(Material.STAINED_GLASS, (byte)11, inv, 27, null, getShopLore("glassc"));
createDisplay(Material.STAINED_GLASS, (byte)12, inv, 28, null, getShopLore("glassd"));
createDisplay(Material.STAINED_GLASS, (byte)13, inv, 29, null, getShopLore("glasse"));
createDisplay(Material.STAINED_GLASS, (byte)14, inv, 30, null, getShopLore("glassf"));
createDisplay(Material.STAINED_GLASS, (byte)15, inv, 31, null, getShopLore("glassg"));
createDisplay(Material.STAINED_CLAY, (byte)0, inv, 32, null, getShopLore("clay"));
createDisplay(Material.STAINED_CLAY, (byte)1, inv, 33, null, getShopLore("clay2"));
createDisplay(Material.STAINED_CLAY, (byte)2, inv, 34, null, getShopLore("clay3"));
createDisplay(Material.STAINED_CLAY, (byte)3, inv, 35, null, getShopLore("clay4"));
createDisplay(Material.STAINED_CLAY, (byte)4, inv, 36, null, getShopLore("clay5"));
createDisplay(Material.STAINED_CLAY, (byte)5, inv, 37, null, getShopLore("clay6"));
createDisplay(Material.STAINED_CLAY, (byte)6, inv, 38, null, getShopLore("clay7"));
createDisplay(Material.STAINED_CLAY, (byte)7, inv, 39, null, getShopLore("clay8"));
createDisplay(Material.STAINED_CLAY, (byte)8, inv, 40, null, getShopLore("clay9"));
createDisplay(Material.STAINED_CLAY, (byte)9, inv, 41, null, getShopLore("claya"));
createDisplay(Material.STAINED_CLAY, (byte)10, inv, 42, null, getShopLore("clayb"));
createDisplay(Material.STAINED_CLAY, (byte)11, inv, 43, null, getShopLore("clayc"));
createDisplay(Material.STAINED_CLAY, (byte)12, inv, 44, null, getShopLore("clayd"));
createDisplay(Material.STAINED_CLAY, (byte)13, inv, 45, null, getShopLore("claye"));
createDisplay(Material.STAINED_CLAY, (byte)14, inv, 46, null, getShopLore("clayf"));
createDisplay(Material.STAINED_CLAY, (byte)15, inv, 47, null, getShopLore("clayg"));
createButtons(inv);
p.openInventory(inv);
}
这些显示在 GUI 中显示正确,但当我想购买它们时,我总是在青色羊毛/粘土/玻璃之后得到橙色羊毛或粘土或玻璃。
这就是我给他们的方式:
public static boolean withdrawPlayer(Player player, double amount, int am){
double money = econ.getBalance(player);
if(money < amount){
return false;
}
econ.withdrawPlayer(player, amount);
JSONObject json = Shop.getItemData(player);
int itemID = json.getInt("item_id");
byte itemMeta = (byte)json.getInt("item_data");
ItemStack item = new ItemStack(itemID, 1, itemMeta);
item.setAmount(am);
player.sendMessage("Debug: " + item.getAmount() + " " + item.getType() + " -- Data: " + Shop.getData(item.getData()) + " ||| " + item.getData());
player.getInventory().addItem(item);
player.updateInventory();
return true;
}
这就是我添加 JSONObject 的方法:
private static void addItem(String item, int price, ShopType type){
priceList.put(item, price);
slotList.put(item, type);
JSONObject temp = new JSONObject();
switch(type){
case SHOP_REDSTONE:
temp.put("slot", a);
temp.put("type", type.toString());
temp.put("name", item);
temp.put("price", price);
a++;
break;
case SHOP_ORES:
temp.put("slot", b);
temp.put("type", type.toString());
temp.put("name", item);
temp.put("price", price);
b++;
break;
case SHOP_SEEDS:
temp.put("slot", c);
temp.put("type", type.toString());
temp.put("name", item);
temp.put("price", price);
c++;
break;
case SHOP_FOOD:
temp.put("slot", d);
temp.put("type", type.toString());
temp.put("name", item);
temp.put("price", price);
d++;
break;
case SHOP_DROPS:
temp.put("slot", e);
temp.put("type", type.toString());
temp.put("name", item);
temp.put("price", price);
e++;
break;
case SHOP_MISC:
temp.put("slot", f);
temp.put("type", type.toString());
temp.put("name", item);
temp.put("price", price);
f++;
break;
case SHOP_DECORATION:
temp.put("slot", g);
temp.put("type", type.toString());
temp.put("name", item);
temp.put("price", price);
g++;
break;
}
System.out.println("A: " +a);
System.out.println("B: " +b);
System.out.println("C: " +c);
System.out.println("D: " +d);
System.out.println("E: " +e);
System.out.println("F: " +f);
System.out.println("G: " +g);
debug.add(temp);
}
这是当有人单击某个项目时运行的代码:
@EventHandler
public void onInventoryClick(InventoryClickEvent e){
Player p = (Player) e.getWhoClicked();
int slot = e.getSlot();
if (e.getSlotType().equals(SlotType.OUTSIDE)) {
return;
}
if(e.getClickedInventory().getName().equalsIgnoreCase("Menu")){
if (e.getSlotType().equals(SlotType.OUTSIDE)) {
return;
}
for(ClickType type : ClickType.values()){
if(e.getClick() == type){
e.setCancelled(true);
}
}
for(InventoryAction action : InventoryAction.values()){
if(e.getAction() == action){
e.setCancelled(true);
}
}
if(e.isRightClick() || e.isLeftClick()){
e.setCancelled(true);
switch(slot){
case 0:
p.closeInventory();
new Shop(ShopType.SHOP_REDSTONE, p);
break;
case 1:
p.closeInventory();
new Shop(ShopType.SHOP_ORES, p);
break;
case 2:
p.closeInventory();
new Shop(ShopType.SHOP_SEEDS, p);
break;
case 3:
p.closeInventory();
new Shop(ShopType.SHOP_FOOD, p);
break;
case 4:
p.closeInventory();
new Shop(ShopType.SHOP_DROPS, p);
break;
case 5:
p.closeInventory();
new Shop(ShopType.SHOP_MISC, p);
break;
case 6:
p.closeInventory();
new Shop(ShopType.SHOP_DECORATION, p);
break;
}
}
}
if(e.getClickedInventory().getName().contains("Shop: ")){
if (e.getSlotType().equals(SlotType.OUTSIDE)) {
return;
}
for(ClickType type : ClickType.values()){
if(e.getClick() == type){
e.setCancelled(true);
}
}
for(InventoryAction action : InventoryAction.values()){
if(e.getAction() == action){
e.setCancelled(true);
}
}
if(e.isRightClick() || e.isLeftClick()){
e.setCancelled(true);
ItemStack it = e.getCurrentItem();
if(it == null){
return;
}
int paperID = 339;
if(it.getTypeId() == paperID){
Shop.goBack(p);
}
}
}
switch(e.getClickedInventory().getName()){
case "Shop: Redstone":
e.setCancelled(true);
if(e.isLeftClick() && e.getCurrentItem().getTypeId() != 0){
ItemStack item = e.getCurrentItem();
Material mat = item.getType();
Shop.prepareBuy(p, slot, ShopType.SHOP_REDSTONE, mat.name());
Shop.addItemData(p, e.getCurrentItem().getTypeId(), Shop.getData(e.getCurrentItem().getData()));
}
if(e.isRightClick() && e.getCurrentItem().getTypeId() != 0){
ItemStack item = e.getCurrentItem();
Material mat = item.getType();
Shop.prepareSell(p, slot, ShopType.SHOP_REDSTONE, mat.name());
Shop.addItemData(p, e.getCurrentItem().getTypeId(), Shop.getData(e.getCurrentItem().getData()));
}
break;
case "Shop: Ores":
e.setCancelled(true);
if(e.isLeftClick() && e.getCurrentItem().getTypeId() != 0){
ItemStack item = e.getCurrentItem();
Material mat = item.getType();
Shop.prepareBuy(p, slot, ShopType.SHOP_ORES, mat.name());
Shop.addItemData(p, e.getCurrentItem().getTypeId(), Shop.getData(e.getCurrentItem().getData()));
}
if(e.isRightClick() && e.getCurrentItem().getTypeId() != 0){
ItemStack item = e.getCurrentItem();
Material mat = item.getType();
Shop.prepareSell(p, slot, ShopType.SHOP_ORES, mat.name());
Shop.addItemData(p, e.getCurrentItem().getTypeId(), Shop.getData(e.getCurrentItem().getData()));
}
break;
case "Shop: Seeds":
e.setCancelled(true);
if(e.isLeftClick() && e.getCurrentItem().getTypeId() != 0){
ItemStack item = e.getCurrentItem();
Material mat = item.getType();
Shop.prepareBuy(p, slot, ShopType.SHOP_SEEDS, mat.name());
Shop.addItemData(p, e.getCurrentItem().getTypeId(), Shop.getData(e.getCurrentItem().getData()));
}
if(e.isRightClick() && e.getCurrentItem().getTypeId() != 0){
ItemStack item = e.getCurrentItem();
Material mat = item.getType();
Shop.prepareSell(p, slot, ShopType.SHOP_SEEDS, mat.name());
Shop.addItemData(p, e.getCurrentItem().getTypeId(), Shop.getData(e.getCurrentItem().getData()));
}
break;
case "Shop: Food":
e.setCancelled(true);
if(e.isLeftClick() && e.getCurrentItem().getTypeId() != 0){
ItemStack item = e.getCurrentItem();
Material mat = item.getType();
Shop.prepareBuy(p, slot, ShopType.SHOP_FOOD, mat.name());
Shop.addItemData(p, e.getCurrentItem().getTypeId(), Shop.getData(e.getCurrentItem().getData()));
}
if(e.isRightClick() && e.getCurrentItem().getTypeId() != 0){
ItemStack item = e.getCurrentItem();
Material mat = item.getType();
Shop.prepareSell(p, slot, ShopType.SHOP_FOOD, mat.name());
Shop.addItemData(p, e.getCurrentItem().getTypeId(), Shop.getData(e.getCurrentItem().getData()));
}
break;
case "Shop: Drops":
e.setCancelled(true);
if(e.isLeftClick() && e.getCurrentItem().getTypeId() != 0){
ItemStack item = e.getCurrentItem();
Material mat = item.getType();
Shop.prepareBuy(p, slot, ShopType.SHOP_DROPS, mat.name());
Shop.addItemData(p, e.getCurrentItem().getTypeId(), Shop.getData(e.getCurrentItem().getData()));
}
if(e.isRightClick() && e.getCurrentItem().getTypeId() != 0){
ItemStack item = e.getCurrentItem();
Material mat = item.getType();
Shop.prepareSell(p, slot, ShopType.SHOP_DROPS, mat.name());
Shop.addItemData(p, e.getCurrentItem().getTypeId(), Shop.getData(e.getCurrentItem().getData()));
}
break;
case "Shop: Misc.":
e.setCancelled(true);
if(e.isLeftClick() && e.getCurrentItem().getTypeId() != 0){
ItemStack item = e.getCurrentItem();
Material mat = item.getType();
Shop.prepareBuy(p, slot, ShopType.SHOP_MISC, mat.name());
Shop.addItemData(p, e.getCurrentItem().getTypeId(), Shop.getData(e.getCurrentItem().getData()));
}
if(e.isRightClick() && e.getCurrentItem().getTypeId() != 0){
ItemStack item = e.getCurrentItem();
Material mat = item.getType();
Shop.prepareSell(p, slot, ShopType.SHOP_MISC, mat.name());
Shop.addItemData(p, e.getCurrentItem().getTypeId(), Shop.getData(e.getCurrentItem().getData()));
}
break;
case "Shop: Decoration":
e.setCancelled(true);
if(e.getClick() == ClickType.DROP){
return;
}
if(e.isLeftClick() && e.getCurrentItem().getTypeId() != 0){
ItemStack item = e.getCurrentItem();
Material mat = item.getType();
Shop.prepareBuy(p, slot, ShopType.SHOP_DECORATION, mat.name());
Shop.addItemData(p, e.getCurrentItem().getTypeId(), Shop.getData(e.getCurrentItem().getData()));
}
if(e.isRightClick() && e.getCurrentItem().getTypeId() != 0){
ItemStack item = e.getCurrentItem();
Material mat = item.getType();
Shop.prepareSell(p, slot, ShopType.SHOP_DECORATION, mat.name());
Shop.addItemData(p, e.getCurrentItem().getTypeId(), Shop.getData(e.getCurrentItem().getData()));
}
break;
}
}
请问,我是否遗漏了什么或者我做错了什么?
最佳答案
对于第一个问题:新的 ItemStack(Material.LEAVES_2,1,(短)0);新的 ItemStack(Material.LEAVES_2,1,(短)1);你的叶子的构造函数应该看起来像这样。
对于第二个问题:Shop.getData 到底返回什么?如果您想给他一个类似于商店元素的元素,您可以执行以下操作:
p.getInventory().addItem(new ItemStack(e.getCurrentItem().getType(),1,e.getCurrentItem().getDurability()));
“:”后面的值(不知道它的英文叫法;我是德国人)称为元素的耐用性,称为 block 的数据。另外,为了持久性,Bukkit 使用短字节,但对于 block 数据,它们使用字节。
关于java - Bukkit/龙头 : Plugin - Custom GUI Shop error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38284188/
我在大学学习C++时学习了这段代码..后来我在C#中使用了同样的东西...但现在我想在Java中使用它...我在互联网上寻找类似的东西,但我什至不知道如何表达它,以便我得到正确的结果。 所以嗯,请让我
我正在我的 Ruby on Rails Controller 上运行 RSPEC 测试,这是我正在测试的 Controller 操作: Controller 代码: class Customers::
想为我选择的选项卡设置自定义背景,到目前为止,子类化是我自定义 UITAbBar/UITabBarItem 的方式。 问题是:有谁知道(或知道我在哪里可以找到)设置背景的属性是什么? 所选选项卡周围有
您好,我在 commerefacades-beans.xml 中创建了 eProductForm bean,我添加了 ProductData 的自定义属性。 然后在commercewebs
我有两个表:1. 客户2. customer_order 客户表包含客户数据(duh),customer_order 包含所有订单。我可以在 customer.id=customer_order.id
在我的 TableView 中,我有一个 NSMutableArray *currList 的数据源 - 它包含对象 Agent 的对象。我创建了自定义的 TableCell 并正确设置了所有内容。我
是否建议使用自引用泛型继承? public abstract class Entity { public Guid Id {get; set;} public int Version
我正在尝试为我的 Grafana 安装使用自定义文件 ( custom.ini )。不幸的是,这不起作用。 我做了什么: 安装了一台装有 CentOS 7 的虚拟机 添加了 Grafana Yum R
我被分配了两个给定类的作业,一个是抽象父类 Lot.java,另一个是测试类 TestLots.java。我不应该编辑其中任何一个。任务是创建Lot的两个子类,使TestLots中的错误不再是错误。
我是 Botpress 的新手。 我刚刚安装了 Botpress 的最新版本“botpress-ce-v11_0_1-win-x64”。 我浏览了文档,发现了一些关于内容类型、内容元素和内容渲染的解释
我一直在四处寻找,但我还没有找到任何东西,除了 Qt3 的旧文档和 qt 设计器的 3.x 版。 我会举个例子,并不是因为我的项目是 GPL 而不能提供代码,而是为了简单起见。 示例:您正在为您的应用
场景 我有一个自定义规则来验证订单的运费: public class OrderValidator : BaseValidator { private string CustomInfo {
我有用于身份验证的自定义拦截器: @Named("authInterceptor") @Provides @Singleton fun providesAuthIntercep
如果有人没有添加照片,我想显示默认头像图像。我假设我需要在模型或助手中执行自定义 getter。 如果我做 getter,它会看起来像这样吗: def avatar_url "default_ur
我正在使用 Google Search API,但遇到了一些麻烦。这个请求(在 Python 中,使用 requests 库)工作正常 res = requests.get("https://www.
我使用 MSKLC 制作了自定义键盘布局。 我以为我仔细按照说明操作了chose appropriate values对于LOCALENAME和 LOCALID参数。 但是,在通过按 Win+Spac
我正在使用 simpleframework解析 XML 字符串并将其转换为对象。 Serializer serializer = new Persister(); try { Customer
我正在使用 C# 控制台应用程序从 MySql 数据库获取一些数据,但在正确查询时遇到一些问题 现在的情况: SELECT * FROM Customer WHERE EXISTS ( SELECT
我在我的 iPhone 4S 上运行我的应用程序,我正在使用自定义表格 View Controller 和自定义表格 View 单元格,当我将表格 View 向上滑动到空白区域并同样向下滑动到空白区域
我有一个自定义的 JavaScript 变量,它正在检查 eventAction 是什么,这样我就可以知道是否触发一些转换像素。自定义 Javascript 称为“FacebookConversion
我是一名优秀的程序员,十分优秀!