diff --git a/libraries/blockstates/blockstates-mca1.0.1_01-mcb1.1_02/src/main/java/net/ornithemc/osl/blockstates/api/world/WorldViewExtension.java b/libraries/blockstates/blockstates-mca1.0.1_01-mcb1.1_02/src/main/java/net/ornithemc/osl/blockstates/api/world/WorldViewExtension.java index 7d19a59e6..078da120e 100644 --- a/libraries/blockstates/blockstates-mca1.0.1_01-mcb1.1_02/src/main/java/net/ornithemc/osl/blockstates/api/world/WorldViewExtension.java +++ b/libraries/blockstates/blockstates-mca1.0.1_01-mcb1.1_02/src/main/java/net/ornithemc/osl/blockstates/api/world/WorldViewExtension.java @@ -16,6 +16,8 @@ public interface WorldViewExtension { BlockEntity getBlockEntity(BlockPos pos); + BlockEntity getBlockEntity(int x, int y, int z); + static boolean isInsideWorldHeight(BlockPos pos) { return isInsideWorldHeight(pos.y()); } diff --git a/libraries/blockstates/blockstates-mca1.0.1_01-mcb1.1_02/src/main/java/net/ornithemc/osl/blockstates/impl/mixin/common/WorldMixin.java b/libraries/blockstates/blockstates-mca1.0.1_01-mcb1.1_02/src/main/java/net/ornithemc/osl/blockstates/impl/mixin/common/WorldMixin.java index af1284452..5b6941be2 100644 --- a/libraries/blockstates/blockstates-mca1.0.1_01-mcb1.1_02/src/main/java/net/ornithemc/osl/blockstates/impl/mixin/common/WorldMixin.java +++ b/libraries/blockstates/blockstates-mca1.0.1_01-mcb1.1_02/src/main/java/net/ornithemc/osl/blockstates/impl/mixin/common/WorldMixin.java @@ -16,7 +16,7 @@ import net.ornithemc.osl.core.api.util.math.BlockPos; @Mixin(World.class) -public class WorldMixin implements WorldExtension { +public abstract class WorldMixin implements WorldExtension { @Shadow private boolean isMultiplayer; @@ -26,8 +26,6 @@ public class WorldMixin implements WorldExtension { @Shadow private void onBlockChanged(int x, int y, int z, int block) { } @Shadow - private BlockEntity getBlockEntity(int x, int y, int z) { return null; } - @Shadow private void setBlockEntity(int x, int y, int z, BlockEntity blockEntity) { } @ModifyVariable( diff --git a/libraries/blockstates/blockstates-mca1.0.1_01-mcb1.1_02/src/main/java/net/ornithemc/osl/blockstates/impl/mixin/common/WorldRegionMixin.java b/libraries/blockstates/blockstates-mca1.0.1_01-mcb1.1_02/src/main/java/net/ornithemc/osl/blockstates/impl/mixin/common/WorldRegionMixin.java index 8cd5ebd50..ac5f6f058 100644 --- a/libraries/blockstates/blockstates-mca1.0.1_01-mcb1.1_02/src/main/java/net/ornithemc/osl/blockstates/impl/mixin/common/WorldRegionMixin.java +++ b/libraries/blockstates/blockstates-mca1.0.1_01-mcb1.1_02/src/main/java/net/ornithemc/osl/blockstates/impl/mixin/common/WorldRegionMixin.java @@ -3,6 +3,9 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; + import net.minecraft.block.entity.BlockEntity; import net.minecraft.world.WorldRegion; import net.minecraft.world.chunk.WorldChunk; @@ -22,9 +25,6 @@ public class WorldRegionMixin implements WorldViewExtension { @Shadow private WorldChunk[][] chunks; - @Shadow - private BlockEntity getBlockEntity(int x, int y, int z) { return null; } - @Override public BlockState getBlockState(BlockPos pos) { return this.getBlockState(pos.x(), pos.y(), pos.z()); @@ -52,4 +52,13 @@ public BlockState getBlockState(int x, int y, int z) { public BlockEntity getBlockEntity(BlockPos pos) { return this.getBlockEntity(pos.x(), pos.y(), pos.z()); } + + @Environment(EnvType.SERVER) + @Override + public BlockEntity getBlockEntity(int x, int y, int z) { + int indexX = (x >> 4) - this.chunkX; + int indexZ = (z >> 4) - this.chunkZ; + + return this.chunks[indexX][indexZ].getBlockEntityAt(x & 15, y, z & 15); + } } diff --git a/libraries/blockstates/blockstates-mca1.0.1_01-mcb1.1_02/src/main/java/net/ornithemc/osl/blockstates/impl/world/WorldViewExtensionImpl.java b/libraries/blockstates/blockstates-mca1.0.1_01-mcb1.1_02/src/main/java/net/ornithemc/osl/blockstates/impl/world/WorldViewExtensionImpl.java index 2a0470b08..872273009 100644 --- a/libraries/blockstates/blockstates-mca1.0.1_01-mcb1.1_02/src/main/java/net/ornithemc/osl/blockstates/impl/world/WorldViewExtensionImpl.java +++ b/libraries/blockstates/blockstates-mca1.0.1_01-mcb1.1_02/src/main/java/net/ornithemc/osl/blockstates/impl/world/WorldViewExtensionImpl.java @@ -22,4 +22,9 @@ default BlockState getBlockState(int x, int y, int z) { default BlockEntity getBlockEntity(BlockPos pos) { throw new AbstractMethodError(); } + + @Override + default BlockEntity getBlockEntity(int x, int y, int z) { + throw new AbstractMethodError(); + } } diff --git a/libraries/blockstates/blockstates-mcb1.2-mcb1.5_02/src/main/java/net/ornithemc/osl/blockstates/api/world/WorldViewExtension.java b/libraries/blockstates/blockstates-mcb1.2-mcb1.5_02/src/main/java/net/ornithemc/osl/blockstates/api/world/WorldViewExtension.java index 7d19a59e6..078da120e 100644 --- a/libraries/blockstates/blockstates-mcb1.2-mcb1.5_02/src/main/java/net/ornithemc/osl/blockstates/api/world/WorldViewExtension.java +++ b/libraries/blockstates/blockstates-mcb1.2-mcb1.5_02/src/main/java/net/ornithemc/osl/blockstates/api/world/WorldViewExtension.java @@ -16,6 +16,8 @@ public interface WorldViewExtension { BlockEntity getBlockEntity(BlockPos pos); + BlockEntity getBlockEntity(int x, int y, int z); + static boolean isInsideWorldHeight(BlockPos pos) { return isInsideWorldHeight(pos.y()); } diff --git a/libraries/blockstates/blockstates-mcb1.2-mcb1.5_02/src/main/java/net/ornithemc/osl/blockstates/impl/mixin/common/WorldMixin.java b/libraries/blockstates/blockstates-mcb1.2-mcb1.5_02/src/main/java/net/ornithemc/osl/blockstates/impl/mixin/common/WorldMixin.java index af1284452..5b6941be2 100644 --- a/libraries/blockstates/blockstates-mcb1.2-mcb1.5_02/src/main/java/net/ornithemc/osl/blockstates/impl/mixin/common/WorldMixin.java +++ b/libraries/blockstates/blockstates-mcb1.2-mcb1.5_02/src/main/java/net/ornithemc/osl/blockstates/impl/mixin/common/WorldMixin.java @@ -16,7 +16,7 @@ import net.ornithemc.osl.core.api.util.math.BlockPos; @Mixin(World.class) -public class WorldMixin implements WorldExtension { +public abstract class WorldMixin implements WorldExtension { @Shadow private boolean isMultiplayer; @@ -26,8 +26,6 @@ public class WorldMixin implements WorldExtension { @Shadow private void onBlockChanged(int x, int y, int z, int block) { } @Shadow - private BlockEntity getBlockEntity(int x, int y, int z) { return null; } - @Shadow private void setBlockEntity(int x, int y, int z, BlockEntity blockEntity) { } @ModifyVariable( diff --git a/libraries/blockstates/blockstates-mcb1.2-mcb1.5_02/src/main/java/net/ornithemc/osl/blockstates/impl/mixin/common/WorldRegionMixin.java b/libraries/blockstates/blockstates-mcb1.2-mcb1.5_02/src/main/java/net/ornithemc/osl/blockstates/impl/mixin/common/WorldRegionMixin.java index 8cd5ebd50..ac5f6f058 100644 --- a/libraries/blockstates/blockstates-mcb1.2-mcb1.5_02/src/main/java/net/ornithemc/osl/blockstates/impl/mixin/common/WorldRegionMixin.java +++ b/libraries/blockstates/blockstates-mcb1.2-mcb1.5_02/src/main/java/net/ornithemc/osl/blockstates/impl/mixin/common/WorldRegionMixin.java @@ -3,6 +3,9 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; + import net.minecraft.block.entity.BlockEntity; import net.minecraft.world.WorldRegion; import net.minecraft.world.chunk.WorldChunk; @@ -22,9 +25,6 @@ public class WorldRegionMixin implements WorldViewExtension { @Shadow private WorldChunk[][] chunks; - @Shadow - private BlockEntity getBlockEntity(int x, int y, int z) { return null; } - @Override public BlockState getBlockState(BlockPos pos) { return this.getBlockState(pos.x(), pos.y(), pos.z()); @@ -52,4 +52,13 @@ public BlockState getBlockState(int x, int y, int z) { public BlockEntity getBlockEntity(BlockPos pos) { return this.getBlockEntity(pos.x(), pos.y(), pos.z()); } + + @Environment(EnvType.SERVER) + @Override + public BlockEntity getBlockEntity(int x, int y, int z) { + int indexX = (x >> 4) - this.chunkX; + int indexZ = (z >> 4) - this.chunkZ; + + return this.chunks[indexX][indexZ].getBlockEntityAt(x & 15, y, z & 15); + } } diff --git a/libraries/blockstates/blockstates-mcb1.2-mcb1.5_02/src/main/java/net/ornithemc/osl/blockstates/impl/world/WorldViewExtensionImpl.java b/libraries/blockstates/blockstates-mcb1.2-mcb1.5_02/src/main/java/net/ornithemc/osl/blockstates/impl/world/WorldViewExtensionImpl.java index 2a0470b08..872273009 100644 --- a/libraries/blockstates/blockstates-mcb1.2-mcb1.5_02/src/main/java/net/ornithemc/osl/blockstates/impl/world/WorldViewExtensionImpl.java +++ b/libraries/blockstates/blockstates-mcb1.2-mcb1.5_02/src/main/java/net/ornithemc/osl/blockstates/impl/world/WorldViewExtensionImpl.java @@ -22,4 +22,9 @@ default BlockState getBlockState(int x, int y, int z) { default BlockEntity getBlockEntity(BlockPos pos) { throw new AbstractMethodError(); } + + @Override + default BlockEntity getBlockEntity(int x, int y, int z) { + throw new AbstractMethodError(); + } } diff --git a/libraries/blockstates/blockstates-mcb1.6-trailer-mcb1.6.6/src/main/java/net/ornithemc/osl/blockstates/api/world/WorldViewExtension.java b/libraries/blockstates/blockstates-mcb1.6-trailer-mcb1.6.6/src/main/java/net/ornithemc/osl/blockstates/api/world/WorldViewExtension.java index 7d19a59e6..078da120e 100644 --- a/libraries/blockstates/blockstates-mcb1.6-trailer-mcb1.6.6/src/main/java/net/ornithemc/osl/blockstates/api/world/WorldViewExtension.java +++ b/libraries/blockstates/blockstates-mcb1.6-trailer-mcb1.6.6/src/main/java/net/ornithemc/osl/blockstates/api/world/WorldViewExtension.java @@ -16,6 +16,8 @@ public interface WorldViewExtension { BlockEntity getBlockEntity(BlockPos pos); + BlockEntity getBlockEntity(int x, int y, int z); + static boolean isInsideWorldHeight(BlockPos pos) { return isInsideWorldHeight(pos.y()); } diff --git a/libraries/blockstates/blockstates-mcb1.6-trailer-mcb1.6.6/src/main/java/net/ornithemc/osl/blockstates/impl/mixin/common/WorldMixin.java b/libraries/blockstates/blockstates-mcb1.6-trailer-mcb1.6.6/src/main/java/net/ornithemc/osl/blockstates/impl/mixin/common/WorldMixin.java index 4730c33a5..938a0c014 100644 --- a/libraries/blockstates/blockstates-mcb1.6-trailer-mcb1.6.6/src/main/java/net/ornithemc/osl/blockstates/impl/mixin/common/WorldMixin.java +++ b/libraries/blockstates/blockstates-mcb1.6-trailer-mcb1.6.6/src/main/java/net/ornithemc/osl/blockstates/impl/mixin/common/WorldMixin.java @@ -16,7 +16,7 @@ import net.ornithemc.osl.core.api.util.math.BlockPos; @Mixin(World.class) -public class WorldMixin implements WorldExtension { +public abstract class WorldMixin implements WorldExtension { @Shadow private boolean isMultiplayer; @@ -28,8 +28,6 @@ private void onBlockChanged(int x, int y, int z, int block) { } @Shadow private void updateNeighbors(int x, int y, int z, int block) { } @Shadow - private BlockEntity getBlockEntity(int x, int y, int z) { return null; } - @Shadow private void setBlockEntity(int x, int y, int z, BlockEntity blockEntity) { } @ModifyVariable( diff --git a/libraries/blockstates/blockstates-mcb1.6-trailer-mcb1.6.6/src/main/java/net/ornithemc/osl/blockstates/impl/mixin/common/WorldRegionMixin.java b/libraries/blockstates/blockstates-mcb1.6-trailer-mcb1.6.6/src/main/java/net/ornithemc/osl/blockstates/impl/mixin/common/WorldRegionMixin.java index 8cd5ebd50..ac5f6f058 100644 --- a/libraries/blockstates/blockstates-mcb1.6-trailer-mcb1.6.6/src/main/java/net/ornithemc/osl/blockstates/impl/mixin/common/WorldRegionMixin.java +++ b/libraries/blockstates/blockstates-mcb1.6-trailer-mcb1.6.6/src/main/java/net/ornithemc/osl/blockstates/impl/mixin/common/WorldRegionMixin.java @@ -3,6 +3,9 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; + import net.minecraft.block.entity.BlockEntity; import net.minecraft.world.WorldRegion; import net.minecraft.world.chunk.WorldChunk; @@ -22,9 +25,6 @@ public class WorldRegionMixin implements WorldViewExtension { @Shadow private WorldChunk[][] chunks; - @Shadow - private BlockEntity getBlockEntity(int x, int y, int z) { return null; } - @Override public BlockState getBlockState(BlockPos pos) { return this.getBlockState(pos.x(), pos.y(), pos.z()); @@ -52,4 +52,13 @@ public BlockState getBlockState(int x, int y, int z) { public BlockEntity getBlockEntity(BlockPos pos) { return this.getBlockEntity(pos.x(), pos.y(), pos.z()); } + + @Environment(EnvType.SERVER) + @Override + public BlockEntity getBlockEntity(int x, int y, int z) { + int indexX = (x >> 4) - this.chunkX; + int indexZ = (z >> 4) - this.chunkZ; + + return this.chunks[indexX][indexZ].getBlockEntityAt(x & 15, y, z & 15); + } } diff --git a/libraries/blockstates/blockstates-mcb1.6-trailer-mcb1.6.6/src/main/java/net/ornithemc/osl/blockstates/impl/world/WorldViewExtensionImpl.java b/libraries/blockstates/blockstates-mcb1.6-trailer-mcb1.6.6/src/main/java/net/ornithemc/osl/blockstates/impl/world/WorldViewExtensionImpl.java index 2a0470b08..872273009 100644 --- a/libraries/blockstates/blockstates-mcb1.6-trailer-mcb1.6.6/src/main/java/net/ornithemc/osl/blockstates/impl/world/WorldViewExtensionImpl.java +++ b/libraries/blockstates/blockstates-mcb1.6-trailer-mcb1.6.6/src/main/java/net/ornithemc/osl/blockstates/impl/world/WorldViewExtensionImpl.java @@ -22,4 +22,9 @@ default BlockState getBlockState(int x, int y, int z) { default BlockEntity getBlockEntity(BlockPos pos) { throw new AbstractMethodError(); } + + @Override + default BlockEntity getBlockEntity(int x, int y, int z) { + throw new AbstractMethodError(); + } }