From 5330dd2b4e1be08fb3cd1848ca80774560fa33b2 Mon Sep 17 00:00:00 2001 From: DaniTheSkunk <> Date: Mon, 31 Oct 2022 23:47:51 +0000 Subject: [PATCH] mailbox menu showing --- .../skunkstuff/Blocks/BlockEntityMailbox.java | 2 +- .../skunkstuff/Blocks/BlockMailbox.java | 20 +++++ .../skunkstuff/Blocks/MenuMailbox.java | 77 +++++++++++++++++++ .../danitheskunk/skunkstuff/Blocks/Menus.java | 20 +++++ .../skunkstuff/Blocks/ScreenMailbox.java | 21 +++++ .../com/danitheskunk/skunkstuff/Client.java | 15 ++++ .../danitheskunk/skunkstuff/SkunkStuff.java | 2 + src/main/resources/quilt.mod.json | 3 +- 8 files changed, 158 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/danitheskunk/skunkstuff/Blocks/MenuMailbox.java create mode 100644 src/main/java/com/danitheskunk/skunkstuff/Blocks/Menus.java create mode 100644 src/main/java/com/danitheskunk/skunkstuff/Blocks/ScreenMailbox.java create mode 100644 src/main/java/com/danitheskunk/skunkstuff/Client.java diff --git a/src/main/java/com/danitheskunk/skunkstuff/Blocks/BlockEntityMailbox.java b/src/main/java/com/danitheskunk/skunkstuff/Blocks/BlockEntityMailbox.java index c44eabd..f24db4d 100644 --- a/src/main/java/com/danitheskunk/skunkstuff/Blocks/BlockEntityMailbox.java +++ b/src/main/java/com/danitheskunk/skunkstuff/Blocks/BlockEntityMailbox.java @@ -33,7 +33,7 @@ public class BlockEntityMailbox extends BaseContainerBlockEntity { @Override protected AbstractContainerMenu createMenu(int syncId, Inventory playerInventory) { - return null; + return new MenuMailbox(syncId, playerInventory, this); } @Override diff --git a/src/main/java/com/danitheskunk/skunkstuff/Blocks/BlockMailbox.java b/src/main/java/com/danitheskunk/skunkstuff/Blocks/BlockMailbox.java index f5ba48c..e4a5e50 100644 --- a/src/main/java/com/danitheskunk/skunkstuff/Blocks/BlockMailbox.java +++ b/src/main/java/com/danitheskunk/skunkstuff/Blocks/BlockMailbox.java @@ -1,12 +1,19 @@ package com.danitheskunk.skunkstuff.Blocks; import net.minecraft.core.BlockPos; +import net.minecraft.stats.Stats; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.HopperBlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; import org.jetbrains.annotations.Nullable; @@ -71,4 +78,17 @@ public class BlockMailbox extends BaseEntityBlock { public RenderShape getRenderShape(BlockState state) { return RenderShape.MODEL; } + + public InteractionResult use(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) { + if (world.isClientSide) { + return InteractionResult.SUCCESS; + } else { + BlockEntity blockEntity = world.getBlockEntity(pos); + if (blockEntity instanceof BlockEntityMailbox) { + player.openMenu((BlockEntityMailbox)blockEntity); + } + + return InteractionResult.CONSUME; + } + } } diff --git a/src/main/java/com/danitheskunk/skunkstuff/Blocks/MenuMailbox.java b/src/main/java/com/danitheskunk/skunkstuff/Blocks/MenuMailbox.java new file mode 100644 index 0000000..692847c --- /dev/null +++ b/src/main/java/com/danitheskunk/skunkstuff/Blocks/MenuMailbox.java @@ -0,0 +1,77 @@ +package com.danitheskunk.skunkstuff.Blocks; + +import net.minecraft.client.gui.screens.inventory.HopperScreen; +import net.minecraft.world.Container; +import net.minecraft.world.SimpleContainer; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.*; +import net.minecraft.world.item.ItemStack; +import org.jetbrains.annotations.Nullable; + +public class MenuMailbox extends AbstractContainerMenu { + + private static final int CONTAINER_SIZE = 9; + private final Container mailbox; + public MenuMailbox(int syncId, Inventory playerInventory) { + this(syncId, playerInventory, new SimpleContainer(CONTAINER_SIZE)); + } + public MenuMailbox(int syncId, Inventory playerInventory, Container inventory) { + super(Menus.MAILBOX, syncId); + this.mailbox = inventory; + checkContainerSize(inventory, CONTAINER_SIZE); + inventory.startOpen(playerInventory.player); + + int i; + for(i = 0; i < 3; ++i) { + for(int j = 0; j < 3; ++j) { + this.addSlot(new Slot(inventory, i + j * 3, 62 + i * 18, + 18 + j * 18)); + } + } + + for(i = 0; i < 3; ++i) { + for(int j = 0; j < 9; ++j) { + this.addSlot(new Slot(playerInventory, j + i * 9 + 9, + 8 + j * 18, i * 18 + 84)); + } + } + + for(i = 0; i < 9; ++i) { + this.addSlot(new Slot(playerInventory, i, 8 + i * 18, 142)); + } + + } + + @Override + public ItemStack quickMoveStack(Player player, int fromIndex) { + ItemStack itemStack = ItemStack.EMPTY; + Slot slot = (Slot)this.slots.get(fromIndex); + if (slot != null && slot.hasItem()) { + ItemStack itemStack2 = slot.getItem(); + itemStack = itemStack2.copy(); + if (fromIndex < this.mailbox.getContainerSize()) { + if (!this.moveItemStackTo(itemStack2, + this.mailbox.getContainerSize(), this.slots.size(), true)) { + return ItemStack.EMPTY; + } + } else if (!this.moveItemStackTo(itemStack2, 0, + this.mailbox.getContainerSize(), false)) { + return ItemStack.EMPTY; + } + + if (itemStack2.isEmpty()) { + slot.set(ItemStack.EMPTY); + } else { + slot.setChanged(); + } + } + + return itemStack; + } + + @Override + public boolean stillValid(Player player) { + return mailbox.stillValid(player); + } +} diff --git a/src/main/java/com/danitheskunk/skunkstuff/Blocks/Menus.java b/src/main/java/com/danitheskunk/skunkstuff/Blocks/Menus.java new file mode 100644 index 0000000..0e63047 --- /dev/null +++ b/src/main/java/com/danitheskunk/skunkstuff/Blocks/Menus.java @@ -0,0 +1,20 @@ +package com.danitheskunk.skunkstuff.Blocks; + +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.MenuType; + +public class Menus { + public static final MenuType MAILBOX = register("mailbox", + MenuMailbox::new); + + private static MenuType register(String id, MenuType.MenuSupplier factory) { + return Registry.register(Registry.MENU, + new ResourceLocation(Blocks.namespace, id), + new MenuType(factory)); + } + public static void init() { + + } +} diff --git a/src/main/java/com/danitheskunk/skunkstuff/Blocks/ScreenMailbox.java b/src/main/java/com/danitheskunk/skunkstuff/Blocks/ScreenMailbox.java new file mode 100644 index 0000000..42b4a8a --- /dev/null +++ b/src/main/java/com/danitheskunk/skunkstuff/Blocks/ScreenMailbox.java @@ -0,0 +1,21 @@ +package com.danitheskunk.skunkstuff.Blocks; + +import com.mojang.blaze3d.vertex.PoseStack; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.player.Inventory; + +@Environment(EnvType.CLIENT) +public class ScreenMailbox extends AbstractContainerScreen { + public ScreenMailbox(MenuMailbox handler, Inventory inventory, Component title) { + super(handler, inventory, title); + } + + @Override + protected void renderBg(PoseStack matrices, float delta, int mouseX, + int mouseY) { + + } +} diff --git a/src/main/java/com/danitheskunk/skunkstuff/Client.java b/src/main/java/com/danitheskunk/skunkstuff/Client.java new file mode 100644 index 0000000..d0f18a9 --- /dev/null +++ b/src/main/java/com/danitheskunk/skunkstuff/Client.java @@ -0,0 +1,15 @@ +package com.danitheskunk.skunkstuff; + +import com.danitheskunk.skunkstuff.Blocks.Menus; +import com.danitheskunk.skunkstuff.Blocks.ScreenMailbox; +import net.fabricmc.fabric.api.client.screenhandler.v1.ScreenRegistry; +import net.minecraft.client.gui.screens.MenuScreens; +import org.quiltmc.loader.api.ModContainer; +import org.quiltmc.qsl.base.api.entrypoint.client.ClientModInitializer; + +public class Client implements ClientModInitializer { + @Override + public void onInitializeClient(ModContainer mod) { + MenuScreens.register(Menus.MAILBOX, ScreenMailbox::new); + } +} diff --git a/src/main/java/com/danitheskunk/skunkstuff/SkunkStuff.java b/src/main/java/com/danitheskunk/skunkstuff/SkunkStuff.java index e9a33b1..dfe22d9 100644 --- a/src/main/java/com/danitheskunk/skunkstuff/SkunkStuff.java +++ b/src/main/java/com/danitheskunk/skunkstuff/SkunkStuff.java @@ -3,6 +3,7 @@ package com.danitheskunk.skunkstuff; import com.danitheskunk.skunkstuff.Blocks.BlockGoban; import com.danitheskunk.skunkstuff.Blocks.BlockMailbox; import com.danitheskunk.skunkstuff.Blocks.Blocks; +import com.danitheskunk.skunkstuff.Blocks.Menus; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.DispenserBlock; import org.quiltmc.loader.api.ModContainer; @@ -36,6 +37,7 @@ public class SkunkStuff implements ModInitializer { @Override public void onInitialize(ModContainer mod) { + Menus.init(); Blocks.registerAll(); } } diff --git a/src/main/resources/quilt.mod.json b/src/main/resources/quilt.mod.json index f6ca21e..58215f6 100644 --- a/src/main/resources/quilt.mod.json +++ b/src/main/resources/quilt.mod.json @@ -19,7 +19,8 @@ }, "intermediate_mappings": "net.fabricmc:intermediary", "entrypoints": { - "init": "com.danitheskunk.skunkstuff.SkunkStuff" + "init": "com.danitheskunk.skunkstuff.SkunkStuff", + "client_init": "com.danitheskunk.skunkstuff.Client" }, "depends": [ {