From 15a6ab28988ab13638adf70b9ea41d2eb7912337 Mon Sep 17 00:00:00 2001 From: jzitnik-dev Date: Wed, 12 Mar 2025 11:58:07 +0100 Subject: [PATCH] feat: Implemented durability --- src/main/java/cz/jzitnik/game/Game.java | 7 ++- .../cz/jzitnik/game/entities/items/Item.java | 11 +++- .../items/registry/items/ShearsItem.java | 1 + .../java/cz/jzitnik/game/ui/Inventory.java | 59 +++++++++++++------ 4 files changed, 56 insertions(+), 22 deletions(-) diff --git a/src/main/java/cz/jzitnik/game/Game.java b/src/main/java/cz/jzitnik/game/Game.java index ee903f3..9905519 100644 --- a/src/main/java/cz/jzitnik/game/Game.java +++ b/src/main/java/cz/jzitnik/game/Game.java @@ -253,7 +253,12 @@ public class Game implements Serializable { } } - inventory.getItemInHand().ifPresent(Item::use); + if (inventory.getItemInHand().isPresent()) { + boolean broken = inventory.getItemInHand().get().use(); + if (broken) { + inventory.decreaseItemInHand(); + } + } gameStates.dependencies.eventHandlerProvider.handleMine(screenRenderer, this, x, y); diff --git a/src/main/java/cz/jzitnik/game/entities/items/Item.java b/src/main/java/cz/jzitnik/game/entities/items/Item.java index d8c9ec9..58e4f2a 100644 --- a/src/main/java/cz/jzitnik/game/entities/items/Item.java +++ b/src/main/java/cz/jzitnik/game/entities/items/Item.java @@ -8,7 +8,6 @@ import lombok.Getter; import lombok.Setter; import java.io.Serializable; -import java.util.Optional; @Getter @Setter @@ -22,6 +21,7 @@ public class Item implements Serializable { private MyOptional spriteState = MyOptional.empty(); private boolean stackable = true; private int durability; + private int maxDurability; private double miningDecrease = 0; private int stackAmount = 64; private int addHunger = 0; @@ -36,6 +36,7 @@ public class Item implements Serializable { this.sprite = sprite; this.toolVariant = MyOptional.of(toolVariant); this.durability = durability; + this.maxDurability = durability; this.stackable = stackable; this.dealDamage = dealDamage; } @@ -49,6 +50,7 @@ public class Item implements Serializable { this.toolVariant = MyOptional.of(toolVariant); this.miningDecrease = miningDecrease; this.durability = durability; + this.maxDurability = durability; this.stackable = stackable; } @@ -75,8 +77,13 @@ public class Item implements Serializable { this.addHunger = addHunger; } - public void use() { + public boolean use() { durability--; + if (durability == 0) { + return true; + } + + return false; } @Override diff --git a/src/main/java/cz/jzitnik/game/entities/items/registry/items/ShearsItem.java b/src/main/java/cz/jzitnik/game/entities/items/registry/items/ShearsItem.java index 53301f3..0c3e8e8 100644 --- a/src/main/java/cz/jzitnik/game/entities/items/registry/items/ShearsItem.java +++ b/src/main/java/cz/jzitnik/game/entities/items/registry/items/ShearsItem.java @@ -10,5 +10,6 @@ public class ShearsItem extends Item { public ShearsItem() { super("shears", "Shears", ItemType.SHEARS, SpriteLoader.SPRITES.SHEARS); setDurability(238); + setMaxDurability(238); } } diff --git a/src/main/java/cz/jzitnik/game/ui/Inventory.java b/src/main/java/cz/jzitnik/game/ui/Inventory.java index f59a599..465d607 100644 --- a/src/main/java/cz/jzitnik/game/ui/Inventory.java +++ b/src/main/java/cz/jzitnik/game/ui/Inventory.java @@ -237,27 +237,48 @@ public class Inventory implements Serializable { continue; } - if (i == selectedItem) { - sprites.add( - SpriteCombiner - .combineTwoSprites(getHotbarBackground(), - SpriteCombiner.combineTwoSprites( - item.getItem().getFirst().getSpriteState().isPresent() - ? spriteList.getSprite(item.getItem().getFirst().getSprite()) - .getSprite(item.getItem().getFirst().getSpriteState() - .get()) - : spriteList.getSprite(item.getItem().getFirst().getSprite()) - .getSprite(), - Numbers.getNumberSprite(item.getAmount())))); - continue; + StringBuilder stringBuilder = new StringBuilder(); + if (item.getItem().getFirst().getDurability() != 0) { + stringBuilder.append(("\033[0m ".repeat(50) + "\n").repeat(21)); + + stringBuilder.append("\033[0m ".repeat(4)); + int width = (int) (((double) item.getItem().getFirst().getDurability() / item.getItem().getFirst().getMaxDurability()) * 42); + + stringBuilder.append("\033[38;5;231;48;5;231m▓".repeat(width)); + stringBuilder.append("\033[40m ".repeat(42 - width)); + stringBuilder.append("\033[0m ".repeat(4)); + stringBuilder.append("\n"); + + stringBuilder.append(("\033[0m ".repeat(50) + "\n").repeat(3)); } - sprites.add(SpriteCombiner.combineTwoSprites( - item.getItem().getFirst().getSpriteState().isPresent() - ? spriteList.getSprite(item.getItem().getFirst().getSprite()) - .getSprite(item.getItem().getFirst().getSpriteState().get()) - : spriteList.getSprite(item.getItem().getFirst().getSprite()).getSprite(), - Numbers.getNumberSprite(item.getAmount()))); + String sprite; + + if (i == selectedItem) { + sprite = SpriteCombiner + .combineTwoSprites(getHotbarBackground(), + SpriteCombiner.combineTwoSprites( + item.getItem().getFirst().getSpriteState().isPresent() + ? spriteList.getSprite(item.getItem().getFirst().getSprite()) + .getSprite(item.getItem().getFirst().getSpriteState() + .get()) + : spriteList.getSprite(item.getItem().getFirst().getSprite()) + .getSprite(), + Numbers.getNumberSprite(item.getAmount()))); + } else { + sprite = SpriteCombiner.combineTwoSprites( + item.getItem().getFirst().getSpriteState().isPresent() + ? spriteList.getSprite(item.getItem().getFirst().getSprite()) + .getSprite(item.getItem().getFirst().getSpriteState().get()) + : spriteList.getSprite(item.getItem().getFirst().getSprite()).getSprite(), + Numbers.getNumberSprite(item.getAmount())); + } + + if (item.getItem().getFirst().getDurability() == 0) { + sprites.add(sprite); + } else { + sprites.add(SpriteCombiner.combineTwoSprites(sprite, stringBuilder.toString())); + } } return sprites;