diff --git a/src/main/java/de/ellpeck/prettypipes/PrettyPipes.java b/src/main/java/de/ellpeck/prettypipes/PrettyPipes.java index 9c00d6f..5a62572 100644 --- a/src/main/java/de/ellpeck/prettypipes/PrettyPipes.java +++ b/src/main/java/de/ellpeck/prettypipes/PrettyPipes.java @@ -1,18 +1,18 @@ package de.ellpeck.prettypipes; import net.neoforged.api.distmarker.Dist; -import net.neoforged.fml.DistExecutor; +import net.neoforged.bus.api.IEventBus; import net.neoforged.fml.common.Mod; -import net.neoforged.fml.javafmlmod.FMLJavaModLoadingContext; +import net.neoforged.fml.loading.FMLEnvironment; @Mod(PrettyPipes.ID) public final class PrettyPipes { public static final String ID = "prettypipes"; - public PrettyPipes() { - var bus = FMLJavaModLoadingContext.get().getModEventBus(); - bus.addListener(Registry::setup); - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> bus.addListener(Registry.Client::setup)); + public PrettyPipes(IEventBus eventBus) { + if (FMLEnvironment.dist == Dist.CLIENT) + eventBus.addListener(Registry.Client::setup); } + } diff --git a/src/main/java/de/ellpeck/prettypipes/Registry.java b/src/main/java/de/ellpeck/prettypipes/Registry.java index cacff42..1317526 100644 --- a/src/main/java/de/ellpeck/prettypipes/Registry.java +++ b/src/main/java/de/ellpeck/prettypipes/Registry.java @@ -5,8 +5,6 @@ import de.ellpeck.prettypipes.entities.PipeFrameRenderer; import de.ellpeck.prettypipes.items.*; import de.ellpeck.prettypipes.misc.ItemEquality; import de.ellpeck.prettypipes.misc.ModuleClearingRecipe; -import de.ellpeck.prettypipes.network.PipeNetwork; -import de.ellpeck.prettypipes.packets.PacketHandler; import de.ellpeck.prettypipes.pipe.IPipeConnectable; import de.ellpeck.prettypipes.pipe.PipeBlock; import de.ellpeck.prettypipes.pipe.PipeBlockEntity; @@ -65,12 +63,11 @@ import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntityType; -import net.neoforged.neoforge.capabilities.BlockCapability; -import net.neoforged.neoforge.common.extensions.IMenuTypeExtension; import net.neoforged.bus.api.SubscribeEvent; import net.neoforged.fml.common.Mod; import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; -import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent; +import net.neoforged.neoforge.capabilities.BlockCapability; +import net.neoforged.neoforge.common.extensions.IMenuTypeExtension; import net.neoforged.neoforge.registries.RegisterEvent; import java.util.Comparator; @@ -210,10 +207,6 @@ public final class Registry { helper.register(new ResourceLocation(PrettyPipes.ID, tier.name().toLowerCase(Locale.ROOT) + "_" + name), item.apply(name, tier)); } - public static void setup(FMLCommonSetupEvent event) { - PacketHandler.setup(); - } - public static final class Client { public static void setup(FMLClientSetupEvent event) { diff --git a/src/main/java/de/ellpeck/prettypipes/compat/jei/CraftingModuleTransferHandler.java b/src/main/java/de/ellpeck/prettypipes/compat/jei/CraftingModuleTransferHandler.java index 5d13325..aba67b1 100644 --- a/src/main/java/de/ellpeck/prettypipes/compat/jei/CraftingModuleTransferHandler.java +++ b/src/main/java/de/ellpeck/prettypipes/compat/jei/CraftingModuleTransferHandler.java @@ -3,7 +3,6 @@ package de.ellpeck.prettypipes.compat.jei; import de.ellpeck.prettypipes.Registry; import de.ellpeck.prettypipes.misc.ItemEquality; import de.ellpeck.prettypipes.packets.PacketCraftingModuleTransfer; -import de.ellpeck.prettypipes.packets.PacketHandler; import de.ellpeck.prettypipes.pipe.modules.craft.CraftingModuleContainer; import mezz.jei.api.constants.RecipeTypes; import mezz.jei.api.constants.VanillaTypes; @@ -17,6 +16,7 @@ import net.minecraft.world.inventory.MenuType; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.CraftingRecipe; import net.minecraft.world.item.crafting.RecipeHolder; +import net.neoforged.neoforge.network.PacketDistributor; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; @@ -63,7 +63,7 @@ public class CraftingModuleTransferHandler implements IRecipeTransferHandler ctx) { - ctx.get().enqueueWork(new Runnable() { - @Override - public void run() { - Player player = ctx.get().getSender(); - message.result.action.accept(message.pos, message.data, player); - } + public static void onMessage(PacketButton message, PlayPayloadContext ctx) { + ctx.workHandler().execute(() -> { + var player = ctx.player().orElseThrow(); + message.result.action.accept(message.pos, message.data, player); }); - ctx.get().setPacketHandled(true); } public static void sendAndExecute(BlockPos pos, ButtonResult result, int... data) { - PacketHandler.sendToServer(new PacketButton(pos, result, data)); + PacketDistributor.SERVER.noArg().send(new PacketButton(pos, result, data)); result.action.accept(pos, data, Minecraft.getInstance().player); } @@ -77,10 +77,10 @@ public class PacketButton { PIPE_TAB((pos, data, player) -> { var tile = Utility.getBlockEntity(PipeBlockEntity.class, player.level(), pos); if (data[0] < 0) { - NetworkHooks.openScreen((ServerPlayer) player, tile, pos); + player.openMenu(tile, pos); } else { var stack = tile.modules.getStackInSlot(data[0]); - NetworkHooks.openScreen((ServerPlayer) player, new MenuProvider() { + player.openMenu(new MenuProvider() { @Override public Component getDisplayName() { return stack.getHoverName(); @@ -133,4 +133,5 @@ public class PacketButton { this.action = action; } } + } diff --git a/src/main/java/de/ellpeck/prettypipes/packets/PacketCraftingModuleTransfer.java b/src/main/java/de/ellpeck/prettypipes/packets/PacketCraftingModuleTransfer.java index 9520dc2..3d5c8be 100644 --- a/src/main/java/de/ellpeck/prettypipes/packets/PacketCraftingModuleTransfer.java +++ b/src/main/java/de/ellpeck/prettypipes/packets/PacketCraftingModuleTransfer.java @@ -1,66 +1,64 @@ package de.ellpeck.prettypipes.packets; +import de.ellpeck.prettypipes.PrettyPipes; import de.ellpeck.prettypipes.pipe.modules.craft.CraftingModuleContainer; import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.world.entity.player.Player; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; import net.neoforged.neoforge.items.ItemHandlerHelper; import net.neoforged.neoforge.items.ItemStackHandler; -import net.neoforged.neoforge.network.NetworkEvent; +import net.neoforged.neoforge.network.handling.PlayPayloadContext; import java.util.ArrayList; import java.util.List; -import java.util.function.Supplier; -public class PacketCraftingModuleTransfer { +public class PacketCraftingModuleTransfer implements CustomPacketPayload { - private List inputs; - private List outputs; + public static final ResourceLocation ID = new ResourceLocation(PrettyPipes.ID, "crafting_module_transfer"); + + private final List inputs; + private final List outputs; public PacketCraftingModuleTransfer(List inputs, List outputs) { this.inputs = inputs; this.outputs = outputs; } - private PacketCraftingModuleTransfer() { - + public PacketCraftingModuleTransfer(FriendlyByteBuf buf) { + this.inputs = new ArrayList<>(); + for (var i = buf.readInt(); i > 0; i--) + this.inputs.add(buf.readItem()); + this.outputs = new ArrayList<>(); + for (var i = buf.readInt(); i > 0; i--) + this.outputs.add(buf.readItem()); } - public static PacketCraftingModuleTransfer fromBytes(FriendlyByteBuf buf) { - var packet = new PacketCraftingModuleTransfer(); - packet.inputs = new ArrayList<>(); - for (var i = buf.readInt(); i > 0; i--) - packet.inputs.add(buf.readItem()); - packet.outputs = new ArrayList<>(); - for (var i = buf.readInt(); i > 0; i--) - packet.outputs.add(buf.readItem()); - return packet; - } - - public static void toBytes(PacketCraftingModuleTransfer packet, FriendlyByteBuf buf) { - buf.writeInt(packet.inputs.size()); - for (var stack : packet.inputs) + @Override + public void write(FriendlyByteBuf buf) { + buf.writeInt(this.inputs.size()); + for (var stack : this.inputs) buf.writeItem(stack); - buf.writeInt(packet.outputs.size()); - for (var stack : packet.outputs) + buf.writeInt(this.outputs.size()); + for (var stack : this.outputs) buf.writeItem(stack); } - @SuppressWarnings("Convert2Lambda") - public static void onMessage(PacketCraftingModuleTransfer message, Supplier ctx) { - ctx.get().enqueueWork(new Runnable() { - @Override - public void run() { - Player player = ctx.get().getSender(); - if (player.containerMenu instanceof CraftingModuleContainer container) { - PacketCraftingModuleTransfer.copy(container.input, message.inputs); - PacketCraftingModuleTransfer.copy(container.output, message.outputs); - container.modified = true; - container.broadcastChanges(); - } + @Override + public ResourceLocation id() { + return PacketCraftingModuleTransfer.ID; + } + + public static void onMessage(PacketCraftingModuleTransfer message, PlayPayloadContext ctx) { + ctx.workHandler().execute(() -> { + var player = ctx.player().orElseThrow(); + if (player.containerMenu instanceof CraftingModuleContainer container) { + PacketCraftingModuleTransfer.copy(container.input, message.inputs); + PacketCraftingModuleTransfer.copy(container.output, message.outputs); + container.modified = true; + container.broadcastChanges(); } }); - ctx.get().setPacketHandled(true); } private static void copy(ItemStackHandler container, List contents) { @@ -69,4 +67,5 @@ public class PacketCraftingModuleTransfer { for (var stack : contents) ItemHandlerHelper.insertItem(container, stack, false); } + } diff --git a/src/main/java/de/ellpeck/prettypipes/packets/PacketGhostSlot.java b/src/main/java/de/ellpeck/prettypipes/packets/PacketGhostSlot.java index 1dc23d4..2919298 100644 --- a/src/main/java/de/ellpeck/prettypipes/packets/PacketGhostSlot.java +++ b/src/main/java/de/ellpeck/prettypipes/packets/PacketGhostSlot.java @@ -2,86 +2,62 @@ package de.ellpeck.prettypipes.packets; import com.google.common.collect.Streams; import com.mojang.datafixers.util.Pair; +import de.ellpeck.prettypipes.PrettyPipes; import de.ellpeck.prettypipes.Utility; import de.ellpeck.prettypipes.terminal.CraftingTerminalBlockEntity; -import net.minecraft.client.Minecraft; import net.minecraft.core.BlockPos; import net.minecraft.core.registries.Registries; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.TagKey; -import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; -import net.neoforged.neoforge.network.NetworkEvent; +import net.neoforged.neoforge.network.handling.PlayPayloadContext; import java.util.ArrayList; import java.util.List; -import java.util.function.Consumer; -import java.util.function.Supplier; import java.util.stream.Collectors; -public class PacketGhostSlot { +public class PacketGhostSlot implements CustomPacketPayload { - private BlockPos pos; - private List stacks; + public static final ResourceLocation ID = new ResourceLocation(PrettyPipes.ID, "ghost_slot"); + + private final BlockPos pos; + private final List stacks; public PacketGhostSlot(BlockPos pos, List stacks) { this.pos = pos; this.stacks = stacks; } - private PacketGhostSlot() { - - } - - public static PacketGhostSlot fromBytes(FriendlyByteBuf buf) { - var packet = new PacketGhostSlot(); - packet.pos = buf.readBlockPos(); - packet.stacks = new ArrayList<>(); + public PacketGhostSlot(FriendlyByteBuf buf) { + this.pos = buf.readBlockPos(); + this.stacks = new ArrayList<>(); for (var i = buf.readInt(); i > 0; i--) - packet.stacks.add(new Entry(buf)); - return packet; + this.stacks.add(new Entry(buf)); } - public static void toBytes(PacketGhostSlot packet, FriendlyByteBuf buf) { - buf.writeBlockPos(packet.pos); - buf.writeInt(packet.stacks.size()); - for (var entry : packet.stacks) + @Override + public void write(FriendlyByteBuf buf) { + buf.writeBlockPos(this.pos); + buf.writeInt(this.stacks.size()); + for (var entry : this.stacks) entry.write(buf); } - @SuppressWarnings("Convert2Lambda") - public static void onMessage(PacketGhostSlot message, Supplier ctx) { - var doIt = (Consumer) p -> { - var tile = Utility.getBlockEntity(CraftingTerminalBlockEntity.class, p.level(), message.pos); - if (tile != null) - tile.setGhostItems(message.stacks); - }; + @Override + public ResourceLocation id() { + return PacketGhostSlot.ID; + } - // this whole thing is a dirty hack for allowing the same packet to be used - // both client -> server and server -> client without any classloading issues - Player player = ctx.get().getSender(); - // are we on the client? - if (player == null) { - ctx.get().enqueueWork(new Runnable() { - @Override - public void run() { - doIt.accept(Minecraft.getInstance().player); - } - }); - } else { - ctx.get().enqueueWork(new Runnable() { - @Override - public void run() { - doIt.accept(player); - } - }); - } - - ctx.get().setPacketHandled(true); + public static void onMessage(PacketGhostSlot message, PlayPayloadContext ctx) { + var player = ctx.player().orElseThrow(); + var tile = Utility.getBlockEntity(CraftingTerminalBlockEntity.class, player.level(), message.pos); + if (tile != null) + tile.setGhostItems(message.stacks); } public static class Entry { @@ -115,12 +91,12 @@ public class PacketGhostSlot { public List getStacks(Level level) { if (this.stacks != null) return this.stacks; - return Streams.stream(level.registryAccess().registry(Registries.ITEM).get().getTagOrEmpty(this.tag).iterator()) + return Streams.stream(level.registryAccess().registry(Registries.ITEM).orElseThrow().getTagOrEmpty(this.tag).iterator()) .filter(h -> h.value() != null & h.value() != Items.AIR) .map(h -> new ItemStack(h.value())).collect(Collectors.toList()); } - public FriendlyByteBuf write(FriendlyByteBuf buf) { + public void write(FriendlyByteBuf buf) { if (this.stacks != null) { buf.writeBoolean(true); buf.writeInt(this.stacks.size()); @@ -130,11 +106,10 @@ public class PacketGhostSlot { buf.writeBoolean(false); buf.writeUtf(this.tag.location().toString()); } - return buf; } private static TagKey getTagForStacks(Level level, List stacks) { - return level.registryAccess().registry(Registries.ITEM).get().getTags().filter(e -> { + return level.registryAccess().registry(Registries.ITEM).orElseThrow().getTags().filter(e -> { var tag = e.getSecond(); if (tag.size() != stacks.size()) return false; @@ -145,5 +120,7 @@ public class PacketGhostSlot { return true; }).map(Pair::getFirst).findFirst().orElse(null); } + } + } diff --git a/src/main/java/de/ellpeck/prettypipes/packets/PacketHandler.java b/src/main/java/de/ellpeck/prettypipes/packets/PacketHandler.java deleted file mode 100644 index 315226a..0000000 --- a/src/main/java/de/ellpeck/prettypipes/packets/PacketHandler.java +++ /dev/null @@ -1,39 +0,0 @@ -package de.ellpeck.prettypipes.packets; - -import de.ellpeck.prettypipes.PrettyPipes; -import net.minecraft.core.BlockPos; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.Level; -import net.neoforged.neoforge.network.PacketDistributor; -import net.neoforged.neoforge.network.simple.SimpleChannel; -import net.neoforged.neoforge.network.NetworkRegistry; - -public final class PacketHandler { - - private static final String VERSION = "1"; - private static SimpleChannel network; - - public static void setup() { - PacketHandler.network = NetworkRegistry.newSimpleChannel(new ResourceLocation(PrettyPipes.ID, "network"), () -> PacketHandler.VERSION, PacketHandler.VERSION::equals, PacketHandler.VERSION::equals); - PacketHandler.network.registerMessage(0, PacketItemEnterPipe.class, PacketItemEnterPipe::toBytes, PacketItemEnterPipe::fromBytes, PacketItemEnterPipe::onMessage); - PacketHandler.network.registerMessage(1, PacketButton.class, PacketButton::toBytes, PacketButton::fromBytes, PacketButton::onMessage); - PacketHandler.network.registerMessage(2, PacketNetworkItems.class, PacketNetworkItems::toBytes, PacketNetworkItems::fromBytes, PacketNetworkItems::onMessage); - PacketHandler.network.registerMessage(3, PacketRequest.class, PacketRequest::toBytes, PacketRequest::fromBytes, PacketRequest::onMessage); - PacketHandler.network.registerMessage(4, PacketGhostSlot.class, PacketGhostSlot::toBytes, PacketGhostSlot::fromBytes, PacketGhostSlot::onMessage); - PacketHandler.network.registerMessage(5, PacketCraftingModuleTransfer.class, PacketCraftingModuleTransfer::toBytes, PacketCraftingModuleTransfer::fromBytes, PacketCraftingModuleTransfer::onMessage); - } - - public static void sendToAllLoaded(Level world, BlockPos pos, Object message) { - PacketHandler.network.send(PacketDistributor.TRACKING_CHUNK.with(() -> world.getChunkAt(pos)), message); - } - - public static void sendTo(Player player, Object message) { - PacketHandler.network.send(PacketDistributor.PLAYER.with(() -> (ServerPlayer) player), message); - } - - public static void sendToServer(Object message) { - PacketHandler.network.send(PacketDistributor.SERVER.noArg(), message); - } -} diff --git a/src/main/java/de/ellpeck/prettypipes/packets/PacketItemEnterPipe.java b/src/main/java/de/ellpeck/prettypipes/packets/PacketItemEnterPipe.java index 43b222e..146799f 100644 --- a/src/main/java/de/ellpeck/prettypipes/packets/PacketItemEnterPipe.java +++ b/src/main/java/de/ellpeck/prettypipes/packets/PacketItemEnterPipe.java @@ -1,5 +1,6 @@ package de.ellpeck.prettypipes.packets; +import de.ellpeck.prettypipes.PrettyPipes; import de.ellpeck.prettypipes.Utility; import de.ellpeck.prettypipes.pipe.IPipeItem; import de.ellpeck.prettypipes.pipe.PipeBlockEntity; @@ -7,50 +8,48 @@ import net.minecraft.client.Minecraft; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.FriendlyByteBuf; -import net.neoforged.neoforge.network.NetworkEvent; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; +import net.neoforged.neoforge.network.handling.PlayPayloadContext; -import java.util.function.Supplier; +public class PacketItemEnterPipe implements CustomPacketPayload { -public class PacketItemEnterPipe { + public static final ResourceLocation ID = new ResourceLocation(PrettyPipes.ID, "item_enter_pipe"); - private BlockPos tilePos; - private CompoundTag item; + private final BlockPos tilePos; + private final CompoundTag item; public PacketItemEnterPipe(BlockPos tilePos, IPipeItem item) { this.tilePos = tilePos; this.item = item.serializeNBT(); } - private PacketItemEnterPipe() { - + public PacketItemEnterPipe(FriendlyByteBuf buf) { + this.tilePos = buf.readBlockPos(); + this.item = buf.readNbt(); } - public static PacketItemEnterPipe fromBytes(FriendlyByteBuf buf) { - var client = new PacketItemEnterPipe(); - client.tilePos = buf.readBlockPos(); - client.item = buf.readNbt(); - return client; + @Override + public void write(FriendlyByteBuf buf) { + buf.writeBlockPos(this.tilePos); + buf.writeNbt(this.item); } - public static void toBytes(PacketItemEnterPipe packet, FriendlyByteBuf buf) { - buf.writeBlockPos(packet.tilePos); - buf.writeNbt(packet.item); + @Override + public ResourceLocation id() { + return PacketItemEnterPipe.ID; } - @SuppressWarnings("Convert2Lambda") - public static void onMessage(PacketItemEnterPipe message, Supplier ctx) { - ctx.get().enqueueWork(new Runnable() { - @Override - public void run() { - var mc = Minecraft.getInstance(); - if (mc.level == null) - return; - var item = IPipeItem.load(message.item); - var pipe = Utility.getBlockEntity(PipeBlockEntity.class, mc.level, message.tilePos); - if (pipe != null) - pipe.getItems().add(item); - } + public static void onMessage(PacketItemEnterPipe message, PlayPayloadContext ctx) { + ctx.workHandler().execute(() -> { + var mc = Minecraft.getInstance(); + if (mc.level == null) + return; + var item = IPipeItem.load(message.item); + var pipe = Utility.getBlockEntity(PipeBlockEntity.class, mc.level, message.tilePos); + if (pipe != null) + pipe.getItems().add(item); }); - ctx.get().setPacketHandled(true); } + } diff --git a/src/main/java/de/ellpeck/prettypipes/packets/PacketNetworkItems.java b/src/main/java/de/ellpeck/prettypipes/packets/PacketNetworkItems.java index d9df799..e6d3cb4 100644 --- a/src/main/java/de/ellpeck/prettypipes/packets/PacketNetworkItems.java +++ b/src/main/java/de/ellpeck/prettypipes/packets/PacketNetworkItems.java @@ -1,20 +1,24 @@ package de.ellpeck.prettypipes.packets; +import de.ellpeck.prettypipes.PrettyPipes; import de.ellpeck.prettypipes.terminal.containers.ItemTerminalGui; import net.minecraft.client.Minecraft; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; -import net.neoforged.neoforge.network.NetworkEvent; +import net.neoforged.neoforge.network.handling.PlayPayloadContext; import java.util.ArrayList; import java.util.List; -import java.util.function.Supplier; -public class PacketNetworkItems { +public class PacketNetworkItems implements CustomPacketPayload { - private List items; - private List craftables; - private List currentlyCrafting; + public static final ResourceLocation ID = new ResourceLocation(PrettyPipes.ID, "network_items"); + + private final List items; + private final List craftables; + private final List currentlyCrafting; public PacketNetworkItems(List items, List craftables, List currentlyCrafting) { this.items = items; @@ -22,46 +26,46 @@ public class PacketNetworkItems { this.currentlyCrafting = currentlyCrafting; } - private PacketNetworkItems() { - - } - - public static PacketNetworkItems fromBytes(FriendlyByteBuf buf) { - var client = new PacketNetworkItems(); - client.items = new ArrayList<>(); + public PacketNetworkItems(FriendlyByteBuf buf) { + this.items = new ArrayList<>(); for (var i = buf.readVarInt(); i > 0; i--) { var stack = buf.readItem(); stack.setCount(buf.readVarInt()); - client.items.add(stack); + this.items.add(stack); } - client.craftables = new ArrayList<>(); + this.craftables = new ArrayList<>(); for (var i = buf.readVarInt(); i > 0; i--) - client.craftables.add(buf.readItem()); - client.currentlyCrafting = new ArrayList<>(); + this.craftables.add(buf.readItem()); + this.currentlyCrafting = new ArrayList<>(); for (var i = buf.readVarInt(); i > 0; i--) - client.currentlyCrafting.add(buf.readItem()); - return client; + this.currentlyCrafting.add(buf.readItem()); } - public static void toBytes(PacketNetworkItems packet, FriendlyByteBuf buf) { - buf.writeVarInt(packet.items.size()); - for (var stack : packet.items) { + @Override + public void write(FriendlyByteBuf buf) { + buf.writeVarInt(this.items.size()); + for (var stack : this.items) { var copy = stack.copy(); copy.setCount(1); buf.writeItem(copy); buf.writeVarInt(stack.getCount()); } - buf.writeVarInt(packet.craftables.size()); - for (var stack : packet.craftables) + buf.writeVarInt(this.craftables.size()); + for (var stack : this.craftables) buf.writeItem(stack); - buf.writeVarInt(packet.currentlyCrafting.size()); - for (var stack : packet.currentlyCrafting) + buf.writeVarInt(this.currentlyCrafting.size()); + for (var stack : this.currentlyCrafting) buf.writeItem(stack); } + @Override + public ResourceLocation id() { + return PacketNetworkItems.ID; + } + @SuppressWarnings("Convert2Lambda") - public static void onMessage(PacketNetworkItems message, Supplier ctx) { - ctx.get().enqueueWork(new Runnable() { + public static void onMessage(PacketNetworkItems message, PlayPayloadContext ctx) { + ctx.workHandler().execute(new Runnable() { @Override public void run() { var mc = Minecraft.getInstance(); @@ -69,6 +73,6 @@ public class PacketNetworkItems { terminal.updateItemList(message.items, message.craftables, message.currentlyCrafting); } }); - ctx.get().setPacketHandled(true); } + } diff --git a/src/main/java/de/ellpeck/prettypipes/packets/PacketRequest.java b/src/main/java/de/ellpeck/prettypipes/packets/PacketRequest.java index ad9b8e6..2649eec 100644 --- a/src/main/java/de/ellpeck/prettypipes/packets/PacketRequest.java +++ b/src/main/java/de/ellpeck/prettypipes/packets/PacketRequest.java @@ -1,61 +1,62 @@ package de.ellpeck.prettypipes.packets; +import de.ellpeck.prettypipes.PrettyPipes; import de.ellpeck.prettypipes.Utility; import de.ellpeck.prettypipes.terminal.ItemTerminalBlockEntity; import net.minecraft.core.BlockPos; import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.world.entity.player.Player; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; -import net.neoforged.neoforge.network.NetworkEvent; +import net.neoforged.neoforge.network.handling.PlayPayloadContext; -import java.util.function.Supplier; +public class PacketRequest implements CustomPacketPayload { -public class PacketRequest { + public static final ResourceLocation ID = new ResourceLocation(PrettyPipes.ID, "request"); - private BlockPos pos; - private ItemStack stack; - private int nbtHash; - private int amount; + private final BlockPos pos; + private final ItemStack stack; + private final int nbtHash; + private final int amount; public PacketRequest(BlockPos pos, ItemStack stack, int amount) { this.pos = pos; this.stack = stack; - if (stack.hasTag()) - this.nbtHash = stack.getTag().hashCode(); + this.nbtHash = stack.hasTag() ? stack.getTag().hashCode() : 0; this.amount = amount; } - private PacketRequest() { - + public PacketRequest(FriendlyByteBuf buf) { + this.pos = buf.readBlockPos(); + this.stack = buf.readItem(); + this.nbtHash = buf.readVarInt(); + this.amount = buf.readVarInt(); } - public static PacketRequest fromBytes(FriendlyByteBuf buf) { - var packet = new PacketRequest(); - packet.pos = buf.readBlockPos(); - packet.stack = buf.readItem(); - packet.nbtHash = buf.readVarInt(); - packet.amount = buf.readVarInt(); - return packet; + @Override + public void write(FriendlyByteBuf buf) { + buf.writeBlockPos(this.pos); + buf.writeItem(this.stack); + buf.writeVarInt(this.nbtHash); + buf.writeVarInt(this.amount); } - public static void toBytes(PacketRequest packet, FriendlyByteBuf buf) { - buf.writeBlockPos(packet.pos); - buf.writeItem(packet.stack); - buf.writeVarInt(packet.nbtHash); - buf.writeVarInt(packet.amount); + @Override + public ResourceLocation id() { + return PacketRequest.ID; } @SuppressWarnings("Convert2Lambda") - public static void onMessage(PacketRequest message, Supplier ctx) { - ctx.get().enqueueWork(new Runnable() { + public static void onMessage(PacketRequest message, PlayPayloadContext ctx) { + ctx.workHandler().execute(new Runnable() { @Override public void run() { - Player player = ctx.get().getSender(); + var player = ctx.player().orElseThrow(); var tile = Utility.getBlockEntity(ItemTerminalBlockEntity.class, player.level(), message.pos); message.stack.setCount(message.amount); tile.requestItem(player, message.stack, message.nbtHash); } }); - ctx.get().setPacketHandled(true); } + } diff --git a/src/main/java/de/ellpeck/prettypipes/pipe/PipeBlock.java b/src/main/java/de/ellpeck/prettypipes/pipe/PipeBlock.java index 537f4ed..e24b23c 100644 --- a/src/main/java/de/ellpeck/prettypipes/pipe/PipeBlock.java +++ b/src/main/java/de/ellpeck/prettypipes/pipe/PipeBlock.java @@ -91,7 +91,7 @@ public class PipeBlock extends BaseEntityBlock { } } else if (handIn == InteractionHand.MAIN_HAND && stack.isEmpty()) { if (!worldIn.isClientSide) - NetworkHooks.openScreen((ServerPlayer) player, tile, pos); + player.openMenu(tile, pos); return InteractionResult.SUCCESS; } return InteractionResult.PASS; diff --git a/src/main/java/de/ellpeck/prettypipes/pipe/containers/AbstractPipeGui.java b/src/main/java/de/ellpeck/prettypipes/pipe/containers/AbstractPipeGui.java index b03ada1..8133da0 100644 --- a/src/main/java/de/ellpeck/prettypipes/pipe/containers/AbstractPipeGui.java +++ b/src/main/java/de/ellpeck/prettypipes/pipe/containers/AbstractPipeGui.java @@ -4,7 +4,6 @@ import de.ellpeck.prettypipes.PrettyPipes; import de.ellpeck.prettypipes.Registry; import de.ellpeck.prettypipes.items.IModule; import de.ellpeck.prettypipes.packets.PacketButton; -import de.ellpeck.prettypipes.packets.PacketHandler; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; import net.minecraft.client.resources.sounds.SimpleSoundInstance; @@ -14,6 +13,7 @@ import net.minecraft.sounds.SoundEvents; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.item.ItemStack; import net.neoforged.neoforge.items.SlotItemHandler; +import net.neoforged.neoforge.network.PacketDistributor; import java.util.ArrayList; import java.util.List; @@ -152,7 +152,7 @@ public abstract class AbstractPipeGui> extend return false; if (mouseX < this.x || mouseY < this.y || mouseX >= this.x + 28 || mouseY >= this.y + 32) return false; - PacketHandler.sendToServer(new PacketButton(AbstractPipeGui.this.menu.tile.getBlockPos(), PacketButton.ButtonResult.PIPE_TAB, this.index)); + PacketDistributor.SERVER.noArg().send(new PacketButton(AbstractPipeGui.this.menu.tile.getBlockPos(), PacketButton.ButtonResult.PIPE_TAB, this.index)); AbstractPipeGui.this.getMinecraft().getSoundManager().play(SimpleSoundInstance.forUI(SoundEvents.UI_BUTTON_CLICK, 1)); return true; } diff --git a/src/main/java/de/ellpeck/prettypipes/pressurizer/PressurizerBlock.java b/src/main/java/de/ellpeck/prettypipes/pressurizer/PressurizerBlock.java index a9efac7..233fdf7 100644 --- a/src/main/java/de/ellpeck/prettypipes/pressurizer/PressurizerBlock.java +++ b/src/main/java/de/ellpeck/prettypipes/pressurizer/PressurizerBlock.java @@ -38,7 +38,7 @@ public class PressurizerBlock extends BaseEntityBlock { if (tile == null) return InteractionResult.PASS; if (!worldIn.isClientSide) - NetworkHooks.openScreen((ServerPlayer) player, tile, pos); + player.openMenu(tile, pos); return InteractionResult.SUCCESS; } diff --git a/src/main/java/de/ellpeck/prettypipes/terminal/CraftingTerminalBlockEntity.java b/src/main/java/de/ellpeck/prettypipes/terminal/CraftingTerminalBlockEntity.java index 9cf730f..9a7ea6e 100644 --- a/src/main/java/de/ellpeck/prettypipes/terminal/CraftingTerminalBlockEntity.java +++ b/src/main/java/de/ellpeck/prettypipes/terminal/CraftingTerminalBlockEntity.java @@ -8,7 +8,6 @@ import de.ellpeck.prettypipes.misc.ItemEquality; import de.ellpeck.prettypipes.network.NetworkLocation; import de.ellpeck.prettypipes.network.PipeNetwork; import de.ellpeck.prettypipes.packets.PacketGhostSlot; -import de.ellpeck.prettypipes.packets.PacketHandler; import de.ellpeck.prettypipes.pipe.PipeBlockEntity; import de.ellpeck.prettypipes.terminal.containers.CraftingTerminalContainer; import net.minecraft.ChatFormatting; @@ -24,6 +23,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.state.BlockState; import net.neoforged.neoforge.items.ItemHandlerHelper; import net.neoforged.neoforge.items.ItemStackHandler; +import net.neoforged.neoforge.network.PacketDistributor; import org.apache.commons.lang3.mutable.MutableInt; import javax.annotation.Nullable; @@ -98,7 +98,7 @@ public class CraftingTerminalBlockEntity extends ItemTerminalBlockEntity { List clients = new ArrayList<>(); for (var i = 0; i < this.ghostItems.getSlots(); i++) clients.add(new PacketGhostSlot.Entry(this.level, Collections.singletonList(this.ghostItems.getStackInSlot(i)))); - PacketHandler.sendToAllLoaded(this.level, this.getBlockPos(), new PacketGhostSlot(this.getBlockPos(), clients)); + PacketDistributor.TRACKING_CHUNK.with(this.level.getChunkAt(this.getBlockPos())).send(new PacketGhostSlot(this.getBlockPos(), clients)); } } @@ -244,4 +244,5 @@ public class CraftingTerminalBlockEntity extends ItemTerminalBlockEntity { } return lowestAvailable; } + } diff --git a/src/main/java/de/ellpeck/prettypipes/terminal/ItemTerminalBlock.java b/src/main/java/de/ellpeck/prettypipes/terminal/ItemTerminalBlock.java index b8026fa..3b5fedc 100644 --- a/src/main/java/de/ellpeck/prettypipes/terminal/ItemTerminalBlock.java +++ b/src/main/java/de/ellpeck/prettypipes/terminal/ItemTerminalBlock.java @@ -44,7 +44,7 @@ public class ItemTerminalBlock extends BaseEntityBlock { return InteractionResult.SUCCESS; } if (!worldIn.isClientSide) { - NetworkHooks.openScreen((ServerPlayer) player, tile, pos); + player.openMenu(tile, pos); tile.updateItems(player); } return InteractionResult.SUCCESS; diff --git a/src/main/java/de/ellpeck/prettypipes/terminal/ItemTerminalBlockEntity.java b/src/main/java/de/ellpeck/prettypipes/terminal/ItemTerminalBlockEntity.java index 5816237..bd2ad98 100644 --- a/src/main/java/de/ellpeck/prettypipes/terminal/ItemTerminalBlockEntity.java +++ b/src/main/java/de/ellpeck/prettypipes/terminal/ItemTerminalBlockEntity.java @@ -9,7 +9,6 @@ import de.ellpeck.prettypipes.network.NetworkItem; import de.ellpeck.prettypipes.network.NetworkLocation; import de.ellpeck.prettypipes.network.NetworkLock; import de.ellpeck.prettypipes.network.PipeNetwork; -import de.ellpeck.prettypipes.packets.PacketHandler; import de.ellpeck.prettypipes.packets.PacketNetworkItems; import de.ellpeck.prettypipes.pipe.ConnectionType; import de.ellpeck.prettypipes.pipe.IPipeConnectable; @@ -22,6 +21,7 @@ import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Style; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.MenuProvider; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; @@ -141,7 +141,7 @@ public class ItemTerminalBlockEntity extends BlockEntity implements IPipeConnect continue; if (container.tile != this) continue; - PacketHandler.sendTo(player, new PacketNetworkItems(clientItems, clientCraftables, currentlyCrafting)); + ((ServerPlayer) player).connection.send(new PacketNetworkItems(clientItems, clientCraftables, currentlyCrafting)); } } } diff --git a/src/main/java/de/ellpeck/prettypipes/terminal/containers/CraftingTerminalGui.java b/src/main/java/de/ellpeck/prettypipes/terminal/containers/CraftingTerminalGui.java index 02e7a51..2abfbc9 100644 --- a/src/main/java/de/ellpeck/prettypipes/terminal/containers/CraftingTerminalGui.java +++ b/src/main/java/de/ellpeck/prettypipes/terminal/containers/CraftingTerminalGui.java @@ -3,13 +3,13 @@ package de.ellpeck.prettypipes.terminal.containers; import com.mojang.blaze3d.platform.InputConstants; import de.ellpeck.prettypipes.PrettyPipes; import de.ellpeck.prettypipes.packets.PacketButton; -import de.ellpeck.prettypipes.packets.PacketHandler; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.player.Inventory; +import net.neoforged.neoforge.network.PacketDistributor; public class CraftingTerminalGui extends ItemTerminalGui { @@ -28,7 +28,7 @@ public class CraftingTerminalGui extends ItemTerminalGui { var amount = ItemTerminalGui.requestModifier(); // also allow holding backspace instead of alt for people whose alt key is inaccessible (linux?) var force = Screen.hasAltDown() || InputConstants.isKeyDown(this.minecraft.getWindow().getWindow(), 259) ? 1 : 0; - PacketHandler.sendToServer(new PacketButton(this.menu.tile.getBlockPos(), PacketButton.ButtonResult.CRAFT_TERMINAL_REQUEST, amount, force)); + PacketDistributor.SERVER.noArg().send(new PacketButton(this.menu.tile.getBlockPos(), PacketButton.ButtonResult.CRAFT_TERMINAL_REQUEST, amount, force)); }).bounds(this.leftPos + 8, this.topPos + 100, 50, 20).build()); this.tick(); } @@ -47,7 +47,6 @@ public class CraftingTerminalGui extends ItemTerminalGui { } } - @Override protected void renderLabels(GuiGraphics graphics, int mouseX, int mouseY) { super.renderLabels(graphics, mouseX, mouseY); @@ -82,4 +81,5 @@ public class CraftingTerminalGui extends ItemTerminalGui { protected CraftingTerminalContainer getCraftingContainer() { return (CraftingTerminalContainer) this.menu; } + } diff --git a/src/main/java/de/ellpeck/prettypipes/terminal/containers/ItemTerminalGui.java b/src/main/java/de/ellpeck/prettypipes/terminal/containers/ItemTerminalGui.java index c794d22..4d3d3a1 100644 --- a/src/main/java/de/ellpeck/prettypipes/terminal/containers/ItemTerminalGui.java +++ b/src/main/java/de/ellpeck/prettypipes/terminal/containers/ItemTerminalGui.java @@ -5,7 +5,6 @@ import de.ellpeck.prettypipes.PrettyPipes; import de.ellpeck.prettypipes.misc.ItemTerminalWidget; import de.ellpeck.prettypipes.misc.PlayerPrefs; import de.ellpeck.prettypipes.packets.PacketButton; -import de.ellpeck.prettypipes.packets.PacketHandler; import de.ellpeck.prettypipes.packets.PacketRequest; import joptsimple.internal.Strings; import net.minecraft.client.gui.GuiGraphics; @@ -23,6 +22,7 @@ import net.minecraft.util.Mth; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.TooltipFlag; +import net.neoforged.neoforge.network.PacketDistributor; import org.apache.commons.lang3.tuple.Pair; import java.util.*; @@ -91,7 +91,7 @@ public class ItemTerminalGui extends AbstractContainerScreen