From 4ffab370c688b36528feed9a65435379c947fa36 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Mon, 28 Oct 2019 17:29:58 +0100 Subject: [PATCH] Fix server crash --- .../refinedstorage/network/ClientProxy.java | 29 +++++++++++++++++ .../GridCraftingPreviewResponseMessage.java | 32 +++++++++++-------- .../GridCraftingStartResponseMessage.java | 13 ++------ .../refinedstorage/util/StackUtils.java | 2 +- 4 files changed, 50 insertions(+), 26 deletions(-) create mode 100644 src/main/java/com/raoulvdberge/refinedstorage/network/ClientProxy.java diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/ClientProxy.java b/src/main/java/com/raoulvdberge/refinedstorage/network/ClientProxy.java new file mode 100644 index 000000000..82fb9a69a --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/ClientProxy.java @@ -0,0 +1,29 @@ +package com.raoulvdberge.refinedstorage.network; + +import com.raoulvdberge.refinedstorage.network.grid.GridCraftingPreviewResponseMessage; +import com.raoulvdberge.refinedstorage.network.grid.GridCraftingStartResponseMessage; +import com.raoulvdberge.refinedstorage.screen.grid.CraftingPreviewScreen; +import com.raoulvdberge.refinedstorage.screen.grid.CraftingSettingsScreen; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.util.text.TranslationTextComponent; + +public class ClientProxy { + public static void onReceivedCraftingPreviewResponseMessage(GridCraftingPreviewResponseMessage message) { + Screen screen = Minecraft.getInstance().currentScreen; + + if (screen instanceof CraftingSettingsScreen) { + screen = ((CraftingSettingsScreen) screen).getParent(); + } + + Minecraft.getInstance().displayGuiScreen(new CraftingPreviewScreen(screen, message.getStacks(), message.getId(), message.getQuantity(), message.isFluids(), new TranslationTextComponent("gui.refinedstorage.crafting_preview"))); + } + + public static void onReceivedCraftingStartResponseMessage(GridCraftingStartResponseMessage message) { + Screen screen = Minecraft.getInstance().currentScreen; + + if (screen instanceof CraftingSettingsScreen) { + ((CraftingSettingsScreen) screen).close(); + } + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridCraftingPreviewResponseMessage.java b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridCraftingPreviewResponseMessage.java index e7a9ce704..3041114ac 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridCraftingPreviewResponseMessage.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridCraftingPreviewResponseMessage.java @@ -2,13 +2,9 @@ package com.raoulvdberge.refinedstorage.network.grid; import com.raoulvdberge.refinedstorage.api.autocrafting.preview.ICraftingPreviewElement; import com.raoulvdberge.refinedstorage.apiimpl.API; -import com.raoulvdberge.refinedstorage.screen.grid.CraftingPreviewScreen; -import com.raoulvdberge.refinedstorage.screen.grid.CraftingSettingsScreen; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.screen.Screen; +import com.raoulvdberge.refinedstorage.network.ClientProxy; import net.minecraft.network.PacketBuffer; import net.minecraft.util.ResourceLocation; -import net.minecraft.util.text.TranslationTextComponent; import net.minecraftforge.fml.network.NetworkEvent; import java.util.LinkedList; @@ -29,6 +25,22 @@ public class GridCraftingPreviewResponseMessage { this.fluids = fluids; } + public List getStacks() { + return stacks; + } + + public UUID getId() { + return id; + } + + public int getQuantity() { + return quantity; + } + + public boolean isFluids() { + return fluids; + } + public static GridCraftingPreviewResponseMessage decode(PacketBuffer buf) { UUID id = buf.readUniqueId(); int quantity = buf.readInt(); @@ -59,15 +71,7 @@ public class GridCraftingPreviewResponseMessage { } public static void handle(GridCraftingPreviewResponseMessage message, Supplier ctx) { - ctx.get().enqueueWork(() -> { - Screen screen = Minecraft.getInstance().currentScreen; - - if (screen instanceof CraftingSettingsScreen) { - screen = ((CraftingSettingsScreen) screen).getParent(); - } - - Minecraft.getInstance().displayGuiScreen(new CraftingPreviewScreen(screen, message.stacks, message.id, message.quantity, message.fluids, new TranslationTextComponent("gui.refinedstorage.crafting_preview"))); - }); + ctx.get().enqueueWork(() -> ClientProxy.onReceivedCraftingPreviewResponseMessage(message)); ctx.get().setPacketHandled(true); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridCraftingStartResponseMessage.java b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridCraftingStartResponseMessage.java index 36b242d19..999ddc876 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridCraftingStartResponseMessage.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridCraftingStartResponseMessage.java @@ -1,8 +1,6 @@ package com.raoulvdberge.refinedstorage.network.grid; -import com.raoulvdberge.refinedstorage.screen.grid.CraftingSettingsScreen; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.screen.Screen; +import com.raoulvdberge.refinedstorage.network.ClientProxy; import net.minecraft.network.PacketBuffer; import net.minecraftforge.fml.network.NetworkEvent; @@ -17,14 +15,7 @@ public class GridCraftingStartResponseMessage { } public static void handle(GridCraftingStartResponseMessage message, Supplier ctx) { - ctx.get().enqueueWork(() -> { - Screen screen = Minecraft.getInstance().currentScreen; - - if (screen instanceof CraftingSettingsScreen) { - ((CraftingSettingsScreen) screen).close(); - } - }); - + ctx.get().enqueueWork(() -> ClientProxy.onReceivedCraftingStartResponseMessage(message)); ctx.get().setPacketHandled(true); } } \ No newline at end of file diff --git a/src/main/java/com/raoulvdberge/refinedstorage/util/StackUtils.java b/src/main/java/com/raoulvdberge/refinedstorage/util/StackUtils.java index c7e7065a9..c64965c19 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/util/StackUtils.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/util/StackUtils.java @@ -316,7 +316,7 @@ public final class StackUtils { if (tag.contains(NBT_ITEM_TYPE)) { item = Item.getItemById(tag.getInt(NBT_ITEM_TYPE)); - if (item == null) { + if (item == Items.AIR) { LOGGER.warn("Could not deserialize item from numerical ID, it no longer exists: " + tag.getInt(NBT_ITEM_TYPE)); } } else if (tag.contains(NBT_ITEM_ID)) {