SPIGOT-1936: LootTable API

By: Senmori <thesenmori@gmail.com>
This commit is contained in:
CraftBukkit/Spigot
2018-08-12 18:39:51 +10:00
parent 277f0db6c9
commit 39c4334d76
15 changed files with 434 additions and 21 deletions

View File

@@ -9,7 +9,7 @@ import org.bukkit.entity.minecart.StorageMinecart;
import org.bukkit.inventory.Inventory;
@SuppressWarnings("deprecation")
public class CraftMinecartChest extends CraftMinecart implements StorageMinecart {
public class CraftMinecartChest extends CraftMinecartContainer implements StorageMinecart {
private final CraftInventory inventory;
public CraftMinecartChest(CraftServer server, EntityMinecartChest entity) {

View File

@@ -0,0 +1,54 @@
package org.bukkit.craftbukkit.entity;
import net.minecraft.server.EntityMinecartAbstract;
import net.minecraft.server.EntityMinecartContainer;
import net.minecraft.server.MinecraftKey;
import org.bukkit.Bukkit;
import org.bukkit.NamespacedKey;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.craftbukkit.util.CraftNamespacedKey;
import org.bukkit.loot.LootTable;
import org.bukkit.loot.Lootable;
public abstract class CraftMinecartContainer extends CraftMinecart implements Lootable {
public CraftMinecartContainer(CraftServer server, EntityMinecartAbstract entity) {
super(server, entity);
}
@Override
public EntityMinecartContainer getHandle() {
return (EntityMinecartContainer) entity;
}
@Override
public void setLootTable(LootTable table) {
setLootTable(table, getSeed());
}
@Override
public LootTable getLootTable() {
MinecraftKey nmsTable = getHandle().Q_(); // PAIL getLootTable
if (nmsTable == null) {
return null; // return empty loot table?
}
NamespacedKey key = CraftNamespacedKey.fromMinecraft(nmsTable);
return Bukkit.getLootTable(key);
}
@Override
public void setSeed(long seed) {
setLootTable(getLootTable(), seed);
}
@Override
public long getSeed() {
return getHandle().d; // PAIL rename lootTableSeed
}
private void setLootTable(LootTable table, long seed) {
MinecraftKey newKey = (table == null) ? null : CraftNamespacedKey.toMinecraft(table.getKey());
getHandle().a(newKey, seed);
}
}

View File

@@ -8,10 +8,10 @@ import org.bukkit.entity.EntityType;
import org.bukkit.entity.minecart.HopperMinecart;
import org.bukkit.inventory.Inventory;
final class CraftMinecartHopper extends CraftMinecart implements HopperMinecart {
public final class CraftMinecartHopper extends CraftMinecartContainer implements HopperMinecart {
private final CraftInventory inventory;
CraftMinecartHopper(CraftServer server, EntityMinecartHopper entity) {
public CraftMinecartHopper(CraftServer server, EntityMinecartHopper entity) {
super(server, entity);
inventory = new CraftInventory(entity);
}

View File

@@ -1,9 +1,13 @@
package org.bukkit.craftbukkit.entity;
import net.minecraft.server.EntityInsentient;
import org.bukkit.Bukkit;
import org.bukkit.NamespacedKey;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.craftbukkit.util.CraftNamespacedKey;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Mob;
import org.bukkit.loot.LootTable;
public abstract class CraftMob extends CraftLivingEntity implements Mob {
public CraftMob(CraftServer server, EntityInsentient entity) {
@@ -36,4 +40,29 @@ public abstract class CraftMob extends CraftLivingEntity implements Mob {
public String toString() {
return "CraftMob";
}
@Override
public void setLootTable(LootTable table) {
getHandle().bI = (table == null) ? null : CraftNamespacedKey.toMinecraft(table.getKey()); // PAIL rename lootTableKey
}
@Override
public LootTable getLootTable() {
if (getHandle().bI == null) {
getHandle().bI = getHandle().getLootTable(); // Restore to entity default
}
NamespacedKey key = CraftNamespacedKey.fromMinecraft(getHandle().bI); // PAIL rename lootTableKey
return Bukkit.getLootTable(key);
}
@Override
public void setSeed(long seed) {
getHandle().bJ = seed; // PAIL rename lootTableSeed
}
@Override
public long getSeed() {
return getHandle().bJ; // PAIL rename lootTableSeed
}
}