mdbd/src/main/java/dev/loki/item/ChestLoot.java
2026-06-10 23:00:12 +02:00

60 lines
2.1 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package dev.loki.item;
import org.bukkit.inventory.ItemStack;
import java.util.Random;
import java.util.concurrent.ThreadLocalRandom;
/**
* Генератор случайного лута для сундуков.
* Может выдать: Медкит (разное количество зарядов), Набор для срезания.
*/
public class ChestLoot {
private final Random random;
// Веса для разных типов лута (из конфига game.yml: loot.*)
private final int medkitWeight;
private final int medkitMinCharges;
private final int medkitMaxCharges;
private final int hookCutterWeight;
/** Config-aware constructor. */
public ChestLoot(dev.loki.config.GameConfig config) {
this.random = ThreadLocalRandom.current();
var cfg = config.getConfig();
this.medkitWeight = cfg.getInt("loot.medkit.weight", 60);
this.medkitMinCharges = cfg.getInt("loot.medkit.min-charges", 12);
this.medkitMaxCharges = cfg.getInt("loot.medkit.max-charges", 16);
this.hookCutterWeight = cfg.getInt("loot.hook-cutter.weight", 40);
}
/** Fallback — hardcoded defaults. */
public ChestLoot() {
this.random = ThreadLocalRandom.current();
this.medkitWeight = 60;
this.medkitMinCharges = 12;
this.medkitMaxCharges = 16;
this.hookCutterWeight = 40;
}
/**
* Бросает кубик и возвращает случайный предмет.
* Никогда не возвращает null.
*/
public ItemStack rollLoot() {
int total = medkitWeight + hookCutterWeight;
if (total <= 0) {
return DBDItems.medkit(12);
}
int roll = random.nextInt(total);
if (roll < medkitWeight) {
int charges = medkitMinCharges + random.nextInt(Math.max(1, medkitMaxCharges - medkitMinCharges + 1));
return DBDItems.medkit(charges);
} else {
return DBDItems.hookCutter();
}
}
}