Changed Armor Material to use an ItemStack aware version (#3469)

This commit is contained in:
CoderAtParadise 2016-12-01 11:08:30 +10:00 committed by LexManos
parent ef1efaffec
commit 249c468a75
2 changed files with 51 additions and 38 deletions

View File

@ -661,39 +661,28 @@
public static void func_150900_l()
{
func_179214_a(Blocks.field_150350_a, new ItemAir(Blocks.field_150350_a));
@@ -972,6 +1568,10 @@
@@ -971,6 +1567,8 @@
private final float field_78010_h;
private final float field_78011_i;
private final int field_78008_j;
+ //Added by forge for custom Tool materials.
+ @Nullable
+ private ItemStack repairMaterial = null;
+
+ private ItemStack repairMaterial = ItemStack.field_190927_a;
private ToolMaterial(int p_i1874_3_, int p_i1874_4_, float p_i1874_5_, float p_i1874_6_, int p_i1874_7_)
{
this.field_78001_f = p_i1874_3_;
@@ -1006,9 +1606,34 @@
@@ -1006,9 +1604,26 @@
return this.field_78008_j;
}
+ @Deprecated // Use getRepairItemStack below
public Item func_150995_f()
{
- return this == WOOD ? Item.func_150898_a(Blocks.field_150344_f) : (this == STONE ? Item.func_150898_a(Blocks.field_150347_e) : (this == GOLD ? Items.field_151043_k : (this == IRON ? Items.field_151042_j : (this == DIAMOND ? Items.field_151045_i : null))));
+ switch (this)
+ {
+ case WOOD: return Item.func_150898_a(Blocks.field_150344_f);
+ case STONE: return Item.func_150898_a(Blocks.field_150347_e);
+ case GOLD: return Items.field_151043_k;
+ case IRON: return Items.field_151042_j;
+ case DIAMOND: return Items.field_151045_i;
+ default: return Items.field_190931_a;
+ }
return this == WOOD ? Item.func_150898_a(Blocks.field_150344_f) : (this == STONE ? Item.func_150898_a(Blocks.field_150347_e) : (this == GOLD ? Items.field_151043_k : (this == IRON ? Items.field_151042_j : (this == DIAMOND ? Items.field_151045_i : null))));
}
+
+ public ToolMaterial setRepairItem(ItemStack stack)
+ {
+ if (this.repairMaterial != null) throw new RuntimeException("Repair material has already been set");
+ if (!this.repairMaterial.func_190926_b()) throw new RuntimeException("Repair material has already been set");
+ if (this == WOOD || this == STONE || this == GOLD || this == IRON || this == DIAMOND) throw new RuntimeException("Can not change vanilla tool repair materials");
+ this.repairMaterial = stack;
+ return this;
@ -701,9 +690,9 @@
+
+ public ItemStack getRepairItemStack()
+ {
+ if (repairMaterial != null) return repairMaterial;
+ if (!repairMaterial.func_190926_b()) return repairMaterial;
+ Item ret = this.func_150995_f();
+ repairMaterial = new ItemStack(ret, 1, net.minecraftforge.oredict.OreDictionary.WILDCARD_VALUE);
+ if (ret != null) repairMaterial = new ItemStack(ret, 1, net.minecraftforge.oredict.OreDictionary.WILDCARD_VALUE);
+ return repairMaterial;
+ }
}

View File

@ -1,6 +1,17 @@
--- ../src-base/minecraft/net/minecraft/item/ItemArmor.java
+++ ../src-work/minecraft/net/minecraft/item/ItemArmor.java
@@ -221,6 +221,19 @@
@@ -187,7 +187,9 @@
public boolean func_82789_a(ItemStack p_82789_1_, ItemStack p_82789_2_)
{
- return this.field_77878_bZ.func_151685_b() == p_82789_2_.func_77973_b() ? true : super.func_82789_a(p_82789_1_, p_82789_2_);
+ ItemStack mat = this.field_77878_bZ.getRepairItemStack();
+ if (!mat.func_190926_b() && net.minecraftforge.oredict.OreDictionary.itemMatches(mat,p_82789_2_,false)) return true;
+ return super.func_82789_a(p_82789_1_, p_82789_2_);
}
public ActionResult<ItemStack> func_77659_a(World p_77659_1_, EntityPlayer p_77659_2_, EnumHand p_77659_3_)
@@ -221,6 +223,19 @@
return multimap;
}
@ -20,29 +31,42 @@
public static enum ArmorMaterial
{
LEATHER("leather", 5, new int[]{1, 2, 3, 1}, 15, SoundEvents.field_187728_s, 0.0F),
@@ -235,6 +248,8 @@
@@ -235,6 +250,8 @@
private final int field_78055_h;
private final SoundEvent field_185020_j;
private final float field_189417_k;
+ //Added by forge for custom Armor materials.
+ public Item customCraftingMaterial = null;
+ public ItemStack repairMaterial = ItemStack.field_190927_a;
private ArmorMaterial(String p_i47117_3_, int p_i47117_4_, int[] p_i47117_5_, int p_i47117_6_, SoundEvent p_i47117_7_, float p_i47117_8_)
{
@@ -268,7 +283,15 @@
public Item func_151685_b()
{
- return this == LEATHER ? Items.field_151116_aA : (this == CHAIN ? Items.field_151042_j : (this == GOLD ? Items.field_151043_k : (this == IRON ? Items.field_151042_j : (this == DIAMOND ? Items.field_151045_i : null))));
+ switch (this)
+ {
+ case LEATHER: return Items.field_151116_aA;
+ case CHAIN: return Items.field_151042_j;
+ case GOLD: return Items.field_151043_k;
+ case IRON: return Items.field_151042_j;
+ case DIAMOND: return Items.field_151045_i;
+ default: return customCraftingMaterial;
+ }
@@ -266,6 +283,7 @@
return this.field_185020_j;
}
@SideOnly(Side.CLIENT)
+ @Deprecated // Use getRepairItemStack below
public Item func_151685_b()
{
return this == LEATHER ? Items.field_151116_aA : (this == CHAIN ? Items.field_151042_j : (this == GOLD ? Items.field_151043_k : (this == IRON ? Items.field_151042_j : (this == DIAMOND ? Items.field_151045_i : null))));
@@ -281,5 +299,21 @@
{
return this.field_189417_k;
}
+
+ public ArmorMaterial setRepairItem(ItemStack stack)
+ {
+ if (!this.repairMaterial.func_190926_b()) throw new RuntimeException("Repair material has already been set");
+ if (this == LEATHER || this == CHAIN || this == GOLD || this == IRON || this == DIAMOND) throw new RuntimeException("Can not change vanilla armor repair materials");
+ this.repairMaterial = stack;
+ return this;
+ }
+
+ public ItemStack getRepairItemStack()
+ {
+ if (!repairMaterial.func_190926_b()) return repairMaterial;
+ Item ret = this.func_151685_b();
+ if (ret != null) repairMaterial = new ItemStack(ret,1,net.minecraftforge.oredict.OreDictionary.WILDCARD_VALUE);
+ return repairMaterial;
+ }
}
}