diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/BlockMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/BlockMixin.java new file mode 100644 index 000000000..560092078 --- /dev/null +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/BlockMixin.java @@ -0,0 +1,36 @@ +package com.dfsek.terra.fabric.mixin.implementations.block; + +import com.dfsek.terra.api.platform.block.BlockData; +import com.dfsek.terra.api.platform.block.BlockType; +import com.dfsek.terra.fabric.world.FabricAdapter; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import org.spongepowered.asm.mixin.Implements; +import org.spongepowered.asm.mixin.Interface; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +@Mixin(Block.class) +@Implements(@Interface(iface = BlockType.class, prefix = "terra$")) +public abstract class BlockMixin { + @Shadow + private BlockState defaultState; + + public Object terra$getHandle() { + return this; + } + + public BlockData terra$getDefaultData() { + return FabricAdapter.adapt(defaultState); + } + + public boolean terra$isSolid() { + return defaultState.isOpaque(); + } + + @SuppressWarnings("ConstantConditions") + public boolean terra$isWater() { + return ((Object) this) == Blocks.WATER; + } +} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/FabricAdapter.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/FabricAdapter.java index 60d1138a3..f7258132c 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/FabricAdapter.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/FabricAdapter.java @@ -2,12 +2,10 @@ package com.dfsek.terra.fabric.world; import com.dfsek.terra.api.math.vector.Vector3; import com.dfsek.terra.api.platform.block.BlockFace; -import com.dfsek.terra.api.platform.block.BlockType; import com.dfsek.terra.api.platform.block.state.Container; import com.dfsek.terra.api.platform.block.state.MobSpawner; import com.dfsek.terra.api.platform.block.state.Sign; import com.dfsek.terra.fabric.world.block.FabricBlockData; -import com.dfsek.terra.fabric.world.block.FabricBlockType; import com.dfsek.terra.fabric.world.block.data.FabricDirectional; import com.dfsek.terra.fabric.world.block.data.FabricMultipleFacing; import com.dfsek.terra.fabric.world.block.data.FabricOrientable; @@ -15,7 +13,6 @@ import com.dfsek.terra.fabric.world.block.data.FabricRotatable; import com.dfsek.terra.fabric.world.block.data.FabricSlab; import com.dfsek.terra.fabric.world.block.data.FabricStairs; import com.dfsek.terra.fabric.world.block.data.FabricWaterlogged; -import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; import net.minecraft.block.entity.LootableContainerBlockEntity; @@ -76,9 +73,6 @@ public final class FabricAdapter { } } - public static BlockType adapt(Block block) { - return new FabricBlockType(block); - } public static com.dfsek.terra.api.platform.block.state.BlockState adapt(com.dfsek.terra.api.platform.block.Block block) { WorldAccess worldAccess = (WorldAccess) block.getLocation().getWorld(); diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/block/FabricBlockData.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/block/FabricBlockData.java index 2467e992a..aaa1b231d 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/block/FabricBlockData.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/block/FabricBlockData.java @@ -19,7 +19,7 @@ public class FabricBlockData implements BlockData { @Override public BlockType getBlockType() { - return FabricAdapter.adapt(delegate.getBlock()); + return (BlockType) delegate.getBlock(); } @Override diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/block/FabricBlockType.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/block/FabricBlockType.java deleted file mode 100644 index 26427bb2f..000000000 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/block/FabricBlockType.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.dfsek.terra.fabric.world.block; - -import com.dfsek.terra.api.platform.block.BlockData; -import com.dfsek.terra.api.platform.block.BlockType; -import com.dfsek.terra.fabric.world.FabricAdapter; -import net.minecraft.block.Block; -import net.minecraft.block.Blocks; - -public class FabricBlockType implements BlockType { - private final Block delegate; - - public FabricBlockType(Block delegate) { - this.delegate = delegate; - } - - @Override - public Block getHandle() { - return delegate; - } - - @Override - public BlockData getDefaultData() { - return FabricAdapter.adapt(delegate.getDefaultState()); - } - - @Override - public boolean isSolid() { - return delegate.getDefaultState().isOpaque(); - } - - @Override - public boolean isWater() { - return delegate == Blocks.WATER; - } - - @Override - public int hashCode() { - return delegate.hashCode(); - } - - @Override - public boolean equals(Object obj) { - if(!(obj instanceof FabricBlockType)) return false; - return ((FabricBlockType) obj).delegate == delegate; - } -} diff --git a/platforms/fabric/src/main/resources/terra.mixins.json b/platforms/fabric/src/main/resources/terra.mixins.json index 59bac2ea4..4aba80fd7 100644 --- a/platforms/fabric/src/main/resources/terra.mixins.json +++ b/platforms/fabric/src/main/resources/terra.mixins.json @@ -8,6 +8,7 @@ "implementations.BiomeMixin", "implementations.ChunkGeneratorMixin", "implementations.block.BlockEntityMixin", + "implementations.block.BlockMixin", "implementations.block.state.LootableContainerBlockEntityMixin", "implementations.block.state.MobSpawnerBlockEntityMixin", "implementations.block.state.SignBlockEntityMixin",