UltimateStacker/UltimateStacker-Plugin/src/main/java/com.craftaro.ultimatestacker/lootables/LootablesManager.java

884 lines
39 KiB
Java
Raw Normal View History

2023-05-25 19:20:03 +02:00
package com.craftaro.ultimatestacker.lootables;
2019-07-08 18:39:57 +02:00
import com.craftaro.core.compatibility.ServerVersion;
import com.craftaro.core.lootables.Lootables;
import com.craftaro.core.lootables.Modify;
import com.craftaro.core.lootables.loot.Drop;
import com.craftaro.core.lootables.loot.Loot;
import com.craftaro.core.lootables.loot.LootBuilder;
import com.craftaro.core.lootables.loot.LootManager;
import com.craftaro.core.lootables.loot.Lootable;
2024-01-07 12:16:27 +01:00
import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial;
import com.craftaro.ultimatestacker.UltimateStacker;
2024-01-07 12:16:27 +01:00
import com.craftaro.ultimatestacker.hook.hooks.SuperiorSkyblock2Hook;
import com.craftaro.ultimatestacker.settings.Settings;
2019-07-23 16:55:56 +02:00
import org.bukkit.enchantments.Enchantment;
2020-09-01 20:44:39 +02:00
import org.bukkit.entity.Ageable;
import org.bukkit.entity.Creeper;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Projectile;
import org.bukkit.entity.Sheep;
import org.bukkit.entity.Zombie;
2019-08-23 18:30:48 +02:00
import org.bukkit.event.entity.EntityDamageByEntityEvent;
2023-01-16 21:32:17 +01:00
import org.bukkit.inventory.ItemStack;
2019-07-08 18:39:57 +02:00
2019-07-23 16:55:49 +02:00
import java.io.File;
2019-07-23 16:55:56 +02:00
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.ThreadLocalRandom;
2023-01-16 21:32:17 +01:00
import java.util.stream.Collectors;
2019-07-08 18:39:57 +02:00
2019-07-23 16:55:56 +02:00
public class LootablesManager {
2019-07-08 18:39:57 +02:00
private final Lootables lootables;
2019-07-08 18:39:57 +02:00
2019-07-23 16:55:56 +02:00
private final LootManager lootManager;
2019-07-08 18:39:57 +02:00
2019-07-23 16:55:49 +02:00
private final String lootablesDir = UltimateStacker.getInstance().getDataFolder() + File.separator + "lootables";
private final static int MAX_INT = Integer.MAX_VALUE/2;
2019-07-08 18:39:57 +02:00
2019-07-23 16:55:56 +02:00
public LootablesManager() {
this.lootables = new Lootables(lootablesDir);
this.lootManager = new LootManager(lootables);
2019-07-23 16:55:56 +02:00
}
public List<Drop> getDrops(LivingEntity entity) {
List<Drop> toDrop = new ArrayList<>();
if (entity instanceof Ageable && !((Ageable) entity).isAdult() && !(entity instanceof Zombie)
2019-07-23 16:55:56 +02:00
|| !lootManager.getRegisteredLootables().containsKey(entity.getType().name())) return toDrop;
Lootable lootable = lootManager.getRegisteredLootables().get(entity.getType().name());
int looting = entity.getKiller() != null
&& entity.getKiller().getItemInHand().containsEnchantment(Enchantment.LOOT_BONUS_MOBS)
? entity.getKiller().getItemInHand().getEnchantmentLevel(Enchantment.LOOT_BONUS_MOBS)
: 0;
2019-09-07 23:55:16 +02:00
int rerollChance = Settings.REROLL.getBoolean() ? looting / (looting + 1) : 0;
2019-07-23 16:55:56 +02:00
for (Loot loot : lootable.getRegisteredLoot())
toDrop.addAll(runLoot(entity, loot, rerollChance, looting));
return toDrop;
}
private List<Drop> runLoot(LivingEntity entity, Loot loot, int rerollChance, int looting) {
Modify modify = null;
2020-06-14 18:15:20 +02:00
if (entity instanceof Sheep) {
2019-07-23 16:55:56 +02:00
modify = (Loot loot2) -> {
2023-06-29 11:18:18 +02:00
XMaterial material = loot2.getMaterial();
if (material != null && material.name().contains("WOOL") && ((Sheep) entity).getColor() != null) {
2019-07-23 16:55:56 +02:00
if (((Sheep) entity).isSheared()) return null;
if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13))
2023-06-29 11:18:18 +02:00
loot2.setMaterial(XMaterial.valueOf(((Sheep) entity).getColor() + "_WOOL"));
2019-07-23 16:55:56 +02:00
}
return loot2;
};
}
2019-08-23 18:30:48 +02:00
EntityType killer = null;
Entity killerEntity = null;
2019-08-23 18:30:48 +02:00
if (entity.getLastDamageCause() instanceof EntityDamageByEntityEvent) {
killerEntity = ((EntityDamageByEntityEvent) entity.getLastDamageCause()).getDamager();
2020-08-31 17:55:42 +02:00
killer = killerEntity.getType();
2019-08-23 18:30:48 +02:00
if (killerEntity instanceof Projectile) {
Projectile projectile = (Projectile) killerEntity;
if (projectile.getShooter() instanceof Entity) {
2020-08-31 17:55:42 +02:00
killerEntity = ((Entity) projectile.getShooter());
killer = killerEntity.getType();
}
2019-08-23 18:30:48 +02:00
}
}
2019-07-23 16:55:56 +02:00
return lootManager.runLoot(modify,
entity.getFireTicks() > 0,
killerEntity instanceof Creeper && ((Creeper) killerEntity).isPowered(),
2019-07-23 16:55:56 +02:00
entity.getKiller() != null ? entity.getKiller().getItemInHand() : null,
2019-08-23 18:30:48 +02:00
killer,
2019-07-23 16:55:56 +02:00
loot,
rerollChance,
looting);
}
2023-03-29 21:21:00 +02:00
public List<ItemStack> getItemStackDrops(LivingEntity entity, int times) {
return getDrops(entity, times).stream().map(Drop::getItemStack).collect(Collectors.toList());
}
public List<Drop> getDrops(LivingEntity entity, int times) {
2023-01-16 21:32:17 +01:00
return getDrops(entity, times, 3);
}
public List<Drop> getDrops(LivingEntity entity, int times, int attempts) {
attempts--;
List<Drop> toDrop = new ArrayList<>();
if (entity instanceof Ageable && !((Ageable) entity).isAdult() && !(entity instanceof Zombie)
|| !lootManager.getRegisteredLootables().containsKey(entity.getType().name())) return toDrop;
Lootable lootable = lootManager.getRegisteredLootables().get(entity.getType().name());
int looting = entity.getKiller() != null
&& entity.getKiller().getItemInHand().containsEnchantment(Enchantment.LOOT_BONUS_MOBS)
? entity.getKiller().getItemInHand().getEnchantmentLevel(Enchantment.LOOT_BONUS_MOBS)
: 0;
2023-01-16 21:32:17 +01:00
double extraChance = looting / (looting + 1.0);
2023-01-16 21:32:17 +01:00
boolean isCharged = entity instanceof Creeper && ((Creeper) entity).isPowered();
//Run main loot
2023-10-09 17:43:32 +02:00
for (Loot loot : lootable.getRegisteredLoot()) {
2023-01-16 21:32:17 +01:00
if (loot.isRequireCharged() && !isCharged) continue;
2023-10-09 17:43:32 +02:00
if (!loot.getOnlyDropFor().isEmpty() && loot.getOnlyDropFor().stream().noneMatch(type -> entity.getKiller() != null && type == entity.getKiller().getType())) continue;
2023-01-16 21:32:17 +01:00
int finalLooting = loot.isAllowLootingEnchant() ? looting : 0;
long max = (long) (((long) (loot.getMax() + finalLooting) * times) * (loot.getChance()/100 + (loot.isAllowLootingEnchant() ? extraChance : 0)));
long min = (long) ((loot.getMin()) * times * (loot.getChance()/100));
2023-01-16 21:32:17 +01:00
long amount = ThreadLocalRandom.current().nextLong((max - min) + 1) + min;
2023-01-16 21:32:17 +01:00
2023-10-09 17:43:32 +02:00
if (loot.getMaterial() != null && amount > 0) {
2023-01-16 21:32:17 +01:00
ItemStack item = entity.getFireTicks() > 0
2023-06-29 11:18:18 +02:00
? loot.getBurnedMaterial() != null ? loot.getBurnedMaterial().parseItem() : loot.getMaterial().parseItem()
: loot.getMaterial().parseItem();
if (amount > MAX_INT) {
while (amount > MAX_INT) {
ItemStack loop = item.clone();
loop.setAmount(MAX_INT);
amount -= MAX_INT;
toDrop.add(new Drop(loop));
}
}
//Leftover
item.setAmount((int) amount);
2023-01-16 21:32:17 +01:00
toDrop.add(new Drop(item));
}
2023-10-09 17:43:32 +02:00
//Run child loot //TODO: remove duplicated code
2023-01-16 21:32:17 +01:00
for (Loot child : loot.getChildLoot()) {
if (child.isRequireCharged() && !isCharged) continue;
if (child.getOnlyDropFor().size() != 0 && child.getOnlyDropFor().stream().noneMatch(type -> entity.getKiller() != null && type == entity.getKiller().getType())) continue;
int choildFinalLooting = child.isAllowLootingEnchant() ? looting : 0;
2023-01-16 21:32:17 +01:00
long childMax = (long) (((long) (child.getMax() + finalLooting) * times) * (child.getChance()/100 + (child.isAllowLootingEnchant() ? extraChance : 0)));
long childmin = (long) ((child.getMin()) * times * (child.getChance()/100));
childmin = (long) (childmin - childmin*0.90);
2023-01-16 21:32:17 +01:00
long childamount = ThreadLocalRandom.current().nextLong((childMax - childmin) + 1) + childmin;
2023-01-16 21:32:17 +01:00
if (childamount > 0) {
2023-01-16 21:32:17 +01:00
ItemStack item = entity.getFireTicks() > 0
2023-06-29 11:18:18 +02:00
? child.getBurnedMaterial() != null ? child.getBurnedMaterial().parseItem() : child.getMaterial().parseItem()
: child.getMaterial().parseItem();
if (childamount > MAX_INT) {
while (childamount > MAX_INT) {
ItemStack loop = item.clone();
loop.setAmount(MAX_INT);
childamount -= MAX_INT;
toDrop.add(new Drop(loop));
}
}
//Leftover
item.setAmount((int) childamount);
2023-01-16 21:32:17 +01:00
toDrop.add(new Drop(item));
}
2023-01-16 21:32:17 +01:00
}
}
2023-01-16 21:32:17 +01:00
if (toDrop.isEmpty() && attempts > 0) {
2023-01-16 21:32:17 +01:00
return getDrops(entity, times, attempts);
}
return toDrop;
}
2019-07-08 18:39:57 +02:00
public void createDefaultLootables() {
if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_17)) {
// Add Glow Squid.
lootManager.addLootable(new Lootable("GLOW_SQUID",
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.GLOW_INK_SAC)
.setMin(1)
.setMax(3).build()));
// Add Glow Squid.
lootManager.addLootable(new Lootable("SQUID",
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.GLOW_INK_SAC)
.setMin(1)
.setMax(3).build()));
}
2019-09-03 22:38:00 +02:00
if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_14)) {
2019-07-08 18:39:57 +02:00
// Add Trader Llama.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("TRADER_LLAMA",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.LEATHER)
2019-07-08 18:39:57 +02:00
.setMin(0)
.setMax(2).build()));
// Add Pillager.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("PILLAGER",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.ARROW)
2019-07-08 18:39:57 +02:00
.setMin(0)
.setMax(2).build()));
// Add Ravager.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("RAVAGER",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.SADDLE).build()));
2019-07-08 18:39:57 +02:00
// Add Cat.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("CAT",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.STRING).build()));
2019-07-08 18:39:57 +02:00
// Add Panda.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("PANDA",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.BAMBOO)
2019-07-08 18:39:57 +02:00
.setMin(0)
.setMax(2).build()));
}
2019-09-03 22:38:00 +02:00
if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13)) {
2019-07-08 18:39:57 +02:00
// Add Phantom.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("PHANTOM",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.PHANTOM_MEMBRANE)
2019-07-08 18:39:57 +02:00
.setMin(0)
.setMax(1)
.addOnlyDropFors(EntityType.PLAYER).build()));
// Add Pufferfish.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("PUFFERFISH",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.PUFFERFISH).build(),
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.BONE_MEAL)
2019-07-08 18:39:57 +02:00
.setChance(5).build()));
// Add Salmon.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("SALMON",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.SALMON)
.setBurnedMaterial(XMaterial.COOKED_SALMON).build(),
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.BONE_MEAL)
2019-07-08 18:39:57 +02:00
.setChance(5).build()));
// Add Tropical Fish.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("TROPICAL_FISH",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.TROPICAL_FISH).build(),
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.BONE_MEAL)
2019-07-08 18:39:57 +02:00
.setChance(5).build(),
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.BONE)
.setMin(1)
.setMax(2)
.setChance(25)
2019-07-08 18:39:57 +02:00
.addOnlyDropFors(EntityType.PLAYER).build()));
// Add Dolphin.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("DOLPHIN",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.COD)
.setBurnedMaterial(XMaterial.COOKED_COD)
2019-07-08 18:39:57 +02:00
.setMin(0)
.setMax(1).build()));
// Add Cod.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("COD",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.COD)
.setBurnedMaterial(XMaterial.COOKED_COD).build(),
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.BONE_MEAL)
2019-07-08 18:39:57 +02:00
.setChance(5).build()));
// Add Turtle.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("TURTLE",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.SEAGRASS)
2019-07-08 18:39:57 +02:00
.setMin(0)
.setMax(2).build()));
// Add Drowned.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("DROWNED",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.ROTTEN_FLESH)
2019-07-08 18:39:57 +02:00
.setMin(0)
.setMax(2).build(),
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.GOLD_INGOT)
2019-07-08 18:39:57 +02:00
.setChance(5)
.addOnlyDropFors(EntityType.PLAYER).build()));
}
2019-09-03 22:38:00 +02:00
if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_12)) {
// Add Parrot.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("PARROT",
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.FEATHER)
.setMin(1)
.setMax(2).build()));
}
2019-07-08 18:39:57 +02:00
2019-09-03 23:08:30 +02:00
Loot fish1 = new LootBuilder()
.addChildLoot(new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.COD)
.setBurnedMaterial(XMaterial.COOKED_COD)
.setChance(50).build(),
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.PRISMARINE_CRYSTALS)
.setChance(33).build())
.build();
2019-07-08 18:39:57 +02:00
2019-09-03 23:08:30 +02:00
Loot fish2 = new LootBuilder()
2019-07-08 18:39:57 +02:00
.setChance(2.5)
.addChildLoot(new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.COD)
2019-07-08 18:39:57 +02:00
.setChance(60)
.setAllowLootingEnchant(false).build(),
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.SALMON)
2019-07-08 18:39:57 +02:00
.setChance(25)
.setAllowLootingEnchant(false).build(),
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.PUFFERFISH)
2019-07-08 18:39:57 +02:00
.setChance(13)
.setAllowLootingEnchant(false).build(),
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.TROPICAL_FISH)
2019-07-08 18:39:57 +02:00
.setChance(2)
.setAllowLootingEnchant(false).build())
2019-09-03 23:08:30 +02:00
.addOnlyDropFors(EntityType.PLAYER).build();
2019-07-08 18:39:57 +02:00
2019-09-03 22:38:00 +02:00
if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_11)) {
2019-07-08 18:39:57 +02:00
// Add Zombie Villager.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("ZOMBIE_VILLAGER",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.ROTTEN_FLESH)
2019-07-08 18:39:57 +02:00
.setMin(0)
.setMax(2).build(),
new LootBuilder()
.setChance(2.5)
.setChildDropCount(1)
.addOnlyDropFors(EntityType.PLAYER)
2023-06-29 11:18:18 +02:00
.addChildLoot(new LootBuilder().setMaterial(XMaterial.IRON_INGOT)
2019-07-08 18:39:57 +02:00
.setAllowLootingEnchant(false).build(),
2023-06-29 11:18:18 +02:00
new LootBuilder().setMaterial(XMaterial.CARROT)
2019-07-08 18:39:57 +02:00
.setAllowLootingEnchant(false).build(),
2023-06-29 11:18:18 +02:00
new LootBuilder().setMaterial(XMaterial.POTATO)
2019-07-08 18:39:57 +02:00
.setAllowLootingEnchant(false).build())
.build()));
2019-07-08 21:42:19 +02:00
// Add Llama.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("LLAMA",
2019-07-08 21:42:19 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.LEATHER)
2019-07-08 21:42:19 +02:00
.setMin(0)
.setMax(2).build()));
2019-07-08 18:39:57 +02:00
// Add Zombie Horse.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("ZOMBIE_HORSE",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.ROTTEN_FLESH)
2019-07-08 18:39:57 +02:00
.setMin(0)
.setMax(2).build()));
// Add Elder Guardian.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("ELDER_GUARDIAN",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.PRISMARINE_SHARD)
2019-07-08 18:39:57 +02:00
.setMin(0)
.setMax(2).build(),
fish1,
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.SPONGE)
2019-07-08 18:39:57 +02:00
.addOnlyDropFors(EntityType.PLAYER)
.setAllowLootingEnchant(false).build(),
fish2));
// Add Mule.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("MULE",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.LEATHER)
2019-07-08 18:39:57 +02:00
.setMin(0)
.setMax(2).build()));
// Add Stray.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("STRAY",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.ARROW)
2019-07-08 18:39:57 +02:00
.setMin(0)
.setMax(2).build(),
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.BONE)
2019-07-08 18:39:57 +02:00
.setMin(0)
.setMax(2).build()));
2019-09-03 23:08:30 +02:00
Loot witherSkull = new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.WITHER_SKELETON_SKULL)
.setChance(2.5)
.setAllowLootingEnchant(false)
.addOnlyDropFors(EntityType.PLAYER).build();
2019-07-08 18:39:57 +02:00
// Add Wither Skeleton.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("WITHER_SKELETON",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.COAL)
2019-07-08 18:39:57 +02:00
.setChance(33).build(),
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.BONE)
2019-07-08 18:39:57 +02:00
.setMin(0)
.setMax(2).build(),
witherSkull)); // Add Skeleton Horse.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("SKELETON_HORSE",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.BONE)
2019-07-08 18:39:57 +02:00
.setMin(0)
.setMax(2).build()));
// Add Donkey.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("DONKEY",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.LEATHER)
2019-07-08 18:39:57 +02:00
.setMin(0)
.setMax(2).build()));
// Add Vindicator.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("VINDICATOR",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.EMERALD)
2019-07-08 18:39:57 +02:00
.setMin(0)
.setMax(1)
.addOnlyDropFors(EntityType.PLAYER).build()));
// Add Evoker.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("EVOKER",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.TOTEM_OF_UNDYING)
2019-07-08 18:39:57 +02:00
.setAllowLootingEnchant(false).build(),
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.EMERALD)
2019-07-08 18:39:57 +02:00
.setChance(50)
.addOnlyDropFors(EntityType.PLAYER).build()));
}
2019-09-03 22:38:00 +02:00
if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_11)) {
2019-07-08 18:39:57 +02:00
// Shulker.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("SHULKER",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.SHULKER_SHELL)
2019-07-08 18:39:57 +02:00
.setChance(50)
.setLootingIncrease(6.25).build()));
}
2019-09-03 22:38:00 +02:00
if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13)) {
2019-07-08 18:39:57 +02:00
// Add Polar Bear.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("POLAR_BEAR",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.COD)
2019-07-08 18:39:57 +02:00
.setChance(75)
.setMin(0)
.setMax(2).build(),
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.SALMON)
2019-07-08 18:39:57 +02:00
.setChance(25)
.setMin(0)
.setMax(2).build()));
2019-09-03 22:38:00 +02:00
} else if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_10)) {
2019-07-08 18:39:57 +02:00
// Add Polar Bear.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("POLAR_BEAR",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.COD)
2019-07-08 18:39:57 +02:00
.setChance(75)
.setMin(0)
.setMax(2).build(),
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.SALMON)
2019-07-08 18:39:57 +02:00
.setChance(25)
.setMin(0)
.setMax(2).build()));
}
// Add Pig.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("PIG",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.PORKCHOP)
.setBurnedMaterial(XMaterial.COOKED_PORKCHOP)
2019-07-08 18:39:57 +02:00
.setMin(1)
.setMax(3).build()));
// Add Cow.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("COW",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.LEATHER)
2019-07-08 18:39:57 +02:00
.setMin(0)
.setMax(2).build(),
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.BEEF)
.setBurnedMaterial(XMaterial.COOKED_BEEF)
2019-07-08 18:39:57 +02:00
.setMin(1)
.setMax(3).build()));
// Add Mushroom Cow.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("MUSHROOM_COW",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.LEATHER)
2019-07-08 18:39:57 +02:00
.setMin(0)
.setMax(2).build(),
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.BEEF)
.setBurnedMaterial(XMaterial.COOKED_BEEF)
2019-07-08 18:39:57 +02:00
.setMin(1)
.setMax(3).build()));
// Add Chicken.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("CHICKEN",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.FEATHER)
2019-07-08 18:39:57 +02:00
.setMin(0)
.setMax(2).build(),
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.CHICKEN)
.setBurnedMaterial(XMaterial.COOKED_CHICKEN).build()));
2019-07-08 18:39:57 +02:00
// Add Zombie.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("ZOMBIE",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.ROTTEN_FLESH)
2019-07-08 18:39:57 +02:00
.setMin(0)
.setMax(2).build(),
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.ZOMBIE_HEAD)
.setRequireCharged(true).build(),
2019-07-08 18:39:57 +02:00
new LootBuilder()
.setChance(2.5)
.setChildDropCount(1)
.setAllowLootingEnchant(false)
.addOnlyDropFors(EntityType.PLAYER)
2023-06-29 11:18:18 +02:00
.addChildLoot(new LootBuilder().setMaterial(XMaterial.IRON_INGOT)
2019-07-08 18:39:57 +02:00
.setAllowLootingEnchant(false).build(),
2023-06-29 11:18:18 +02:00
new LootBuilder().setMaterial(XMaterial.CARROT)
2019-07-08 18:39:57 +02:00
.setAllowLootingEnchant(false).build(),
2023-06-29 11:18:18 +02:00
new LootBuilder().setMaterial(XMaterial.POTATO)
2019-07-08 18:39:57 +02:00
.setAllowLootingEnchant(false).build())
.build()));
// Add Husk.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("ZOMBIE",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.ROTTEN_FLESH)
2019-07-08 18:39:57 +02:00
.setMin(0)
.setMax(2).build(),
new LootBuilder()
.setChance(2.5)
.setChildDropCount(1)
.setAllowLootingEnchant(false)
.addOnlyDropFors(EntityType.PLAYER)
2023-06-29 11:18:18 +02:00
.addChildLoot(new LootBuilder().setMaterial(XMaterial.IRON_INGOT)
2019-07-08 18:39:57 +02:00
.setAllowLootingEnchant(false).build(),
2023-06-29 11:18:18 +02:00
new LootBuilder().setMaterial(XMaterial.CARROT)
2019-07-08 18:39:57 +02:00
.setAllowLootingEnchant(false).build(),
2023-06-29 11:18:18 +02:00
new LootBuilder().setMaterial(XMaterial.POTATO)
2019-07-08 18:39:57 +02:00
.setAllowLootingEnchant(false).build())
.build()));
// Add Creeper.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("CREEPER",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.GUNPOWDER)
2019-07-08 18:39:57 +02:00
.setMin(0)
.setMax(2).build(),
2020-06-07 02:03:58 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.CREEPER_HEAD)
2020-06-07 02:03:58 +02:00
.setRequireCharged(true).build(),
new LootBuilder()
.setChildDropCount(1)
.addOnlyDropFors(EntityType.SKELETON,
2020-08-22 22:49:38 +02:00
ServerVersion.isServerVersionAtLeast(ServerVersion.V1_11) ? EntityType.STRAY : null)
2023-06-29 11:18:18 +02:00
.addChildLoot(new LootBuilder().setMaterial(XMaterial.MUSIC_DISC_11).build(),
new LootBuilder().setMaterial(XMaterial.MUSIC_DISC_13).build(),
new LootBuilder().setMaterial(XMaterial.MUSIC_DISC_BLOCKS).build(),
new LootBuilder().setMaterial(XMaterial.MUSIC_DISC_CAT).build(),
new LootBuilder().setMaterial(XMaterial.MUSIC_DISC_CHIRP).build(),
new LootBuilder().setMaterial(XMaterial.MUSIC_DISC_FAR).build(),
new LootBuilder().setMaterial(XMaterial.MUSIC_DISC_MALL).build(),
new LootBuilder().setMaterial(XMaterial.MUSIC_DISC_MELLOHI).build(),
new LootBuilder().setMaterial(XMaterial.MUSIC_DISC_STAL).build(),
new LootBuilder().setMaterial(XMaterial.MUSIC_DISC_STRAD).build(),
new LootBuilder().setMaterial(XMaterial.MUSIC_DISC_WAIT).build(),
new LootBuilder().setMaterial(XMaterial.MUSIC_DISC_WARD).build())
2020-06-07 02:03:58 +02:00
.build()));
2019-07-08 18:39:57 +02:00
// Add Guardian.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("GUARDIAN",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.PRISMARINE_SHARD)
2019-07-08 18:39:57 +02:00
.setMin(0)
.setMax(2).build(),
fish1,
fish2));
// Add Witch.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("WITCH",
2019-07-08 18:39:57 +02:00
new LootBuilder()
.setChildDropCounMin(1)
.setChildDropCountMax(3)
.addChildLoot(new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.GLOWSTONE_DUST)
2019-07-08 18:39:57 +02:00
.setChance(12.5)
.setMin(0)
.setMax(2).build(),
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.SUGAR)
2019-07-08 18:39:57 +02:00
.setChance(12.5)
.setMin(0)
.setMax(2).build(),
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.REDSTONE)
2019-07-08 18:39:57 +02:00
.setChance(12.5)
.setMin(0)
.setMax(2).build(),
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.SPIDER_EYE)
2019-07-08 18:39:57 +02:00
.setChance(12.5)
.setMin(0)
.setMax(2).build(),
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.GLASS_BOTTLE)
2019-07-08 18:39:57 +02:00
.setChance(12.5)
.setMin(0)
.setMax(2).build(),
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.GUNPOWDER)
2019-07-08 18:39:57 +02:00
.setChance(12.5)
.setMin(0)
.setMax(2).build(),
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.STICK)
2019-07-08 18:39:57 +02:00
.setChance(25)
.setMin(0)
.setMax(2).build()
).build()));
// Add Sheep.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("SHEEP",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.MUTTON)
.setBurnedMaterial(XMaterial.COOKED_MUTTON)
2019-07-08 18:39:57 +02:00
.setMin(1)
.setMax(2).build(),
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.WHITE_WOOL)
2019-07-08 18:39:57 +02:00
.setMin(2)
.setMax(2).build()));
// Add Squid.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("SQUID",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.INK_SAC)
2019-07-08 18:39:57 +02:00
.setMin(1)
.setMax(3).build()));
// Add Spider.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("SPIDER",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.STRING)
2019-07-08 18:39:57 +02:00
.setMin(0)
.setMax(2).build(),
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.SPIDER_EYE)
2019-07-08 18:39:57 +02:00
.setChance(33)
.addOnlyDropFors(EntityType.PLAYER).build()));
// Add Cave Spider.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("CAVE_SPIDER",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.STRING)
2019-07-08 18:39:57 +02:00
.setMin(0)
.setMax(2).build(),
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.SPIDER_EYE)
2019-07-08 18:39:57 +02:00
.setChance(33)
.addOnlyDropFors(EntityType.PLAYER).build()));
// Add Enderman.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("ENDERMAN",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.ENDER_PEARL)
2019-07-08 18:39:57 +02:00
.setMin(0)
.setMax(1).build()));
// Add Blaze.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("BLAZE",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.BLAZE_ROD)
2019-07-08 18:39:57 +02:00
.setMin(0)
.setMax(1)
.addOnlyDropFors(EntityType.PLAYER).build()));
// Add Horse.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("HORSE",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.LEATHER)
2019-07-08 18:39:57 +02:00
.setMin(0)
.setMax(2).build()));
// Magma Cube.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("MAGMA_CUBE",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.MAGMA_CREAM)
2019-07-08 18:39:57 +02:00
.setChance(25).build()));
// Add Skeleton.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("SKELETON",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.ARROW)
2019-07-08 18:39:57 +02:00
.setMin(0)
.setMax(2).build(),
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.BONE)
2019-07-08 18:39:57 +02:00
.setMin(0)
.setMax(2).build(),
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.SKELETON_SKULL)
.setRequireCharged(true).build()));
2019-07-08 18:39:57 +02:00
// Add Snowman.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("SNOWMAN",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.SNOWBALL)
2019-07-08 18:39:57 +02:00
.setMin(0)
.setMax(15).build()));
// Add Rabbit.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("RABBIT",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.RABBIT_HIDE)
2019-07-08 18:39:57 +02:00
.setMin(0)
.setMax(1).build(),
2020-06-07 02:04:47 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.RABBIT_FOOT)
2020-06-07 02:04:47 +02:00
.setMin(0)
.setMax(1)
.setChance(10).build(),
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.RABBIT)
.setBurnedMaterial(XMaterial.COOKED_RABBIT)
2019-07-08 18:39:57 +02:00
.setMin(0)
.setMax(1).build()));
// Add Iron Golem.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("IRON_GOLEM",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.POPPY)
2019-07-08 18:39:57 +02:00
.setMin(0)
.setMax(2).build(),
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.IRON_INGOT)
2019-07-08 18:39:57 +02:00
.setMin(3)
.setMax(5).build()));
// Add Slime.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("SLIME",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.SLIME_BALL)
2019-07-08 18:39:57 +02:00
.setMin(0)
.setMax(2).build()));
// Add Ghast.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("GHAST",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.GHAST_TEAR)
2019-07-08 18:39:57 +02:00
.setMin(0)
.setMax(1).build(),
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.GUNPOWDER)
2019-07-08 18:39:57 +02:00
.setMin(0)
.setMax(2).build()));
2019-07-08 18:39:57 +02:00
// Add Zombie Pigman
2020-06-28 04:12:13 +02:00
if (ServerVersion.isServerVersionBelow(ServerVersion.V1_16))
lootManager.addLootable(new Lootable("PIG_ZOMBIE",
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.ROTTEN_FLESH)
2020-06-28 04:12:13 +02:00
.setMin(0)
.setMax(1).build(),
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.GOLD_NUGGET)
2020-06-28 04:12:13 +02:00
.setMin(0)
.setMax(1).build(),
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.GOLD_INGOT)
2020-06-28 04:12:13 +02:00
.setChance(2.5)
.addOnlyDropFors(EntityType.PLAYER).build()));
else {
// Add Strider
lootManager.addLootable(new Lootable("STRIDER",
2020-07-11 01:01:41 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.STRING)
2020-07-11 01:01:41 +02:00
.setMin(0)
.setMax(5).build()));
// Add Hoglin
lootManager.addLootable(new Lootable("HOGLIN",
2020-06-28 04:12:13 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.PORKCHOP)
.setBurnedMaterial(XMaterial.COOKED_PORKCHOP)
2020-06-28 04:12:13 +02:00
.setMin(2)
.setMax(4).build(),
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.LEATHER)
2020-06-28 04:12:13 +02:00
.setMin(0)
.setMax(2).build()));
2020-07-11 01:01:41 +02:00
// Add Zombified Piglin
lootManager.addLootable(new Lootable("ZOMBIFIED_PIGLIN",
2020-06-28 04:12:13 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.ROTTEN_FLESH)
2020-06-28 04:12:13 +02:00
.setMin(0)
2020-07-11 01:01:41 +02:00
.setMax(1).build(),
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.GOLD_NUGGET)
2020-07-11 01:01:41 +02:00
.setMin(0)
.setMax(1).build()));
// Add Piglin
lootManager.addLootable(new Lootable("PIGLIN"));
2020-06-28 04:12:13 +02:00
}
2019-07-08 18:39:57 +02:00
// Add Wither.
2019-07-23 16:55:56 +02:00
lootManager.addLootable(new Lootable("WITHER",
2019-07-08 18:39:57 +02:00
new LootBuilder()
2023-06-29 11:18:18 +02:00
.setMaterial(XMaterial.NETHER_STAR)
2019-07-08 18:39:57 +02:00
.setAllowLootingEnchant(false).build()));
// Add Villager.
lootManager.addLootable(new Lootable("VILLAGER",
new LootBuilder().build()));
// Add Silverfish.
lootManager.addLootable(new Lootable("SILVERFISH",
new LootBuilder().build()));
2023-04-01 15:59:24 +02:00
lootManager.addLootable(new Lootable("WOLF",
new LootBuilder().build()));
2020-06-03 15:44:12 +02:00
lootManager.saveLootables(true);
2019-07-23 16:55:56 +02:00
}
2019-07-08 18:39:57 +02:00
2019-07-23 16:55:56 +02:00
public LootManager getLootManager() {
return lootManager;
2019-07-08 18:39:57 +02:00
}
}