From de41b92d5d921365e5d622362cc4a03b8188f72d Mon Sep 17 00:00:00 2001 From: dfsek Date: Mon, 3 May 2021 10:27:40 -0700 Subject: [PATCH] add SignBlockEntityMixin --- .../block/state/SignBlockEntityMixin.java | 46 +++++++++++++++++++ .../world/block/state/FabricBlockState.java | 3 +- .../fabric/world/block/state/FabricSign.java | 44 ------------------ .../src/main/resources/terra.mixins.json | 17 +++---- 4 files changed, 57 insertions(+), 53 deletions(-) create mode 100644 platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/state/SignBlockEntityMixin.java delete mode 100644 platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/block/state/FabricSign.java diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/state/SignBlockEntityMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/state/SignBlockEntityMixin.java new file mode 100644 index 000000000..086ebe19d --- /dev/null +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/state/SignBlockEntityMixin.java @@ -0,0 +1,46 @@ +package com.dfsek.terra.fabric.mixin.implementations.block.state; + +import com.dfsek.terra.api.platform.block.state.SerialState; +import com.dfsek.terra.api.platform.block.state.Sign; +import net.minecraft.block.entity.SignBlockEntity; +import net.minecraft.text.LiteralText; +import net.minecraft.text.Text; +import org.jetbrains.annotations.NotNull; +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(SignBlockEntity.class) +@Implements(@Interface(iface = Sign.class, prefix = "terra$")) +public abstract class SignBlockEntityMixin { + @Shadow + public abstract void setTextOnRow(int row, Text text); + + @Shadow + public abstract Text getTextOnRow(int row); + + public @NotNull String[] terra$getLines() { + return new String[] { + getTextOnRow(0).asString(), + getTextOnRow(1).asString(), + getTextOnRow(2).asString(), + getTextOnRow(3).asString() + }; + } + + public @NotNull String terra$getLine(int index) throws IndexOutOfBoundsException { + return getTextOnRow(index).asString(); + } + + public void terra$setLine(int index, @NotNull String line) throws IndexOutOfBoundsException { + setTextOnRow(index, new LiteralText(line)); + } + + public void terra$applyState(String state) { + SerialState.parse(state).forEach((k, v) -> { + if(!k.startsWith("text")) throw new IllegalArgumentException("Invalid property: " + k); + terra$setLine(Integer.parseInt(k.substring(4)), v); + }); + } +} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/block/state/FabricBlockState.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/block/state/FabricBlockState.java index 0814e602e..c82342fc0 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/block/state/FabricBlockState.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/block/state/FabricBlockState.java @@ -4,6 +4,7 @@ import com.dfsek.terra.api.platform.block.Block; import com.dfsek.terra.api.platform.block.BlockData; import com.dfsek.terra.api.platform.block.state.BlockState; import com.dfsek.terra.api.platform.block.state.Container; +import com.dfsek.terra.api.platform.block.state.Sign; import com.dfsek.terra.fabric.world.FabricAdapter; import com.dfsek.terra.fabric.world.block.FabricBlock; import net.minecraft.block.entity.BlockEntity; @@ -26,7 +27,7 @@ public class FabricBlockState implements BlockState { BlockEntity entity = worldAccess.getBlockEntity(FabricAdapter.adapt(block.getLocation().toVector())); if(entity instanceof SignBlockEntity) { - return new FabricSign((SignBlockEntity) entity, worldAccess); + return (Sign) entity; } else if(entity instanceof MobSpawnerBlockEntity) { return new FabricMobSpawner((MobSpawnerBlockEntity) entity, worldAccess); } else if(entity instanceof LootableContainerBlockEntity) { diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/block/state/FabricSign.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/block/state/FabricSign.java deleted file mode 100644 index 382e05387..000000000 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/block/state/FabricSign.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.dfsek.terra.fabric.world.block.state; - -import com.dfsek.terra.api.platform.block.state.SerialState; -import com.dfsek.terra.api.platform.block.state.Sign; -import net.minecraft.block.entity.SignBlockEntity; -import net.minecraft.text.LiteralText; -import net.minecraft.world.WorldAccess; -import org.jetbrains.annotations.NotNull; - -public class FabricSign extends FabricBlockState implements Sign { - public FabricSign(SignBlockEntity blockEntity, WorldAccess worldAccess) { - super(blockEntity, worldAccess); - } - - @Override - public @NotNull String[] getLines() { - SignBlockEntity sign = (SignBlockEntity) blockEntity; - - return new String[] { - sign.getTextOnRow(0).asString(), - sign.getTextOnRow(1).asString(), - sign.getTextOnRow(2).asString(), - sign.getTextOnRow(3).asString() - }; - } - - @Override - public @NotNull String getLine(int index) throws IndexOutOfBoundsException { - return ((SignBlockEntity) blockEntity).getTextOnRow(index).asString(); - } - - @Override - public void setLine(int index, @NotNull String line) throws IndexOutOfBoundsException { - ((SignBlockEntity) blockEntity).setTextOnRow(index, new LiteralText(line)); - } - - @Override - public void applyState(String state) { - SerialState.parse(state).forEach((k, v) -> { - if(!k.startsWith("text")) throw new IllegalArgumentException("Invalid property: " + k); - setLine(Integer.parseInt(k.substring(4)), v); - }); - } -} diff --git a/platforms/fabric/src/main/resources/terra.mixins.json b/platforms/fabric/src/main/resources/terra.mixins.json index d7e32e3a9..6f6743ddc 100644 --- a/platforms/fabric/src/main/resources/terra.mixins.json +++ b/platforms/fabric/src/main/resources/terra.mixins.json @@ -5,24 +5,25 @@ "compatibilityLevel": "JAVA_8", "mixins": [ "GeneratorOptionsMixin", + "implementations.BiomeMixin", + "implementations.ChunkGeneratorMixin", "implementations.block.BlockEntityMixin", "implementations.block.state.LootableContainerBlockEntityMixin", + "implementations.block.state.SignBlockEntityMixin", + "implementations.chunk.ChunkRegionMixin", + "implementations.chunk.WorldChunkMixin", + "implementations.chunk.data.ProtoChunkMixin", "implementations.entity.EntityMixin", "implementations.entity.EntityTypeMixin", "implementations.entity.PlayerEntityMixin", "implementations.entity.ServerCommandSourceMixin", - "implementations.inventory.meta.EnchantmentMixin", "implementations.inventory.item.ItemMixin", + "implementations.inventory.item.ItemStackMixin", + "implementations.inventory.meta.EnchantmentMixin", "implementations.inventory.meta.ItemStackDamageableMixin", "implementations.inventory.meta.ItemStackMetaMixin", - "implementations.inventory.item.ItemStackMixin", - "implementations.BiomeMixin", - "implementations.ChunkGeneratorMixin", - "implementations.chunk.ChunkRegionMixin", "implementations.world.ChunkRegionMixin", - "implementations.chunk.data.ProtoChunkMixin", - "implementations.world.ServerWorldMixin", - "implementations.chunk.WorldChunkMixin" + "implementations.world.ServerWorldMixin" ], "client": [ "GeneratorTypeAccessor"