PrettyPipes/src/main/java/de/ellpeck/prettypipes/packets/PacketNetworkItems.java

75 lines
2.6 KiB
Java
Raw Normal View History

2020-05-07 18:30:40 +02:00
package de.ellpeck.prettypipes.packets;
import de.ellpeck.prettypipes.terminal.containers.ItemTerminalGui;
import net.minecraft.client.Minecraft;
2021-12-02 14:44:26 +01:00
import net.minecraft.network.FriendlyByteBuf;
2021-12-02 12:31:04 +01:00
import net.minecraft.world.item.ItemStack;
2024-02-03 15:17:58 +01:00
import net.neoforged.neoforge.network.NetworkEvent;
2020-05-07 18:30:40 +02:00
import java.util.ArrayList;
import java.util.List;
import java.util.function.Supplier;
public class PacketNetworkItems {
private List<ItemStack> items;
private List<ItemStack> craftables;
private List<ItemStack> currentlyCrafting;
2020-05-07 18:30:40 +02:00
public PacketNetworkItems(List<ItemStack> items, List<ItemStack> craftables, List<ItemStack> currentlyCrafting) {
2020-05-07 18:30:40 +02:00
this.items = items;
this.craftables = craftables;
this.currentlyCrafting = currentlyCrafting;
2020-05-07 18:30:40 +02:00
}
private PacketNetworkItems() {
}
2021-12-02 14:44:26 +01:00
public static PacketNetworkItems fromBytes(FriendlyByteBuf buf) {
2021-12-02 17:46:56 +01:00
var client = new PacketNetworkItems();
2020-05-07 18:30:40 +02:00
client.items = new ArrayList<>();
2021-12-02 17:46:56 +01:00
for (var i = buf.readVarInt(); i > 0; i--) {
var stack = buf.readItem();
2020-05-07 18:30:40 +02:00
stack.setCount(buf.readVarInt());
client.items.add(stack);
}
client.craftables = new ArrayList<>();
2021-12-02 17:46:56 +01:00
for (var i = buf.readVarInt(); i > 0; i--)
2021-12-02 14:44:26 +01:00
client.craftables.add(buf.readItem());
client.currentlyCrafting = new ArrayList<>();
2021-12-02 17:46:56 +01:00
for (var i = buf.readVarInt(); i > 0; i--)
2021-12-02 14:44:26 +01:00
client.currentlyCrafting.add(buf.readItem());
2020-05-07 18:30:40 +02:00
return client;
}
2021-12-02 14:44:26 +01:00
public static void toBytes(PacketNetworkItems packet, FriendlyByteBuf buf) {
2020-05-07 18:30:40 +02:00
buf.writeVarInt(packet.items.size());
2021-12-02 17:46:56 +01:00
for (var stack : packet.items) {
var copy = stack.copy();
2020-05-07 21:10:29 +02:00
copy.setCount(1);
2021-12-02 14:44:26 +01:00
buf.writeItem(copy);
2020-05-07 18:30:40 +02:00
buf.writeVarInt(stack.getCount());
}
buf.writeVarInt(packet.craftables.size());
2021-12-02 17:46:56 +01:00
for (var stack : packet.craftables)
2021-12-02 14:44:26 +01:00
buf.writeItem(stack);
buf.writeVarInt(packet.currentlyCrafting.size());
2021-12-02 17:46:56 +01:00
for (var stack : packet.currentlyCrafting)
2021-12-02 14:44:26 +01:00
buf.writeItem(stack);
2020-05-07 18:30:40 +02:00
}
@SuppressWarnings("Convert2Lambda")
public static void onMessage(PacketNetworkItems message, Supplier<NetworkEvent.Context> ctx) {
ctx.get().enqueueWork(new Runnable() {
@Override
public void run() {
2021-12-02 17:46:56 +01:00
var mc = Minecraft.getInstance();
2021-12-02 14:44:26 +01:00
if (mc.screen instanceof ItemTerminalGui terminal)
terminal.updateItemList(message.items, message.craftables, message.currentlyCrafting);
2020-05-07 18:30:40 +02:00
}
});
ctx.get().setPacketHandled(true);
}
}