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

63 lines
2 KiB
Java
Raw Permalink Normal View History

2020-05-07 21:10:29 +02:00
package de.ellpeck.prettypipes.packets;
2024-03-07 16:00:49 +01:00
import de.ellpeck.prettypipes.PrettyPipes;
2020-05-07 21:10:29 +02:00
import de.ellpeck.prettypipes.Utility;
2021-12-02 14:44:26 +01:00
import de.ellpeck.prettypipes.terminal.ItemTerminalBlockEntity;
import net.minecraft.core.BlockPos;
import net.minecraft.network.FriendlyByteBuf;
2024-03-07 16:00:49 +01:00
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
import net.minecraft.resources.ResourceLocation;
2021-12-02 12:31:04 +01:00
import net.minecraft.world.item.ItemStack;
2024-03-07 16:00:49 +01:00
import net.neoforged.neoforge.network.handling.PlayPayloadContext;
2020-05-07 21:10:29 +02:00
2024-03-07 16:00:49 +01:00
public class PacketRequest implements CustomPacketPayload {
2020-05-07 21:10:29 +02:00
2024-03-07 16:00:49 +01:00
public static final ResourceLocation ID = new ResourceLocation(PrettyPipes.ID, "request");
2020-05-07 21:10:29 +02:00
2024-03-07 16:00:49 +01:00
private final BlockPos pos;
private final ItemStack stack;
private final int nbtHash;
private final int amount;
2020-05-07 21:10:29 +02:00
public PacketRequest(BlockPos pos, ItemStack stack, int amount) {
this.pos = pos;
this.stack = stack;
2024-03-07 16:00:49 +01:00
this.nbtHash = stack.hasTag() ? stack.getTag().hashCode() : 0;
2020-05-07 21:10:29 +02:00
this.amount = amount;
}
2024-03-07 16:00:49 +01:00
public PacketRequest(FriendlyByteBuf buf) {
this.pos = buf.readBlockPos();
this.stack = buf.readItem();
this.nbtHash = buf.readVarInt();
this.amount = buf.readVarInt();
2020-05-07 21:10:29 +02:00
}
2024-03-07 16:00:49 +01:00
@Override
public void write(FriendlyByteBuf buf) {
buf.writeBlockPos(this.pos);
buf.writeItem(this.stack);
buf.writeVarInt(this.nbtHash);
buf.writeVarInt(this.amount);
2020-05-07 21:10:29 +02:00
}
2024-03-07 16:00:49 +01:00
@Override
public ResourceLocation id() {
return PacketRequest.ID;
2020-05-07 21:10:29 +02:00
}
@SuppressWarnings("Convert2Lambda")
2024-03-07 16:00:49 +01:00
public static void onMessage(PacketRequest message, PlayPayloadContext ctx) {
ctx.workHandler().execute(new Runnable() {
2020-05-07 21:10:29 +02:00
@Override
public void run() {
2024-03-07 16:00:49 +01:00
var player = ctx.player().orElseThrow();
2023-07-07 19:54:52 +02:00
var tile = Utility.getBlockEntity(ItemTerminalBlockEntity.class, player.level(), message.pos);
2020-05-07 21:10:29 +02:00
message.stack.setCount(message.amount);
tile.requestItem(player, message.stack, message.nbtHash);
2020-05-07 21:10:29 +02:00
}
});
}
2024-03-07 16:00:49 +01:00
2020-05-07 21:10:29 +02:00
}