From 80feb0aeb2214b49e217fe956653a1a6becd6819 Mon Sep 17 00:00:00 2001 From: SizableShrimp <29855886+SizableShrimp@users.noreply.github.com> Date: Mon, 29 Mar 2021 20:05:13 -0500 Subject: [PATCH] Add generic EntityTeleportEvent (#7694) --- .../impl/SpreadPlayersCommand.java.patch | 12 + .../command/impl/TeleportCommand.java.patch | 10 + .../entity/item/EnderPearlEntity.java.patch | 4 +- .../entity/monster/EndermanEntity.java.patch | 4 +- .../entity/monster/ShulkerEntity.java.patch | 6 +- .../minecraft/item/ChorusFruitItem.java.patch | 13 ++ .../event/ForgeEventFactory.java | 52 +++++ .../entity/living/EnderTeleportEvent.java | 3 +- .../entity/living/EntityTeleportEvent.java | 206 ++++++++++++++++++ .../debug/entity/EntityTeleportEventTest.java | 28 +++ src/test/resources/META-INF/mods.toml | 2 + 11 files changed, 332 insertions(+), 8 deletions(-) create mode 100644 patches/minecraft/net/minecraft/command/impl/SpreadPlayersCommand.java.patch create mode 100644 patches/minecraft/net/minecraft/item/ChorusFruitItem.java.patch create mode 100644 src/main/java/net/minecraftforge/event/entity/living/EntityTeleportEvent.java create mode 100644 src/test/java/net/minecraftforge/debug/entity/EntityTeleportEventTest.java diff --git a/patches/minecraft/net/minecraft/command/impl/SpreadPlayersCommand.java.patch b/patches/minecraft/net/minecraft/command/impl/SpreadPlayersCommand.java.patch new file mode 100644 index 0000000000..ad41620595 --- /dev/null +++ b/patches/minecraft/net/minecraft/command/impl/SpreadPlayersCommand.java.patch @@ -0,0 +1,12 @@ +--- a/net/minecraft/command/impl/SpreadPlayersCommand.java ++++ b/net/minecraft/command/impl/SpreadPlayersCommand.java +@@ -162,7 +_,8 @@ + spreadplayerscommand$position = p_241072_2_[i++]; + } + +- entity.func_223102_j((double)MathHelper.func_76128_c(spreadplayerscommand$position.field_198713_a) + 0.5D, (double)spreadplayerscommand$position.func_198710_a(p_241072_1_, p_241072_3_), (double)MathHelper.func_76128_c(spreadplayerscommand$position.field_198714_b) + 0.5D); ++ net.minecraftforge.event.entity.living.EntityTeleportEvent.SpreadPlayersCommand event = net.minecraftforge.event.ForgeEventFactory.onEntityTeleportSpreadPlayersCommand(entity, (double)MathHelper.func_76128_c(spreadplayerscommand$position.field_198713_a) + 0.5D, (double)spreadplayerscommand$position.func_198710_a(p_241072_1_, p_241072_3_), (double)MathHelper.func_76128_c(spreadplayerscommand$position.field_198714_b) + 0.5D); ++ if (!event.isCanceled()) entity.func_223102_j(event.getTargetX(), event.getTargetY(), event.getTargetZ()); + double d2 = Double.MAX_VALUE; + + for(SpreadPlayersCommand.Position spreadplayerscommand$position1 : p_241072_2_) { diff --git a/patches/minecraft/net/minecraft/command/impl/TeleportCommand.java.patch b/patches/minecraft/net/minecraft/command/impl/TeleportCommand.java.patch index 7c85c0cbc6..e1e7468893 100644 --- a/patches/minecraft/net/minecraft/command/impl/TeleportCommand.java.patch +++ b/patches/minecraft/net/minecraft/command/impl/TeleportCommand.java.patch @@ -1,5 +1,15 @@ --- a/net/minecraft/command/impl/TeleportCommand.java +++ b/net/minecraft/command/impl/TeleportCommand.java +@@ -121,6 +_,9 @@ + } + + private static void func_201127_a(CommandSource p_201127_0_, Entity p_201127_1_, ServerWorld p_201127_2_, double p_201127_3_, double p_201127_5_, double p_201127_7_, Set p_201127_9_, float p_201127_10_, float p_201127_11_, @Nullable TeleportCommand.Facing p_201127_12_) throws CommandSyntaxException { ++ net.minecraftforge.event.entity.living.EntityTeleportEvent.TeleportCommand event = net.minecraftforge.event.ForgeEventFactory.onEntityTeleportCommand(p_201127_1_, p_201127_3_, p_201127_5_, p_201127_7_); ++ if (event.isCanceled()) return; ++ p_201127_3_ = event.getTargetX(); p_201127_5_ = event.getTargetY(); p_201127_7_ = event.getTargetZ(); + BlockPos blockpos = new BlockPos(p_201127_3_, p_201127_5_, p_201127_7_); + if (!World.func_234935_k_(blockpos)) { + throw field_241077_a_.create(); @@ -159,7 +_,6 @@ p_201127_1_.func_70012_b(p_201127_3_, p_201127_5_, p_201127_7_, f1, f); p_201127_1_.func_70034_d(f1); diff --git a/patches/minecraft/net/minecraft/entity/item/EnderPearlEntity.java.patch b/patches/minecraft/net/minecraft/entity/item/EnderPearlEntity.java.patch index a1ad3824f7..ec67b5bfec 100644 --- a/patches/minecraft/net/minecraft/entity/item/EnderPearlEntity.java.patch +++ b/patches/minecraft/net/minecraft/entity/item/EnderPearlEntity.java.patch @@ -4,8 +4,8 @@ if (entity instanceof ServerPlayerEntity) { ServerPlayerEntity serverplayerentity = (ServerPlayerEntity)entity; if (serverplayerentity.field_71135_a.func_147298_b().func_150724_d() && serverplayerentity.field_70170_p == this.field_70170_p && !serverplayerentity.func_70608_bn()) { -+ net.minecraftforge.event.entity.living.EnderTeleportEvent event = new net.minecraftforge.event.entity.living.EnderTeleportEvent(serverplayerentity, this.func_226277_ct_(), this.func_226278_cu_(), this.func_226281_cx_(), 5.0F); -+ if (!net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event)) { // Don't indent to lower patch size ++ net.minecraftforge.event.entity.living.EntityTeleportEvent.EnderPearl event = net.minecraftforge.event.ForgeEventFactory.onEnderPearlLand(serverplayerentity, this.func_226277_ct_(), this.func_226278_cu_(), this.func_226281_cx_(), this, 5.0F); ++ if (!event.isCanceled()) { // Don't indent to lower patch size if (this.field_70146_Z.nextFloat() < 0.05F && this.field_70170_p.func_82736_K().func_223586_b(GameRules.field_223601_d)) { EndermiteEntity endermiteentity = EntityType.field_200804_r.func_200721_a(this.field_70170_p); endermiteentity.func_175496_a(true); diff --git a/patches/minecraft/net/minecraft/entity/monster/EndermanEntity.java.patch b/patches/minecraft/net/minecraft/entity/monster/EndermanEntity.java.patch index 89cf6bfca0..3026d27854 100644 --- a/patches/minecraft/net/minecraft/entity/monster/EndermanEntity.java.patch +++ b/patches/minecraft/net/minecraft/entity/monster/EndermanEntity.java.patch @@ -36,8 +36,8 @@ boolean flag1 = blockstate.func_204520_s().func_206884_a(FluidTags.field_206959_a); if (flag && !flag1) { - boolean flag2 = this.func_213373_a(p_70825_1_, p_70825_3_, p_70825_5_, true); -+ net.minecraftforge.event.entity.living.EnderTeleportEvent event = new net.minecraftforge.event.entity.living.EnderTeleportEvent(this, p_70825_1_, p_70825_3_, p_70825_5_, 0); -+ if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event)) return false; ++ net.minecraftforge.event.entity.living.EntityTeleportEvent.EnderEntity event = net.minecraftforge.event.ForgeEventFactory.onEnderTeleport(this, p_70825_1_, p_70825_3_, p_70825_5_); ++ if (event.isCanceled()) return false; + boolean flag2 = this.func_213373_a(event.getTargetX(), event.getTargetY(), event.getTargetZ(), true); if (flag2 && !this.func_174814_R()) { this.field_70170_p.func_184148_a((PlayerEntity)null, this.field_70169_q, this.field_70167_r, this.field_70166_s, SoundEvents.field_187534_aX, this.func_184176_by(), 1.0F, 1.0F); diff --git a/patches/minecraft/net/minecraft/entity/monster/ShulkerEntity.java.patch b/patches/minecraft/net/minecraft/entity/monster/ShulkerEntity.java.patch index a277f9dd2c..33a52e268d 100644 --- a/patches/minecraft/net/minecraft/entity/monster/ShulkerEntity.java.patch +++ b/patches/minecraft/net/minecraft/entity/monster/ShulkerEntity.java.patch @@ -30,9 +30,9 @@ if (blockpos1.func_177956_o() > 0 && this.field_70170_p.func_175623_d(blockpos1) && this.field_70170_p.func_175723_af().func_177746_a(blockpos1) && this.field_70170_p.func_226665_a__(this, new AxisAlignedBB(blockpos1))) { Direction direction = this.func_234299_g_(blockpos1); + if (direction != null) { -+ net.minecraftforge.event.entity.living.EnderTeleportEvent event = new net.minecraftforge.event.entity.living.EnderTeleportEvent(this, blockpos1.func_177958_n(), blockpos1.func_177956_o(), blockpos1.func_177952_p(), 0); -+ if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event)) direction = null; -+ blockpos1 = new BlockPos(event.getTargetX(), event.getTargetY(), event.getTargetZ()); ++ net.minecraftforge.event.entity.living.EntityTeleportEvent.EnderEntity event = net.minecraftforge.event.ForgeEventFactory.onEnderTeleport(this, blockpos1.func_177958_n(), blockpos1.func_177956_o(), blockpos1.func_177952_p()); ++ if (event.isCanceled()) direction = null; ++ blockpos1 = new BlockPos(event.getTargetX(), event.getTargetY(), event.getTargetZ()); + } + if (direction != null) { diff --git a/patches/minecraft/net/minecraft/item/ChorusFruitItem.java.patch b/patches/minecraft/net/minecraft/item/ChorusFruitItem.java.patch new file mode 100644 index 0000000000..8ee9db06ba --- /dev/null +++ b/patches/minecraft/net/minecraft/item/ChorusFruitItem.java.patch @@ -0,0 +1,13 @@ +--- a/net/minecraft/item/ChorusFruitItem.java ++++ b/net/minecraft/item/ChorusFruitItem.java +@@ -29,7 +_,9 @@ + p_77654_3_.func_184210_p(); + } + +- if (p_77654_3_.func_213373_a(d3, d4, d5, true)) { ++ net.minecraftforge.event.entity.living.EntityTeleportEvent.ChorusFruit event = net.minecraftforge.event.ForgeEventFactory.onChorusFruitTeleport(p_77654_3_, d3, d4, d5); ++ if (event.isCanceled()) return itemstack; ++ if (p_77654_3_.func_213373_a(event.getTargetX(), event.getTargetY(), event.getTargetZ(), true)) { + SoundEvent soundevent = p_77654_3_ instanceof FoxEntity ? SoundEvents.field_232710_ez_ : SoundEvents.field_187544_ad; + p_77654_2_.func_184148_a((PlayerEntity)null, d0, d1, d2, soundevent, SoundCategory.PLAYERS, 1.0F, 1.0F); + p_77654_3_.func_184185_a(soundevent, 1.0F, 1.0F); diff --git a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java index 4a97ccf07d..cf08311112 100644 --- a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java +++ b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java @@ -43,6 +43,7 @@ import net.minecraft.entity.SpawnReason; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.EntityClassification; import net.minecraft.entity.effect.LightningBoltEntity; +import net.minecraft.entity.item.EnderPearlEntity; import net.minecraft.entity.item.ItemEntity; import net.minecraft.entity.monster.ZombieEntity; import net.minecraft.entity.passive.AnimalEntity; @@ -105,6 +106,7 @@ import net.minecraftforge.event.entity.PlaySoundAtEntityEvent; import net.minecraftforge.event.entity.ProjectileImpactEvent; import net.minecraftforge.event.entity.item.ItemExpireEvent; import net.minecraftforge.event.entity.living.AnimalTameEvent; +import net.minecraftforge.event.entity.living.EnderTeleportEvent; import net.minecraftforge.event.entity.living.LivingConversionEvent; import net.minecraftforge.event.entity.living.LivingDestroyBlockEvent; import net.minecraftforge.event.entity.living.LivingEntityUseItemEvent; @@ -113,6 +115,7 @@ import net.minecraftforge.event.entity.living.LivingHealEvent; import net.minecraftforge.event.entity.living.LivingPackSizeEvent; import net.minecraftforge.event.entity.living.LivingSpawnEvent; import net.minecraftforge.event.entity.living.LivingSpawnEvent.AllowDespawn; +import net.minecraftforge.event.entity.living.EntityTeleportEvent; import net.minecraftforge.event.entity.living.ZombieEvent.SummonAidEvent; import net.minecraftforge.event.entity.player.ArrowLooseEvent; import net.minecraftforge.event.entity.player.ArrowNockEvent; @@ -768,4 +771,53 @@ public class ForgeEventFactory { MinecraftForge.EVENT_BUS.post(new LivingConversionEvent.Post(entity, outcome)); } + + public static EntityTeleportEvent.TeleportCommand onEntityTeleportCommand(Entity entity, double targetX, double targetY, double targetZ) + { + EntityTeleportEvent.TeleportCommand event = new EntityTeleportEvent.TeleportCommand(entity, targetX, targetY, targetZ); + MinecraftForge.EVENT_BUS.post(event); + return event; + } + + public static EntityTeleportEvent.SpreadPlayersCommand onEntityTeleportSpreadPlayersCommand(Entity entity, double targetX, double targetY, double targetZ) + { + EntityTeleportEvent.SpreadPlayersCommand event = new EntityTeleportEvent.SpreadPlayersCommand(entity, targetX, targetY, targetZ); + MinecraftForge.EVENT_BUS.post(event); + return event; + } + + public static EntityTeleportEvent.EnderEntity onEnderTeleport(LivingEntity entity, double targetX, double targetY, double targetZ) + { + EntityTeleportEvent.EnderEntity event = new EntityTeleportEvent.EnderEntity(entity, targetX, targetY, targetZ); + onOldEnderTeleport(entity, 0, event); //TODO Forge: Remove this line in 1.17 + MinecraftForge.EVENT_BUS.post(event); + return event; + } + + public static EntityTeleportEvent.EnderPearl onEnderPearlLand(ServerPlayerEntity entity, double targetX, double targetY, double targetZ, EnderPearlEntity pearlEntity, float attackDamage) + { + EntityTeleportEvent.EnderPearl event = new EntityTeleportEvent.EnderPearl(entity, targetX, targetY, targetZ, pearlEntity, attackDamage); + event.setAttackDamage(onOldEnderTeleport(entity, attackDamage, event)); //TODO Forge: Remove this line in 1.17 + MinecraftForge.EVENT_BUS.post(event); + return event; + } + + @SuppressWarnings("deprecation") //TODO Forge: Scrap this method/event in 1.17 - it only exists for backwards-compatibility + private static float onOldEnderTeleport(LivingEntity entity, float attackDamage, EntityTeleportEvent event) + { + EnderTeleportEvent enderEvent = new EnderTeleportEvent(entity, event.getTargetX(), event.getTargetY(), event.getTargetZ(), attackDamage); + MinecraftForge.EVENT_BUS.post(enderEvent); + event.setCanceled(enderEvent.isCanceled()); + event.setTargetX(enderEvent.getTargetX()); + event.setTargetY(enderEvent.getTargetY()); + event.setTargetZ(enderEvent.getTargetZ()); + return enderEvent.getAttackDamage(); + } + + public static EntityTeleportEvent.ChorusFruit onChorusFruitTeleport(LivingEntity entity, double targetX, double targetY, double targetZ) + { + EntityTeleportEvent.ChorusFruit event = new EntityTeleportEvent.ChorusFruit(entity, targetX, targetY, targetZ); + MinecraftForge.EVENT_BUS.post(event); + return event; + } } diff --git a/src/main/java/net/minecraftforge/event/entity/living/EnderTeleportEvent.java b/src/main/java/net/minecraftforge/event/entity/living/EnderTeleportEvent.java index 1eca6342de..9f3046607a 100644 --- a/src/main/java/net/minecraftforge/event/entity/living/EnderTeleportEvent.java +++ b/src/main/java/net/minecraftforge/event/entity/living/EnderTeleportEvent.java @@ -25,8 +25,9 @@ import net.minecraft.entity.LivingEntity; /** * Event for when an Enderman/Shulker teleports or an ender pearl is used. Can be used to either modify the target position, or cancel the teleport outright. * @author Mithion - * + * @deprecated Use {@link EntityTeleportEvent.EnderEntity} or {@link EntityTeleportEvent.EnderPearl}. */ +@Deprecated //TODO Forge: Remove in 1.17 @Cancelable public class EnderTeleportEvent extends LivingEvent { diff --git a/src/main/java/net/minecraftforge/event/entity/living/EntityTeleportEvent.java b/src/main/java/net/minecraftforge/event/entity/living/EntityTeleportEvent.java new file mode 100644 index 0000000000..c3a1ce9d34 --- /dev/null +++ b/src/main/java/net/minecraftforge/event/entity/living/EntityTeleportEvent.java @@ -0,0 +1,206 @@ +package net.minecraftforge.event.entity.living; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.item.EnderPearlEntity; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.entity.EntityEvent; +import net.minecraftforge.eventbus.api.Cancelable; + +/** + * EntityTeleportEvent is fired when an event involving any teleportation of an Entity occurs.
+ * If a method utilizes this {@link net.minecraftforge.eventbus.api.Event} as its parameter, the method will + * receive every child event of this class.
+ *
+ * {@link #getTarget()} contains the target destination.
+ * {@link #getPrev()} contains the entity's current position.
+ *
+ * All children of this event are fired on the {@link MinecraftForge#EVENT_BUS}.
+ **/ +public class EntityTeleportEvent extends EntityEvent +{ + protected double targetX; + protected double targetY; + protected double targetZ; + + public EntityTeleportEvent(Entity entity, double targetX, double targetY, double targetZ) { + super(entity); + this.targetX = targetX; + this.targetY = targetY; + this.targetZ = targetZ; + } + + public double getTargetX() { return targetX; } + public void setTargetX(double targetX) { this.targetX = targetX; } + public double getTargetY() { return targetY; } + public void setTargetY(double targetY) { this.targetY = targetY; } + public double getTargetZ() { return targetZ; } + public void setTargetZ(double targetZ) { this.targetZ = targetZ; } + public Vector3d getTarget() { return new Vector3d(this.targetX, this.targetY, this.targetZ); } + public double getPrevX() { return getEntity().getX(); } + public double getPrevY() { return getEntity().getY(); } + public double getPrevZ() { return getEntity().getZ(); } + public Vector3d getPrev() { return getEntity().position(); } + + /** + * EntityTeleportEvent.TeleportCommand is fired before a living entity is teleported + * from use of {@link net.minecraft.command.impl.TeleportCommand}. + *
+ * This event is {@link net.minecraftforge.eventbus.api.Cancelable}.
+ * If the event is not canceled, the entity will be teleported. + *
+ * This event does not have a result. {@link HasResult}
+ *
+ * This event is fired on the {@link MinecraftForge#EVENT_BUS}.
+ *
+ * This event is only fired on the {@link net.minecraftforge.fml.LogicalSide#SERVER} side.
+ *
+ * If this event is canceled, the entity will not be teleported. + */ + @Cancelable + public static class TeleportCommand extends EntityTeleportEvent + { + public TeleportCommand(Entity entity, double targetX, double targetY, double targetZ) + { + super(entity, targetX, targetY, targetZ); + } + } + + /** + * EntityTeleportEvent.SpreadPlayersCommand is fired before a living entity is teleported + * from use of {@link net.minecraft.command.impl.SpreadPlayersCommand}. + *
+ * This event is {@link net.minecraftforge.eventbus.api.Cancelable}.
+ * If the event is not canceled, the entity will be teleported. + *
+ * This event does not have a result. {@link HasResult}
+ *
+ * This event is fired on the {@link MinecraftForge#EVENT_BUS}.
+ *
+ * This event is only fired on the {@link net.minecraftforge.fml.LogicalSide#SERVER} side.
+ *
+ * If this event is canceled, the entity will not be teleported. + */ + @Cancelable + public static class SpreadPlayersCommand extends EntityTeleportEvent + { + public SpreadPlayersCommand(Entity entity, double targetX, double targetY, double targetZ) + { + super(entity, targetX, targetY, targetZ); + } + } + + /** + * EntityTeleportEvent.EnderEntity is fired before an Enderman or Shulker randomly teleports. + *
+ * This event is {@link net.minecraftforge.eventbus.api.Cancelable}.
+ * If the event is not canceled, the entity will be teleported. + *
+ * This event does not have a result. {@link HasResult}
+ *
+ * This event is fired on the {@link MinecraftForge#EVENT_BUS}.
+ *
+ * This event is only fired on the {@link net.minecraftforge.fml.LogicalSide#SERVER} side.
+ *
+ * If this event is canceled, the entity will not be teleported. + */ + @Cancelable + public static class EnderEntity extends EntityTeleportEvent + { + private final LivingEntity entityLiving; + + public EnderEntity(LivingEntity entity, double targetX, double targetY, double targetZ) + { + super(entity, targetX, targetY, targetZ); + this.entityLiving = entity; + } + + public LivingEntity getEntityLiving() + { + return entityLiving; + } + } + + /** + * EntityTeleportEvent.EnderPearl is fired before an Entity is teleported from an EnderPearlEntity. + *
+ * This event is {@link net.minecraftforge.eventbus.api.Cancelable}.
+ * If the event is not canceled, the entity will be teleported. + *
+ * This event does not have a result. {@link HasResult}
+ *
+ * This event is fired on the {@link MinecraftForge#EVENT_BUS}.
+ *
+ * This event is only fired on the {@link net.minecraftforge.fml.LogicalSide#SERVER} side.
+ *
+ * If this event is canceled, the entity will not be teleported. + */ + @Cancelable + public static class EnderPearl extends EntityTeleportEvent + { + private final ServerPlayerEntity player; + private final EnderPearlEntity pearlEntity; + private float attackDamage; + + public EnderPearl(ServerPlayerEntity entity, double targetX, double targetY, double targetZ, EnderPearlEntity pearlEntity, float attackDamage) + { + super(entity, targetX, targetY, targetZ); + this.pearlEntity = pearlEntity; + this.player = entity; + this.attackDamage = attackDamage; + } + + public EnderPearlEntity getPearlEntity() + { + return pearlEntity; + } + + public ServerPlayerEntity getPlayer() + { + return player; + } + + public float getAttackDamage() + { + return attackDamage; + } + + public void setAttackDamage(float attackDamage) + { + this.attackDamage = attackDamage; + } + } + + /** + * EntityTeleportEvent.ChorusFruit is fired before a LivingEntity is teleported due to consuming Chorus Fruit. + *
+ * This event is {@link net.minecraftforge.eventbus.api.Cancelable}.
+ * If the event is not canceled, the entity will be teleported. + *
+ * This event does not have a result. {@link HasResult}
+ *
+ * This event is fired on the {@link MinecraftForge#EVENT_BUS}.
+ *
+ * This event is only fired on the {@link net.minecraftforge.fml.LogicalSide#SERVER} side.
+ *
+ * If this event is canceled, the entity will not be teleported. + */ + @Cancelable + public static class ChorusFruit extends EntityTeleportEvent + { + private final LivingEntity entityLiving; + + public ChorusFruit(LivingEntity entity, double targetX, double targetY, double targetZ) + { + super(entity, targetX, targetY, targetZ); + this.entityLiving = entity; + } + + public LivingEntity getEntityLiving() + { + return entityLiving; + } + } +} diff --git a/src/test/java/net/minecraftforge/debug/entity/EntityTeleportEventTest.java b/src/test/java/net/minecraftforge/debug/entity/EntityTeleportEventTest.java new file mode 100644 index 0000000000..e533d6da12 --- /dev/null +++ b/src/test/java/net/minecraftforge/debug/entity/EntityTeleportEventTest.java @@ -0,0 +1,28 @@ +package net.minecraftforge.debug.entity; + +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.entity.living.EntityTeleportEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@Mod("entity_teleport_event_test") +public class EntityTeleportEventTest +{ + public static final boolean ENABLE = true; + public static final Logger LOGGER = LogManager.getLogger(); + + public EntityTeleportEventTest() + { + if (ENABLE) + MinecraftForge.EVENT_BUS.register(this); + } + + @SubscribeEvent + public void entityTeleport(EntityTeleportEvent event) + { + LOGGER.info("{} teleporting from {} to {}", event.getEntity(), event.getPrev(), event.getTarget()); + } +} diff --git a/src/test/resources/META-INF/mods.toml b/src/test/resources/META-INF/mods.toml index 29ff48a8fd..7b762c5608 100644 --- a/src/test/resources/META-INF/mods.toml +++ b/src/test/resources/META-INF/mods.toml @@ -120,3 +120,5 @@ license="LGPL v2.1" modId="add_entity_attribute_test" [[mods]] modId="enum_argument_test" +[[mods]] + modId="entity_teleport_event_test"