--- a/net/minecraft/server/TileEntity.java +++ b/net/minecraft/server/TileEntity.java @@ -4,6 +4,8 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.bukkit.inventory.InventoryHolder; // CraftBukkit + public abstract class TileEntity { private static final Logger LOGGER = LogManager.getLogger(); @@ -55,8 +57,15 @@ } } + // CraftBukkit start @Nullable public static TileEntity create(NBTTagCompound nbttagcompound) { + return create(nbttagcompound, null); + } + + @Nullable + public static TileEntity create(NBTTagCompound nbttagcompound, @Nullable World world) { + // CraftBukkit end String s = nbttagcompound.getString("id"); return (TileEntity) IRegistry.BLOCK_ENTITY_TYPE.getOptional(new MinecraftKey(s)).map((tileentitytypes) -> { @@ -68,6 +77,7 @@ } }).map((tileentity) -> { try { + tileentity.setWorld(world); // CraftBukkit tileentity.load(nbttagcompound); return tileentity; } catch (Throwable throwable) { @@ -157,4 +167,13 @@ public TileEntityTypes q() { return this.b; } + + // CraftBukkit start - add method + public InventoryHolder getOwner() { + if (world == null) return null; + org.bukkit.block.BlockState state = world.getWorld().getBlockAt(position.getX(), position.getY(), position.getZ()).getState(); + if (state instanceof InventoryHolder) return (InventoryHolder) state; + return null; + } + // CraftBukkit end }