From 7b5a5fbcbe0f7a978117b17ce942350a19a6c59b Mon Sep 17 00:00:00 2001 From: Vincent Lee Date: Fri, 8 Jul 2016 21:14:55 -0500 Subject: [PATCH 1/3] Add ability for custom detector rail output --- .../block/BlockRailDetector.java.patch | 11 ++++ .../event/ForgeEventFactory.java | 9 +++ .../world/DetectorRailComparatorEvent.java | 59 +++++++++++++++++++ 3 files changed, 79 insertions(+) create mode 100644 patches/minecraft/net/minecraft/block/BlockRailDetector.java.patch create mode 100644 src/main/java/net/minecraftforge/event/world/DetectorRailComparatorEvent.java diff --git a/patches/minecraft/net/minecraft/block/BlockRailDetector.java.patch b/patches/minecraft/net/minecraft/block/BlockRailDetector.java.patch new file mode 100644 index 0000000000..a502ddb6ed --- /dev/null +++ b/patches/minecraft/net/minecraft/block/BlockRailDetector.java.patch @@ -0,0 +1,11 @@ +--- ../src-base/minecraft/net/minecraft/block/BlockRailDetector.java ++++ ../src-work/minecraft/net/minecraft/block/BlockRailDetector.java +@@ -156,6 +156,8 @@ + { + if (((Boolean)p_180641_1_.func_177229_b(field_176574_M)).booleanValue()) + { ++ int result = net.minecraftforge.event.ForgeEventFactory.onDetectorRailCompare(p_180641_3_, func_176572_a(p_180641_3_)); ++ if (result > -1) return result; + List list = this.func_176571_a(p_180641_2_, p_180641_3_, EntityMinecartCommandBlock.class, new Predicate[0]); + + if (!list.isEmpty()) diff --git a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java index eead4dfdc2..40512e3d11 100644 --- a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java +++ b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java @@ -46,6 +46,7 @@ import net.minecraft.util.EnumHand; import net.minecraft.util.ResourceLocation; import net.minecraft.util.SoundCategory; import net.minecraft.util.SoundEvent; +import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.math.Vec3d; @@ -101,6 +102,7 @@ import net.minecraftforge.event.world.BlockEvent; import net.minecraftforge.event.world.BlockEvent.MultiPlaceEvent; import net.minecraftforge.event.world.BlockEvent.NeighborNotifyEvent; import net.minecraftforge.event.world.BlockEvent.PlaceEvent; +import net.minecraftforge.event.world.DetectorRailComparatorEvent; import net.minecraftforge.event.world.ExplosionEvent; import net.minecraftforge.event.world.WorldEvent; import net.minecraftforge.fml.common.ObfuscationReflectionHelper; @@ -585,4 +587,11 @@ public class ForgeEventFactory return event.getTable(); } + public static int onDetectorRailCompare(BlockPos pos, AxisAlignedBB box) + { + DetectorRailComparatorEvent evt = new DetectorRailComparatorEvent(pos, box); + MinecraftForge.EVENT_BUS.post(evt); + return evt.getRedstonePower(); + } + } diff --git a/src/main/java/net/minecraftforge/event/world/DetectorRailComparatorEvent.java b/src/main/java/net/minecraftforge/event/world/DetectorRailComparatorEvent.java new file mode 100644 index 0000000000..6848a6c8cf --- /dev/null +++ b/src/main/java/net/minecraftforge/event/world/DetectorRailComparatorEvent.java @@ -0,0 +1,59 @@ +package net.minecraftforge.event.world; + +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.common.eventhandler.Event; + +/** + * This event is fired serverside whenever a Detector Rail looks for a minecart to get a comparator value from + * in {@link net.minecraft.block.BlockRailDetector#getComparatorInputOverride}. + * This event is not cancelable. + * This event is fired on the {@link net.minecraftforge.common.MinecraftForge#EVENT_BUS}. + */ +public class DetectorRailComparatorEvent extends Event +{ + + private final BlockPos pos; + private final AxisAlignedBB searchBox; + private int redstonePower; + + public DetectorRailComparatorEvent(BlockPos pos, AxisAlignedBB searchBox) + { + this.pos = pos; + this.searchBox = searchBox; + this.redstonePower = -1; + } + + /** + * @return The position of the Detector Rail + */ + public BlockPos getPos() + { + return pos; + } + + /** + * @return The bounding box that is to be searched for minecarts + */ + public AxisAlignedBB getSearchBox() + { + return searchBox; + } + + /** + * @return The redstone signal strength to give the comparator. Values below 0 mean vanilla logic will run. + */ + public int getRedstonePower() + { + return redstonePower; + } + + /** + * Set the redstone power to give the comparator. Values below 0 mean vanilla logic will run. + */ + public void setRedstonePower(int redstonePower) + { + this.redstonePower = redstonePower; + } + +} From 591ecdd7c9435dc02257d788e271b88c62a8129d Mon Sep 17 00:00:00 2001 From: Vincent Lee Date: Sat, 9 Jul 2016 08:53:07 -0500 Subject: [PATCH 2/3] Move to a hook in EntityMinecart --- .../net/minecraft/block/BlockRailDetector.java.patch | 4 ++-- .../minecraft/entity/item/EntityMinecart.java.patch | 10 +++++++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/patches/minecraft/net/minecraft/block/BlockRailDetector.java.patch b/patches/minecraft/net/minecraft/block/BlockRailDetector.java.patch index a502ddb6ed..13579be5fe 100644 --- a/patches/minecraft/net/minecraft/block/BlockRailDetector.java.patch +++ b/patches/minecraft/net/minecraft/block/BlockRailDetector.java.patch @@ -4,8 +4,8 @@ { if (((Boolean)p_180641_1_.func_177229_b(field_176574_M)).booleanValue()) { -+ int result = net.minecraftforge.event.ForgeEventFactory.onDetectorRailCompare(p_180641_3_, func_176572_a(p_180641_3_)); -+ if (result > -1) return result; ++ List carts = this.func_176571_a(p_180641_2_, p_180641_3_, EntityMinecart.class); ++ if (!carts.isEmpty() && carts.get(0).getComparatorLevel() > -1) return carts.get(0).getComparatorLevel(); List list = this.func_176571_a(p_180641_2_, p_180641_3_, EntityMinecartCommandBlock.class, new Predicate[0]); if (!list.isEmpty()) diff --git a/patches/minecraft/net/minecraft/entity/item/EntityMinecart.java.patch b/patches/minecraft/net/minecraft/entity/item/EntityMinecart.java.patch index 96d1aaebd4..df4af684da 100644 --- a/patches/minecraft/net/minecraft/entity/item/EntityMinecart.java.patch +++ b/patches/minecraft/net/minecraft/entity/item/EntityMinecart.java.patch @@ -236,7 +236,7 @@ { p_70108_1_.field_70159_w *= 0.20000000298023224D; p_70108_1_.field_70179_y *= 0.20000000298023224D; -@@ -1017,6 +1049,221 @@ +@@ -1017,6 +1049,229 @@ this.func_184212_Q().func_187227_b(field_184270_f, Boolean.valueOf(p_94096_1_)); } @@ -453,6 +453,14 @@ + return 0.0078125D; + } + ++ /** ++ * Called from Detector Rails to retrieve a redstone power level for comparators. ++ */ ++ public int getComparatorLevel() ++ { ++ return -1; ++ } ++ + /* =================================== FORGE END ===========================================*/ + public static enum Type From 17858ef497a4efa51076662a0929143e83d5d82a Mon Sep 17 00:00:00 2001 From: Vincent Lee Date: Sat, 9 Jul 2016 08:54:38 -0500 Subject: [PATCH 3/3] Remove event stuff --- .../event/ForgeEventFactory.java | 9 --- .../world/DetectorRailComparatorEvent.java | 59 ------------------- 2 files changed, 68 deletions(-) delete mode 100644 src/main/java/net/minecraftforge/event/world/DetectorRailComparatorEvent.java diff --git a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java index 40512e3d11..eead4dfdc2 100644 --- a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java +++ b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java @@ -46,7 +46,6 @@ import net.minecraft.util.EnumHand; import net.minecraft.util.ResourceLocation; import net.minecraft.util.SoundCategory; import net.minecraft.util.SoundEvent; -import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.math.Vec3d; @@ -102,7 +101,6 @@ import net.minecraftforge.event.world.BlockEvent; import net.minecraftforge.event.world.BlockEvent.MultiPlaceEvent; import net.minecraftforge.event.world.BlockEvent.NeighborNotifyEvent; import net.minecraftforge.event.world.BlockEvent.PlaceEvent; -import net.minecraftforge.event.world.DetectorRailComparatorEvent; import net.minecraftforge.event.world.ExplosionEvent; import net.minecraftforge.event.world.WorldEvent; import net.minecraftforge.fml.common.ObfuscationReflectionHelper; @@ -587,11 +585,4 @@ public class ForgeEventFactory return event.getTable(); } - public static int onDetectorRailCompare(BlockPos pos, AxisAlignedBB box) - { - DetectorRailComparatorEvent evt = new DetectorRailComparatorEvent(pos, box); - MinecraftForge.EVENT_BUS.post(evt); - return evt.getRedstonePower(); - } - } diff --git a/src/main/java/net/minecraftforge/event/world/DetectorRailComparatorEvent.java b/src/main/java/net/minecraftforge/event/world/DetectorRailComparatorEvent.java deleted file mode 100644 index 6848a6c8cf..0000000000 --- a/src/main/java/net/minecraftforge/event/world/DetectorRailComparatorEvent.java +++ /dev/null @@ -1,59 +0,0 @@ -package net.minecraftforge.event.world; - -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraftforge.fml.common.eventhandler.Event; - -/** - * This event is fired serverside whenever a Detector Rail looks for a minecart to get a comparator value from - * in {@link net.minecraft.block.BlockRailDetector#getComparatorInputOverride}. - * This event is not cancelable. - * This event is fired on the {@link net.minecraftforge.common.MinecraftForge#EVENT_BUS}. - */ -public class DetectorRailComparatorEvent extends Event -{ - - private final BlockPos pos; - private final AxisAlignedBB searchBox; - private int redstonePower; - - public DetectorRailComparatorEvent(BlockPos pos, AxisAlignedBB searchBox) - { - this.pos = pos; - this.searchBox = searchBox; - this.redstonePower = -1; - } - - /** - * @return The position of the Detector Rail - */ - public BlockPos getPos() - { - return pos; - } - - /** - * @return The bounding box that is to be searched for minecarts - */ - public AxisAlignedBB getSearchBox() - { - return searchBox; - } - - /** - * @return The redstone signal strength to give the comparator. Values below 0 mean vanilla logic will run. - */ - public int getRedstonePower() - { - return redstonePower; - } - - /** - * Set the redstone power to give the comparator. Values below 0 mean vanilla logic will run. - */ - public void setRedstonePower(int redstonePower) - { - this.redstonePower = redstonePower; - } - -}