package org.bukkit.craftbukkit.block; import net.minecraft.resources.MinecraftKey; import net.minecraft.world.level.block.entity.TileEntityLootable; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Nameable; import org.bukkit.World; import org.bukkit.craftbukkit.util.CraftNamespacedKey; import org.bukkit.loot.LootTable; import org.bukkit.loot.Lootable; public abstract class CraftLootable extends CraftContainer implements Nameable, Lootable { public CraftLootable(World world, T tileEntity) { super(world, tileEntity); } protected CraftLootable(CraftLootable state, Location location) { super(state, location); } @Override public void applyTo(T lootable) { super.applyTo(lootable); if (this.getSnapshot().lootTable == null) { lootable.setLootTable((MinecraftKey) null, 0L); } } @Override public LootTable getLootTable() { if (getSnapshot().lootTable == null) { return null; } MinecraftKey key = getSnapshot().lootTable; return Bukkit.getLootTable(CraftNamespacedKey.fromMinecraft(key)); } @Override public void setLootTable(LootTable table) { setLootTable(table, getSeed()); } @Override public long getSeed() { return getSnapshot().lootTableSeed; } @Override public void setSeed(long seed) { setLootTable(getLootTable(), seed); } private void setLootTable(LootTable table, long seed) { MinecraftKey key = (table == null) ? null : CraftNamespacedKey.toMinecraft(table.getKey()); getSnapshot().setLootTable(key, seed); } @Override public abstract CraftLootable copy(); @Override public abstract CraftLootable copy(Location location); }