From b176786b4c2b2043e57d54947f2d9c57afea4be2 Mon Sep 17 00:00:00 2001 From: Kam Date: Sat, 18 May 2024 15:31:41 -0400 Subject: [PATCH 01/11] Initial Pane Commit --- .../etfuturum/EtFuturumMixinPlugin.java | 4 + .../configuration/configs/ConfigMixins.java | 2 + .../mixins/glasspane/MixinGlassPane.java | 138 ++++++++++++++++++ 3 files changed, 144 insertions(+) create mode 100644 src/main/java/ganymedes01/etfuturum/mixins/glasspane/MixinGlassPane.java diff --git a/src/main/java/ganymedes01/etfuturum/EtFuturumMixinPlugin.java b/src/main/java/ganymedes01/etfuturum/EtFuturumMixinPlugin.java index b3c635e9..bf8f081d 100644 --- a/src/main/java/ganymedes01/etfuturum/EtFuturumMixinPlugin.java +++ b/src/main/java/ganymedes01/etfuturum/EtFuturumMixinPlugin.java @@ -259,6 +259,10 @@ public List getMixins() { } } + if (ConfigMixins.paneModel) { + mixins.add("glasspane.MixinGlassPane"); + } + return mixins; } diff --git a/src/main/java/ganymedes01/etfuturum/configuration/configs/ConfigMixins.java b/src/main/java/ganymedes01/etfuturum/configuration/configs/ConfigMixins.java index 82be8d5c..4f39f53e 100644 --- a/src/main/java/ganymedes01/etfuturum/configuration/configs/ConfigMixins.java +++ b/src/main/java/ganymedes01/etfuturum/configuration/configs/ConfigMixins.java @@ -43,6 +43,7 @@ public class ConfigMixins extends ConfigBase { public static boolean interpolatedTextures; public static boolean hideSingleLevelEnchants; public static boolean fireproofItems; + public static boolean paneModel; static final String catBackport = "backported features"; static final String catOptimization = "optimizations"; @@ -103,6 +104,7 @@ protected void syncConfigOptions() { betterPistons = getBoolean("betterPistons", catBackport, true, "A port of Back in Slime, similar to how the elytra is a port of Backlytra. Allows pistons to interact with slime blocks. The original author of this is DonBruce64: https://legacy.curseforge.com/minecraft/mc-mods/back-in-slime-slime-blocks-for-1-7.\nModified Classes: net.minecraft.block.BlockPistonBase"); soulFire = getBoolean("soulFire", catBackport, true, "Is not a new block, but rather a mixin for fire. Allows fire to stay ignited on soul soil. Does double damage when standing in it, and does not spread to other blocks.\nEven if this is off fire can still stay ignited on soul soil, but do be mindful that fire will spread from soul soil if this option is disabled.\nModified Classes: net.minecraft.block.BlockFire net.minecraft.entity.Entity\nModified Client Classes: net.minecraft.client.renderer.RenderBlocks"); fireproofItems = getBoolean("fireproofItems", catBackport, true, "Some items such as Netherite will not burn in fire and will float to the surface of lava."); + paneModel = getBoolean("paneModel", catBackport, true, "In later versions, Panes have a singular post bounding box when not attached to other panes or blocks"); stepHeightFix = getBoolean("stepHeightFix", catFixes, true, "Makes the player able to step up even if a block would be above their head at the destination.\nModified classes: net.minecraft.entity.Entity"); arrowFallingFix = getBoolean("arrowFallingFix", catFixes, true, "Prevents arrows from falling off of blocks too easily\nModified classes: net.minecraft.entity.EntityArrow"); diff --git a/src/main/java/ganymedes01/etfuturum/mixins/glasspane/MixinGlassPane.java b/src/main/java/ganymedes01/etfuturum/mixins/glasspane/MixinGlassPane.java new file mode 100644 index 00000000..d78b736d --- /dev/null +++ b/src/main/java/ganymedes01/etfuturum/mixins/glasspane/MixinGlassPane.java @@ -0,0 +1,138 @@ +package ganymedes01.etfuturum.mixins.glasspane; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockPane; +import net.minecraft.block.material.Material; +import net.minecraft.entity.Entity; +import net.minecraft.init.Blocks; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import java.util.List; + +import static net.minecraftforge.common.util.ForgeDirection.*; +import static net.minecraftforge.common.util.ForgeDirection.EAST; + +@Mixin(BlockPane.class) +public abstract class MixinGlassPane extends Block { + + protected MixinGlassPane(Material p_i45394_1_) { + super(p_i45394_1_); + } + + @Inject(method = "addCollisionBoxesToList", at = @At("HEAD"), cancellable = true) + private void remapCollisionsBoxes(World worldIn, int posX, int posY, int posZ, AxisAlignedBB bb, List boxList, Entity entity, CallbackInfo ci) { + boolean flag = this.canPaneConnectTo(worldIn, posX, posY, posZ - 1, NORTH); + boolean flag1 = this.canPaneConnectTo(worldIn, posX, posY, posZ + 1, SOUTH); + boolean flag2 = this.canPaneConnectTo(worldIn, posX - 1, posY, posZ, WEST ); + boolean flag3 = this.canPaneConnectTo(worldIn, posX + 1, posY, posZ, EAST ); + + if ((!flag2 || !flag3) && (flag2 || flag3 || flag || flag1)) + { + if (flag2) + { + this.setBlockBounds(0.0F, 0.0F, 0.4375F, 0.5F, 1.0F, 0.5625F); + super.addCollisionBoxesToList(worldIn, posX, posY, posZ, bb, boxList, entity); + } + else if (flag3) + { + this.setBlockBounds(0.5F, 0.0F, 0.4375F, 1.0F, 1.0F, 0.5625F); + super.addCollisionBoxesToList(worldIn, posX, posY, posZ, bb, boxList, entity); + } + } + else + { + this.setBlockBounds(0.0F, 0.0F, 0.4375F, 1.0F, 1.0F, 0.5625F); + super.addCollisionBoxesToList(worldIn, posX, posY, posZ, bb, boxList, entity); + } + + if ((!flag || !flag1) && (flag2 || flag3 || flag || flag1)) + { + if (flag) + { + this.setBlockBounds(0.4375F, 0.0F, 0.0F, 0.5625F, 1.0F, 0.5F); + super.addCollisionBoxesToList(worldIn, posX, posY, posZ, bb, boxList, entity); + } + else if (flag1) + { + this.setBlockBounds(0.4375F, 0.0F, 0.5F, 0.5625F, 1.0F, 1.0F); + super.addCollisionBoxesToList(worldIn, posX, posY, posZ, bb, boxList, entity); + } + } + else + { + this.setBlockBounds(0.4375F, 0.0F, 0.0F, 0.5625F, 1.0F, 1.0F); + super.addCollisionBoxesToList(worldIn, posX, posY, posZ, bb, boxList, entity); + } + + ci.cancel(); + } + + @Inject(method = "setBlockBoundsBasedOnState", at = @At("HEAD"), cancellable = true) + public void setBlockBoundsBasedOnState(IBlockAccess worldIn, int posX, int posY, int posZ, CallbackInfo ci) + { + float f = 0.4375F; + float f1 = 0.5625F; + float f2 = 0.4375F; + float f3 = 0.5625F; + boolean flag = this.canPaneConnectToBlock(worldIn.getBlock(posX, posY, posZ - 1)); + boolean flag1 = this.canPaneConnectToBlock(worldIn.getBlock(posX, posY, posZ + 1)); + boolean flag2 = this.canPaneConnectToBlock(worldIn.getBlock(posX - 1, posY, posZ)); + boolean flag3 = this.canPaneConnectToBlock(worldIn.getBlock(posX + 1, posY, posZ )); + + if ((!flag2 || !flag3) && (flag2 || flag3 || flag || flag1)) + { + if (flag2) + { + f = 0.0F; + } + else if (flag3) + { + f1 = 1.0F; + } + } + else + { + f = 0.0F; + f1 = 1.0F; + } + + if ((!flag || !flag1) && (flag2 || flag3 || flag || flag1)) + { + if (flag) + { + f2 = 0.0F; + } + else if (flag1) + { + f3 = 1.0F; + } + } + else + { + f2 = 0.0F; + f3 = 1.0F; + } + + this.setBlockBounds(f, 0.0F, f2, f1, 1.0F, f3); + ci.cancel(); + } + + @Shadow + public boolean canPaneConnectTo(IBlockAccess world, int x, int y, int z, ForgeDirection dir){ + return true; + } + + @Shadow + public final boolean canPaneConnectToBlock(Block blockIN) + { + return blockIN.func_149730_j() || blockIN == this || blockIN == Blocks.glass || blockIN == Blocks.stained_glass || blockIN == Blocks.stained_glass_pane || blockIN instanceof BlockPane; + } +} From e5623dcdda1d85d48e4e33dc12c763fe8e6cf5a4 Mon Sep 17 00:00:00 2001 From: Kam Date: Sat, 18 May 2024 16:54:12 -0400 Subject: [PATCH 02/11] Implement Bounding / Collisions Box + Render Blocks WIP --- .../etfuturum/EtFuturumMixinPlugin.java | 1 + .../mixins/glasspane/MixinGlassPane.java | 19 ++++- .../mixins/glasspane/MixinRenderBlocks.java | 75 +++++++++++++++++++ 3 files changed, 93 insertions(+), 2 deletions(-) create mode 100644 src/main/java/ganymedes01/etfuturum/mixins/glasspane/MixinRenderBlocks.java diff --git a/src/main/java/ganymedes01/etfuturum/EtFuturumMixinPlugin.java b/src/main/java/ganymedes01/etfuturum/EtFuturumMixinPlugin.java index bf8f081d..b749b9a5 100644 --- a/src/main/java/ganymedes01/etfuturum/EtFuturumMixinPlugin.java +++ b/src/main/java/ganymedes01/etfuturum/EtFuturumMixinPlugin.java @@ -261,6 +261,7 @@ public List getMixins() { if (ConfigMixins.paneModel) { mixins.add("glasspane.MixinGlassPane"); + mixins.add("glasspane.MixinRenderBlocks"); } return mixins; diff --git a/src/main/java/ganymedes01/etfuturum/mixins/glasspane/MixinGlassPane.java b/src/main/java/ganymedes01/etfuturum/mixins/glasspane/MixinGlassPane.java index d78b736d..1ac1818c 100644 --- a/src/main/java/ganymedes01/etfuturum/mixins/glasspane/MixinGlassPane.java +++ b/src/main/java/ganymedes01/etfuturum/mixins/glasspane/MixinGlassPane.java @@ -6,6 +6,7 @@ import net.minecraft.entity.Entity; import net.minecraft.init.Blocks; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.EnumFacing; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @@ -34,7 +35,14 @@ private void remapCollisionsBoxes(World worldIn, int posX, int posY, int posZ, A boolean flag2 = this.canPaneConnectTo(worldIn, posX - 1, posY, posZ, WEST ); boolean flag3 = this.canPaneConnectTo(worldIn, posX + 1, posY, posZ, EAST ); - if ((!flag2 || !flag3) && (flag2 || flag3 || flag || flag1)) + if(!flag && !flag1 && !flag2 && !flag3){ + this.setBlockBounds(0.4375F, 0.0F, 0.4375F, 0.5625F, 1.0F, 0.5625F); + super.addCollisionBoxesToList(worldIn, posX, posY, posZ, bb, boxList, entity); + ci.cancel(); + return; + } + + if (!flag2 || !flag3) { if (flag2) { @@ -87,7 +95,13 @@ public void setBlockBoundsBasedOnState(IBlockAccess worldIn, int posX, int posY, boolean flag2 = this.canPaneConnectToBlock(worldIn.getBlock(posX - 1, posY, posZ)); boolean flag3 = this.canPaneConnectToBlock(worldIn.getBlock(posX + 1, posY, posZ )); - if ((!flag2 || !flag3) && (flag2 || flag3 || flag || flag1)) + if(!flag2 && !flag3 && !flag && !flag1){ + this.setBlockBounds(f, 0.0F, f2, f1, 1.0F, f3); + ci.cancel(); + return; + } + + if (!flag2 || !flag3) { if (flag2) { @@ -135,4 +149,5 @@ public final boolean canPaneConnectToBlock(Block blockIN) { return blockIN.func_149730_j() || blockIN == this || blockIN == Blocks.glass || blockIN == Blocks.stained_glass || blockIN == Blocks.stained_glass_pane || blockIN instanceof BlockPane; } + } diff --git a/src/main/java/ganymedes01/etfuturum/mixins/glasspane/MixinRenderBlocks.java b/src/main/java/ganymedes01/etfuturum/mixins/glasspane/MixinRenderBlocks.java new file mode 100644 index 00000000..36d07525 --- /dev/null +++ b/src/main/java/ganymedes01/etfuturum/mixins/glasspane/MixinRenderBlocks.java @@ -0,0 +1,75 @@ +package ganymedes01.etfuturum.mixins.glasspane; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockPane; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import static net.minecraftforge.common.util.ForgeDirection.*; +import static net.minecraftforge.common.util.ForgeDirection.EAST; + +@Mixin(RenderBlocks.class) +public abstract class MixinRenderBlocks { + + @Shadow + public IBlockAccess blockAccess; + + @Shadow + public IIcon overrideBlockTexture; + + @Inject(method = "renderBlockPane", at = @At(value = "INVOKE", target = "Lnet/minecraft/block/BlockPane;shouldSideBeRendered(Lnet/minecraft/world/IBlockAccess;IIII)Z", ordinal = 1, shift = At.Shift.AFTER), cancellable = true) + private void remapCollisionsBoxes(BlockPane p_147767_1_, int p_147767_2_, int p_147767_3_, int p_147767_4_, CallbackInfoReturnable cir) { + + IIcon iicon; + if (this.hasOverrideBlockTexture()) + { + iicon = this.overrideBlockTexture; + } + else + { + int j1 = this.blockAccess.getBlockMetadata(p_147767_2_, p_147767_3_, p_147767_4_); + iicon = this.getBlockIconFromSideAndMetadata(p_147767_1_, 0, j1); + } + + double d21 = (double)iicon.getMinU(); + double d0 = (double)iicon.getInterpolatedU(8.0D); + double d2 = (double)iicon.getMinV(); + double d3 = (double)iicon.getMaxV(); + double d9 = (double)p_147767_2_; + double d10 = (double)p_147767_2_ + 0.5D; + double d13 = (double)p_147767_4_ + 0.5D; + + Tessellator tessellator = Tessellator.instance; + boolean flag = p_147767_1_.canPaneConnectTo(this.blockAccess, p_147767_2_, p_147767_3_, p_147767_4_ - 1, NORTH); + boolean flag1 = p_147767_1_.canPaneConnectTo(this.blockAccess, p_147767_2_, p_147767_3_, p_147767_4_ + 1, SOUTH); + boolean flag2 = p_147767_1_.canPaneConnectTo(this.blockAccess, p_147767_2_ - 1, p_147767_3_, p_147767_4_, WEST ); + boolean flag3 = p_147767_1_.canPaneConnectTo(this.blockAccess, p_147767_2_ + 1, p_147767_3_, p_147767_4_, EAST ); + if(!flag && !flag1 && !flag2 && !flag3){ + tessellator.addVertexWithUV(d9, (double)(p_147767_3_ + 1), d13, d21, d2); + tessellator.addVertexWithUV(d9, (double)(p_147767_3_ + 0), d13, d21, d3); + tessellator.addVertexWithUV(d10, (double)(p_147767_3_ + 0), d13, d0, d3); + tessellator.addVertexWithUV(d10, (double)(p_147767_3_ + 1), d13, d0, d2); + tessellator.addVertexWithUV(d10, (double)(p_147767_3_ + 1), d13, d21, d2); + tessellator.addVertexWithUV(d10, (double)(p_147767_3_ + 0), d13, d21, d3); + tessellator.addVertexWithUV(d9, (double)(p_147767_3_ + 0), d13, d0, d3); + tessellator.addVertexWithUV(d9, (double)(p_147767_3_ + 1), d13, d0, d2); + + cir.setReturnValue(true); + cir.cancel(); + return; + } + } + + @Shadow + public boolean hasOverrideBlockTexture(){ return true; } + + @Shadow + public IIcon getBlockIconFromSideAndMetadata(Block p_147787_1_, int p_147787_2_, int p_147787_3_){ return null; } +} From 5ab2796e89d00036832052c94cdc5a75419551a9 Mon Sep 17 00:00:00 2001 From: Kam Date: Sat, 18 May 2024 21:58:08 -0400 Subject: [PATCH 03/11] Pane + Glass Pane Single Post Rendering --- .../mixins/glasspane/MixinRenderBlocks.java | 194 +++++++++++++++--- 1 file changed, 163 insertions(+), 31 deletions(-) diff --git a/src/main/java/ganymedes01/etfuturum/mixins/glasspane/MixinRenderBlocks.java b/src/main/java/ganymedes01/etfuturum/mixins/glasspane/MixinRenderBlocks.java index 36d07525..8873504a 100644 --- a/src/main/java/ganymedes01/etfuturum/mixins/glasspane/MixinRenderBlocks.java +++ b/src/main/java/ganymedes01/etfuturum/mixins/glasspane/MixinRenderBlocks.java @@ -1,7 +1,9 @@ package ganymedes01.etfuturum.mixins.glasspane; +import ganymedes01.etfuturum.client.Temp; import net.minecraft.block.Block; import net.minecraft.block.BlockPane; +import net.minecraft.block.BlockStainedGlassPane; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.Tessellator; import net.minecraft.util.IIcon; @@ -25,41 +27,171 @@ public abstract class MixinRenderBlocks { public IIcon overrideBlockTexture; @Inject(method = "renderBlockPane", at = @At(value = "INVOKE", target = "Lnet/minecraft/block/BlockPane;shouldSideBeRendered(Lnet/minecraft/world/IBlockAccess;IIII)Z", ordinal = 1, shift = At.Shift.AFTER), cancellable = true) - private void remapCollisionsBoxes(BlockPane p_147767_1_, int p_147767_2_, int p_147767_3_, int p_147767_4_, CallbackInfoReturnable cir) { + private void remapCollisionsBoxes(BlockPane pane, int posX, int posY, int posZ, CallbackInfoReturnable cir) { + boolean flag = pane.canPaneConnectTo(this.blockAccess, posX, posY, posZ - 1, NORTH); + boolean flag1 = pane.canPaneConnectTo(this.blockAccess, posX, posY, posZ + 1, SOUTH); + boolean flag2 = pane.canPaneConnectTo(this.blockAccess, posX - 1, posY, posZ, WEST ); + boolean flag3 = pane.canPaneConnectTo(this.blockAccess, posX + 1, posY, posZ, EAST ); - IIcon iicon; - if (this.hasOverrideBlockTexture()) - { - iicon = this.overrideBlockTexture; - } - else - { - int j1 = this.blockAccess.getBlockMetadata(p_147767_2_, p_147767_3_, p_147767_4_); - iicon = this.getBlockIconFromSideAndMetadata(p_147767_1_, 0, j1); + // Not Connected to anything + if(!flag && !flag1 && !flag2 && !flag3){ + + IIcon iicon; + IIcon iicon1; + if (this.hasOverrideBlockTexture()) + { + iicon = this.overrideBlockTexture; + iicon1 = this.overrideBlockTexture; + } + else + { + int j1 = this.blockAccess.getBlockMetadata(posX, posY, posZ); + iicon = this.getBlockIconFromSideAndMetadata(pane, 0, j1); + iicon1 = pane.func_150097_e(); + } + + double d0 = (double)iicon.getInterpolatedU(7.0D); + double d00 = (double)iicon.getInterpolatedU(9.0D); + double d2 = (double)iicon.getMinV(); + double d3 = (double)iicon.getMaxV(); + double d4 = (double)iicon1.getInterpolatedU(7.0D); + double d5 = (double)iicon1.getInterpolatedU(9.0D); + double d21 = (double)iicon1.getInterpolatedV(7.0D); + double d22 = (double)iicon1.getInterpolatedV(9.0D); + double d10 = (double) posX + 0.5D; + double d13 = (double)posZ + 0.5D; + double d15 = (double) posX + 0.5D - 0.0625D; + double d16 = (double) posX + 0.5D + 0.0625D; + double d17 = (double)posZ + 0.5D - 0.0625D; + double d18 = (double)posZ + 0.5D + 0.0625D; + + Tessellator tessellator = Tessellator.instance; + + tessellator.addVertexWithUV(d16, (double)(posY + 1), d13, d0, d2); + tessellator.addVertexWithUV(d16, (double)(posY + 0), d13, d0, d3); + tessellator.addVertexWithUV(d15, (double)(posY + 0), d13, d00, d3); + tessellator.addVertexWithUV(d15, (double)(posY + 1), d13, d00, d2); + + tessellator.addVertexWithUV(d15, (double)(posY + 1), d13, d0, d2); + tessellator.addVertexWithUV(d15, (double)(posY + 0), d13, d0, d3); + tessellator.addVertexWithUV(d16, (double)(posY + 0), d13, d00, d3); + tessellator.addVertexWithUV(d16, (double)(posY + 1), d13, d00, d2); + + tessellator.addVertexWithUV(d10, (double)(posY + 1), d17, d0, d2); + tessellator.addVertexWithUV(d10, (double)(posY + 0), d17, d0, d3); + tessellator.addVertexWithUV(d10, (double)(posY + 0), d18, d00, d3); + tessellator.addVertexWithUV(d10, (double)(posY + 1), d18, d00, d2); + + tessellator.addVertexWithUV(d10, (double)(posY + 1), d18, d0, d2); + tessellator.addVertexWithUV(d10, (double)(posY + 0), d18, d0, d3); + tessellator.addVertexWithUV(d10, (double)(posY + 0), d17, d00, d3); + tessellator.addVertexWithUV(d10, (double)(posY + 1), d17, d00, d2); + + // Top-Over + tessellator.addVertexWithUV(d15, (double)(posY + 1 - 0.001D), d18, d5, d21); + tessellator.addVertexWithUV(d16, (double)(posY + 1 - 0.001D), d18, d5, d22); + tessellator.addVertexWithUV(d16, (double)(posY + 1 - 0.001D), d17, d4, d22); + tessellator.addVertexWithUV(d15, (double)(posY + 1 - 0.001D), d17, d4, d21); + + // Top-Under + tessellator.addVertexWithUV(d16, (double)(posY + 1 - 0.001D), d18, d5, d21); + tessellator.addVertexWithUV(d15, (double)(posY + 1 - 0.001D), d18, d5, d22); + tessellator.addVertexWithUV(d15, (double)(posY + 1 - 0.001D), d17, d4, d22); + tessellator.addVertexWithUV(d16, (double)(posY + 1 - 0.001D), d17, d4, d21); + + // Bottom-Over + tessellator.addVertexWithUV(d15, (double)(posY + 0.001D), d18, d5, d21); + tessellator.addVertexWithUV(d16, (double)(posY + 0.001D), d18, d5, d22); + tessellator.addVertexWithUV(d16, (double)(posY + 0.001D), d17, d4, d22); + tessellator.addVertexWithUV(d15, (double)(posY + 0.001D), d17, d4, d21); + + // Bottom-Under + tessellator.addVertexWithUV(d16, (double)(posY + 0.001D), d18, d5, d21); + tessellator.addVertexWithUV(d15, (double)(posY + 0.001D), d18, d5, d22); + tessellator.addVertexWithUV(d15, (double)(posY + 0.001D), d17, d4, d22); + tessellator.addVertexWithUV(d16, (double)(posY + 0.001D), d17, d4, d21); + + cir.setReturnValue(true); + cir.cancel(); + return; } + } + + @Inject(method = "renderBlockStainedGlassPane", at = @At(value = "INVOKE", target = "Lnet/minecraft/block/BlockPane;canPaneConnectTo(Lnet/minecraft/world/IBlockAccess;IIILnet/minecraftforge/common/util/ForgeDirection;)Z", ordinal = 3, shift = At.Shift.AFTER), cancellable = true) + private void remapCollisionsBoxes(Block p_147767_1_, int posX, int posY, int posZ, CallbackInfoReturnable cir) { - double d21 = (double)iicon.getMinU(); - double d0 = (double)iicon.getInterpolatedU(8.0D); - double d2 = (double)iicon.getMinV(); - double d3 = (double)iicon.getMaxV(); - double d9 = (double)p_147767_2_; - double d10 = (double)p_147767_2_ + 0.5D; - double d13 = (double)p_147767_4_ + 0.5D; - - Tessellator tessellator = Tessellator.instance; - boolean flag = p_147767_1_.canPaneConnectTo(this.blockAccess, p_147767_2_, p_147767_3_, p_147767_4_ - 1, NORTH); - boolean flag1 = p_147767_1_.canPaneConnectTo(this.blockAccess, p_147767_2_, p_147767_3_, p_147767_4_ + 1, SOUTH); - boolean flag2 = p_147767_1_.canPaneConnectTo(this.blockAccess, p_147767_2_ - 1, p_147767_3_, p_147767_4_, WEST ); - boolean flag3 = p_147767_1_.canPaneConnectTo(this.blockAccess, p_147767_2_ + 1, p_147767_3_, p_147767_4_, EAST ); + boolean flag = ((BlockPane) p_147767_1_).canPaneConnectTo(this.blockAccess, posX, posY, posZ - 1, NORTH); + boolean flag1 = ((BlockPane) p_147767_1_).canPaneConnectTo(this.blockAccess, posX, posY, posZ + 1, SOUTH); + boolean flag2 = ((BlockPane) p_147767_1_).canPaneConnectTo(this.blockAccess, posX - 1, posY, posZ, WEST ); + boolean flag3 = ((BlockPane) p_147767_1_).canPaneConnectTo(this.blockAccess, posX + 1, posY, posZ, EAST ); + + // Not Connected to Anything if(!flag && !flag1 && !flag2 && !flag3){ - tessellator.addVertexWithUV(d9, (double)(p_147767_3_ + 1), d13, d21, d2); - tessellator.addVertexWithUV(d9, (double)(p_147767_3_ + 0), d13, d21, d3); - tessellator.addVertexWithUV(d10, (double)(p_147767_3_ + 0), d13, d0, d3); - tessellator.addVertexWithUV(d10, (double)(p_147767_3_ + 1), d13, d0, d2); - tessellator.addVertexWithUV(d10, (double)(p_147767_3_ + 1), d13, d21, d2); - tessellator.addVertexWithUV(d10, (double)(p_147767_3_ + 0), d13, d21, d3); - tessellator.addVertexWithUV(d9, (double)(p_147767_3_ + 0), d13, d0, d3); - tessellator.addVertexWithUV(d9, (double)(p_147767_3_ + 1), d13, d0, d2); + + IIcon iicon; + IIcon iicon1; + boolean flag5 = p_147767_1_ instanceof BlockStainedGlassPane; + + if (this.hasOverrideBlockTexture()) + { + iicon = this.overrideBlockTexture; + iicon1 = this.overrideBlockTexture; + } + else + { + int j1 = this.blockAccess.getBlockMetadata(posX, posY, posZ); + iicon = this.getBlockIconFromSideAndMetadata(p_147767_1_, 0, j1); + iicon1 = flag5 ? ((BlockStainedGlassPane)p_147767_1_).func_150104_b(j1) : ((BlockPane)p_147767_1_).func_150097_e(); + } + + double d0 = (double)iicon.getInterpolatedU(7.0D); + double d1 = (double)iicon.getInterpolatedU(9.0D); + double d3 = (double)iicon.getMinV(); + double d4 = (double)iicon.getMaxV(); + double d5 = (double)iicon1.getInterpolatedU(7.0D); + double d6 = (double)iicon1.getInterpolatedU(9.0D); + double d9 = (double)iicon1.getInterpolatedV(7.0D); + double d10 = (double)iicon1.getInterpolatedV(9.0D); + double d11 = (double)posX + 0.4375F; + double d12 = (double)(posX + (1 - 0.4375F)); + double d13 = (double)posZ + 0.4375F; + double d14 = (double)(posZ + (1 - 0.4375F)); + double d15 = (double)posX + 0.5D - 0.0625D; + double d16 = (double)posX + 0.5D + 0.0625D; + double d17 = (double)posZ + 0.5D - 0.0625D; + double d18 = (double)posZ + 0.5D + 0.0625D; + + Tessellator tessellator = Tessellator.instance; + + tessellator.addVertexWithUV(d11, (double)posY + 0.999D, d17, d0, d3); + tessellator.addVertexWithUV(d11, (double)posY + 0.001D, d17, d0, d4); + tessellator.addVertexWithUV(d11, (double)posY + 0.001D, d18, d1, d4); + tessellator.addVertexWithUV(d11, (double)posY + 0.999D, d18, d1, d3); + + tessellator.addVertexWithUV(d12, (double)posY + 0.999D, d18, d0, d3); + tessellator.addVertexWithUV(d12, (double)posY + 0.001D, d18, d0, d4); + tessellator.addVertexWithUV(d12, (double)posY + 0.001D, d17, d1, d4); + tessellator.addVertexWithUV(d12, (double)posY + 0.999D, d17, d1, d3); + + tessellator.addVertexWithUV(d16, (double)posY + 0.999D, d13, d1, d3); + tessellator.addVertexWithUV(d16, (double)posY + 0.001D, d13, d1, d4); + tessellator.addVertexWithUV(d15, (double)posY + 0.001D, d13, d0, d4); + tessellator.addVertexWithUV(d15, (double)posY + 0.999D, d13, d0, d3); + + tessellator.addVertexWithUV(d15, (double)posY + 0.999D, d14, d0, d3); + tessellator.addVertexWithUV(d15, (double)posY + 0.001D, d14, d0, d4); + tessellator.addVertexWithUV(d16, (double)posY + 0.001D, d14, d1, d4); + tessellator.addVertexWithUV(d16, (double)posY + 0.999D, d14, d1, d3); + + // Top and Bottom + tessellator.addVertexWithUV(d16, (double)posY + 0.999D, d17, d6, d9); + tessellator.addVertexWithUV(d15, (double)posY + 0.999D, d17, d5, d9); + tessellator.addVertexWithUV(d15, (double)posY + 0.999D, d18, d5, d10); + tessellator.addVertexWithUV(d16, (double)posY + 0.999D, d18, d6, d10); + tessellator.addVertexWithUV(d15, (double)posY + 0.001D, d17, d5, d9); + tessellator.addVertexWithUV(d16, (double)posY + 0.001D, d17, d6, d9); + tessellator.addVertexWithUV(d16, (double)posY + 0.001D, d18, d6, d10); + tessellator.addVertexWithUV(d15, (double)posY + 0.001D, d18, d5, d10); cir.setReturnValue(true); cir.cancel(); From 5b6fd8a45308f21fedf893304113b122ed2d296d Mon Sep 17 00:00:00 2001 From: Kam Date: Sat, 18 May 2024 22:00:41 -0400 Subject: [PATCH 04/11] Remove Temp (Was used for hotswap reasons) --- .../etfuturum/mixins/glasspane/MixinRenderBlocks.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/ganymedes01/etfuturum/mixins/glasspane/MixinRenderBlocks.java b/src/main/java/ganymedes01/etfuturum/mixins/glasspane/MixinRenderBlocks.java index 8873504a..98dae979 100644 --- a/src/main/java/ganymedes01/etfuturum/mixins/glasspane/MixinRenderBlocks.java +++ b/src/main/java/ganymedes01/etfuturum/mixins/glasspane/MixinRenderBlocks.java @@ -1,6 +1,5 @@ package ganymedes01.etfuturum.mixins.glasspane; -import ganymedes01.etfuturum.client.Temp; import net.minecraft.block.Block; import net.minecraft.block.BlockPane; import net.minecraft.block.BlockStainedGlassPane; From 5e0871e0b198c7c2659308d0fed557ddd4a45c2b Mon Sep 17 00:00:00 2001 From: Kam Date: Sat, 18 May 2024 22:02:18 -0400 Subject: [PATCH 05/11] Shorten Mixins only for new case --- .../etfuturum/EtFuturumMixinPlugin.java | 2 +- ...ixinGlassPane.java => MixinBlockPane.java} | 83 +------------------ 2 files changed, 3 insertions(+), 82 deletions(-) rename src/main/java/ganymedes01/etfuturum/mixins/glasspane/{MixinGlassPane.java => MixinBlockPane.java} (61%) diff --git a/src/main/java/ganymedes01/etfuturum/EtFuturumMixinPlugin.java b/src/main/java/ganymedes01/etfuturum/EtFuturumMixinPlugin.java index b749b9a5..79e91559 100644 --- a/src/main/java/ganymedes01/etfuturum/EtFuturumMixinPlugin.java +++ b/src/main/java/ganymedes01/etfuturum/EtFuturumMixinPlugin.java @@ -260,7 +260,7 @@ public List getMixins() { } if (ConfigMixins.paneModel) { - mixins.add("glasspane.MixinGlassPane"); + mixins.add("glasspane.MixinBlockPane"); mixins.add("glasspane.MixinRenderBlocks"); } diff --git a/src/main/java/ganymedes01/etfuturum/mixins/glasspane/MixinGlassPane.java b/src/main/java/ganymedes01/etfuturum/mixins/glasspane/MixinBlockPane.java similarity index 61% rename from src/main/java/ganymedes01/etfuturum/mixins/glasspane/MixinGlassPane.java rename to src/main/java/ganymedes01/etfuturum/mixins/glasspane/MixinBlockPane.java index 1ac1818c..3fc747f1 100644 --- a/src/main/java/ganymedes01/etfuturum/mixins/glasspane/MixinGlassPane.java +++ b/src/main/java/ganymedes01/etfuturum/mixins/glasspane/MixinBlockPane.java @@ -6,7 +6,6 @@ import net.minecraft.entity.Entity; import net.minecraft.init.Blocks; import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.EnumFacing; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @@ -22,9 +21,9 @@ import static net.minecraftforge.common.util.ForgeDirection.EAST; @Mixin(BlockPane.class) -public abstract class MixinGlassPane extends Block { +public abstract class MixinBlockPane extends Block { - protected MixinGlassPane(Material p_i45394_1_) { + protected MixinBlockPane(Material p_i45394_1_) { super(p_i45394_1_); } @@ -39,48 +38,7 @@ private void remapCollisionsBoxes(World worldIn, int posX, int posY, int posZ, A this.setBlockBounds(0.4375F, 0.0F, 0.4375F, 0.5625F, 1.0F, 0.5625F); super.addCollisionBoxesToList(worldIn, posX, posY, posZ, bb, boxList, entity); ci.cancel(); - return; - } - - if (!flag2 || !flag3) - { - if (flag2) - { - this.setBlockBounds(0.0F, 0.0F, 0.4375F, 0.5F, 1.0F, 0.5625F); - super.addCollisionBoxesToList(worldIn, posX, posY, posZ, bb, boxList, entity); - } - else if (flag3) - { - this.setBlockBounds(0.5F, 0.0F, 0.4375F, 1.0F, 1.0F, 0.5625F); - super.addCollisionBoxesToList(worldIn, posX, posY, posZ, bb, boxList, entity); - } - } - else - { - this.setBlockBounds(0.0F, 0.0F, 0.4375F, 1.0F, 1.0F, 0.5625F); - super.addCollisionBoxesToList(worldIn, posX, posY, posZ, bb, boxList, entity); - } - - if ((!flag || !flag1) && (flag2 || flag3 || flag || flag1)) - { - if (flag) - { - this.setBlockBounds(0.4375F, 0.0F, 0.0F, 0.5625F, 1.0F, 0.5F); - super.addCollisionBoxesToList(worldIn, posX, posY, posZ, bb, boxList, entity); - } - else if (flag1) - { - this.setBlockBounds(0.4375F, 0.0F, 0.5F, 0.5625F, 1.0F, 1.0F); - super.addCollisionBoxesToList(worldIn, posX, posY, posZ, bb, boxList, entity); - } - } - else - { - this.setBlockBounds(0.4375F, 0.0F, 0.0F, 0.5625F, 1.0F, 1.0F); - super.addCollisionBoxesToList(worldIn, posX, posY, posZ, bb, boxList, entity); } - - ci.cancel(); } @Inject(method = "setBlockBoundsBasedOnState", at = @At("HEAD"), cancellable = true) @@ -100,43 +58,6 @@ public void setBlockBoundsBasedOnState(IBlockAccess worldIn, int posX, int posY, ci.cancel(); return; } - - if (!flag2 || !flag3) - { - if (flag2) - { - f = 0.0F; - } - else if (flag3) - { - f1 = 1.0F; - } - } - else - { - f = 0.0F; - f1 = 1.0F; - } - - if ((!flag || !flag1) && (flag2 || flag3 || flag || flag1)) - { - if (flag) - { - f2 = 0.0F; - } - else if (flag1) - { - f3 = 1.0F; - } - } - else - { - f2 = 0.0F; - f3 = 1.0F; - } - - this.setBlockBounds(f, 0.0F, f2, f1, 1.0F, f3); - ci.cancel(); } @Shadow From 866e7bb019291da3eebebb0892b18b33f886d33f Mon Sep 17 00:00:00 2001 From: Kam Date: Sat, 18 May 2024 22:04:51 -0400 Subject: [PATCH 06/11] better comments --- .../etfuturum/configuration/configs/ConfigMixins.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ganymedes01/etfuturum/configuration/configs/ConfigMixins.java b/src/main/java/ganymedes01/etfuturum/configuration/configs/ConfigMixins.java index 4f39f53e..292da800 100644 --- a/src/main/java/ganymedes01/etfuturum/configuration/configs/ConfigMixins.java +++ b/src/main/java/ganymedes01/etfuturum/configuration/configs/ConfigMixins.java @@ -104,7 +104,7 @@ protected void syncConfigOptions() { betterPistons = getBoolean("betterPistons", catBackport, true, "A port of Back in Slime, similar to how the elytra is a port of Backlytra. Allows pistons to interact with slime blocks. The original author of this is DonBruce64: https://legacy.curseforge.com/minecraft/mc-mods/back-in-slime-slime-blocks-for-1-7.\nModified Classes: net.minecraft.block.BlockPistonBase"); soulFire = getBoolean("soulFire", catBackport, true, "Is not a new block, but rather a mixin for fire. Allows fire to stay ignited on soul soil. Does double damage when standing in it, and does not spread to other blocks.\nEven if this is off fire can still stay ignited on soul soil, but do be mindful that fire will spread from soul soil if this option is disabled.\nModified Classes: net.minecraft.block.BlockFire net.minecraft.entity.Entity\nModified Client Classes: net.minecraft.client.renderer.RenderBlocks"); fireproofItems = getBoolean("fireproofItems", catBackport, true, "Some items such as Netherite will not burn in fire and will float to the surface of lava."); - paneModel = getBoolean("paneModel", catBackport, true, "In later versions, Panes have a singular post bounding box when not attached to other panes or blocks"); + paneModel = getBoolean("paneModel", catBackport, true, "Panes [Iron Bars, Glass Panes, etc] are changed to a single post if they are not connected to any other blocks"); stepHeightFix = getBoolean("stepHeightFix", catFixes, true, "Makes the player able to step up even if a block would be above their head at the destination.\nModified classes: net.minecraft.entity.Entity"); arrowFallingFix = getBoolean("arrowFallingFix", catFixes, true, "Prevents arrows from falling off of blocks too easily\nModified classes: net.minecraft.entity.EntityArrow"); From 4ec65984c64d0d8000b44fa18dec8cf1905d1e7d Mon Sep 17 00:00:00 2001 From: Kam Date: Sat, 18 May 2024 22:14:41 -0400 Subject: [PATCH 07/11] Thin Panes Config --- src/main/java/ganymedes01/etfuturum/EtFuturumMixinPlugin.java | 2 +- .../etfuturum/configuration/configs/ConfigMixins.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/ganymedes01/etfuturum/EtFuturumMixinPlugin.java b/src/main/java/ganymedes01/etfuturum/EtFuturumMixinPlugin.java index 79e91559..d4d29fa7 100644 --- a/src/main/java/ganymedes01/etfuturum/EtFuturumMixinPlugin.java +++ b/src/main/java/ganymedes01/etfuturum/EtFuturumMixinPlugin.java @@ -259,7 +259,7 @@ public List getMixins() { } } - if (ConfigMixins.paneModel) { + if (ConfigMixins.thinPanes) { mixins.add("glasspane.MixinBlockPane"); mixins.add("glasspane.MixinRenderBlocks"); } diff --git a/src/main/java/ganymedes01/etfuturum/configuration/configs/ConfigMixins.java b/src/main/java/ganymedes01/etfuturum/configuration/configs/ConfigMixins.java index 292da800..2c3a1bf8 100644 --- a/src/main/java/ganymedes01/etfuturum/configuration/configs/ConfigMixins.java +++ b/src/main/java/ganymedes01/etfuturum/configuration/configs/ConfigMixins.java @@ -43,7 +43,7 @@ public class ConfigMixins extends ConfigBase { public static boolean interpolatedTextures; public static boolean hideSingleLevelEnchants; public static boolean fireproofItems; - public static boolean paneModel; + public static boolean thinPanes; static final String catBackport = "backported features"; static final String catOptimization = "optimizations"; @@ -104,7 +104,7 @@ protected void syncConfigOptions() { betterPistons = getBoolean("betterPistons", catBackport, true, "A port of Back in Slime, similar to how the elytra is a port of Backlytra. Allows pistons to interact with slime blocks. The original author of this is DonBruce64: https://legacy.curseforge.com/minecraft/mc-mods/back-in-slime-slime-blocks-for-1-7.\nModified Classes: net.minecraft.block.BlockPistonBase"); soulFire = getBoolean("soulFire", catBackport, true, "Is not a new block, but rather a mixin for fire. Allows fire to stay ignited on soul soil. Does double damage when standing in it, and does not spread to other blocks.\nEven if this is off fire can still stay ignited on soul soil, but do be mindful that fire will spread from soul soil if this option is disabled.\nModified Classes: net.minecraft.block.BlockFire net.minecraft.entity.Entity\nModified Client Classes: net.minecraft.client.renderer.RenderBlocks"); fireproofItems = getBoolean("fireproofItems", catBackport, true, "Some items such as Netherite will not burn in fire and will float to the surface of lava."); - paneModel = getBoolean("paneModel", catBackport, true, "Panes [Iron Bars, Glass Panes, etc] are changed to a single post if they are not connected to any other blocks"); + thinPanes = getBoolean("thinPanes", catBackport, true, "Panes [Iron Bars, Glass Panes, etc] are changed to a single post if they are not connected to any other blocks"); stepHeightFix = getBoolean("stepHeightFix", catFixes, true, "Makes the player able to step up even if a block would be above their head at the destination.\nModified classes: net.minecraft.entity.Entity"); arrowFallingFix = getBoolean("arrowFallingFix", catFixes, true, "Prevents arrows from falling off of blocks too easily\nModified classes: net.minecraft.entity.EntityArrow"); From 358239855d001001f9834130d9caaa6253e70543 Mon Sep 17 00:00:00 2001 From: Kam Date: Sat, 18 May 2024 22:16:18 -0400 Subject: [PATCH 08/11] Rename to Thin Panes --- .../java/ganymedes01/etfuturum/EtFuturumMixinPlugin.java | 4 ++-- .../mixins/{glasspane => thinpanes}/MixinBlockPane.java | 8 ++------ .../{glasspane => thinpanes}/MixinRenderBlocks.java | 2 +- 3 files changed, 5 insertions(+), 9 deletions(-) rename src/main/java/ganymedes01/etfuturum/mixins/{glasspane => thinpanes}/MixinBlockPane.java (89%) rename src/main/java/ganymedes01/etfuturum/mixins/{glasspane => thinpanes}/MixinRenderBlocks.java (99%) diff --git a/src/main/java/ganymedes01/etfuturum/EtFuturumMixinPlugin.java b/src/main/java/ganymedes01/etfuturum/EtFuturumMixinPlugin.java index d4d29fa7..1ebfbdd0 100644 --- a/src/main/java/ganymedes01/etfuturum/EtFuturumMixinPlugin.java +++ b/src/main/java/ganymedes01/etfuturum/EtFuturumMixinPlugin.java @@ -260,8 +260,8 @@ public List getMixins() { } if (ConfigMixins.thinPanes) { - mixins.add("glasspane.MixinBlockPane"); - mixins.add("glasspane.MixinRenderBlocks"); + mixins.add("thinpanes.MixinBlockPane"); + mixins.add("thinpanes.MixinRenderBlocks"); } return mixins; diff --git a/src/main/java/ganymedes01/etfuturum/mixins/glasspane/MixinBlockPane.java b/src/main/java/ganymedes01/etfuturum/mixins/thinpanes/MixinBlockPane.java similarity index 89% rename from src/main/java/ganymedes01/etfuturum/mixins/glasspane/MixinBlockPane.java rename to src/main/java/ganymedes01/etfuturum/mixins/thinpanes/MixinBlockPane.java index 3fc747f1..f6879a8b 100644 --- a/src/main/java/ganymedes01/etfuturum/mixins/glasspane/MixinBlockPane.java +++ b/src/main/java/ganymedes01/etfuturum/mixins/thinpanes/MixinBlockPane.java @@ -1,4 +1,4 @@ -package ganymedes01.etfuturum.mixins.glasspane; +package ganymedes01.etfuturum.mixins.thinpanes; import net.minecraft.block.Block; import net.minecraft.block.BlockPane; @@ -66,9 +66,5 @@ public boolean canPaneConnectTo(IBlockAccess world, int x, int y, int z, ForgeDi } @Shadow - public final boolean canPaneConnectToBlock(Block blockIN) - { - return blockIN.func_149730_j() || blockIN == this || blockIN == Blocks.glass || blockIN == Blocks.stained_glass || blockIN == Blocks.stained_glass_pane || blockIN instanceof BlockPane; - } - + public final boolean canPaneConnectToBlock(Block blockIN) { return true; } } diff --git a/src/main/java/ganymedes01/etfuturum/mixins/glasspane/MixinRenderBlocks.java b/src/main/java/ganymedes01/etfuturum/mixins/thinpanes/MixinRenderBlocks.java similarity index 99% rename from src/main/java/ganymedes01/etfuturum/mixins/glasspane/MixinRenderBlocks.java rename to src/main/java/ganymedes01/etfuturum/mixins/thinpanes/MixinRenderBlocks.java index 98dae979..68a3faf9 100644 --- a/src/main/java/ganymedes01/etfuturum/mixins/glasspane/MixinRenderBlocks.java +++ b/src/main/java/ganymedes01/etfuturum/mixins/thinpanes/MixinRenderBlocks.java @@ -1,4 +1,4 @@ -package ganymedes01.etfuturum.mixins.glasspane; +package ganymedes01.etfuturum.mixins.thinpanes; import net.minecraft.block.Block; import net.minecraft.block.BlockPane; From f3b08bd3804f97641577301165e244632539e958 Mon Sep 17 00:00:00 2001 From: Kam Date: Sat, 18 May 2024 22:21:04 -0400 Subject: [PATCH 09/11] Optimize Imports --- .../etfuturum/mixins/thinpanes/MixinBlockPane.java | 2 -- .../etfuturum/mixins/thinpanes/MixinRenderBlocks.java | 5 ++--- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/main/java/ganymedes01/etfuturum/mixins/thinpanes/MixinBlockPane.java b/src/main/java/ganymedes01/etfuturum/mixins/thinpanes/MixinBlockPane.java index f6879a8b..0b56e036 100644 --- a/src/main/java/ganymedes01/etfuturum/mixins/thinpanes/MixinBlockPane.java +++ b/src/main/java/ganymedes01/etfuturum/mixins/thinpanes/MixinBlockPane.java @@ -4,7 +4,6 @@ import net.minecraft.block.BlockPane; import net.minecraft.block.material.Material; import net.minecraft.entity.Entity; -import net.minecraft.init.Blocks; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; @@ -18,7 +17,6 @@ import java.util.List; import static net.minecraftforge.common.util.ForgeDirection.*; -import static net.minecraftforge.common.util.ForgeDirection.EAST; @Mixin(BlockPane.class) public abstract class MixinBlockPane extends Block { diff --git a/src/main/java/ganymedes01/etfuturum/mixins/thinpanes/MixinRenderBlocks.java b/src/main/java/ganymedes01/etfuturum/mixins/thinpanes/MixinRenderBlocks.java index 68a3faf9..58ce517b 100644 --- a/src/main/java/ganymedes01/etfuturum/mixins/thinpanes/MixinRenderBlocks.java +++ b/src/main/java/ganymedes01/etfuturum/mixins/thinpanes/MixinRenderBlocks.java @@ -14,7 +14,6 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import static net.minecraftforge.common.util.ForgeDirection.*; -import static net.minecraftforge.common.util.ForgeDirection.EAST; @Mixin(RenderBlocks.class) public abstract class MixinRenderBlocks { @@ -29,8 +28,8 @@ public abstract class MixinRenderBlocks { private void remapCollisionsBoxes(BlockPane pane, int posX, int posY, int posZ, CallbackInfoReturnable cir) { boolean flag = pane.canPaneConnectTo(this.blockAccess, posX, posY, posZ - 1, NORTH); boolean flag1 = pane.canPaneConnectTo(this.blockAccess, posX, posY, posZ + 1, SOUTH); - boolean flag2 = pane.canPaneConnectTo(this.blockAccess, posX - 1, posY, posZ, WEST ); - boolean flag3 = pane.canPaneConnectTo(this.blockAccess, posX + 1, posY, posZ, EAST ); + boolean flag2 = pane.canPaneConnectTo(this.blockAccess, posX - 1, posY, posZ, WEST); + boolean flag3 = pane.canPaneConnectTo(this.blockAccess, posX + 1, posY, posZ, EAST); // Not Connected to anything if(!flag && !flag1 && !flag2 && !flag3){ From deca353f3e4d46c6110c75e65bcd1eb3ce48adf7 Mon Sep 17 00:00:00 2001 From: Kam Date: Sat, 18 May 2024 22:40:09 -0400 Subject: [PATCH 10/11] Local Captures for MixinRenderBlocks --- .../mixins/thinpanes/MixinRenderBlocks.java | 229 ++++++------------ 1 file changed, 77 insertions(+), 152 deletions(-) diff --git a/src/main/java/ganymedes01/etfuturum/mixins/thinpanes/MixinRenderBlocks.java b/src/main/java/ganymedes01/etfuturum/mixins/thinpanes/MixinRenderBlocks.java index 58ce517b..04fa5ac3 100644 --- a/src/main/java/ganymedes01/etfuturum/mixins/thinpanes/MixinRenderBlocks.java +++ b/src/main/java/ganymedes01/etfuturum/mixins/thinpanes/MixinRenderBlocks.java @@ -2,184 +2,117 @@ import net.minecraft.block.Block; import net.minecraft.block.BlockPane; -import net.minecraft.block.BlockStainedGlassPane; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.Tessellator; import net.minecraft.util.IIcon; -import net.minecraft.world.IBlockAccess; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -import static net.minecraftforge.common.util.ForgeDirection.*; +import org.spongepowered.asm.mixin.injection.callback.LocalCapture; @Mixin(RenderBlocks.class) public abstract class MixinRenderBlocks { - @Shadow - public IBlockAccess blockAccess; - - @Shadow - public IIcon overrideBlockTexture; - - @Inject(method = "renderBlockPane", at = @At(value = "INVOKE", target = "Lnet/minecraft/block/BlockPane;shouldSideBeRendered(Lnet/minecraft/world/IBlockAccess;IIII)Z", ordinal = 1, shift = At.Shift.AFTER), cancellable = true) - private void remapCollisionsBoxes(BlockPane pane, int posX, int posY, int posZ, CallbackInfoReturnable cir) { - boolean flag = pane.canPaneConnectTo(this.blockAccess, posX, posY, posZ - 1, NORTH); - boolean flag1 = pane.canPaneConnectTo(this.blockAccess, posX, posY, posZ + 1, SOUTH); - boolean flag2 = pane.canPaneConnectTo(this.blockAccess, posX - 1, posY, posZ, WEST); - boolean flag3 = pane.canPaneConnectTo(this.blockAccess, posX + 1, posY, posZ, EAST); - + @Inject(method = "renderBlockPane", at = @At(value = "INVOKE", target = "Lnet/minecraft/block/BlockPane;shouldSideBeRendered(Lnet/minecraft/world/IBlockAccess;IIII)Z", ordinal = 1, shift = At.Shift.AFTER), cancellable = true, locals = LocalCapture.CAPTURE_FAILHARD) + private void remapCollisionsBoxes(BlockPane p_147767_1_, int posX, int posY, int posZ, CallbackInfoReturnable cir, + int l, Tessellator tessellator, int i1, float f, float f1, float f2, + IIcon iicon, IIcon iicon1, + double d21, double d0, double d1, double d2, double d3, double d4, double d5, + double d6, double d7, double d8, double d9, double d10, double d11, double d12, + double d13, double d14, double d15, double d16, double d17, double d18, + boolean flag, boolean flag1, boolean flag2, boolean flag3, boolean flag4) { // Not Connected to anything if(!flag && !flag1 && !flag2 && !flag3){ + // Cut out Icon Textures for Tops / Bottoms + double d00 = (double)iicon.getInterpolatedU(7.0D); + double d01 = (double)iicon.getInterpolatedU(9.0D); + double d000 = (double)iicon1.getInterpolatedV(7.0D); + double d001 = (double)iicon1.getInterpolatedV(9.0D); - IIcon iicon; - IIcon iicon1; - if (this.hasOverrideBlockTexture()) - { - iicon = this.overrideBlockTexture; - iicon1 = this.overrideBlockTexture; - } - else - { - int j1 = this.blockAccess.getBlockMetadata(posX, posY, posZ); - iicon = this.getBlockIconFromSideAndMetadata(pane, 0, j1); - iicon1 = pane.func_150097_e(); - } - - double d0 = (double)iicon.getInterpolatedU(7.0D); - double d00 = (double)iicon.getInterpolatedU(9.0D); - double d2 = (double)iicon.getMinV(); - double d3 = (double)iicon.getMaxV(); - double d4 = (double)iicon1.getInterpolatedU(7.0D); - double d5 = (double)iicon1.getInterpolatedU(9.0D); - double d21 = (double)iicon1.getInterpolatedV(7.0D); - double d22 = (double)iicon1.getInterpolatedV(9.0D); - double d10 = (double) posX + 0.5D; - double d13 = (double)posZ + 0.5D; - double d15 = (double) posX + 0.5D - 0.0625D; - double d16 = (double) posX + 0.5D + 0.0625D; - double d17 = (double)posZ + 0.5D - 0.0625D; - double d18 = (double)posZ + 0.5D + 0.0625D; - - Tessellator tessellator = Tessellator.instance; - - tessellator.addVertexWithUV(d16, (double)(posY + 1), d13, d0, d2); - tessellator.addVertexWithUV(d16, (double)(posY + 0), d13, d0, d3); - tessellator.addVertexWithUV(d15, (double)(posY + 0), d13, d00, d3); - tessellator.addVertexWithUV(d15, (double)(posY + 1), d13, d00, d2); - - tessellator.addVertexWithUV(d15, (double)(posY + 1), d13, d0, d2); - tessellator.addVertexWithUV(d15, (double)(posY + 0), d13, d0, d3); - tessellator.addVertexWithUV(d16, (double)(posY + 0), d13, d00, d3); tessellator.addVertexWithUV(d16, (double)(posY + 1), d13, d00, d2); + tessellator.addVertexWithUV(d16, (double)(posY + 0), d13, d00, d3); + tessellator.addVertexWithUV(d15, (double)(posY + 0), d13, d01, d3); + tessellator.addVertexWithUV(d15, (double)(posY + 1), d13, d01, d2); - tessellator.addVertexWithUV(d10, (double)(posY + 1), d17, d0, d2); - tessellator.addVertexWithUV(d10, (double)(posY + 0), d17, d0, d3); - tessellator.addVertexWithUV(d10, (double)(posY + 0), d18, d00, d3); - tessellator.addVertexWithUV(d10, (double)(posY + 1), d18, d00, d2); + tessellator.addVertexWithUV(d15, (double)(posY + 1), d13, d00, d2); + tessellator.addVertexWithUV(d15, (double)(posY + 0), d13, d00, d3); + tessellator.addVertexWithUV(d16, (double)(posY + 0), d13, d01, d3); + tessellator.addVertexWithUV(d16, (double)(posY + 1), d13, d01, d2); - tessellator.addVertexWithUV(d10, (double)(posY + 1), d18, d0, d2); - tessellator.addVertexWithUV(d10, (double)(posY + 0), d18, d0, d3); - tessellator.addVertexWithUV(d10, (double)(posY + 0), d17, d00, d3); tessellator.addVertexWithUV(d10, (double)(posY + 1), d17, d00, d2); + tessellator.addVertexWithUV(d10, (double)(posY + 0), d17, d00, d3); + tessellator.addVertexWithUV(d10, (double)(posY + 0), d18, d01, d3); + tessellator.addVertexWithUV(d10, (double)(posY + 1), d18, d01, d2); + + tessellator.addVertexWithUV(d10, (double)(posY + 1), d18, d00, d2); + tessellator.addVertexWithUV(d10, (double)(posY + 0), d18, d00, d3); + tessellator.addVertexWithUV(d10, (double)(posY + 0), d17, d01, d3); + tessellator.addVertexWithUV(d10, (double)(posY + 1), d17, d01, d2); // Top-Over - tessellator.addVertexWithUV(d15, (double)(posY + 1 - 0.001D), d18, d5, d21); - tessellator.addVertexWithUV(d16, (double)(posY + 1 - 0.001D), d18, d5, d22); - tessellator.addVertexWithUV(d16, (double)(posY + 1 - 0.001D), d17, d4, d22); - tessellator.addVertexWithUV(d15, (double)(posY + 1 - 0.001D), d17, d4, d21); + tessellator.addVertexWithUV(d15, (double)(posY + 1 - 0.001D), d18, d5, d000); + tessellator.addVertexWithUV(d16, (double)(posY + 1 - 0.001D), d18, d5, d001); + tessellator.addVertexWithUV(d16, (double)(posY + 1 - 0.001D), d17, d4, d001); + tessellator.addVertexWithUV(d15, (double)(posY + 1 - 0.001D), d17, d4, d000); // Top-Under - tessellator.addVertexWithUV(d16, (double)(posY + 1 - 0.001D), d18, d5, d21); - tessellator.addVertexWithUV(d15, (double)(posY + 1 - 0.001D), d18, d5, d22); - tessellator.addVertexWithUV(d15, (double)(posY + 1 - 0.001D), d17, d4, d22); - tessellator.addVertexWithUV(d16, (double)(posY + 1 - 0.001D), d17, d4, d21); + tessellator.addVertexWithUV(d16, (double)(posY + 1 - 0.001D), d18, d5, d000); + tessellator.addVertexWithUV(d15, (double)(posY + 1 - 0.001D), d18, d5, d001); + tessellator.addVertexWithUV(d15, (double)(posY + 1 - 0.001D), d17, d4, d001); + tessellator.addVertexWithUV(d16, (double)(posY + 1 - 0.001D), d17, d4, d000); // Bottom-Over - tessellator.addVertexWithUV(d15, (double)(posY + 0.001D), d18, d5, d21); - tessellator.addVertexWithUV(d16, (double)(posY + 0.001D), d18, d5, d22); - tessellator.addVertexWithUV(d16, (double)(posY + 0.001D), d17, d4, d22); - tessellator.addVertexWithUV(d15, (double)(posY + 0.001D), d17, d4, d21); + tessellator.addVertexWithUV(d15, (double)(posY + 0.001D), d18, d5, d000); + tessellator.addVertexWithUV(d16, (double)(posY + 0.001D), d18, d5, d001); + tessellator.addVertexWithUV(d16, (double)(posY + 0.001D), d17, d4, d001); + tessellator.addVertexWithUV(d15, (double)(posY + 0.001D), d17, d4, d000); // Bottom-Under - tessellator.addVertexWithUV(d16, (double)(posY + 0.001D), d18, d5, d21); - tessellator.addVertexWithUV(d15, (double)(posY + 0.001D), d18, d5, d22); - tessellator.addVertexWithUV(d15, (double)(posY + 0.001D), d17, d4, d22); - tessellator.addVertexWithUV(d16, (double)(posY + 0.001D), d17, d4, d21); + tessellator.addVertexWithUV(d16, (double)(posY + 0.001D), d18, d5, d000); + tessellator.addVertexWithUV(d15, (double)(posY + 0.001D), d18, d5, d001); + tessellator.addVertexWithUV(d15, (double)(posY + 0.001D), d17, d4, d001); + tessellator.addVertexWithUV(d16, (double)(posY + 0.001D), d17, d4, d000); cir.setReturnValue(true); - cir.cancel(); - return; } } - @Inject(method = "renderBlockStainedGlassPane", at = @At(value = "INVOKE", target = "Lnet/minecraft/block/BlockPane;canPaneConnectTo(Lnet/minecraft/world/IBlockAccess;IIILnet/minecraftforge/common/util/ForgeDirection;)Z", ordinal = 3, shift = At.Shift.AFTER), cancellable = true) - private void remapCollisionsBoxes(Block p_147767_1_, int posX, int posY, int posZ, CallbackInfoReturnable cir) { - - boolean flag = ((BlockPane) p_147767_1_).canPaneConnectTo(this.blockAccess, posX, posY, posZ - 1, NORTH); - boolean flag1 = ((BlockPane) p_147767_1_).canPaneConnectTo(this.blockAccess, posX, posY, posZ + 1, SOUTH); - boolean flag2 = ((BlockPane) p_147767_1_).canPaneConnectTo(this.blockAccess, posX - 1, posY, posZ, WEST ); - boolean flag3 = ((BlockPane) p_147767_1_).canPaneConnectTo(this.blockAccess, posX + 1, posY, posZ, EAST ); - + @Inject(method = "renderBlockStainedGlassPane", at = @At(value = "INVOKE_ASSIGN", target = "Lnet/minecraft/block/BlockPane;canPaneConnectTo(Lnet/minecraft/world/IBlockAccess;IIILnet/minecraftforge/common/util/ForgeDirection;)Z", ordinal = 3, shift = At.Shift.AFTER), cancellable = true, locals = LocalCapture.CAPTURE_FAILHARD) + private void remapCollisionsBoxes(Block p_147733_1_, int posX, int posY, int posZ, CallbackInfoReturnable cir, + int l, Tessellator tessellator, int i1, float f, float f1, float f2, boolean flag5, + IIcon iicon, IIcon iicon1, double d22, + double d0, double d1, double d2, double d3, double d4, double d5, double d6, + double d7, double d8, double d9, double d10, double d11, double d12, double d13, + double d14, double d15, double d16, double d17, double d18, + boolean flag, boolean flag1, boolean flag2, boolean flag3) { // Not Connected to Anything if(!flag && !flag1 && !flag2 && !flag3){ - IIcon iicon; - IIcon iicon1; - boolean flag5 = p_147767_1_ instanceof BlockStainedGlassPane; - - if (this.hasOverrideBlockTexture()) - { - iicon = this.overrideBlockTexture; - iicon1 = this.overrideBlockTexture; - } - else - { - int j1 = this.blockAccess.getBlockMetadata(posX, posY, posZ); - iicon = this.getBlockIconFromSideAndMetadata(p_147767_1_, 0, j1); - iicon1 = flag5 ? ((BlockStainedGlassPane)p_147767_1_).func_150104_b(j1) : ((BlockPane)p_147767_1_).func_150097_e(); - } - - double d0 = (double)iicon.getInterpolatedU(7.0D); - double d1 = (double)iicon.getInterpolatedU(9.0D); - double d3 = (double)iicon.getMinV(); - double d4 = (double)iicon.getMaxV(); - double d5 = (double)iicon1.getInterpolatedU(7.0D); - double d6 = (double)iicon1.getInterpolatedU(9.0D); - double d9 = (double)iicon1.getInterpolatedV(7.0D); - double d10 = (double)iicon1.getInterpolatedV(9.0D); - double d11 = (double)posX + 0.4375F; - double d12 = (double)(posX + (1 - 0.4375F)); - double d13 = (double)posZ + 0.4375F; - double d14 = (double)(posZ + (1 - 0.4375F)); - double d15 = (double)posX + 0.5D - 0.0625D; - double d16 = (double)posX + 0.5D + 0.0625D; - double d17 = (double)posZ + 0.5D - 0.0625D; - double d18 = (double)posZ + 0.5D + 0.0625D; - - Tessellator tessellator = Tessellator.instance; - - tessellator.addVertexWithUV(d11, (double)posY + 0.999D, d17, d0, d3); - tessellator.addVertexWithUV(d11, (double)posY + 0.001D, d17, d0, d4); - tessellator.addVertexWithUV(d11, (double)posY + 0.001D, d18, d1, d4); - tessellator.addVertexWithUV(d11, (double)posY + 0.999D, d18, d1, d3); - - tessellator.addVertexWithUV(d12, (double)posY + 0.999D, d18, d0, d3); - tessellator.addVertexWithUV(d12, (double)posY + 0.001D, d18, d0, d4); - tessellator.addVertexWithUV(d12, (double)posY + 0.001D, d17, d1, d4); - tessellator.addVertexWithUV(d12, (double)posY + 0.999D, d17, d1, d3); - - tessellator.addVertexWithUV(d16, (double)posY + 0.999D, d13, d1, d3); - tessellator.addVertexWithUV(d16, (double)posY + 0.001D, d13, d1, d4); - tessellator.addVertexWithUV(d15, (double)posY + 0.001D, d13, d0, d4); - tessellator.addVertexWithUV(d15, (double)posY + 0.999D, d13, d0, d3); - - tessellator.addVertexWithUV(d15, (double)posY + 0.999D, d14, d0, d3); - tessellator.addVertexWithUV(d15, (double)posY + 0.001D, d14, d0, d4); - tessellator.addVertexWithUV(d16, (double)posY + 0.001D, d14, d1, d4); - tessellator.addVertexWithUV(d16, (double)posY + 0.999D, d14, d1, d3); + double d00 = (double)posX + 0.4375F; + double d01 = (double)(posX + (1 - 0.4375F)); + double d000 = (double)posZ + 0.4375F; + double d001 = (double)(posZ + (1 - 0.4375F)); + + tessellator.addVertexWithUV(d00, (double)posY + 0.999D, d17, d0, d3); + tessellator.addVertexWithUV(d00, (double)posY + 0.001D, d17, d0, d4); + tessellator.addVertexWithUV(d00, (double)posY + 0.001D, d18, d1, d4); + tessellator.addVertexWithUV(d00, (double)posY + 0.999D, d18, d1, d3); + + tessellator.addVertexWithUV(d01, (double)posY + 0.999D, d18, d0, d3); + tessellator.addVertexWithUV(d01, (double)posY + 0.001D, d18, d0, d4); + tessellator.addVertexWithUV(d01, (double)posY + 0.001D, d17, d1, d4); + tessellator.addVertexWithUV(d01, (double)posY + 0.999D, d17, d1, d3); + + tessellator.addVertexWithUV(d16, (double)posY + 0.999D, d000, d1, d3); + tessellator.addVertexWithUV(d16, (double)posY + 0.001D, d000, d1, d4); + tessellator.addVertexWithUV(d15, (double)posY + 0.001D, d000, d0, d4); + tessellator.addVertexWithUV(d15, (double)posY + 0.999D, d000, d0, d3); + + tessellator.addVertexWithUV(d15, (double)posY + 0.999D, d001, d0, d3); + tessellator.addVertexWithUV(d15, (double)posY + 0.001D, d001, d0, d4); + tessellator.addVertexWithUV(d16, (double)posY + 0.001D, d001, d1, d4); + tessellator.addVertexWithUV(d16, (double)posY + 0.999D, d001, d1, d3); // Top and Bottom tessellator.addVertexWithUV(d16, (double)posY + 0.999D, d17, d6, d9); @@ -192,14 +125,6 @@ private void remapCollisionsBoxes(Block p_147767_1_, int posX, int posY, int pos tessellator.addVertexWithUV(d15, (double)posY + 0.001D, d18, d5, d10); cir.setReturnValue(true); - cir.cancel(); - return; } } - - @Shadow - public boolean hasOverrideBlockTexture(){ return true; } - - @Shadow - public IIcon getBlockIconFromSideAndMetadata(Block p_147787_1_, int p_147787_2_, int p_147787_3_){ return null; } } From e35791599b92a014271e36c8f10e2d1cd220b4e4 Mon Sep 17 00:00:00 2001 From: Kam Date: Sat, 18 May 2024 22:44:48 -0400 Subject: [PATCH 11/11] MixinBlockPane uses Local Captures instead --- .../mixins/thinpanes/MixinBlockPane.java | 36 +++---------------- 1 file changed, 5 insertions(+), 31 deletions(-) diff --git a/src/main/java/ganymedes01/etfuturum/mixins/thinpanes/MixinBlockPane.java b/src/main/java/ganymedes01/etfuturum/mixins/thinpanes/MixinBlockPane.java index 0b56e036..17c0cee3 100644 --- a/src/main/java/ganymedes01/etfuturum/mixins/thinpanes/MixinBlockPane.java +++ b/src/main/java/ganymedes01/etfuturum/mixins/thinpanes/MixinBlockPane.java @@ -7,17 +7,14 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.LocalCapture; import java.util.List; -import static net.minecraftforge.common.util.ForgeDirection.*; - @Mixin(BlockPane.class) public abstract class MixinBlockPane extends Block { @@ -25,13 +22,8 @@ protected MixinBlockPane(Material p_i45394_1_) { super(p_i45394_1_); } - @Inject(method = "addCollisionBoxesToList", at = @At("HEAD"), cancellable = true) - private void remapCollisionsBoxes(World worldIn, int posX, int posY, int posZ, AxisAlignedBB bb, List boxList, Entity entity, CallbackInfo ci) { - boolean flag = this.canPaneConnectTo(worldIn, posX, posY, posZ - 1, NORTH); - boolean flag1 = this.canPaneConnectTo(worldIn, posX, posY, posZ + 1, SOUTH); - boolean flag2 = this.canPaneConnectTo(worldIn, posX - 1, posY, posZ, WEST ); - boolean flag3 = this.canPaneConnectTo(worldIn, posX + 1, posY, posZ, EAST ); - + @Inject(method = "addCollisionBoxesToList", at = @At(value = "INVOKE_ASSIGN", target = "Lnet/minecraft/block/BlockPane;canPaneConnectTo(Lnet/minecraft/world/IBlockAccess;IIILnet/minecraftforge/common/util/ForgeDirection;)Z", ordinal = 3, shift = At.Shift.AFTER), cancellable = true, locals = LocalCapture.CAPTURE_FAILHARD) + private void remapCollisionsBoxes(World worldIn, int posX, int posY, int posZ, AxisAlignedBB bb, List boxList, Entity entity, CallbackInfo ci, boolean flag, boolean flag1, boolean flag2, boolean flag3) { if(!flag && !flag1 && !flag2 && !flag3){ this.setBlockBounds(0.4375F, 0.0F, 0.4375F, 0.5625F, 1.0F, 0.5625F); super.addCollisionBoxesToList(worldIn, posX, posY, posZ, bb, boxList, entity); @@ -39,30 +31,12 @@ private void remapCollisionsBoxes(World worldIn, int posX, int posY, int posZ, A } } - @Inject(method = "setBlockBoundsBasedOnState", at = @At("HEAD"), cancellable = true) - public void setBlockBoundsBasedOnState(IBlockAccess worldIn, int posX, int posY, int posZ, CallbackInfo ci) + @Inject(method = "setBlockBoundsBasedOnState", at = @At(value = "INVOKE_ASSIGN", target = "Lnet/minecraft/block/BlockPane;canPaneConnectTo(Lnet/minecraft/world/IBlockAccess;IIILnet/minecraftforge/common/util/ForgeDirection;)Z", ordinal = 3, shift = At.Shift.AFTER), cancellable = true, locals = LocalCapture.CAPTURE_FAILHARD) + public void setBlockBoundsBasedOnState(IBlockAccess worldIn, int posX, int posY, int posZ, CallbackInfo ci, float f, float f1, float f2, float f3, boolean flag, boolean flag1, boolean flag2, boolean flag3) { - float f = 0.4375F; - float f1 = 0.5625F; - float f2 = 0.4375F; - float f3 = 0.5625F; - boolean flag = this.canPaneConnectToBlock(worldIn.getBlock(posX, posY, posZ - 1)); - boolean flag1 = this.canPaneConnectToBlock(worldIn.getBlock(posX, posY, posZ + 1)); - boolean flag2 = this.canPaneConnectToBlock(worldIn.getBlock(posX - 1, posY, posZ)); - boolean flag3 = this.canPaneConnectToBlock(worldIn.getBlock(posX + 1, posY, posZ )); - if(!flag2 && !flag3 && !flag && !flag1){ this.setBlockBounds(f, 0.0F, f2, f1, 1.0F, f3); ci.cancel(); - return; } } - - @Shadow - public boolean canPaneConnectTo(IBlockAccess world, int x, int y, int z, ForgeDirection dir){ - return true; - } - - @Shadow - public final boolean canPaneConnectToBlock(Block blockIN) { return true; } }