SPIGOT-7602: Allow opening in-world horse and related inventories

This commit is contained in:
md_5 2024-03-30 12:08:32 +11:00
parent ffd15611c7
commit 0398930fc7
No known key found for this signature in database
GPG Key ID: E8E901AC7C617C11

View File

@ -41,6 +41,7 @@ import org.bukkit.craftbukkit.entity.memory.CraftMemoryMapper;
import org.bukkit.craftbukkit.event.CraftEventFactory; import org.bukkit.craftbukkit.event.CraftEventFactory;
import org.bukkit.craftbukkit.inventory.CraftContainer; import org.bukkit.craftbukkit.inventory.CraftContainer;
import org.bukkit.craftbukkit.inventory.CraftInventory; import org.bukkit.craftbukkit.inventory.CraftInventory;
import org.bukkit.craftbukkit.inventory.CraftInventoryAbstractHorse;
import org.bukkit.craftbukkit.inventory.CraftInventoryDoubleChest; import org.bukkit.craftbukkit.inventory.CraftInventoryDoubleChest;
import org.bukkit.craftbukkit.inventory.CraftInventoryLectern; import org.bukkit.craftbukkit.inventory.CraftInventoryLectern;
import org.bukkit.craftbukkit.inventory.CraftInventoryPlayer; import org.bukkit.craftbukkit.inventory.CraftInventoryPlayer;
@ -278,31 +279,33 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
EntityPlayer player = (EntityPlayer) getHandle(); EntityPlayer player = (EntityPlayer) getHandle();
Container formerContainer = getHandle().containerMenu; Container formerContainer = getHandle().containerMenu;
ITileInventory iinventory = null; ITileInventory tileInventory = null;
if (inventory instanceof CraftInventoryDoubleChest) { if (inventory instanceof CraftInventoryDoubleChest) {
iinventory = ((CraftInventoryDoubleChest) inventory).tile; tileInventory = ((CraftInventoryDoubleChest) inventory).tile;
} else if (inventory instanceof CraftInventoryLectern) { } else if (inventory instanceof CraftInventoryLectern) {
iinventory = ((CraftInventoryLectern) inventory).tile; tileInventory = ((CraftInventoryLectern) inventory).tile;
} else if (inventory instanceof CraftInventory) { } else if (inventory instanceof CraftInventory) {
CraftInventory craft = (CraftInventory) inventory; CraftInventory craft = (CraftInventory) inventory;
if (craft.getInventory() instanceof ITileInventory) { if (craft.getInventory() instanceof ITileInventory) {
iinventory = (ITileInventory) craft.getInventory(); tileInventory = (ITileInventory) craft.getInventory();
} }
} }
if (iinventory instanceof ITileInventory) { if (tileInventory instanceof ITileInventory) {
if (iinventory instanceof TileEntity) { if (tileInventory instanceof TileEntity) {
TileEntity te = (TileEntity) iinventory; TileEntity te = (TileEntity) tileInventory;
if (!te.hasLevel()) { if (!te.hasLevel()) {
te.setLevel(getHandle().level()); te.setLevel(getHandle().level());
} }
} }
} }
Containers<?> container = CraftContainer.getNotchInventoryType(inventory); if (tileInventory instanceof ITileInventory) {
if (iinventory instanceof ITileInventory) { getHandle().openMenu(tileInventory);
getHandle().openMenu(iinventory); } else if (inventory instanceof CraftInventoryAbstractHorse craft && craft.getInventory().getOwner() instanceof CraftAbstractHorse horse) {
getHandle().openHorseInventory(horse.getHandle(), craft.getInventory());
} else { } else {
Containers<?> container = CraftContainer.getNotchInventoryType(inventory);
openCustomInventory(inventory, player, container); openCustomInventory(inventory, player, container);
} }