From 3f2c66dca5dd3c4b575f16b20b77c6d44575b1e2 Mon Sep 17 00:00:00 2001 From: Vincent Lee Date: Sat, 16 Feb 2019 23:43:02 -0600 Subject: [PATCH] Change openGui to take a Consumer --- .../fml/network/NetworkHooks.java | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/src/main/java/net/minecraftforge/fml/network/NetworkHooks.java b/src/main/java/net/minecraftforge/fml/network/NetworkHooks.java index b854727277..5ac839cb84 100644 --- a/src/main/java/net/minecraftforge/fml/network/NetworkHooks.java +++ b/src/main/java/net/minecraftforge/fml/network/NetworkHooks.java @@ -36,6 +36,7 @@ import net.minecraftforge.event.entity.player.PlayerContainerEvent; import javax.annotation.Nullable; import java.util.Objects; +import java.util.function.Consumer; public class NetworkHooks { @@ -89,19 +90,24 @@ public class NetworkHooks return FMLHandshakeHandler.tickLogin(networkManager); } + public static void openGui(EntityPlayerMP player, IInteractionObject containerSupplier) + { + openGui(player, containerSupplier, buf -> {}); + } + /** * Server method to tell the client to open a GUI on behalf of the server * * The {@link IInteractionObject#getGuiID()} is treated as a {@link ResourceLocation}. * It should refer to a valid modId namespace, to trigger opening on the client. * The namespace is directly used to lookup the modId in the client side. - * The maximum size for #extraData is 32600 bytes. + * The maximum size for #extraDataWriter is 32600 bytes. * * @param player The player to open the GUI for * @param containerSupplier The Container Supplier - * @param extraData Additional data for the GUI + * @param extraDataWriter Consumer to write any additional data the GUI needs */ - public static void openGui(EntityPlayerMP player, IInteractionObject containerSupplier, @Nullable PacketBuffer extraData) + public static void openGui(EntityPlayerMP player, IInteractionObject containerSupplier, Consumer extraDataWriter) { if (player.world.isRemote) return; ResourceLocation id = new ResourceLocation(containerSupplier.getGuiID()); @@ -114,13 +120,13 @@ public class NetworkHooks player.openContainer.addListener(player); MinecraftForge.EVENT_BUS.post(new PlayerContainerEvent.Open(player, c)); + PacketBuffer extraData = new PacketBuffer(Unpooled.buffer()); + extraDataWriter.accept(extraData); + extraData.readerIndex(0); // reset to beginning in case modders read for whatever reason + PacketBuffer output = new PacketBuffer(Unpooled.buffer()); - if (extraData == null) { - output.writeVarInt(0); - } else { - output.writeVarInt(extraData.readableBytes()); - output.writeBytes(extraData); - } + output.writeVarInt(extraData.readableBytes()); + output.writeBytes(extraData); if (output.readableBytes() > 32600 || output.readableBytes() < 1) { throw new IllegalArgumentException("Invalid PacketBuffer for openGui, found "+ output.readableBytes()+ " bytes");