From 14a6803c884c3b5f6fa40f53401a9cd869c481d2 Mon Sep 17 00:00:00 2001 From: Aleksey Date: Sun, 28 Mar 2021 15:54:22 +0300 Subject: [PATCH] PedestalBlockEntity sync fix --- .../betterend/blocks/basis/PedestalBlock.java | 6 ++-- .../blocks/entities/PedestalBlockEntity.java | 31 ++++++++++--------- .../entities/render/PedestalItemRenderer.java | 3 +- .../client/ClientPlayNetworkHandlerMixin.java | 6 ++-- 4 files changed, 24 insertions(+), 22 deletions(-) diff --git a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java index 208b4991..a97f947f 100644 --- a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java @@ -283,10 +283,8 @@ public class PedestalBlock extends BlockBaseNotFull implements BlockEntityProvid public boolean isPlaceable(BlockState state) { if (!state.isOf(this)) return false; PedestalState currentState = state.get(STATE); - return currentState != PedestalState.BOTTOM && - currentState != PedestalState.COLUMN && - currentState != PedestalState.PILLAR && - currentState != PedestalState.COLUMN_TOP; + return currentState == PedestalState.DEFAULT || + currentState == PedestalState.PEDESTAL_TOP; } @Override diff --git a/src/main/java/ru/betterend/blocks/entities/PedestalBlockEntity.java b/src/main/java/ru/betterend/blocks/entities/PedestalBlockEntity.java index e772282d..d1ed681f 100644 --- a/src/main/java/ru/betterend/blocks/entities/PedestalBlockEntity.java +++ b/src/main/java/ru/betterend/blocks/entities/PedestalBlockEntity.java @@ -1,5 +1,6 @@ package ru.betterend.blocks.entities; +import net.fabricmc.fabric.api.block.entity.BlockEntityClientSerializable; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; import net.minecraft.block.entity.BlockEntityType; @@ -13,7 +14,7 @@ import ru.betterend.blocks.basis.PedestalBlock; import ru.betterend.registry.EndBlockEntities; import ru.betterend.registry.EndItems; -public class PedestalBlockEntity extends BlockEntity implements Inventory, Tickable { +public class PedestalBlockEntity extends BlockEntity implements Inventory, Tickable, BlockEntityClientSerializable { private ItemStack activeItem = ItemStack.EMPTY; private final int maxAge = 314; @@ -102,23 +103,10 @@ public class PedestalBlockEntity extends BlockEntity implements Inventory, Ticka return true; } - @Override - public BlockEntityUpdateS2CPacket toUpdatePacket() { - return new BlockEntityUpdateS2CPacket(pos, 32, toInitialChunkDataTag()); - } - - @Override - public CompoundTag toInitialChunkDataTag() { - return toTag(new CompoundTag()); - } - @Override public void fromTag(BlockState state, CompoundTag tag) { super.fromTag(state, tag); - if (tag.contains("active_item")) { - CompoundTag itemTag = tag.getCompound("active_item"); - activeItem = ItemStack.fromTag(itemTag); - } + fromClientTag(tag); } @Override @@ -137,4 +125,17 @@ public class PedestalBlockEntity extends BlockEntity implements Inventory, Ticka } } } + + @Override + public void fromClientTag(CompoundTag tag) { + if (tag.contains("active_item")) { + CompoundTag itemTag = tag.getCompound("active_item"); + activeItem = ItemStack.fromTag(itemTag); + } + } + + @Override + public CompoundTag toClientTag(CompoundTag tag) { + return toTag(tag); + } } diff --git a/src/main/java/ru/betterend/blocks/entities/render/PedestalItemRenderer.java b/src/main/java/ru/betterend/blocks/entities/render/PedestalItemRenderer.java index 5da44f25..5d390e4e 100644 --- a/src/main/java/ru/betterend/blocks/entities/render/PedestalItemRenderer.java +++ b/src/main/java/ru/betterend/blocks/entities/render/PedestalItemRenderer.java @@ -37,12 +37,13 @@ public class PedestalItemRenderer extends BlockEn VertexConsumerProvider vertexConsumers, int light, int overlay) { World world = blockEntity.getWorld(); - if (blockEntity.isEmpty() || world == null) return; + if (world == null || blockEntity.isEmpty()) return; BlockState state = world.getBlockState(blockEntity.getPos()); if (!(state.getBlock() instanceof PedestalBlock)) return; ItemStack activeItem = blockEntity.getStack(0); + matrices.push(); MinecraftClient minecraft = MinecraftClient.getInstance(); BakedModel model = minecraft.getItemRenderer().getHeldItemModel(activeItem, world, null); diff --git a/src/main/java/ru/betterend/mixin/client/ClientPlayNetworkHandlerMixin.java b/src/main/java/ru/betterend/mixin/client/ClientPlayNetworkHandlerMixin.java index 09f84c8a..187693d5 100644 --- a/src/main/java/ru/betterend/mixin/client/ClientPlayNetworkHandlerMixin.java +++ b/src/main/java/ru/betterend/mixin/client/ClientPlayNetworkHandlerMixin.java @@ -1,5 +1,7 @@ package ru.betterend.mixin.client; +import net.minecraft.network.packet.s2c.play.BlockEntityUpdateS2CPacket; +import net.minecraft.util.math.BlockPos; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -27,8 +29,8 @@ public class ClientPlayNetworkHandlerMixin @Inject(method = "onSignEditorOpen", at = @At(value = "HEAD"), cancellable = true) public void be_openSignEditor(SignEditorOpenS2CPacket packet, CallbackInfo info) { - NetworkThreadUtils.forceMainThread(packet, (ClientPlayNetworkHandler) (Object) this, (ThreadExecutor) client); - BlockEntity blockEntity = this.world.getBlockEntity(packet.getPos()); + NetworkThreadUtils.forceMainThread(packet, ClientPlayNetworkHandler.class.cast(this), client); + BlockEntity blockEntity = world.getBlockEntity(packet.getPos()); if (blockEntity instanceof ESignBlockEntity) { ESignBlockEntity sign = (ESignBlockEntity) blockEntity; client.openScreen(new BlockSignEditScreen(sign));