From 3da685c93b149741322414130f031b5207e66ea1 Mon Sep 17 00:00:00 2001 From: Phoupraw <467934387@qq.com> Date: Mon, 25 Mar 2024 17:54:30 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9A=E4=B8=8D?= =?UTF-8?q?=E8=83=BD=E4=BB=8E=E7=8E=A9=E5=AE=B6=E5=BF=AB=E9=80=9F=E7=A7=BB?= =?UTF-8?q?=E5=8A=A8=E7=89=A9=E5=93=81=E5=88=B0=E6=96=B9=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/dev/dubhe/anvilcraft/inventory/BaseMachineMenu.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/dev/dubhe/anvilcraft/inventory/BaseMachineMenu.java b/src/main/java/dev/dubhe/anvilcraft/inventory/BaseMachineMenu.java index 6e07bb726..262ddf9ca 100644 --- a/src/main/java/dev/dubhe/anvilcraft/inventory/BaseMachineMenu.java +++ b/src/main/java/dev/dubhe/anvilcraft/inventory/BaseMachineMenu.java @@ -24,7 +24,7 @@ protected BaseMachineMenu(@Nullable MenuType menuType, int containerId, @NotN @Override public @NotNull ItemStack quickMoveStack(Player player, int index) { ItemStack itemStack = ItemStack.EMPTY; - if (index >= this.machine.getContainerSize()) return itemStack; + if (index >= this.slots.size()) return itemStack; Slot slot = this.slots.get(index); if (!slot.hasItem()) return itemStack; ItemStack itemStack2 = slot.getItem(); From 2d365826b7b528057e847692feacdf17b7a2bc6c Mon Sep 17 00:00:00 2001 From: Phoupraw <467934387@qq.com> Date: Mon, 25 Mar 2024 18:42:20 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=90=88=E6=88=90?= =?UTF-8?q?=E5=99=A8=E7=9A=84=E4=BA=A7=E7=89=A9=E6=B2=A1=E6=9C=89=E5=B7=A5?= =?UTF-8?q?=E5=85=B7=E6=8F=90=E7=A4=BA=E5=92=8C=E6=95=B0=E5=AD=97=E6=B7=B1?= =?UTF-8?q?=E5=BA=A6=E9=94=99=E8=AF=AF=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../screen/inventory/AutoCrafterScreen.java | 25 ------------- .../anvilcraft/inventory/AutoCrafterMenu.java | 35 ++++++++++++++----- .../anvilcraft/inventory/ReadOnlySlot.java | 20 +++++++++++ 3 files changed, 47 insertions(+), 33 deletions(-) create mode 100644 src/main/java/dev/dubhe/anvilcraft/inventory/ReadOnlySlot.java diff --git a/src/main/java/dev/dubhe/anvilcraft/client/gui/screen/inventory/AutoCrafterScreen.java b/src/main/java/dev/dubhe/anvilcraft/client/gui/screen/inventory/AutoCrafterScreen.java index 1c8e2b72c..1d50a1dbc 100644 --- a/src/main/java/dev/dubhe/anvilcraft/client/gui/screen/inventory/AutoCrafterScreen.java +++ b/src/main/java/dev/dubhe/anvilcraft/client/gui/screen/inventory/AutoCrafterScreen.java @@ -3,7 +3,6 @@ import com.mojang.blaze3d.systems.RenderSystem; import dev.dubhe.anvilcraft.AnvilCraft; import dev.dubhe.anvilcraft.client.gui.component.RecordMaterialButton; -import dev.dubhe.anvilcraft.inventory.AutoCrafterContainer; import dev.dubhe.anvilcraft.inventory.AutoCrafterMenu; import dev.dubhe.anvilcraft.inventory.component.AutoCrafterSlot; import dev.dubhe.anvilcraft.network.MachineRecordMaterialPack; @@ -16,15 +15,10 @@ import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.ClickType; -import net.minecraft.world.inventory.CraftingContainer; import net.minecraft.world.inventory.Slot; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.crafting.CraftingRecipe; -import net.minecraft.world.item.crafting.RecipeType; -import net.minecraft.world.level.Level; import org.jetbrains.annotations.NotNull; -import java.util.Optional; import java.util.function.Supplier; public class AutoCrafterScreen extends BaseMachineScreen { @@ -110,7 +104,6 @@ protected void init() { public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) { this.renderBackground(guiGraphics); super.render(guiGraphics, mouseX, mouseY, partialTick); - this.renderResultItem(guiGraphics, 134, 54); this.renderTooltip(guiGraphics, mouseX, mouseY); } @@ -120,22 +113,4 @@ protected void renderBg(@NotNull GuiGraphics guiGraphics, float partialTick, int int j = (this.height - this.imageHeight) / 2; guiGraphics.blit(CONTAINER_LOCATION, i, j, 0, 0, this.imageWidth, this.imageHeight); } - - @SuppressWarnings("SameParameterValue") - protected void renderResultItem(@NotNull GuiGraphics guiGraphics, int x, int y) { - NonNullList stacks = NonNullList.withSize(9, ItemStack.EMPTY); - for (int i = 0; i < 9; i++) stacks.set(i, this.menu.slots.get(i).getItem()); - CraftingContainer container = new AutoCrafterContainer(stacks); - Level level = this.menu.getInventory().player.level(); - Optional optional = level.getRecipeManager().getRecipeFor(RecipeType.CRAFTING, container, level); - if (optional.isEmpty()) return; - ItemStack stack = optional.get().assemble(container, level.registryAccess()); - int i = (this.width - this.imageWidth) / 2 + x; - int j = (this.height - this.imageHeight) / 2 + y; - guiGraphics.pose().pushPose(); - guiGraphics.pose().translate(0.0f, 0.0f, 232.0f); - guiGraphics.renderItem(stack, i, j); - guiGraphics.renderItemDecorations(this.font, stack, i, j, null); - guiGraphics.pose().popPose(); - } } diff --git a/src/main/java/dev/dubhe/anvilcraft/inventory/AutoCrafterMenu.java b/src/main/java/dev/dubhe/anvilcraft/inventory/AutoCrafterMenu.java index 2477c8c22..309562d43 100644 --- a/src/main/java/dev/dubhe/anvilcraft/inventory/AutoCrafterMenu.java +++ b/src/main/java/dev/dubhe/anvilcraft/inventory/AutoCrafterMenu.java @@ -4,23 +4,28 @@ import dev.dubhe.anvilcraft.init.ModMenuTypes; import dev.dubhe.anvilcraft.inventory.component.AutoCrafterSlot; import lombok.Getter; +import net.minecraft.core.NonNullList; 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.CraftingContainer; import net.minecraft.world.inventory.Slot; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.CraftingRecipe; +import net.minecraft.world.item.crafting.RecipeType; +import net.minecraft.world.level.Level; import org.jetbrains.annotations.NotNull; @Getter public class AutoCrafterMenu extends BaseMachineMenu { private Inventory inventory; - + private final Slot resultSlot; public AutoCrafterMenu(int containerId, Inventory inventory) { - this(containerId, inventory, new SimpleContainer(9)); + this(containerId, inventory, new AutoCrafterContainer(NonNullList.withSize(9, ItemStack.EMPTY))); this.inventory = inventory; } - - public AutoCrafterMenu(int containerId, @NotNull Inventory inventory, @NotNull Container interactMachine) { + public AutoCrafterMenu(int containerId, @NotNull Inventory inventory, @NotNull CraftingContainer interactMachine) { super(ModMenuTypes.AUTO_CRAFTER, containerId, interactMachine); this.inventory = inventory; this.machine.startOpen(inventory.player); @@ -30,6 +35,7 @@ public AutoCrafterMenu(int containerId, @NotNull Inventory inventory, @NotNull C this.addSlot(new AutoCrafterSlot(this.machine, j + i * 3, 26 + j * 18, 18 + i * 18, this)); } } + addSlot(resultSlot = new ReadOnlySlot(new SimpleContainer(1), 0, 8 + 7 * 18, 18 + 2 * 18)); for (i = 0; i < 3; ++i) { for (j = 0; j < 9; ++j) { this.addSlot(new Slot(inventory, j + i * 9 + 9, 8 + j * 18, 84 + i * 18)); @@ -38,26 +44,39 @@ public AutoCrafterMenu(int containerId, @NotNull Inventory inventory, @NotNull C for (i = 0; i < 9; ++i) { this.addSlot(new Slot(inventory, i, 8 + i * 18, 142)); } + updateResult(); } - @Override public void removed(Player player) { super.removed(player); this.machine.stopOpen(player); } - public void setRecordMaterial(boolean record) { if (this.machine instanceof AutoCrafterBlockEntity entity) entity.setRecord(record); } - @SuppressWarnings("BooleanMethodIsAlwaysInverted") public boolean isSlotDisabled(int index) { if (!(this.machine instanceof AutoCrafterBlockEntity entity)) return false; return entity.getDisabled().get(index); } - public void setSlotDisabled(int index, boolean state) { if (!(this.machine instanceof AutoCrafterBlockEntity entity)) return; entity.getDisabled().set(index, state); } + @Override + public void slotsChanged(Container container) { + super.slotsChanged(container); + if (container == getMachine()) { + updateResult(); + } + } + @Override + public CraftingContainer getMachine() { + return (CraftingContainer) super.getMachine(); + } + public void updateResult() { + Level level = getInventory().player.level(); + CraftingRecipe recipe = level.getRecipeManager().getRecipeFor(RecipeType.CRAFTING, getMachine(), level).orElse(null); + getResultSlot().set(recipe == null ? ItemStack.EMPTY : recipe.assemble(getMachine(), level.registryAccess())); + } } diff --git a/src/main/java/dev/dubhe/anvilcraft/inventory/ReadOnlySlot.java b/src/main/java/dev/dubhe/anvilcraft/inventory/ReadOnlySlot.java new file mode 100644 index 000000000..08beda501 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/inventory/ReadOnlySlot.java @@ -0,0 +1,20 @@ +package dev.dubhe.anvilcraft.inventory; + +import net.minecraft.world.Container; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.Slot; +import net.minecraft.world.item.ItemStack; + +public class ReadOnlySlot extends Slot { + public ReadOnlySlot(Container container, int slot, int x, int y) { + super(container, slot, x, y); + } + @Override + public boolean mayPlace(ItemStack stack) { + return false; + } + @Override + public boolean mayPickup(Player player) { + return false; + } +}