From e69b07a54a67c3e4df48617370e39fc65ec3f130 Mon Sep 17 00:00:00 2001 From: LexManos Date: Mon, 3 Feb 2025 18:32:53 -0800 Subject: [PATCH] Fix redstone updates for comparators going up/down incorrectly. Related: #9973 --- .../entity/EntityRenderDispatcher.java.patch | 6 +++--- .../minecraft/world/level/Level.java.patch | 6 ++++-- .../debug/gameplay/redstone/UpdateOrder.java | 19 ++++++++++++++++++ .../update_order/structure/upward_update.nbt | Bin 0 -> 595 bytes 4 files changed, 26 insertions(+), 5 deletions(-) create mode 100644 src/test/resources/update_order/data/update_order/structure/upward_update.nbt diff --git a/patches/minecraft/net/minecraft/client/renderer/entity/EntityRenderDispatcher.java.patch b/patches/minecraft/net/minecraft/client/renderer/entity/EntityRenderDispatcher.java.patch index 2f716bb1a2..89ec992df0 100644 --- a/patches/minecraft/net/minecraft/client/renderer/entity/EntityRenderDispatcher.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/entity/EntityRenderDispatcher.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/client/renderer/entity/EntityRenderDispatcher.java +++ b/net/minecraft/client/renderer/entity/EntityRenderDispatcher.java -@@ -243,12 +_,12 @@ +@@ -246,12 +_,12 @@ ) { AABB aabb = p_114444_.getBoundingBox().move(-p_114444_.getX(), -p_114444_.getY(), -p_114444_.getZ()); ShapeRenderer.renderLineBox(p_114442_, p_114443_, aabb, p_343193_, p_342304_, p_342638_, 1.0F); @@ -15,7 +15,7 @@ p_114442_.pushPose(); double d3 = d0 + Mth.lerp((double)p_114445_, enderdragonpart.xOld, enderdragonpart.getX()); double d4 = d1 + Mth.lerp((double)p_114445_, enderdragonpart.yOld, enderdragonpart.getY()); -@@ -481,6 +_,10 @@ +@@ -484,6 +_,10 @@ return this.itemInHandRenderer; } @@ -26,7 +26,7 @@ @Override public void onResourceManagerReload(ResourceManager p_174004_) { EntityRendererProvider.Context entityrendererprovider$context = new EntityRendererProvider.Context( -@@ -488,5 +_,6 @@ +@@ -491,5 +_,6 @@ ); this.renderers = EntityRenderers.createEntityRenderers(entityrendererprovider$context); this.playerRenderers = EntityRenderers.createPlayerRenderers(entityrendererprovider$context); diff --git a/patches/minecraft/net/minecraft/world/level/Level.java.patch b/patches/minecraft/net/minecraft/world/level/Level.java.patch index 0bb8617c6f..af0be8224a 100644 --- a/patches/minecraft/net/minecraft/world/level/Level.java.patch +++ b/patches/minecraft/net/minecraft/world/level/Level.java.patch @@ -158,7 +158,7 @@ T t = p_261885_.tryCast(enderdragonpart); if (t != null && p_261688_.test(t)) { p_262071_.add(t); -@@ -932,16 +_,15 @@ +@@ -932,17 +_,16 @@ public abstract Scoreboard getScoreboard(); public void updateNeighbourForOutputSignal(BlockPos p_46718_, Block p_46719_) { @@ -175,10 +175,12 @@ blockpos = blockpos.relative(direction); blockstate = this.getBlockState(blockpos); - if (blockstate.is(Blocks.COMPARATOR)) { +- this.neighborChanged(blockstate, blockpos, p_46719_, null, false); + if (blockstate.getWeakChanges(this, blockpos)) { - this.neighborChanged(blockstate, blockpos, p_46719_, null, false); ++ blockstate.onNeighborChange(this, blockpos, p_46718_); } } + } @@ -1044,6 +_,20 @@ } diff --git a/src/test/java/net/minecraftforge/debug/gameplay/redstone/UpdateOrder.java b/src/test/java/net/minecraftforge/debug/gameplay/redstone/UpdateOrder.java index 5f8ce55ab6..65e66ec431 100644 --- a/src/test/java/net/minecraftforge/debug/gameplay/redstone/UpdateOrder.java +++ b/src/test/java/net/minecraftforge/debug/gameplay/redstone/UpdateOrder.java @@ -11,6 +11,7 @@ import net.minecraft.gametest.framework.GameTestHelper; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.entity.BarrelBlockEntity; import net.minecraft.world.level.block.entity.ChestBlockEntity; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.test.BaseTestMod; @@ -88,4 +89,22 @@ public class UpdateOrder extends BaseTestMod { helper.succeed(); }); } + + @GameTest(template = "update_order:upward_update") + public static void up(GameTestHelper helper) { + var chestPos = new BlockPos(0, 1, 2); + var expectedPos = new BlockPos(2, 1, 0); + var unexpectedPos = new BlockPos(0, 4, 0); + helper.assertBlockPresent(Blocks.BARREL, chestPos); + helper.assertBlockPresent(Blocks.AIR, expectedPos); + helper.assertBlockPresent(Blocks.AIR, unexpectedPos); + var chest = helper.getBlockEntity(chestPos); + chest.setItem(0, new ItemStack(Items.DIRT)); + + helper.runAfterDelay(10, () -> { // There are a lot of things happening, give it a few ticks + helper.assertBlockNotPresent(Blocks.WHITE_WOOL, unexpectedPos); + helper.assertBlockPresent(Blocks.WHITE_WOOL, expectedPos); + helper.succeed(); + }); + } } \ No newline at end of file diff --git a/src/test/resources/update_order/data/update_order/structure/upward_update.nbt b/src/test/resources/update_order/data/update_order/structure/upward_update.nbt new file mode 100644 index 0000000000000000000000000000000000000000..f192fa00846c63cdaf62293cc4658658ddaca861 GIT binary patch literal 595 zcmV-Z0<8TXiwFP!00000|DBdkkDD+M#m9e0fNj-1RBAs<)nhNcw3Sxst%@AtB-Rp) z%tYz-(-$^4AP4Yhi6WBt@!oI7#vupDKsM%|769PiN&A)=q`E?bMmNwM8LYOYEuNda z{qi*fQQO8}a61Gf4Jy?A6;m2U&~SoAENB>k$7_~&yk?2VYnFI8fyZl>c)Vtb$7^Cd zEXZOrnsFANmklXNhZFh}%VLBqui*qutcNikPT=7L9!}r^e~#2e)x>%z2t5q%)2X^*JeOhlVjs`z?t{` zDD1hy?lS}VR9b|)_urs-tdj=58H#JAF%8bAONHvaB@4*e>q!g*FD6gu-dD_R0l{Z>+qPi&v$=OS3A9fWUtC*aQifl zF~#%CrZ!#Pn+->crg!oq?}rg(To@oqgQ3^w;R>gBuWi`0oi2_sI@u0Y3uOIr4qW8P z?li2gQ>xQ;UhGA?TZu!AymYH(VnT-15PCmc+WB^+Jsc+dZrJ!zYgjeyZ{@&!w_K^% h65aVOC4w#B;hRGBTf4@za|e%q;6DO8r&>7-000@eBpv_& literal 0 HcmV?d00001