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.
This commit is contained in:
modmuss50 2022-03-02 02:01:59 +00:00
parent 27cc9d0730
commit 7c02024a2d
3 changed files with 24 additions and 10 deletions

View file

@ -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<ServerCommandSource> 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<ServerCommandSource> 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<ItemStack> stacks) {
if (FabricLoader.getInstance().getEnvironmentType() == EnvType.SERVER) {
System.out.println("Render item only works on the client!");
return;
private static void queueRender(List<ItemStack> stacks, CommandContext<ServerCommandSource> ctx) {
IdentifiedPacket packet = ClientBoundPackets.createPacketQueueItemStacksToRender(stacks);
try {
NetworkManager.sendToPlayer(packet, ctx.getSource().getPlayer());
} catch (CommandSyntaxException e) {
e.printStackTrace();
}
ItemStackRenderManager.RENDER_QUEUE.addAll(stacks);
}
}

View file

@ -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);
}
}

View file

@ -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<ItemStack> stacks) {
return NetworkManager.createClientBoundPacket(new Identifier("reborncore", "stacks_to_render"), Codec.list(ItemStack.CODEC), stacks);
}
}