From 7c02024a2d6f68446e2718e242b5dd5d75caec4e Mon Sep 17 00:00:00 2001 From: modmuss50 Date: Wed, 2 Mar 2022 02:01:59 +0000 Subject: [PATCH] Fix item renderer command doing bad things. Now works on a server :) Final major thing I noticed when trying to split the client and server. --- .../reborncore/common/RebornCoreCommands.java | 23 +++++++++++-------- .../network/ClientBoundPacketHandlers.java | 5 ++++ .../common/network/ClientBoundPackets.java | 6 +++++ 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/RebornCore/src/main/java/reborncore/common/RebornCoreCommands.java b/RebornCore/src/main/java/reborncore/common/RebornCoreCommands.java index 45f91476f..ef59c50b8 100644 --- a/RebornCore/src/main/java/reborncore/common/RebornCoreCommands.java +++ b/RebornCore/src/main/java/reborncore/common/RebornCoreCommands.java @@ -31,7 +31,6 @@ import com.mojang.brigadier.arguments.StringArgumentType; import com.mojang.brigadier.context.CommandContext; import com.mojang.brigadier.exceptions.CommandSyntaxException; import com.mojang.brigadier.suggestion.SuggestionProvider; -import net.fabricmc.api.EnvType; import net.fabricmc.fabric.api.command.v1.CommandRegistrationCallback; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.command.CommandSource; @@ -47,7 +46,9 @@ import net.minecraft.server.world.ServerWorld; import net.minecraft.text.LiteralText; import net.minecraft.util.registry.Registry; import net.minecraft.world.chunk.ChunkStatus; -import reborncore.client.ItemStackRenderManager; +import reborncore.common.network.ClientBoundPackets; +import reborncore.common.network.IdentifiedPacket; +import reborncore.common.network.NetworkManager; import java.util.Collection; import java.util.Collections; @@ -162,20 +163,20 @@ public class RebornCoreCommands { .map(ItemStack::new) .collect(Collectors.toList()); - queueRender(list); + queueRender(list, ctx); return Command.SINGLE_SUCCESS; } private static int itemRenderer(CommandContext ctx) { Item item = ItemStackArgumentType.getItemStackArgument(ctx, "item").getItem(); - queueRender(Collections.singletonList(new ItemStack(item))); + queueRender(Collections.singletonList(new ItemStack(item)), ctx); return Command.SINGLE_SUCCESS; } private static int handRenderer(CommandContext ctx) { try { - queueRender(Collections.singletonList(ctx.getSource().getPlayer().getInventory().getMainHandStack())); + queueRender(Collections.singletonList(ctx.getSource().getPlayer().getInventory().getMainHandStack()), ctx); } catch (CommandSyntaxException e) { e.printStackTrace(); return 0; @@ -184,11 +185,13 @@ public class RebornCoreCommands { return Command.SINGLE_SUCCESS; } - private static void queueRender(List stacks) { - if (FabricLoader.getInstance().getEnvironmentType() == EnvType.SERVER) { - System.out.println("Render item only works on the client!"); - return; + private static void queueRender(List stacks, CommandContext ctx) { + IdentifiedPacket packet = ClientBoundPackets.createPacketQueueItemStacksToRender(stacks); + + try { + NetworkManager.sendToPlayer(packet, ctx.getSource().getPlayer()); + } catch (CommandSyntaxException e) { + e.printStackTrace(); } - ItemStackRenderManager.RENDER_QUEUE.addAll(stacks); } } \ No newline at end of file diff --git a/RebornCore/src/main/java/reborncore/common/network/ClientBoundPacketHandlers.java b/RebornCore/src/main/java/reborncore/common/network/ClientBoundPacketHandlers.java index 92407c3ce..215229e38 100644 --- a/RebornCore/src/main/java/reborncore/common/network/ClientBoundPacketHandlers.java +++ b/RebornCore/src/main/java/reborncore/common/network/ClientBoundPacketHandlers.java @@ -24,6 +24,7 @@ package reborncore.common.network; +import com.mojang.serialization.Codec; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import net.fabricmc.api.EnvType; @@ -33,6 +34,7 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.hud.ChatHud; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.HandledScreen; +import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; import net.minecraft.screen.ScreenHandler; import net.minecraft.text.Text; @@ -43,6 +45,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import reborncore.RebornCore; import reborncore.client.ClientChunkManager; +import reborncore.client.ItemStackRenderManager; import reborncore.common.blockentity.FluidConfiguration; import reborncore.common.blockentity.MachineBaseBlockEntity; import reborncore.common.blockentity.SlotConfiguration; @@ -151,6 +154,8 @@ public class ClientBoundPacketHandlers { accessorChatHud.invokeAddMessage(text, deleteID); }); }); + + NetworkManager.registerClientBoundHandler(new Identifier("reborncore", "stacks_to_render"), Codec.list(ItemStack.CODEC), ItemStackRenderManager.RENDER_QUEUE::addAll); } } diff --git a/RebornCore/src/main/java/reborncore/common/network/ClientBoundPackets.java b/RebornCore/src/main/java/reborncore/common/network/ClientBoundPackets.java index 23c7a7705..83b2c5cbf 100644 --- a/RebornCore/src/main/java/reborncore/common/network/ClientBoundPackets.java +++ b/RebornCore/src/main/java/reborncore/common/network/ClientBoundPackets.java @@ -24,8 +24,10 @@ package reborncore.common.network; +import com.mojang.serialization.Codec; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.block.entity.BlockEntity; +import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; import net.minecraft.screen.ScreenHandler; import net.minecraft.text.Text; @@ -86,4 +88,8 @@ public class ClientBoundPackets { packetBuffer.writeText(text); }); } + + public static IdentifiedPacket createPacketQueueItemStacksToRender(List stacks) { + return NetworkManager.createClientBoundPacket(new Identifier("reborncore", "stacks_to_render"), Codec.list(ItemStack.CODEC), stacks); + } }