More wooden materials, gui, mixins, registries

This commit is contained in:
paulevsGitch 2020-09-26 16:36:48 +03:00
parent 6ec2b53edd
commit 720103bd45
97 changed files with 2414 additions and 14 deletions

View file

@ -0,0 +1,53 @@
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.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.fromTag(this.client.world.getBlockState(blockPos), packet.getCompoundTag());
info.cancel();
}
}
}