End signs remake

This commit is contained in:
paulevsGitch 2021-03-10 20:18:16 +03:00
parent ee6dd6f7a8
commit c8378435bd
6 changed files with 25 additions and 278 deletions

View file

@ -11,12 +11,9 @@ import net.minecraft.client.MinecraftClient;
import net.minecraft.client.network.ClientPlayNetworkHandler;
import net.minecraft.client.world.ClientWorld;
import net.minecraft.network.NetworkThreadUtils;
import net.minecraft.network.packet.s2c.play.BlockEntityUpdateS2CPacket;
import net.minecraft.network.packet.s2c.play.SignEditorOpenS2CPacket;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.thread.ThreadExecutor;
import ru.betterend.blocks.entities.ESignBlockEntity;
import ru.betterend.blocks.entities.PedestalBlockEntity;
import ru.betterend.client.gui.BlockSignEditScreen;
@Mixin(ClientPlayNetworkHandler.class)
@ -30,8 +27,7 @@ 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);
NetworkThreadUtils.forceMainThread(packet, (ClientPlayNetworkHandler) (Object) this, (ThreadExecutor<?>) client);
BlockEntity blockEntity = this.world.getBlockEntity(packet.getPos());
if (blockEntity instanceof ESignBlockEntity) {
ESignBlockEntity sign = (ESignBlockEntity) blockEntity;
@ -39,16 +35,4 @@ public class ClientPlayNetworkHandlerMixin
info.cancel();
}
}
@Inject(method = "onBlockEntityUpdate", at = @At(value = "HEAD"), cancellable = true)
public void be_onEntityUpdate(BlockEntityUpdateS2CPacket packet, CallbackInfo info) {
NetworkThreadUtils.forceMainThread(packet, (ClientPlayNetworkHandler) (Object) this,
(ThreadExecutor<?>) client);
BlockPos blockPos = packet.getPos();
BlockEntity blockEntity = this.client.world.getBlockEntity(blockPos);
if (blockEntity instanceof ESignBlockEntity || blockEntity instanceof PedestalBlockEntity) {
blockEntity.fromTag(this.client.world.getBlockState(blockPos), packet.getCompoundTag());
info.cancel();
}
}
}

View file

@ -1,60 +0,0 @@
package ru.betterend.mixin.common;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
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 net.minecraft.block.BlockState;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.network.NetworkThreadUtils;
import net.minecraft.network.packet.c2s.play.UpdateSignC2SPacket;
import net.minecraft.server.network.ServerPlayNetworkHandler;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.text.LiteralText;
import net.minecraft.util.Formatting;
import net.minecraft.util.math.BlockPos;
import ru.betterend.blocks.entities.ESignBlockEntity;
@Mixin(ServerPlayNetworkHandler.class)
public class ServerPlayNetworkHandlerMixin {
@Shadow
private static final Logger LOGGER = LogManager.getLogger();
@Shadow
public ServerPlayerEntity player;
@Inject(method = "onSignUpdate", at = @At(value = "HEAD"), cancellable = true)
private void be_signUpdate(UpdateSignC2SPacket packet, CallbackInfo info) {
NetworkThreadUtils.forceMainThread(packet, ServerPlayNetworkHandler.class.cast(this), player.getServerWorld());
this.player.updateLastActionTime();
ServerWorld serverWorld = this.player.getServerWorld();
BlockPos blockPos = packet.getPos();
if (serverWorld.isChunkLoaded(blockPos)) {
BlockState blockState = serverWorld.getBlockState(blockPos);
BlockEntity blockEntity = serverWorld.getBlockEntity(blockPos);
if (blockEntity instanceof ESignBlockEntity) {
ESignBlockEntity signBlockEntity = (ESignBlockEntity) blockEntity;
if (!signBlockEntity.isEditable() || signBlockEntity.getEditor() != this.player) {
LOGGER.warn("Player {} just tried to change non-editable sign", this.player.getName().getString());
return;
}
String[] strings = packet.getText();
for (int i = 0; i < strings.length; ++i) {
signBlockEntity.setTextOnRow(i, new LiteralText(Formatting.strip(strings[i])));
}
signBlockEntity.markDirty();
serverWorld.updateListeners(blockPos, blockState, blockState, 3);
info.cancel();
}
}
}
}