feat: DBD custom items - medkit/flashlight/toolbox/key/map with charges, ItemUseListener, starting items for survivors

This commit is contained in:
loki5512344 2026-06-03 21:26:25 +02:00
parent 371384ca8a
commit f9847dbb73
4 changed files with 495 additions and 57 deletions

View file

@ -13,65 +13,14 @@ public class ChestLoot {
this.random = ThreadLocalRandom.current();
}
/** Roll a random item with weighted probabilities. */
public ItemStack rollLoot() {
int roll = random.nextInt(100);
int currentWeight = 0;
currentWeight += 30;
if (roll < currentWeight) {
return createMedkit();
}
currentWeight += 25;
if (roll < currentWeight) {
return createFlashlight();
}
currentWeight += 25;
if (roll < currentWeight) {
return createToolbox();
}
currentWeight += 12;
if (roll < currentWeight) {
return createKey();
}
return createMap();
}
private ItemStack createMedkit() {
int charges = 12 + random.nextInt(8);
return new ItemMedkit(charges).createItemStack();
}
private ItemStack createFlashlight() {
int charges = 6 + random.nextInt(6);
return new ItemFlashlight(charges).createItemStack();
}
private ItemStack createToolbox() {
int charges = 10 + random.nextInt(10);
return new ItemToolbox(charges).createItemStack();
}
private ItemStack createKey() {
int charges = 24 + random.nextInt(16);
return new ItemKey(charges).createItemStack();
}
private ItemStack createMap() {
int charges = 8 + random.nextInt(12);
return new ItemMap(charges).createItemStack();
}
public int getRarity(ItemType type) {
return switch (type) {
case MEDKIT -> 30;
case FLASHLIGHT -> 25;
case TOOLBOX -> 25;
case KEY -> 12;
case MAP -> 8;
};
if (roll < 30) return DBDItems.medkit(12 + random.nextInt(5)); // 30%
if (roll < 55) return DBDItems.flashlight(6 + random.nextInt(4)); // 25%
if (roll < 80) return DBDItems.toolbox(10 + random.nextInt(7)); // 25%
if (roll < 92) return DBDItems.key(24 + random.nextInt(9)); // 12%
return DBDItems.map(8 + random.nextInt(9)); // 8%
}
}