用另一个替换播放器库存中的染料颜色

时间:2015-05-11 17:59:26

标签: java minecraft bukkit

我想用不同颜色的新染料替换播放器库存中的染料,例如从青色到灰色。

我的插件完美地将一种染料更改为另一种染料,但当我将其移动到我的热门栏时,我无法将其丢弃,当我在库存中点击它时,它会突然消失。在那种情况下,我认为该项目不存在。

如何更改此项目的颜色?

代码:

Dye dye = new Dye();
dye.setColor(DyeColor.RED);
  ItemStack dye4 = dye.toItemStack();
  dye4.setAmount(1);
dye.setColor(DyeColor.ORANGE);
  ItemStack dye3 = dye.toItemStack();
  dye4.setAmount(1);
dye.setColor(DyeColor.PURPLE);
  ItemStack dye2 = dye.toItemStack();
  dye4.setAmount(1);
dye.setColor(DyeColor.CYAN);
  ItemStack dye1 = dye.toItemStack();
  dye4.setAmount(1);
dye.setColor(DyeColor.GRAY);
  ItemStack dye0 = dye.toItemStack();

ArrayList<ItemStack> dyes = new ArrayList<ItemStack>(Arrays.asList(
  dye0, dye1, dye2, dye3, dye4
));

p.getOpenInventory().getTopInventory().setItem(1, dyes.get(0));

注意:我已缩短了此示例的代码。

截图:

之前

Before

After

我把它移到hotbar - 它消失之前的一秒钟(因为我没有点击它:D)

I moved it to hotbar - a second before it disappeared (because I didn't click on it :D)​

下载

我做了一个带有此错误的示例插件:

如何解决此错误?

1 个答案:

答案 0 :(得分:1)

我的代码中有一个愚蠢的错误,我没有将灰色染料的数量设置为1.

最终代码

Dye dye = new Dye();
dye.setColor(DyeColor.RED);
  ItemStack dye4 = dye.toItemStack();
  dye4.setAmount(1);
dye.setColor(DyeColor.ORANGE);
  ItemStack dye3 = dye.toItemStack();
  dye3.setAmount(1);
dye.setColor(DyeColor.PURPLE);
  ItemStack dye2 = dye.toItemStack();
  dye2.setAmount(1);
dye.setColor(DyeColor.CYAN);
  ItemStack dye1 = dye.toItemStack();
  dye1.setAmount(1);
dye.setColor(DyeColor.GRAY);
  ItemStack dye0 = dye.toItemStack();
  dye0.setAmount(1);

ImmutableList<ItemStack> dyes 
  = ImmutableList.of(dye0, dye1, dye2, dye3, dye4);

p.getOpenInventory().getTopInventory().setItem(1, dyes.get(0));