54 lines
No EOL
2.3 KiB
Java
54 lines
No EOL
2.3 KiB
Java
package ru.betterend.mixin.client;
|
|
|
|
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.entity.BlockEntity;
|
|
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)
|
|
public class ClientPlayNetworkHandlerMixin
|
|
{
|
|
@Shadow
|
|
private MinecraftClient client;
|
|
|
|
@Shadow
|
|
private ClientWorld world;
|
|
|
|
@Inject(method = "onSignEditorOpen", at = @At(value = "HEAD"), cancellable = true)
|
|
public void openSignEditor(SignEditorOpenS2CPacket packet, CallbackInfo info) {
|
|
NetworkThreadUtils.forceMainThread(packet, (ClientPlayNetworkHandler) (Object) this,
|
|
(ThreadExecutor<?>) client);
|
|
BlockEntity blockEntity = this.world.getBlockEntity(packet.getPos());
|
|
if (blockEntity instanceof ESignBlockEntity) {
|
|
ESignBlockEntity sign = (ESignBlockEntity) blockEntity;
|
|
client.openScreen(new BlockSignEditScreen(sign));
|
|
info.cancel();
|
|
}
|
|
}
|
|
|
|
@Inject(method = "onBlockEntityUpdate", at = @At(value = "HEAD"), cancellable = true)
|
|
public void 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();
|
|
}
|
|
}
|
|
} |