[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);
EndPortals.loadPortals();
EndSounds.register();
EndMenuTypes.ensureStaticallyLoaded();
EndBlockEntities.register();
EndPoiTypes.register();
EndFeatures.register();

View file

@ -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<EndStoneSmelterMenu> HANDLER_TYPE = ScreenHandlerRegistry.registerSimple(
BetterEnd.makeID(EndStoneSmelter.ID),
EndStoneSmelterMenu::new
);
@Override
public void onInitializeClient() {
EndBlockEntityRenders.register();

View file

@ -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> {
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<Container> {
@Override
public MenuType<?> getType() {
return BetterEndClient.HANDLER_TYPE;
return EndMenuTypes.END_STONE_SMELTER;
}
@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;
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);
}
}