From 930dcbd4ee9a91e3aaba3928b5d066e05c13a4f3 Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 12 Jul 2022 12:10:59 +0200 Subject: [PATCH] [Fix] EndStoneSmelterMenu Whisperer Menu initialized in Client-Only Code. Crashing Servers when players open Whisperer Screen (#38) --- .../java/org/betterx/betterend/BetterEnd.java | 1 + .../betterend/client/BetterEndClient.java | 9 ------ .../client/gui/EndStoneSmelterMenu.java | 6 ++-- .../betterend/registry/EndMenuTypes.java | 31 +++++++++++++++++++ .../betterend/registry/EndScreens.java | 5 ++- 5 files changed, 37 insertions(+), 15 deletions(-) create mode 100644 src/main/java/org/betterx/betterend/registry/EndMenuTypes.java diff --git a/src/main/java/org/betterx/betterend/BetterEnd.java b/src/main/java/org/betterx/betterend/BetterEnd.java index 0b768751..ed678199 100644 --- a/src/main/java/org/betterx/betterend/BetterEnd.java +++ b/src/main/java/org/betterx/betterend/BetterEnd.java @@ -34,6 +34,7 @@ public class BetterEnd implements ModInitializer { WorldConfig.registerModCache(MOD_ID); EndPortals.loadPortals(); EndSounds.register(); + EndMenuTypes.ensureStaticallyLoaded(); EndBlockEntities.register(); EndPoiTypes.register(); EndFeatures.register(); diff --git a/src/main/java/org/betterx/betterend/client/BetterEndClient.java b/src/main/java/org/betterx/betterend/client/BetterEndClient.java index 1f31fca2..ee948a2c 100644 --- a/src/main/java/org/betterx/betterend/client/BetterEndClient.java +++ b/src/main/java/org/betterx/betterend/client/BetterEndClient.java @@ -3,8 +3,6 @@ package org.betterx.betterend.client; import org.betterx.bclib.BCLib; import org.betterx.bclib.util.TranslationHelper; import org.betterx.betterend.BetterEnd; -import org.betterx.betterend.blocks.EndStoneSmelter; -import org.betterx.betterend.client.gui.EndStoneSmelterMenu; import org.betterx.betterend.client.render.BetterEndSkyRenderer; import org.betterx.betterend.events.ItemTooltipCallback; import org.betterx.betterend.interfaces.MultiModelItem; @@ -17,20 +15,13 @@ import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; import net.minecraft.network.chat.Style; import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.inventory.MenuType; import net.minecraft.world.level.Level; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.client.model.ModelLoadingRegistry; import net.fabricmc.fabric.api.client.rendering.v1.DimensionRenderingRegistry; -import net.fabricmc.fabric.api.screenhandler.v1.ScreenHandlerRegistry; public class BetterEndClient implements ClientModInitializer { - public final static MenuType HANDLER_TYPE = ScreenHandlerRegistry.registerSimple( - BetterEnd.makeID(EndStoneSmelter.ID), - EndStoneSmelterMenu::new - ); - @Override public void onInitializeClient() { EndBlockEntityRenders.register(); diff --git a/src/main/java/org/betterx/betterend/client/gui/EndStoneSmelterMenu.java b/src/main/java/org/betterx/betterend/client/gui/EndStoneSmelterMenu.java index 4e353783..e0ec8e74 100644 --- a/src/main/java/org/betterx/betterend/client/gui/EndStoneSmelterMenu.java +++ b/src/main/java/org/betterx/betterend/client/gui/EndStoneSmelterMenu.java @@ -1,10 +1,10 @@ package org.betterx.betterend.client.gui; import org.betterx.betterend.blocks.entities.EndStoneSmelterBlockEntity; -import org.betterx.betterend.client.BetterEndClient; import org.betterx.betterend.client.gui.slot.SmelterFuelSlot; import org.betterx.betterend.client.gui.slot.SmelterOutputSlot; import org.betterx.betterend.recipe.builders.AlloyingRecipe; +import org.betterx.betterend.registry.EndMenuTypes; import net.minecraft.world.Container; import net.minecraft.world.SimpleContainer; @@ -48,7 +48,7 @@ public class EndStoneSmelterMenu extends RecipeBookMenu { Container inventory, ContainerData propertyDelegate ) { - super(BetterEndClient.HANDLER_TYPE, syncId); + super(EndMenuTypes.END_STONE_SMELTER, syncId); this.inventory = inventory; this.propertyDelegate = propertyDelegate; this.world = playerInventory.player.level; @@ -71,7 +71,7 @@ public class EndStoneSmelterMenu extends RecipeBookMenu { @Override public MenuType getType() { - return BetterEndClient.HANDLER_TYPE; + return EndMenuTypes.END_STONE_SMELTER; } @Override diff --git a/src/main/java/org/betterx/betterend/registry/EndMenuTypes.java b/src/main/java/org/betterx/betterend/registry/EndMenuTypes.java new file mode 100644 index 00000000..d92f6014 --- /dev/null +++ b/src/main/java/org/betterx/betterend/registry/EndMenuTypes.java @@ -0,0 +1,31 @@ +package org.betterx.betterend.registry; + +import org.betterx.betterend.BetterEnd; +import org.betterx.betterend.blocks.EndStoneSmelter; +import org.betterx.betterend.client.gui.EndStoneSmelterMenu; + +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.MenuType; + +import java.util.function.BiFunction; + +public class EndMenuTypes { + public final static MenuType END_STONE_SMELTER = registerSimple( + BetterEnd.makeID(EndStoneSmelter.ID), + EndStoneSmelterMenu::new + ); + + static MenuType registerSimple( + ResourceLocation id, + BiFunction factory + ) { + MenuType type = new MenuType<>((syncId, inventory) -> factory.apply(syncId, inventory)); + return Registry.register(Registry.MENU, id, type); + } + + public final static void ensureStaticallyLoaded() { + } +} diff --git a/src/main/java/org/betterx/betterend/registry/EndScreens.java b/src/main/java/org/betterx/betterend/registry/EndScreens.java index e1720392..1b282570 100644 --- a/src/main/java/org/betterx/betterend/registry/EndScreens.java +++ b/src/main/java/org/betterx/betterend/registry/EndScreens.java @@ -1,12 +1,11 @@ package org.betterx.betterend.registry; -import org.betterx.betterend.client.BetterEndClient; import org.betterx.betterend.client.gui.EndStoneSmelterScreen; -import net.fabricmc.fabric.api.client.screenhandler.v1.ScreenRegistry; +import net.minecraft.client.gui.screens.MenuScreens; public class EndScreens { public static void register() { - ScreenRegistry.register(BetterEndClient.HANDLER_TYPE, EndStoneSmelterScreen::new); + MenuScreens.register(EndMenuTypes.END_STONE_SMELTER, EndStoneSmelterScreen::new); } }