[Fix] EndStoneSmelterMenu Whisperer Menu initialized in Client-Only Code. Crashing Servers when players open Whisperer Screen (#38)

This commit is contained in:
Frank 2022-07-12 12:10:59 +02:00
parent d3507b212e
commit 930dcbd4ee
5 changed files with 37 additions and 15 deletions

View file

@ -34,6 +34,7 @@ public class BetterEnd implements ModInitializer {
WorldConfig.registerModCache(MOD_ID); WorldConfig.registerModCache(MOD_ID);
EndPortals.loadPortals(); EndPortals.loadPortals();
EndSounds.register(); EndSounds.register();
EndMenuTypes.ensureStaticallyLoaded();
EndBlockEntities.register(); EndBlockEntities.register();
EndPoiTypes.register(); EndPoiTypes.register();
EndFeatures.register(); EndFeatures.register();

View file

@ -3,8 +3,6 @@ package org.betterx.betterend.client;
import org.betterx.bclib.BCLib; import org.betterx.bclib.BCLib;
import org.betterx.bclib.util.TranslationHelper; import org.betterx.bclib.util.TranslationHelper;
import org.betterx.betterend.BetterEnd; 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.client.render.BetterEndSkyRenderer;
import org.betterx.betterend.events.ItemTooltipCallback; import org.betterx.betterend.events.ItemTooltipCallback;
import org.betterx.betterend.interfaces.MultiModelItem; 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.MutableComponent;
import net.minecraft.network.chat.Style; import net.minecraft.network.chat.Style;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.inventory.MenuType;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.fabricmc.api.ClientModInitializer; import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.client.model.ModelLoadingRegistry; import net.fabricmc.fabric.api.client.model.ModelLoadingRegistry;
import net.fabricmc.fabric.api.client.rendering.v1.DimensionRenderingRegistry; import net.fabricmc.fabric.api.client.rendering.v1.DimensionRenderingRegistry;
import net.fabricmc.fabric.api.screenhandler.v1.ScreenHandlerRegistry;
public class BetterEndClient implements ClientModInitializer { public class BetterEndClient implements ClientModInitializer {
public final static MenuType<EndStoneSmelterMenu> HANDLER_TYPE = ScreenHandlerRegistry.registerSimple(
BetterEnd.makeID(EndStoneSmelter.ID),
EndStoneSmelterMenu::new
);
@Override @Override
public void onInitializeClient() { public void onInitializeClient() {
EndBlockEntityRenders.register(); EndBlockEntityRenders.register();

View file

@ -1,10 +1,10 @@
package org.betterx.betterend.client.gui; package org.betterx.betterend.client.gui;
import org.betterx.betterend.blocks.entities.EndStoneSmelterBlockEntity; 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.SmelterFuelSlot;
import org.betterx.betterend.client.gui.slot.SmelterOutputSlot; import org.betterx.betterend.client.gui.slot.SmelterOutputSlot;
import org.betterx.betterend.recipe.builders.AlloyingRecipe; import org.betterx.betterend.recipe.builders.AlloyingRecipe;
import org.betterx.betterend.registry.EndMenuTypes;
import net.minecraft.world.Container; import net.minecraft.world.Container;
import net.minecraft.world.SimpleContainer; import net.minecraft.world.SimpleContainer;
@ -48,7 +48,7 @@ public class EndStoneSmelterMenu extends RecipeBookMenu<Container> {
Container inventory, Container inventory,
ContainerData propertyDelegate ContainerData propertyDelegate
) { ) {
super(BetterEndClient.HANDLER_TYPE, syncId); super(EndMenuTypes.END_STONE_SMELTER, syncId);
this.inventory = inventory; this.inventory = inventory;
this.propertyDelegate = propertyDelegate; this.propertyDelegate = propertyDelegate;
this.world = playerInventory.player.level; this.world = playerInventory.player.level;
@ -71,7 +71,7 @@ public class EndStoneSmelterMenu extends RecipeBookMenu<Container> {
@Override @Override
public MenuType<?> getType() { public MenuType<?> getType() {
return BetterEndClient.HANDLER_TYPE; return EndMenuTypes.END_STONE_SMELTER;
} }
@Override @Override

View file

@ -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<EndStoneSmelterMenu> END_STONE_SMELTER = registerSimple(
BetterEnd.makeID(EndStoneSmelter.ID),
EndStoneSmelterMenu::new
);
static <T extends AbstractContainerMenu> MenuType<T> registerSimple(
ResourceLocation id,
BiFunction<Integer, Inventory, T> factory
) {
MenuType<T> type = new MenuType<>((syncId, inventory) -> factory.apply(syncId, inventory));
return Registry.register(Registry.MENU, id, type);
}
public final static void ensureStaticallyLoaded() {
}
}

View file

@ -1,12 +1,11 @@
package org.betterx.betterend.registry; package org.betterx.betterend.registry;
import org.betterx.betterend.client.BetterEndClient;
import org.betterx.betterend.client.gui.EndStoneSmelterScreen; 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 class EndScreens {
public static void register() { public static void register() {
ScreenRegistry.register(BetterEndClient.HANDLER_TYPE, EndStoneSmelterScreen::new); MenuScreens.register(EndMenuTypes.END_STONE_SMELTER, EndStoneSmelterScreen::new);
} }
} }