Star_sea233
我想注册一个烧炼规则,如下
  1. <font size="2" face="Trebuchet MS">GameRegistry.<i>addSmelting</i>(Items.<b><i><font color="DeepSkyBlue">POTIONITEM</font></i></b>, <b><font color="Purple">new</font></b> ItemStack(<i><font color="DeepSkyBlue">itemSalt</font></i>), <font color="YellowGreen">0.5f</font>);</font>
复制代码
但是我发现所有药水(不是滞留和投掷型)都可以烧成 itemSalt
于是我用了 ItemStack 和 NBTTagCompound
  1. <font size="2" face="Trebuchet MS">GameRegistry.<i>addSmelting</i>(<b><font color="Purple">new</font></b> ItemStack(Items.<b><i><font color="DeepSkyBlue">POTIONITEM</font></i></b>, <font color="YellowGreen">1</font>, <font color="YellowGreen">0</font>,
  2.             <b><font color="Purple">new</font></b> NBTTagCompound().getCompoundTag(<font color="RoyalBlue">"Potion:"minecraft:water""</font>)), <b><font color="Purple">new</font></b> ItemStack(<i><font color="DeepSkyBlue">itemSalt</font></i>), <font color="YellowGreen">0.5f</font>);</font>
复制代码
但还是等于上面的效果,getCompoundTag(Strng) 里面的参数该怎么填啊 qwq
谢谢大佬


Star_sea233
emmm...手贱手动上了语法高亮
这是代码:
  1. GameRegistry.addSmelting(Items.POTIONITEM, new ItemStack(itemSalt), 0.5f);
复制代码
  1. GameRegistry.addSmelting(new ItemStack(Items.POTIONITEM, 1, 0,
  2.                                 new NBTTagCompound().getCompoundTag("Potion:"minecraft:water"")), new ItemStack(itemSalt), 0.5f);
复制代码

3TUSK
楼主你是不是对 get/set 的理解有误?
  1. NBTTagCompound tag = new NBTTagCompound();

  2. tag.setString("Potion", "minecraft:water");

  3. ItemStack input = new ItemStack(Items.POTIONITEM, 1, 0, tag);
复制代码

Star_sea233
u.s.knowledge 发表于 2019-7-26 14:41
楼主你是不是对 get/set 的理解有误?
  1. NBTTagCompound tag = new NBTTagCompound();
  2. tag.setString("Potion", "minecraft:water");
  3. GameRegistry.addSmelting(new ItemStack(Items.POTIONITEM, 1, 0, tag), new ItemStack(itemSalt), 0.5f);
复制代码

照做了,但试了一下,药水依然可以被烧成 itemSalt,是参数填错了吗 qwq
顺带一提,NBTTagCompound 这个类我是顺着 ItemStack 找得到,用的函数也是蒙的。。。

3TUSK
Star_sea233 发表于 2019-7-26 19:58
照做了,但试了一下,药水依然可以被烧成 itemSalt,是参数填错了吗 qwq
顺带一提,NBTTagCompound 这个 ...

没填错,只是单纯的熔炉比较输入的时候忽略 NBT 数据而已……

见:
FurnaceRecipes.getSmeltingResult(func_151395_a)
FurnaceRecipes.compareItemStacks(func_151397_a)

Star_sea233
u.s.knowledge 发表于 2019-7-27 00:24
没填错,只是单纯的熔炉比较输入的时候忽略 NBT 数据而已……

见:

emmm...
具体怎么用呢,谢谢大佬

3TUSK
Star_sea233 发表于 2019-7-27 16:29
emmm...
具体怎么用呢,谢谢大佬

我没说让你用。我只是在说:熔炉比较输入的时候忽略 NBT 数据。楼主你还是放弃吧。

或者自己写个熔炉。

Star_sea233
u.s.knowledge 发表于 2019-7-27 23:42
我没说让你用。我只是在说:熔炉比较输入的时候忽略 NBT 数据。楼主你还是放弃吧。

或者自己写个熔炉。 ...

emmm...
好麻烦的样子
是 public ItemStack(Item itemIn, int amount, int meta, @Nullable NBTTagCompound capNBT) 中的 @Nullable 作怪吗?
我想继承这个类 (好吧, 被写上了 final)
那么复制加粘贴然后修改构造函数可行吗?



土球球
本帖最后由 ustc_zzzz 于 2019-7-29 02:26 编辑

如果楼主一定要强行使用熔炉匹配输入物品的 NBT 的话,有一种相对不太讨好的方法:


不知道啥是 AT 的话,参见(我竟在你坛找不到第二份 AT 教程,只能先自卖自夸了)
https://fmltutor.ustc-zzzz.net/%E9%99%84%E5%BD%95D-%E4%BD%BF%E7%94%A8AccessTransformers.html

3TUSK
Star_sea233 发表于 2019-7-28 13:39
emmm...
好麻烦的样子
是 public ItemStack(Item itemIn, int amount, int meta, @Nullable NBTTagCompou ...

0. 我不知道你为什么一定要随意把一些莫名其妙的东西和这个问题联系到一起——那个 @Nullable 和楼主的问题有任何意义上的联系吗?此外第四个参数不是物品的 NBT。

1.
FurnaceRecipes.getSmeltingResult(func_151395_a)
FurnaceRecipes.compareItemStacks(func_151397_a)

我已经说了,熔炉比较输入的时候忽略 NBT 数据。如果你想知道为什么,请看这两个方法的实现。
请不要再胡乱联想了。

Star_sea233
u.s.knowledge 发表于 2019-7-29 10:32
0. 我不知道你为什么一定要随意把一些莫名其妙的东西和这个问题联系到一起——那个 @Nullable 和楼主的问 ...

啊, 我只是看见解注上面有 null 这个字段。
我自己也佩服我的脑洞

那个写一个新熔炉, 继承了 BlockFurnace 类, 然后需要具体怎么做呢
或者也可以换一个方案:
把水瓶换成水桶, 但不是我想要的效果——不会还桶 (因此才换成水瓶, 成本较低)。
怎样做可以在玩家拿东西的时候还桶, 漏斗不会把 itemSalt 漏走

Star_sea233
ustc_zzzz 发表于 2019-7-29 02:23
如果楼主一定要强行使用熔炉匹配输入物品的 NBT 的话,有一种相对不太讨好的方法:

这个方法为什么不太讨好呢, 是有什么副作用或者不好的影响吗?

第一页 上一页 下一页 最后一页