feat: Implemented durability

This commit is contained in:
Jakub Žitník 2025-03-12 11:58:07 +01:00
parent 5ae7536125
commit 15a6ab2898
Signed by: jzitnik
GPG Key ID: C577A802A6AF4EF3
4 changed files with 56 additions and 22 deletions

View File

@ -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); gameStates.dependencies.eventHandlerProvider.handleMine(screenRenderer, this, x, y);

View File

@ -8,7 +8,6 @@ import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import java.io.Serializable; import java.io.Serializable;
import java.util.Optional;
@Getter @Getter
@Setter @Setter
@ -22,6 +21,7 @@ public class Item implements Serializable {
private MyOptional<Enum> spriteState = MyOptional.empty(); private MyOptional<Enum> spriteState = MyOptional.empty();
private boolean stackable = true; private boolean stackable = true;
private int durability; private int durability;
private int maxDurability;
private double miningDecrease = 0; private double miningDecrease = 0;
private int stackAmount = 64; private int stackAmount = 64;
private int addHunger = 0; private int addHunger = 0;
@ -36,6 +36,7 @@ public class Item implements Serializable {
this.sprite = sprite; this.sprite = sprite;
this.toolVariant = MyOptional.of(toolVariant); this.toolVariant = MyOptional.of(toolVariant);
this.durability = durability; this.durability = durability;
this.maxDurability = durability;
this.stackable = stackable; this.stackable = stackable;
this.dealDamage = dealDamage; this.dealDamage = dealDamage;
} }
@ -49,6 +50,7 @@ public class Item implements Serializable {
this.toolVariant = MyOptional.of(toolVariant); this.toolVariant = MyOptional.of(toolVariant);
this.miningDecrease = miningDecrease; this.miningDecrease = miningDecrease;
this.durability = durability; this.durability = durability;
this.maxDurability = durability;
this.stackable = stackable; this.stackable = stackable;
} }
@ -75,8 +77,13 @@ public class Item implements Serializable {
this.addHunger = addHunger; this.addHunger = addHunger;
} }
public void use() { public boolean use() {
durability--; durability--;
if (durability == 0) {
return true;
}
return false;
} }
@Override @Override

View File

@ -10,5 +10,6 @@ public class ShearsItem extends Item {
public ShearsItem() { public ShearsItem() {
super("shears", "Shears", ItemType.SHEARS, SpriteLoader.SPRITES.SHEARS); super("shears", "Shears", ItemType.SHEARS, SpriteLoader.SPRITES.SHEARS);
setDurability(238); setDurability(238);
setMaxDurability(238);
} }
} }

View File

@ -237,9 +237,25 @@ public class Inventory implements Serializable {
continue; 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));
}
String sprite;
if (i == selectedItem) { if (i == selectedItem) {
sprites.add( sprite = SpriteCombiner
SpriteCombiner
.combineTwoSprites(getHotbarBackground(), .combineTwoSprites(getHotbarBackground(),
SpriteCombiner.combineTwoSprites( SpriteCombiner.combineTwoSprites(
item.getItem().getFirst().getSpriteState().isPresent() item.getItem().getFirst().getSpriteState().isPresent()
@ -248,16 +264,21 @@ public class Inventory implements Serializable {
.get()) .get())
: spriteList.getSprite(item.getItem().getFirst().getSprite()) : spriteList.getSprite(item.getItem().getFirst().getSprite())
.getSprite(), .getSprite(),
Numbers.getNumberSprite(item.getAmount())))); Numbers.getNumberSprite(item.getAmount())));
continue; } else {
} sprite = SpriteCombiner.combineTwoSprites(
sprites.add(SpriteCombiner.combineTwoSprites(
item.getItem().getFirst().getSpriteState().isPresent() item.getItem().getFirst().getSpriteState().isPresent()
? spriteList.getSprite(item.getItem().getFirst().getSprite()) ? spriteList.getSprite(item.getItem().getFirst().getSprite())
.getSprite(item.getItem().getFirst().getSpriteState().get()) .getSprite(item.getItem().getFirst().getSpriteState().get())
: spriteList.getSprite(item.getItem().getFirst().getSprite()).getSprite(), : spriteList.getSprite(item.getItem().getFirst().getSprite()).getSprite(),
Numbers.getNumberSprite(item.getAmount()))); Numbers.getNumberSprite(item.getAmount()));
}
if (item.getItem().getFirst().getDurability() == 0) {
sprites.add(sprite);
} else {
sprites.add(SpriteCombiner.combineTwoSprites(sprite, stringBuilder.toString()));
}
} }
return sprites; return sprites;