LootTable API and replenishable lootables

Provides an API to control the loot table for an object.
Also provides a feature that any Lootable Inventory (Chests in Structures)
can automatically replenish after a given time.

This feature is good for long term worlds so that newer players
do not suffer with "Every chest has been looted"

== AT ==
public org.bukkit.craftbukkit.block.CraftBlockEntityState getTileEntity()Lnet/minecraft/world/level/block/entity/BlockEntity;
public org.bukkit.craftbukkit.block.CraftLootable setLootTable(Lorg/bukkit/loot/LootTable;J)V
public org.bukkit.craftbukkit.entity.CraftMinecartContainer setLootTable(Lorg/bukkit/loot/LootTable;J)V
This commit is contained in:
Aikar
2016-05-01 21:19:14 -04:00
parent b8d05bbc27
commit 07c767b6f4
19 changed files with 718 additions and 74 deletions

View File

@@ -7,8 +7,7 @@ import org.bukkit.craftbukkit.inventory.CraftInventory;
import org.bukkit.inventory.Inventory;
import org.bukkit.loot.LootTable;
public abstract class CraftChestBoat extends CraftBoat implements org.bukkit.entity.ChestBoat {
public abstract class CraftChestBoat extends CraftBoat implements org.bukkit.entity.ChestBoat, com.destroystokyo.paper.loottable.PaperLootableEntityInventory { // Paper
private final Inventory inventory;
public CraftChestBoat(CraftServer server, AbstractChestBoat entity) {
@@ -31,28 +30,6 @@ public abstract class CraftChestBoat extends CraftBoat implements org.bukkit.ent
return this.inventory;
}
@Override
public void setLootTable(LootTable table) {
this.setLootTable(table, this.getSeed());
}
// Paper - moved loot table logic to PaperLootableEntityInventory
@Override
public LootTable getLootTable() {
return CraftLootTable.minecraftToBukkit(this.getHandle().getContainerLootTable());
}
@Override
public void setSeed(long seed) {
this.setLootTable(this.getLootTable(), seed);
}
@Override
public long getSeed() {
return this.getHandle().getContainerLootTableSeed();
}
private void setLootTable(LootTable table, long seed) {
this.getHandle().setContainerLootTable(CraftLootTable.bukkitToMinecraft(table));
this.getHandle().setContainerLootTableSeed(seed);
}
}

View File

@@ -7,7 +7,7 @@ import org.bukkit.entity.minecart.StorageMinecart;
import org.bukkit.inventory.Inventory;
@SuppressWarnings("deprecation")
public class CraftMinecartChest extends CraftMinecartContainer implements StorageMinecart {
public class CraftMinecartChest extends CraftMinecartContainer implements StorageMinecart, com.destroystokyo.paper.loottable.PaperLootableEntityInventory { // Paper
private final CraftInventory inventory;
public CraftMinecartChest(CraftServer server, MinecartChest entity) {

View File

@@ -7,7 +7,7 @@ import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.loot.LootTable;
import org.bukkit.loot.Lootable;
public abstract class CraftMinecartContainer extends CraftMinecart implements Lootable {
public abstract class CraftMinecartContainer extends CraftMinecart implements com.destroystokyo.paper.loottable.PaperLootableEntityInventory { // Paper
public CraftMinecartContainer(CraftServer server, AbstractMinecart entity) {
super(server, entity);
@@ -18,27 +18,5 @@ public abstract class CraftMinecartContainer extends CraftMinecart implements Lo
return (AbstractMinecartContainer) this.entity;
}
@Override
public void setLootTable(LootTable table) {
this.setLootTable(table, this.getSeed());
}
@Override
public LootTable getLootTable() {
return CraftLootTable.minecraftToBukkit(this.getHandle().lootTable);
}
@Override
public void setSeed(long seed) {
this.setLootTable(this.getLootTable(), seed);
}
@Override
public long getSeed() {
return this.getHandle().lootTableSeed;
}
public void setLootTable(LootTable table, long seed) {
this.getHandle().setLootTable(CraftLootTable.bukkitToMinecraft(table), seed);
}
// Paper - moved loot table logic to PaperLootableEntityInventory
}

View File

@@ -6,7 +6,7 @@ import org.bukkit.craftbukkit.inventory.CraftInventory;
import org.bukkit.entity.minecart.HopperMinecart;
import org.bukkit.inventory.Inventory;
public final class CraftMinecartHopper extends CraftMinecartContainer implements HopperMinecart {
public final class CraftMinecartHopper extends CraftMinecartContainer implements HopperMinecart, com.destroystokyo.paper.loottable.PaperLootableEntityInventory { // Paper
private final CraftInventory inventory;
public CraftMinecartHopper(CraftServer server, MinecartHopper entity) {