diff --git a/patches/minecraft/net/minecraft/entity/Entity.java.patch b/patches/minecraft/net/minecraft/entity/Entity.java.patch index a679974d7..9fb160880 100644 --- a/patches/minecraft/net/minecraft/entity/Entity.java.patch +++ b/patches/minecraft/net/minecraft/entity/Entity.java.patch @@ -131,7 +131,15 @@ } public boolean func_70093_af() -@@ -2092,7 +2146,7 @@ +@@ -2049,6 +2103,7 @@ + { + if (!this.field_70170_p.field_72995_K && !this.field_70128_L) + { ++ if (!net.minecraftforge.common.ForgeHooks.onTravelToDimension(this, p_71027_1_)) return; + this.field_70170_p.field_72984_F.func_76320_a("changeDimension"); + MinecraftServer minecraftserver = MinecraftServer.func_71276_C(); + int i = this.field_71093_bK; +@@ -2092,7 +2147,7 @@ public float func_180428_a(Explosion p_180428_1_, World p_180428_2_, BlockPos p_180428_3_, IBlockState p_180428_4_) { @@ -140,7 +148,7 @@ } public boolean func_174816_a(Explosion p_174816_1_, World p_174816_2_, BlockPos p_174816_3_, IBlockState p_174816_4_, float p_174816_5_) -@@ -2353,4 +2407,209 @@ +@@ -2353,4 +2408,209 @@ EnchantmentHelper.func_151385_b(p_174815_1_, p_174815_2_); } diff --git a/patches/minecraft/net/minecraft/entity/player/EntityPlayerMP.java.patch b/patches/minecraft/net/minecraft/entity/player/EntityPlayerMP.java.patch index cda8667cb..0dd5fb674 100644 --- a/patches/minecraft/net/minecraft/entity/player/EntityPlayerMP.java.patch +++ b/patches/minecraft/net/minecraft/entity/player/EntityPlayerMP.java.patch @@ -72,7 +72,15 @@ if (entitylist$entityegginfo != null) { -@@ -831,6 +848,7 @@ +@@ -528,6 +545,7 @@ + + public void func_71027_c(int p_71027_1_) + { ++ if (!net.minecraftforge.common.ForgeHooks.onTravelToDimension(this, p_71027_1_)) return; + if (this.field_71093_bK == 1 && p_71027_1_ == 1) + { + this.func_71029_a(AchievementList.field_76003_C); +@@ -831,6 +849,7 @@ { if (p_71064_1_ != null) { diff --git a/src/main/java/net/minecraftforge/common/ForgeHooks.java b/src/main/java/net/minecraftforge/common/ForgeHooks.java index ec12a1482..660de80ac 100644 --- a/src/main/java/net/minecraftforge/common/ForgeHooks.java +++ b/src/main/java/net/minecraftforge/common/ForgeHooks.java @@ -26,6 +26,7 @@ import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.item.EntityMinecartContainer; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.event.ClickEvent; @@ -73,6 +74,7 @@ import net.minecraftforge.common.util.BlockSnapshot; import net.minecraftforge.event.AnvilUpdateEvent; import net.minecraftforge.event.ForgeEventFactory; import net.minecraftforge.event.ServerChatEvent; +import net.minecraftforge.event.entity.EntityTravelToDimensionEvent; import net.minecraftforge.event.entity.item.ItemTossEvent; import net.minecraftforge.event.entity.living.LivingAttackEvent; import net.minecraftforge.event.entity.living.LivingDeathEvent; @@ -906,4 +908,19 @@ public class ForgeHooks if (stack != null && stack.getItem().onLeftClickEntity(stack, player, target)) return false; return true; } -} + + public static boolean onTravelToDimension(Entity entity, int dimension) + { + EntityTravelToDimensionEvent event = new EntityTravelToDimensionEvent(entity, dimension); + MinecraftForge.EVENT_BUS.post(event); + if (event.isCanceled()) + { + // Revert variable back to true as it would have been set to false + if (entity instanceof EntityMinecartContainer) + { + ((EntityMinecartContainer) entity).dropContentsWhenDead = true; + } + } + return !event.isCanceled(); + } +} \ No newline at end of file diff --git a/src/main/java/net/minecraftforge/event/entity/EntityTravelToDimensionEvent.java b/src/main/java/net/minecraftforge/event/entity/EntityTravelToDimensionEvent.java new file mode 100644 index 000000000..d62c2765b --- /dev/null +++ b/src/main/java/net/minecraftforge/event/entity/EntityTravelToDimensionEvent.java @@ -0,0 +1,29 @@ +package net.minecraftforge.event.entity; + +import net.minecraft.entity.Entity; +import net.minecraftforge.fml.common.eventhandler.Cancelable; +import net.minecraftforge.fml.common.eventhandler.Event.HasResult; + +/** + * EntityTravelToDimensionEvent is fired before an Entity travels to a dimension.
+ *
+ * {@link #dimension} contains the id of the dimension the entity is traveling to.
+ *
+ * This event is {@link Cancelable}.
+ * If this event is canceled, the Entity does not travel to the dimension.
+ *
+ * This event does not have a result. {@link HasResult}
+ *
+ * This event is fired on the {@link MinecraftForge#EVENT_BUS}.
+ **/ +@Cancelable +public class EntityTravelToDimensionEvent extends EntityEvent +{ + public final int dimension; + + public EntityTravelToDimensionEvent(Entity entity, int dimension) + { + super(entity); + this.dimension = dimension; + } +} \ No newline at end of file diff --git a/src/main/resources/forge_at.cfg b/src/main/resources/forge_at.cfg index 70b634801..516634387 100644 --- a/src/main/resources/forge_at.cfg +++ b/src/main/resources/forge_at.cfg @@ -173,6 +173,8 @@ public net.minecraft.entity.ai.EntityAITasks$EntityAITaskEntry ## EntityLiving public net.minecraft.entity.EntityLiving field_70714_bg #tasks public net.minecraft.entity.EntityLiving field_70715_bh #targetTasks +## EntityMinecartContainer +public net.minecraft.entity.item.EntityMinecartContainer field_94112_b #dropContentsWhenDead # GuiScreen public net.minecraft.client.gui.GuiScreen field_146297_k # minecraft instance - public because gui's outside access it # Minecraft diff --git a/src/test/java/net/minecraftforge/test/EntityTravelToDimensionEventTest.java b/src/test/java/net/minecraftforge/test/EntityTravelToDimensionEventTest.java new file mode 100644 index 000000000..a95b22dd1 --- /dev/null +++ b/src/test/java/net/minecraftforge/test/EntityTravelToDimensionEventTest.java @@ -0,0 +1,29 @@ +package net.minecraftforge.test; + +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.entity.EntityTravelToDimensionEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.Mod.EventHandler; +import net.minecraftforge.fml.common.event.FMLInitializationEvent; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; + +@Mod(modid="EntityTravelToDimensionEventTest", name="EntityTravelToDimensionEventTest", version="0.0.0") +public class EntityTravelToDimensionEventTest +{ + public static final boolean ENABLE = false; + + @EventHandler + public void init(FMLInitializationEvent event) + { + MinecraftForge.EVENT_BUS.register(this); + } + + @SubscribeEvent + public void onDimensionTravel(EntityTravelToDimensionEvent event) + { + if(ENABLE) { + System.out.println("Travelling to Dimension " + event.dimension); + event.setCanceled(true); + } + } +}