#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!
Some checks are pending
build / build (21) (push) Waiting to run

This commit is contained in:
Jkibbels 2025-03-27 22:48:13 -04:00
parent 56537ebb77
commit 2c32440fc4
7 changed files with 71 additions and 18 deletions

View File

@ -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);

View File

@ -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);

View File

@ -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();
}

View File

@ -60,13 +60,24 @@ public class ShopKeeperMenu extends HandledScreen<ShopKeeperHandler> {
// 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<ShopKeeperHandler> {
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<ShopKeeperHandler> {
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<ShopKeeperHandler> {
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();
}

View File

@ -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<? extends VillagerEntity> entityType, World world) {
super(entityType, world);
}

View File

@ -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<StoreItem>();
// 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;
}

View File

@ -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() {