From 2c32440fc4d91af8044ce100987b8ce701535a74 Mon Sep 17 00:00:00 2001 From: Jkibbels Date: Thu, 27 Mar 2025 22:48:13 -0400 Subject: [PATCH] #3 Shops update! Corrected drawing on slot items in the catalogue menu to be drawn by the slot menu itself and not the catalogue menu. This allows slot menu to draw items in it among other things! --- .../gui/Generics/ClickableLayer.java | 7 ++++ .../gui/ShopKeeperGUI/DrawableStoreItem.java | 18 +++++++- .../ShopKeeperGUI/MerchandiseScroller.java | 5 ++- .../gui/ShopKeeperGUI/ShopKeeperMenu.java | 41 +++++++++++++------ .../keeblarcraft/Entities/ShopKeeper.java | 2 + .../ShopKeeper/ShopKeeperInventory.java | 4 +- .../GuiMgr/ShopKeeper/StoreItem.java | 12 +++++- 7 files changed, 71 insertions(+), 18 deletions(-) diff --git a/src/client/java/jesse/keeblarcraft/gui/Generics/ClickableLayer.java b/src/client/java/jesse/keeblarcraft/gui/Generics/ClickableLayer.java index 41fea1d..fc54f66 100644 --- a/src/client/java/jesse/keeblarcraft/gui/Generics/ClickableLayer.java +++ b/src/client/java/jesse/keeblarcraft/gui/Generics/ClickableLayer.java @@ -27,6 +27,13 @@ abstract public class ClickableLayer extends ClickableWidget { this.layerName = layerName; } + public void ResetLayer(int startX, int startY, int width, int height) { + this.setX(startX); + this.setY(startY); + this.setWidth(width); + this.setHeight(height); + } + protected void ResizeLayer(int width, int height) { this.setWidth(width); this.setHeight(height); diff --git a/src/client/java/jesse/keeblarcraft/gui/ShopKeeperGUI/DrawableStoreItem.java b/src/client/java/jesse/keeblarcraft/gui/ShopKeeperGUI/DrawableStoreItem.java index 0e7a0d6..4e2c465 100644 --- a/src/client/java/jesse/keeblarcraft/gui/ShopKeeperGUI/DrawableStoreItem.java +++ b/src/client/java/jesse/keeblarcraft/gui/ShopKeeperGUI/DrawableStoreItem.java @@ -2,7 +2,9 @@ package jesse.keeblarcraft.gui.ShopKeeperGUI; import jesse.keeblarcraft.Keeblarcraft; import jesse.keeblarcraft.gui.Generics.ClickableLayer; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder; +import net.minecraft.item.ItemStack; import net.minecraft.text.Text; import net.minecraft.util.Identifier; @@ -13,9 +15,11 @@ public class DrawableStoreItem extends ClickableLayer { private Integer itemCost; private String itemName; private Integer amountSelected = 0; + ItemStack itemTextureId; - public DrawableStoreItem(String itemName, Integer itemCost) { + public DrawableStoreItem(String itemName, Integer itemCost, ItemStack itemTextureId) { this(itemName, itemCost, Text.of(""), 85, 50); + this.itemTextureId = itemTextureId; } public DrawableStoreItem(String itemName, Integer itemCost, Text layerName, int width, int height) { @@ -37,6 +41,18 @@ public class DrawableStoreItem extends ClickableLayer { System.out.println("Current buy amount: " + this.amountSelected); } + @Override + public void renderButton(DrawContext context, int mouseX, int mouseY, float delta) { + super.renderButton(context, mouseX, mouseY, delta); + + // Now we want to draw the item icon in the icon slot + if (this.itemTextureId != null) { + context.drawItem(this.itemTextureId, this.getX() + 13, this.getY() + 22); // TODO: Need to correct offest to draw + } else { + // TODO: Add default icon to draw if no texture is set or could be found for item + } + } + public void Subtract() { --this.amountSelected; System.out.println("Current buy amount: " + this.amountSelected); diff --git a/src/client/java/jesse/keeblarcraft/gui/ShopKeeperGUI/MerchandiseScroller.java b/src/client/java/jesse/keeblarcraft/gui/ShopKeeperGUI/MerchandiseScroller.java index 50e7c00..69e7de1 100644 --- a/src/client/java/jesse/keeblarcraft/gui/ShopKeeperGUI/MerchandiseScroller.java +++ b/src/client/java/jesse/keeblarcraft/gui/ShopKeeperGUI/MerchandiseScroller.java @@ -57,7 +57,8 @@ public class MerchandiseScroller extends ClickableLayer { // System.out.println("DRAWX DRAWY WIDTH HEIGHT: " + drawX + " " + drawY + " " + storeItem.getWidth() + " " + storeItem.getHeight()); // uv values can be changed for smooth scrolling in the future; but for now with jar-scrolling we will be // scrolling at least 1 height value of the store stuff - context.drawTexture(storeItem.GetTexture(), drawX, drawY, 0, 0, storeItem.getWidth(), storeItem.getHeight(), storeItem.getWidth(), storeItem.getHeight()); + storeItem.ResetLayer(drawX, drawY, storeItem.getWidth(), storeItem.getHeight()); + storeItem.renderButton(context, mouseX, mouseY, delta); // The draw item will draw out its contents like item icons, menu info, etc if (oscillator % 2 == 0) { // Even implies we are going to odd; which means this is xScalar+1 @@ -89,7 +90,7 @@ public class MerchandiseScroller extends ClickableLayer { public void Add(StoreItem item) { storeInventory.Add(item); - drawableInventory.put(item.GetUPC(), new DrawableStoreItem(item.GetName(), item.GetCost())); + drawableInventory.put(item.GetUPC(), new DrawableStoreItem(item.GetName(), item.GetCost(), item.GetItem())); ResizeDrawlist(); } diff --git a/src/client/java/jesse/keeblarcraft/gui/ShopKeeperGUI/ShopKeeperMenu.java b/src/client/java/jesse/keeblarcraft/gui/ShopKeeperGUI/ShopKeeperMenu.java index 86c6a78..17442a0 100644 --- a/src/client/java/jesse/keeblarcraft/gui/ShopKeeperGUI/ShopKeeperMenu.java +++ b/src/client/java/jesse/keeblarcraft/gui/ShopKeeperGUI/ShopKeeperMenu.java @@ -60,13 +60,24 @@ public class ShopKeeperMenu extends HandledScreen { // This is for temporary testing - StoreItem newMerch = new StoreItem("Dirt block", "minecraft:dirt_block", 10000000); - StoreItem newMerch2 = new StoreItem("Dirt block2", "minecraft:dirt_block2", 10000000); - StoreItem newMerch3 = new StoreItem("Dirt block3", "minecraft:dirt_block3", 10000000); - StoreItem newMerch4 = new StoreItem("Dirt block4", "minecraft:dirt_block4", 10000000); - StoreItem newMerch5 = new StoreItem("Dirt block5", "minecraft:dirt_block5", 10000000); - StoreItem newMerch6 = new StoreItem("Dirt block6", "minecraft:dirt_block6", 10000000); - StoreItem newMerch7 = new StoreItem("Dirt block7", "minecraft:dirt_block7", 10000000); + StoreItem newMerch = new StoreItem("Dirt block", "minecraft:dirt_block", 10000000, Items.DIRT.getDefaultStack()); + StoreItem newMerch2 = new StoreItem("Dirt block2", "minecraft:dirt_block2", 10000000, Items.DIRT.getDefaultStack()); + StoreItem newMerch3 = new StoreItem("Dirt block3", "minecraft:dirt_block3", 10000000, Items.DIRT.getDefaultStack()); + StoreItem newMerch4 = new StoreItem("Dirt block4", "minecraft:dirt_block4", 10000000, Items.DIRT.getDefaultStack()); + StoreItem newMerch5 = new StoreItem("Dirt block5", "minecraft:dirt_block5", 10000000, Items.DIRT.getDefaultStack()); + StoreItem newMerch6 = new StoreItem("Dirt block6", "minecraft:dirt_block6", 10000000, Items.DIRT.getDefaultStack()); + StoreItem newMerch7 = new StoreItem("Dirt block7", "minecraft:dirt_block7", 10000000, Items.DIRT.getDefaultStack()); + StoreItem newMerch8 = new StoreItem("Dirt block8", "minecraft:dirt_block8", 10000000, Items.DIRT.getDefaultStack()); + StoreItem newMerch9 = new StoreItem("Dirt block9", "minecraft:dirt_block9", 10000000, Items.DIRT.getDefaultStack()); + StoreItem newMerch10 = new StoreItem("Dirt block10", "minecraft:dirt_block10", 10000000, Items.DIRT.getDefaultStack()); + StoreItem newMerch11 = new StoreItem("Dirt block11", "minecraft:dirt_block11", 10000000, Items.DIRT.getDefaultStack()); + StoreItem newMerch12 = new StoreItem("Dirt block711", "minecraft:dirt_block12", 10000000, Items.DIRT.getDefaultStack()); + StoreItem newMerch13 = new StoreItem("Dirt block711", "minecraft:dirt_block13", 10000000, Items.DIRT.getDefaultStack()); + StoreItem newMerch14 = new StoreItem("Dirt block711", "minecraft:dirt_block14", 10000000, Items.DIRT.getDefaultStack()); + StoreItem newMerch15 = new StoreItem("Dirt block71", "minecraft:dirt_block15", 10000000, Items.DIRT.getDefaultStack()); + StoreItem newMerch16 = new StoreItem("Dirt block711111", "minecraft:dirt_block16", 10000000, Items.DIRT.getDefaultStack()); + StoreItem newMerch17 = new StoreItem("Dirt block711", "minecraft:dirt_block17", 10000000, Items.DIRT.getDefaultStack()); + StoreItem newMerch18 = new StoreItem("Dirt block711", "minecraft:dirt_block18", 10000000, Items.DIRT.getDefaultStack()); catalogue.Add(newMerch); @@ -76,6 +87,17 @@ public class ShopKeeperMenu extends HandledScreen { catalogue.Add(newMerch5); catalogue.Add(newMerch6); catalogue.Add(newMerch7); + catalogue.Add(newMerch8); + catalogue.Add(newMerch9); + catalogue.Add(newMerch10); + catalogue.Add(newMerch11); + catalogue.Add(newMerch12); + catalogue.Add(newMerch13); + catalogue.Add(newMerch14); + catalogue.Add(newMerch15); + catalogue.Add(newMerch16); + catalogue.Add(newMerch17); + catalogue.Add(newMerch18); @@ -99,9 +121,6 @@ public class ShopKeeperMenu extends HandledScreen { this.getScreenHandler().showSlot("add_item_menu", "add_item_slot"); - // TODO: Temporary to just prove a point that we can draw item icons in the menu - ItemStack tempStack = Items.ACACIA_DOOR.getDefaultStack(); - catalogue.UpdateScrollAmount(scrollbar.GetScrollDistance()); catalogue.renderButton(context, mouseX, mouseY, delta); @@ -117,8 +136,6 @@ public class ShopKeeperMenu extends HandledScreen { ToggleSlots(subLayer.GetLayerName().getString(), subLayer.GetDrawableSlots()); } - // TODO: HACK to see if this works - context.drawItem(tempStack, this.x, this.y); // TODO: REMOVE // We only notify the parent to update sub layers. It must manage its own sub layers layer.UpdateSubLayers(); } diff --git a/src/main/java/jesse/keeblarcraft/Entities/ShopKeeper.java b/src/main/java/jesse/keeblarcraft/Entities/ShopKeeper.java index c22f206..530e70d 100644 --- a/src/main/java/jesse/keeblarcraft/Entities/ShopKeeper.java +++ b/src/main/java/jesse/keeblarcraft/Entities/ShopKeeper.java @@ -15,6 +15,8 @@ import net.minecraft.world.World; import java.util.OptionalInt; public class ShopKeeper extends VillagerEntity { + private final int MAX_STORE_ITEMS = 64; // TODO: May be in wrong area. Number will be QA tested from scrolling amount + public ShopKeeper(EntityType entityType, World world) { super(entityType, world); } diff --git a/src/main/java/jesse/keeblarcraft/GuiMgr/ShopKeeper/ShopKeeperInventory.java b/src/main/java/jesse/keeblarcraft/GuiMgr/ShopKeeper/ShopKeeperInventory.java index 1e9bfd0..4aa19e4 100644 --- a/src/main/java/jesse/keeblarcraft/GuiMgr/ShopKeeper/ShopKeeperInventory.java +++ b/src/main/java/jesse/keeblarcraft/GuiMgr/ShopKeeper/ShopKeeperInventory.java @@ -1,5 +1,6 @@ package jesse.keeblarcraft.GuiMgr.ShopKeeper; +import net.minecraft.item.Items; import net.minecraft.village.MerchantInventory; import java.util.ArrayList; @@ -12,7 +13,8 @@ public class ShopKeeperInventory { public ShopKeeperInventory(MerchantInventory merchantInventory) { items = new ArrayList(); // This is temporary to see if this stuff works client->server->client etc - items.add(new StoreItem("Among Us Statue", "$$$$$$$$$$", 10000)); + // Also default item for now is a dirt block because why not! + items.add(new StoreItem("Among Us Statue", "$$$$$$$$$$", 10000, Items.DIRT.getDefaultStack())); this.merchantInventory = merchantInventory; } diff --git a/src/main/java/jesse/keeblarcraft/GuiMgr/ShopKeeper/StoreItem.java b/src/main/java/jesse/keeblarcraft/GuiMgr/ShopKeeper/StoreItem.java index 2467e81..1d75462 100644 --- a/src/main/java/jesse/keeblarcraft/GuiMgr/ShopKeeper/StoreItem.java +++ b/src/main/java/jesse/keeblarcraft/GuiMgr/ShopKeeper/StoreItem.java @@ -1,19 +1,27 @@ package jesse.keeblarcraft.GuiMgr.ShopKeeper; +import net.minecraft.item.ItemStack; + // All the custom content that a store item will have. Handled by @see MerchandiseScroller.java public class StoreItem { private Integer itemCost; private String itemName; private String upc; + private ItemStack storeItem; - public StoreItem(String itemName, String upc, Integer cost) { + public StoreItem(String itemName, String upc, Integer cost, ItemStack storeItem) { this.itemName = itemName; this.upc = upc; this.itemCost = cost; + this.storeItem = storeItem; } public String GetName() { - return itemName; + return this.itemName; + } + + public ItemStack GetItem() { + return this.storeItem; } public String GetUPC() {