SHP241
如何在合成后将物品退给玩家?
如何制作一个在合成中使用的工具?(例:比如使用铁斧可以和原木合成消耗铁斧耐久(铁斧不消失)然后合成出6个木板)我看魔改能实现但mod不知道要怎么写

上次有dalao说用ItemCraftedEvent事件,但我不是很懂,大概有这么几个点:
一个有多个配方的物品是要用craftMatrix判断是用哪个配方吗?是的话,怎么用呢?
如何把工具合成后留在工作台里(例:原版水桶,格雷扳手)
如何实现在工具耐久比物品少时阻止shift超出数量合成(例:格雷锤子)
如何减少物品耐久
最好是能把上例中的内容用代码实现一下。。。感谢各位大佬,如果嫌金粒不够还可以加。。。



aptxliuyipeng
魔改加上这个就可以了[1.7.10][ssp/smp][MineTweaker RecipeMaker——可视化合成表编辑器][完全汉化]
http://www.mcbbs.net/thread-524260-1-1.html
但要i2里电锯的话就需要自己手动写了比如:val chainsaw = <IC2:itemToolChainsaw>.anyDamage();
recipes.addShapeless(<minecraft:planks:4> * 4, [<minecraft:log2>, chainsaw.onlyIC2ChargeAtLeast(100).transformIC2Discharge(100)]);

SHP241
aptxliuyipeng 发表于 2016-10-11 19:58
魔改加上这个就可以了[1.7.10][ssp/smp][MineTweaker RecipeMaker——可视化合成表编辑器][完全汉化]
http: ...

不好意思,我是在自己写mod,不是魔改

天蝎_心殇
返还物品可以这么做
Items.apple.setContainerItem(Items.sugar);
这样用苹果合成时就会返回糖

SHP241
天蝎_心殇 发表于 2016-10-11 21:17
返还物品可以这么做
Items.apple.setContainerItem(Items.sugar);
这样用苹果合成时就会返回糖 ...

哦。。我试一下

SHP241
天蝎_心殇 发表于 2016-10-11 21:17
返还物品可以这么做
Items.apple.setContainerItem(Items.sugar);
这样用苹果合成时就会返回糖 ...

那么能不能返回一个对应的工具的-1耐久版本呢?

天蝎_心殇
SHP241 发表于 2016-10-11 22:00
那么能不能返回一个对应的工具的-1耐久版本呢?

试一下这个原理就是复制一份itemStack,然后-1耐久
  1.   public boolean doesContainerItemLeaveCraftingGrid(ItemStack itemStack)
  2.   {
  3.     return false;
  4.   }

  5.   public boolean getShareTag()
  6.   {
  7.     return true;
  8.   }

  9.   public boolean hasContainerItem(ItemStack itemStack)
  10.   {
  11.     return true;
  12.   }

  13.   public ItemStack getContainerItem(ItemStack itemStack)
  14.   {
  15.     ItemStack stack = itemStack.copy();

  16.     stack.setItemDamage(stack.getItemDamage() + 1);
  17.     stack.stackSize = 1;

  18.     return stack;
  19.   }
复制代码





SHP241
天蝎_心殇 发表于 2016-10-12 12:58
试一下这个原理就是复制一份itemStack,然后-1耐久

那么应该是最后一个问题?
怎么样设置不同耐久的物品都能参与合成?

天蝎_心殇
SHP241 发表于 2016-10-13 10:00
那么应该是最后一个问题?
怎么样设置不同耐久的物品都能参与合成?

这个只要在限定物品的后面限定耐久就好,int最大是32767
给个例子,这样用铁剑和石头合成时,会获得苹果
铁剑就是你的物品,如果你写了上一楼给的代码,那么就会达到你想要的效果
  1. GameRegistry.addShapelessRecipe(new ItemStack(Items.apple, 1),
  2. new Object[]{ new ItemStack(Blocks.stone, 1), new ItemStack(Items.iron_sword, 1, 32767),  });
复制代码