From f764fac778a99bc042b643c0f4aefe513d110158 Mon Sep 17 00:00:00 2001 From: Christian Knaapen Date: Sun, 8 Mar 2020 15:10:16 +0100 Subject: [PATCH] Fixed randomizer bag not opening. Fixed server crash. --- .../EffortlessBuilding.java | 12 ++- .../ModClientEventHandler.java | 46 +++++++++ .../effortlessbuilding/ModEventHandler.java | 33 +------ .../gui/RandomizerBagContainer.java | 24 +++-- .../gui/RandomizerBagGuiHandler.java | 94 ------------------- ...ontainer.java => RandomizerBagScreen.java} | 17 ++-- .../gui/buildmode/RadialMenu.java | 5 +- .../item/ItemRandomizerBag.java | 33 ++++++- .../effortlessbuilding/proxy/ClientProxy.java | 7 +- 9 files changed, 114 insertions(+), 157 deletions(-) create mode 100644 src/main/java/nl/requios/effortlessbuilding/ModClientEventHandler.java delete mode 100644 src/main/java/nl/requios/effortlessbuilding/gui/RandomizerBagGuiHandler.java rename src/main/java/nl/requios/effortlessbuilding/gui/{RandomizerBagGuiContainer.java => RandomizerBagScreen.java} (66%) diff --git a/src/main/java/nl/requios/effortlessbuilding/EffortlessBuilding.java b/src/main/java/nl/requios/effortlessbuilding/EffortlessBuilding.java index 10bd696..f8779a5 100644 --- a/src/main/java/nl/requios/effortlessbuilding/EffortlessBuilding.java +++ b/src/main/java/nl/requios/effortlessbuilding/EffortlessBuilding.java @@ -2,8 +2,11 @@ package nl.requios.effortlessbuilding; import net.minecraft.block.Block; import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.inventory.container.Container; +import net.minecraft.inventory.container.ContainerType; import net.minecraft.item.Item; import net.minecraft.util.ResourceLocation; +import net.minecraft.util.registry.Registry; import net.minecraft.util.text.StringTextComponent; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.capabilities.CapabilityManager; @@ -24,7 +27,7 @@ import nl.requios.effortlessbuilding.capability.ModeCapabilityManager; import nl.requios.effortlessbuilding.capability.ModifierCapabilityManager; import nl.requios.effortlessbuilding.command.CommandReach; import nl.requios.effortlessbuilding.compatibility.CompatHelper; -import nl.requios.effortlessbuilding.gui.RandomizerBagGuiHandler; +import nl.requios.effortlessbuilding.gui.RandomizerBagContainer; import nl.requios.effortlessbuilding.item.ItemRandomizerBag; import nl.requios.effortlessbuilding.item.ItemReachUpgrade1; import nl.requios.effortlessbuilding.item.ItemReachUpgrade2; @@ -66,6 +69,7 @@ public class EffortlessBuilding ITEM_REACH_UPGRADE_3 }; + public static final ContainerType RANDOMIZER_BAG_CONTAINER = register("randomizer_bag", RandomizerBagContainer::new); public static final ResourceLocation RANDOMIZER_BAG_GUI = new ResourceLocation(EffortlessBuilding.MODID, "randomizer_bag"); public EffortlessBuilding() { @@ -98,9 +102,6 @@ public class EffortlessBuilding //TODO 1.13 config // ConfigManager.sync(MODID, Config.Type.INSTANCE); - //TODO 1.14 GUI -// ModLoadingContext.get().registerExtensionPoint(ExtensionPoint.GUIFACTORY, () -> RandomizerBagGuiHandler::openGui); - proxy.setup(event); CompatHelper.setup(); @@ -133,6 +134,9 @@ public class EffortlessBuilding CommandReach.register(event.getCommandDispatcher()); } + private static ContainerType register(String key, ContainerType.IFactory factory) { + return Registry.register(Registry.MENU, key, new ContainerType<>(factory)); + } public static void log(String msg){ logger.info(msg); diff --git a/src/main/java/nl/requios/effortlessbuilding/ModClientEventHandler.java b/src/main/java/nl/requios/effortlessbuilding/ModClientEventHandler.java new file mode 100644 index 0000000..aecfa2a --- /dev/null +++ b/src/main/java/nl/requios/effortlessbuilding/ModClientEventHandler.java @@ -0,0 +1,46 @@ +package nl.requios.effortlessbuilding; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.TextureStitchEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import nl.requios.effortlessbuilding.buildmode.BuildModes; +import nl.requios.effortlessbuilding.buildmode.ModeOptions; + +import java.util.HashMap; + +@Mod.EventBusSubscriber(bus=Mod.EventBusSubscriber.Bus.MOD, value = {Dist.CLIENT}) +public class ModClientEventHandler { + + private static final HashMap buildModeIcons = new HashMap<>(); + private static final HashMap modeOptionIcons = new HashMap<>(); + + @SubscribeEvent + public static void onTextureStitch(final TextureStitchEvent.Pre event) { + //register icon textures + for (final BuildModes.BuildModeEnum mode : BuildModes.BuildModeEnum.values()) + { + final ResourceLocation spriteLocation = new ResourceLocation(EffortlessBuilding.MODID, "icons/" + mode.name().toLowerCase()); + event.addSprite(spriteLocation); + buildModeIcons.put(mode, spriteLocation); + } + + for (final ModeOptions.ActionEnum action : ModeOptions.ActionEnum.values()) + { + final ResourceLocation spriteLocation = new ResourceLocation(EffortlessBuilding.MODID, "icons/" + action.name().toLowerCase()); + event.addSprite(spriteLocation); + modeOptionIcons.put(action, spriteLocation); + } + } + + public static TextureAtlasSprite getBuildModeIcon(BuildModes.BuildModeEnum mode) { + return Minecraft.getInstance().getTextureMap().getSprite(buildModeIcons.get(mode)); + } + + public static TextureAtlasSprite getModeOptionIcon(ModeOptions.ActionEnum action) { + return Minecraft.getInstance().getTextureMap().getSprite(modeOptionIcons.get(action)); + } +} diff --git a/src/main/java/nl/requios/effortlessbuilding/ModEventHandler.java b/src/main/java/nl/requios/effortlessbuilding/ModEventHandler.java index 3425973..b4f28d3 100644 --- a/src/main/java/nl/requios/effortlessbuilding/ModEventHandler.java +++ b/src/main/java/nl/requios/effortlessbuilding/ModEventHandler.java @@ -3,11 +3,10 @@ package nl.requios.effortlessbuilding; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.texture.TextureAtlasSprite; -import net.minecraft.inventory.container.Container; -import net.minecraft.inventory.container.ContainerType; -import net.minecraft.item.Item; import net.minecraft.item.BlockItem; +import net.minecraft.item.Item; import net.minecraft.util.ResourceLocation; +import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.client.event.TextureStitchEvent; import net.minecraftforge.event.RegistryEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; @@ -22,9 +21,6 @@ import java.util.HashMap; @Mod.EventBusSubscriber(bus=Mod.EventBusSubscriber.Bus.MOD) public class ModEventHandler { - private static final HashMap buildModeIcons = new HashMap<>(); - private static final HashMap modeOptionIcons = new HashMap<>(); - @SubscribeEvent public static void registerBlocks(RegistryEvent.Register event) { event.getRegistry().registerAll(EffortlessBuilding.BLOCKS); @@ -40,35 +36,10 @@ public class ModEventHandler { } } - //TODO 1.14 Gui // @SubscribeEvent // public static void registerContainerTypes(RegistryEvent.Register> event) { // event.getRegistry().register() // } - @SubscribeEvent - public static void onTextureStitch(final TextureStitchEvent.Pre event) { - //register icon textures - for (final BuildModes.BuildModeEnum mode : BuildModes.BuildModeEnum.values()) - { - final ResourceLocation spriteLocation = new ResourceLocation(EffortlessBuilding.MODID, "icons/" + mode.name().toLowerCase()); - event.addSprite(spriteLocation); - buildModeIcons.put(mode, spriteLocation); - } - for (final ModeOptions.ActionEnum action : ModeOptions.ActionEnum.values()) - { - final ResourceLocation spriteLocation = new ResourceLocation(EffortlessBuilding.MODID, "icons/" + action.name().toLowerCase()); - event.addSprite(spriteLocation); - modeOptionIcons.put(action, spriteLocation); - } - } - - public static TextureAtlasSprite getBuildModeIcon(BuildModes.BuildModeEnum mode) { - return Minecraft.getInstance().getTextureMap().getSprite(buildModeIcons.get(mode)); - } - - public static TextureAtlasSprite getModeOptionIcon(ModeOptions.ActionEnum action) { - return Minecraft.getInstance().getTextureMap().getSprite(modeOptionIcons.get(action)); - } } diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/RandomizerBagContainer.java b/src/main/java/nl/requios/effortlessbuilding/gui/RandomizerBagContainer.java index b052c5b..a2bfc4b 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/RandomizerBagContainer.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/RandomizerBagContainer.java @@ -2,29 +2,35 @@ package nl.requios.effortlessbuilding.gui; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Inventory; import net.minecraft.inventory.container.ClickType; import net.minecraft.inventory.container.Container; import net.minecraft.inventory.container.Slot; import net.minecraft.item.ItemStack; import net.minecraft.util.Hand; import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.ItemStackHandler; import net.minecraftforge.items.SlotItemHandler; +import nl.requios.effortlessbuilding.EffortlessBuilding; import nl.requios.effortlessbuilding.item.ItemRandomizerBag; public class RandomizerBagContainer extends Container { private final IItemHandler bagInventory; - private final int sizeInventory; private static final int INV_START = ItemRandomizerBag.INV_SIZE, INV_END = INV_START + 26, HOTBAR_START = INV_END + 1, HOTBAR_END = HOTBAR_START + 8; - public RandomizerBagContainer(PlayerInventory parInventoryPlayer, IItemHandler parIInventory) { - //TODO 1.14 Gui - super(null, 0); - bagInventory = parIInventory; - sizeInventory = bagInventory.getSlots(); - for (int i = 0; i < sizeInventory; ++i) { + public RandomizerBagContainer(int containerId, PlayerInventory playerInventory) { + this(containerId, playerInventory, new ItemStackHandler(ItemRandomizerBag.INV_SIZE)); + } + + public RandomizerBagContainer(int containerId, PlayerInventory playerInventory, IItemHandler inventory) { + super(EffortlessBuilding.RANDOMIZER_BAG_CONTAINER, containerId); + bagInventory = inventory; + + for (int i = 0; i < ItemRandomizerBag.INV_SIZE; ++i) { this.addSlot(new SlotItemHandler(bagInventory, i, 44 + (18 * i), 20)); } @@ -32,13 +38,13 @@ public class RandomizerBagContainer extends Container { int i; for (i = 0; i < 3; ++i) { for (int j = 0; j < 9; ++j) { - addSlot(new Slot(parInventoryPlayer, j + i * 9 + 9, 8 + j * 18, 51 + i * 18)); + addSlot(new Slot(playerInventory, j + i * 9 + 9, 8 + j * 18, 51 + i * 18)); } } // add hotbar slots for (i = 0; i < 9; ++i) { - addSlot(new Slot(parInventoryPlayer, i, 8 + i * 18, 109)); + addSlot(new Slot(playerInventory, i, 8 + i * 18, 109)); } } diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/RandomizerBagGuiHandler.java b/src/main/java/nl/requios/effortlessbuilding/gui/RandomizerBagGuiHandler.java deleted file mode 100644 index 3e7346d..0000000 --- a/src/main/java/nl/requios/effortlessbuilding/gui/RandomizerBagGuiHandler.java +++ /dev/null @@ -1,94 +0,0 @@ -package nl.requios.effortlessbuilding.gui; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.entity.player.ClientPlayerEntity; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.inventory.container.Container; -import net.minecraft.inventory.container.INamedContainerProvider; -import net.minecraft.util.Hand; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.StringTextComponent; -import net.minecraft.util.text.TranslationTextComponent; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.fml.network.FMLPlayMessages; -import net.minecraftforge.items.CapabilityItemHandler; -import net.minecraftforge.items.IItemHandler; -import nl.requios.effortlessbuilding.EffortlessBuilding; -import nl.requios.effortlessbuilding.item.ItemRandomizerBag; - -import javax.annotation.Nullable; - -public class RandomizerBagGuiHandler implements INamedContainerProvider { -// @Nullable -// @Override -// public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { -// if (ID == EffortlessBuilding.RANDOMIZER_BAG_GUI) { -// // Use the player's held item to create the container -// LazyOptional capabilityOptional = player.getHeldItemMainhand().getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null); -// -// if (!capabilityOptional.isPresent()) { -// capabilityOptional = player.getHeldItemOffhand().getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null); -// } -// -// return new RandomizerBagContainer(player.inventory, capabilityOptional.orElse(null)); -// } -// return null; -// } -// -// @Nullable -// @Override -// @OnlyIn(Dist.CLIENT) -// public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { -// if (ID == EffortlessBuilding.RANDOMIZER_BAG_GUI) { -// // Use the player's held item to create the client-side gui container -// LazyOptional capabilityOptional = player.getHeldItemMainhand().getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null); -// -// if (!capabilityOptional.isPresent()) { -// capabilityOptional = player.getHeldItemOffhand().getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null); -// } -// -// return new RandomizerBagGuiContainer(player.inventory, capabilityOptional.orElse(null)); -// } -// return null; -// } - -// @OnlyIn(Dist.CLIENT) -// public static Screen openGui(FMLPlayMessages.OpenContainer openContainer) { -// if (openContainer.getId().equals(EffortlessBuilding.RANDOMIZER_BAG_GUI)) { -// ClientPlayerEntity player = Minecraft.getInstance().player; -// if (player.getHeldItem(Hand.MAIN_HAND).getItem() instanceof ItemRandomizerBag) { -// IItemHandler itemHandler = player.getHeldItem(Hand.MAIN_HAND).getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY).orElse(null); -// if (itemHandler != null) { -// return new RandomizerBagGuiContainer(player.inventory, itemHandler); -// } -// } -// } -// return null; -// } -// -// @Override -// public Container createContainer(PlayerInventory inventory, PlayerEntity player) { -// if (player.getHeldItem(Hand.MAIN_HAND).getItem() instanceof ItemRandomizerBag) { -// IItemHandler itemHandler = player.getHeldItem(Hand.MAIN_HAND).getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY).orElse(null); -// if (itemHandler != null) { -// return new RandomizerBagContainer(inventory, itemHandler); -// } -// } -// return null; -// } - - @Override - public ITextComponent getDisplayName() { - return new TranslationTextComponent("effortlessbuilding.screen.randomizer_bag"); - } - - //TODO 1.14 GUI - @Nullable - @Override - public Container createMenu(int containerId, PlayerInventory playerInventory, PlayerEntity player) { - return null; - } -} diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/RandomizerBagGuiContainer.java b/src/main/java/nl/requios/effortlessbuilding/gui/RandomizerBagScreen.java similarity index 66% rename from src/main/java/nl/requios/effortlessbuilding/gui/RandomizerBagGuiContainer.java rename to src/main/java/nl/requios/effortlessbuilding/gui/RandomizerBagScreen.java index bb0cb9b..2af3ff4 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/RandomizerBagGuiContainer.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/RandomizerBagScreen.java @@ -4,6 +4,7 @@ import com.mojang.blaze3d.platform.GlStateManager; import net.minecraft.client.gui.screen.inventory.ContainerScreen; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TranslationTextComponent; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; @@ -11,17 +12,12 @@ import net.minecraftforge.items.IItemHandler; import nl.requios.effortlessbuilding.EffortlessBuilding; @OnlyIn(Dist.CLIENT) -public class RandomizerBagGuiContainer extends ContainerScreen { +public class RandomizerBagScreen extends ContainerScreen { private static final ResourceLocation guiTextures = new ResourceLocation(EffortlessBuilding.MODID, "textures/gui/container/randomizerbag.png"); - private final PlayerInventory inventoryPlayer; - private final IItemHandler inventoryBag; - - public RandomizerBagGuiContainer(PlayerInventory inventoryPlayer, IItemHandler inventoryBag) { - super(new RandomizerBagContainer(inventoryPlayer, inventoryBag), inventoryPlayer, new TranslationTextComponent("effortlessbuilding.screen.randomizer_bag")); - this.inventoryPlayer = inventoryPlayer; - this.inventoryBag = inventoryBag; + public RandomizerBagScreen(RandomizerBagContainer randomizerBagContainer, PlayerInventory playerInventory, ITextComponent title) { + super(randomizerBagContainer, playerInventory, title);//new TranslationTextComponent("effortlessbuilding.screen.randomizer_bag")); ySize = 134; } @@ -34,9 +30,8 @@ public class RandomizerBagGuiContainer extends ContainerScreen { @Override protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) { - String s = "Randomizer Bag"; - font.drawString(s, 8, 6, 0x404040); - font.drawString(inventoryPlayer.getDisplayName().getUnformattedComponentText(), 8, ySize - 96 + 2, 0x404040); + font.drawString(this.title.getFormattedText(), 8, 6, 0x404040); + font.drawString(playerInventory.getDisplayName().getFormattedText(), 8, ySize - 96 + 2, 0x404040); } @Override diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/buildmode/RadialMenu.java b/src/main/java/nl/requios/effortlessbuilding/gui/buildmode/RadialMenu.java index 7ced045..e6981ec 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/buildmode/RadialMenu.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/buildmode/RadialMenu.java @@ -11,6 +11,7 @@ import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TextFormatting; import net.minecraft.util.text.TranslationTextComponent; import nl.requios.effortlessbuilding.EffortlessBuilding; +import nl.requios.effortlessbuilding.ModClientEventHandler; import nl.requios.effortlessbuilding.ModEventHandler; import nl.requios.effortlessbuilding.buildmode.ModeSettingsManager; import nl.requios.effortlessbuilding.proxy.ClientProxy; @@ -299,7 +300,7 @@ public class RadialMenu extends Screen { final double x = (menuRegion.x1 + menuRegion.x2) * 0.5 * (ringOuterEdge * 0.6 + 0.4 * ringInnerEdge); final double y = (menuRegion.y1 + menuRegion.y2) * 0.5 * (ringOuterEdge * 0.6 + 0.4 * ringInnerEdge); - final TextureAtlasSprite sprite = ModEventHandler.getBuildModeIcon(menuRegion.mode); + final TextureAtlasSprite sprite = ModClientEventHandler.getBuildModeIcon(menuRegion.mode); final double x1 = x - 8; final double x2 = x + 8; @@ -331,7 +332,7 @@ public class RadialMenu extends Screen { final double v1 = 0; final double v2 = 16; - final TextureAtlasSprite sprite = ModEventHandler.getModeOptionIcon(button.action); + final TextureAtlasSprite sprite = ModClientEventHandler.getModeOptionIcon(button.action); final double btnmiddleX = (button.x1 + button.x2) / 2 + 0.01; final double btnmiddleY = (button.y1 + button.y2) / 2 + 0.01; diff --git a/src/main/java/nl/requios/effortlessbuilding/item/ItemRandomizerBag.java b/src/main/java/nl/requios/effortlessbuilding/item/ItemRandomizerBag.java index efdda51..2c7295c 100644 --- a/src/main/java/nl/requios/effortlessbuilding/item/ItemRandomizerBag.java +++ b/src/main/java/nl/requios/effortlessbuilding/item/ItemRandomizerBag.java @@ -4,7 +4,10 @@ import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.inventory.container.Container; +import net.minecraft.inventory.container.INamedContainerProvider; import net.minecraft.item.*; import net.minecraft.nbt.CompoundNBT; import net.minecraft.util.*; @@ -16,6 +19,7 @@ import net.minecraft.util.math.Vec3d; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.StringTextComponent; import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.TranslationTextComponent; import net.minecraft.world.World; import net.minecraftforge.common.capabilities.ICapabilityProvider; import net.minecraftforge.fml.network.NetworkHooks; @@ -26,7 +30,7 @@ import nl.requios.effortlessbuilding.buildmode.BuildModes; import nl.requios.effortlessbuilding.buildmode.ModeSettingsManager; import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager; import nl.requios.effortlessbuilding.capability.ItemHandlerCapabilityProvider; -import nl.requios.effortlessbuilding.gui.RandomizerBagGuiHandler; +import nl.requios.effortlessbuilding.gui.RandomizerBagContainer; import nl.requios.effortlessbuilding.helper.SurvivalHelper; import javax.annotation.Nullable; @@ -61,7 +65,7 @@ public class ItemRandomizerBag extends Item { if (ctx.isPlacerSneaking()) { if (world.isRemote) return ActionResultType.SUCCESS; //Open inventory - NetworkHooks.openGui((ServerPlayerEntity) player, new RandomizerBagGuiHandler()); + NetworkHooks.openGui((ServerPlayerEntity) player, new ContainerProvider(item)); } else { if (world.isRemote) return ActionResultType.SUCCESS; @@ -114,7 +118,7 @@ public class ItemRandomizerBag extends Item { if (player.isSneaking()) { if (world.isRemote) return new ActionResult<>(ActionResultType.SUCCESS, bag); //Open inventory - NetworkHooks.openGui((ServerPlayerEntity) player, new RandomizerBagGuiHandler()); + NetworkHooks.openGui((ServerPlayerEntity) player, new ContainerProvider(bag)); } else { //Use item //Get bag inventory @@ -200,6 +204,9 @@ public class ItemRandomizerBag extends Item { public void addInformation(ItemStack stack, @Nullable World world, List tooltip, ITooltipFlag flag) { tooltip.add(new StringTextComponent(TextFormatting.BLUE + "Rightclick" + TextFormatting.GRAY + " to place a random block")); tooltip.add(new StringTextComponent(TextFormatting.BLUE + "Sneak + rightclick" + TextFormatting.GRAY + " to open inventory")); + if (world != null && world.getPlayers().size() > 1) { + tooltip.add(new StringTextComponent(TextFormatting.YELLOW + "Experimental on servers: may lose inventory")); + } } @Override @@ -215,4 +222,24 @@ public class ItemRandomizerBag extends Item { currentSeed = Calendar.getInstance().getTimeInMillis(); rand.setSeed(currentSeed); } + + public static class ContainerProvider implements INamedContainerProvider{ + + private ItemStack bag; + + public ContainerProvider(ItemStack bag) { + this.bag = bag; + } + + @Override + public ITextComponent getDisplayName() { + return new TranslationTextComponent("effortlessbuilding.screen.randomizer_bag"); + } + + @Nullable + @Override + public Container createMenu(int containerId, PlayerInventory playerInventory, PlayerEntity player) { + return new RandomizerBagContainer(containerId, playerInventory, ItemRandomizerBag.getBagInventory(bag)); + } + } } diff --git a/src/main/java/nl/requios/effortlessbuilding/proxy/ClientProxy.java b/src/main/java/nl/requios/effortlessbuilding/proxy/ClientProxy.java index 589e91d..3ea9b51 100644 --- a/src/main/java/nl/requios/effortlessbuilding/proxy/ClientProxy.java +++ b/src/main/java/nl/requios/effortlessbuilding/proxy/ClientProxy.java @@ -4,9 +4,9 @@ import net.minecraft.block.BlockState; import net.minecraft.block.SoundType; import net.minecraft.client.Minecraft; import net.minecraft.client.entity.player.ClientPlayerEntity; +import net.minecraft.client.gui.ScreenManager; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.renderer.texture.TextureAtlasSprite; -import net.minecraft.client.renderer.texture.AtlasTexture; import net.minecraft.client.resources.I18n; import net.minecraft.client.settings.KeyBinding; import net.minecraft.client.util.InputMappings; @@ -26,8 +26,8 @@ import net.minecraftforge.client.event.TextureStitchEvent; import net.minecraftforge.client.settings.KeyConflictContext; import net.minecraftforge.client.settings.KeyModifier; import net.minecraftforge.event.TickEvent; -import net.minecraftforge.event.entity.EntityJoinWorldEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.DeferredWorkQueue; import net.minecraftforge.fml.LogicalSide; import net.minecraftforge.fml.client.registry.ClientRegistry; import net.minecraftforge.fml.common.Mod; @@ -40,11 +40,11 @@ import nl.requios.effortlessbuilding.buildmode.ModeOptions; import nl.requios.effortlessbuilding.buildmode.ModeSettingsManager; import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager; import nl.requios.effortlessbuilding.compatibility.CompatHelper; +import nl.requios.effortlessbuilding.gui.RandomizerBagScreen; import nl.requios.effortlessbuilding.gui.buildmode.RadialMenu; import nl.requios.effortlessbuilding.gui.buildmodifier.ModifierSettingsGui; import nl.requios.effortlessbuilding.helper.ReachHelper; import nl.requios.effortlessbuilding.network.*; -import nl.requios.effortlessbuilding.render.RenderHandler; import nl.requios.effortlessbuilding.render.ShaderHandler; import org.lwjgl.glfw.GLFW; @@ -96,6 +96,7 @@ public class ClientProxy implements IProxy { ClientRegistry.registerKeyBinding(keyBindings[i]); } + DeferredWorkQueue.runLater( () -> ScreenManager.registerFactory(EffortlessBuilding.RANDOMIZER_BAG_CONTAINER, RandomizerBagScreen::new)); } public PlayerEntity getPlayerEntityFromContext(Supplier ctx){