diff --git a/patches/minecraft/net/minecraft/entity/EntityLivingBase.java.patch b/patches/minecraft/net/minecraft/entity/EntityLivingBase.java.patch index a6547e93c7..1a7edb72b3 100644 --- a/patches/minecraft/net/minecraft/entity/EntityLivingBase.java.patch +++ b/patches/minecraft/net/minecraft/entity/EntityLivingBase.java.patch @@ -199,7 +199,15 @@ super.func_70071_h_(); this.func_184608_ct(); -@@ -2488,6 +2514,40 @@ +@@ -2015,6 +2041,7 @@ + if (!ItemStack.func_77989_b(itemstack1, itemstack)) + { + ((WorldServer)this.field_70170_p).func_73039_n().func_151247_a(this, new SPacketEntityEquipment(this.func_145782_y(), entityequipmentslot, itemstack1)); ++ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.entity.living.LivingEquipmentChangeEvent(this, entityequipmentslot, itemstack, itemstack1)); + + if (!itemstack.func_190926_b()) + { +@@ -2488,6 +2515,40 @@ this.field_70752_e = true; } @@ -240,7 +248,7 @@ public abstract EnumHandSide func_184591_cq(); public boolean func_184587_cr() -@@ -2508,12 +2568,19 @@ +@@ -2508,12 +2569,19 @@ if (itemstack == this.field_184627_bm) { @@ -261,7 +269,7 @@ { this.func_71036_o(); } -@@ -2531,8 +2598,10 @@ +@@ -2531,8 +2599,10 @@ if (!itemstack.func_190926_b() && !this.func_184587_cr()) { @@ -273,7 +281,7 @@ if (!this.field_70170_p.field_72995_K) { -@@ -2613,7 +2682,9 @@ +@@ -2613,7 +2683,9 @@ if (!this.field_184627_bm.func_190926_b() && this.func_184587_cr()) { this.func_184584_a(this.field_184627_bm, 16); @@ -284,7 +292,7 @@ this.func_184602_cy(); } } -@@ -2637,7 +2708,8 @@ +@@ -2637,7 +2709,8 @@ { if (!this.field_184627_bm.func_190926_b()) { @@ -294,7 +302,7 @@ } this.func_184602_cy(); -@@ -2761,4 +2833,29 @@ +@@ -2761,4 +2834,29 @@ { return true; } diff --git a/src/main/java/net/minecraftforge/event/entity/living/LivingEquipmentChangeEvent.java b/src/main/java/net/minecraftforge/event/entity/living/LivingEquipmentChangeEvent.java new file mode 100644 index 0000000000..1495e52ae9 --- /dev/null +++ b/src/main/java/net/minecraftforge/event/entity/living/LivingEquipmentChangeEvent.java @@ -0,0 +1,61 @@ +/* + * Minecraft Forge + * Copyright (c) 2016. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation version 2.1 + * of the License. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +package net.minecraftforge.event.entity.living; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fml.common.eventhandler.Cancelable; + +/** + * {@link LivingEquipmentChangeEvent} is fired when the Equipment of a Entity changes.
+ * This event is fired whenever changes in Equipment are detected in {@link EntityLivingBase#onUpdate()}.
+ * This also includes entities joining the World, as well as being cloned.
+ * This event is fired on server-side only.
+ *
+ * {@link #slot} contains the affected {@link EntityEquipmentSlot}.
+ * {@link #from} contains the {@link ItemStack} that was equipped previously.
+ * {@link #to} contains the {@link ItemStack} that is equipped now.
+ *
+ * This event is not {@link Cancelable}.
+ *
+ * This event does not have a result. {@link HasResult}
+ *
+ * This event is fired on the {@link MinecraftForge#EVENT_BUS}. + **/ +public class LivingEquipmentChangeEvent extends LivingEvent +{ + private final EntityEquipmentSlot slot; + private final ItemStack from; + private final ItemStack to; + + public LivingEquipmentChangeEvent(EntityLivingBase entity, EntityEquipmentSlot slot, ItemStack from, ItemStack to) + { + super(entity); + this.slot = slot; + this.from = from; + this.to = to; + } + + public EntityEquipmentSlot getSlot() { return this.slot; } + public ItemStack getFrom() { return this.from; } + public ItemStack getTo() { return this.to; } +} diff --git a/src/test/java/net/minecraftforge/debug/EquipmentChangeTest.java b/src/test/java/net/minecraftforge/debug/EquipmentChangeTest.java new file mode 100644 index 0000000000..6588e55ed1 --- /dev/null +++ b/src/test/java/net/minecraftforge/debug/EquipmentChangeTest.java @@ -0,0 +1,52 @@ +/* + * Minecraft Forge + * Copyright (c) 2016. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation version 2.1 + * of the License. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +package net.minecraftforge.debug; + +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.entity.living.LivingEquipmentChangeEvent; +import net.minecraftforge.fml.common.FMLLog; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.event.FMLInitializationEvent; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; + +@Mod(modid = "equipment_change_test", version = "1.0.0") +public class EquipmentChangeTest +{ + + @Mod.EventHandler + public void onInit(FMLInitializationEvent event) + { + //register the eventhandler + MinecraftForge.EVENT_BUS.register(this); + } + + /** + * the Method handling the {@link LivingEquipmentChangeEvent} + * Serverside only! + */ + @SubscribeEvent + public void onEquipmentChange(LivingEquipmentChangeEvent event) + { + //a debug console print + FMLLog.info("[Equipment-Change] " + event.getEntity() + " changed his Equipment in " + + event.getSlot() + " from " + event.getFrom() + " to " + event.getTo()); + } + +}