Added Window#changeTitle

This commit is contained in:
NichtStudioCode 2021-06-27 15:35:38 +02:00
parent 0bef2477ad
commit ed65b173dd
9 changed files with 158 additions and 33 deletions

@ -160,6 +160,13 @@ public interface Window extends GUIParent {
*/
void setCloseable(boolean closeable);
/**
* Changes the title of the {@link Inventory}.
*
* @param title The new title
*/
void changeTitle(String title);
/**
* Gets the viewer of this {@link Window}
*

@ -31,6 +31,8 @@ public abstract class BaseWindow implements Window {
private final boolean closeOnEvent;
private final SlotElement[] elementsDisplayed;
private String updatedTitle;
private boolean closeable;
private boolean closed;
@ -202,7 +204,16 @@ public abstract class BaseWindow implements Window {
Player viewer = getViewer();
if (viewer == null) throw new IllegalStateException("The player is not online.");
InventoryAccess.getInventoryUtils().openCustomInventory(viewer, getInventories()[0]);
InventoryAccess.getInventoryUtils().openCustomInventory(viewer, getInventories()[0], updatedTitle);
}
@Override
public void changeTitle(String title) {
updatedTitle = title;
Player currentViewer = getCurrentViewer();
if (currentViewer != null) {
InventoryAccess.getInventoryUtils().updateOpenInventoryTitle(currentViewer, title);
}
}
@Override

@ -14,6 +14,11 @@ public class InventoryUtilsImpl implements InventoryUtils {
@Override
public void openCustomInventory(Player player, Inventory inventory) {
openCustomInventory(player, inventory, null);
}
@Override
public void openCustomInventory(Player player, Inventory inventory, String title) {
EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
Containers<?> windowType = getNotchInventoryType(inventory);
@ -22,18 +27,27 @@ public class InventoryUtilsImpl implements InventoryUtils {
container = CraftEventFactory.callInventoryOpenEvent(entityPlayer, container);
if (container != null) {
IInventory iinventory = ((CraftInventory) inventory).getInventory();
IChatBaseComponent title;
IChatBaseComponent titleComponent;
if (title == null) {
if (iinventory instanceof ITileInventory)
title = ((ITileInventory) iinventory).getScoreboardDisplayName();
else title = new ChatComponentText(container.getBukkitView().getTitle());
titleComponent = ((ITileInventory) iinventory).getScoreboardDisplayName();
else titleComponent = new ChatComponentText(container.getBukkitView().getTitle());
} else titleComponent = new ChatComponentText(title);
entityPlayer.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, windowType, title));
entityPlayer.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, windowType, titleComponent));
entityPlayer.activeContainer = container;
entityPlayer.activeContainer.addSlotListener(entityPlayer);
}
}
}
@Override
public void updateOpenInventoryTitle(Player player, String title) {
EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
Container container = entityPlayer.activeContainer;
entityPlayer.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, container.getType(), new ChatComponentText(title)));
}
private static Containers<?> getNotchInventoryType(Inventory inventory) {
InventoryType type = inventory.getType();
if (type == InventoryType.CHEST) {

@ -13,6 +13,11 @@ public class InventoryUtilsImpl implements InventoryUtils {
@Override
public void openCustomInventory(Player player, Inventory inventory) {
openCustomInventory(player, inventory, null);
}
@Override
public void openCustomInventory(Player player, Inventory inventory, String title) {
EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
Containers<?> windowType = CraftContainer.getNotchInventoryType(inventory);
@ -21,16 +26,25 @@ public class InventoryUtilsImpl implements InventoryUtils {
container = CraftEventFactory.callInventoryOpenEvent(entityPlayer, container);
if (container != null) {
IInventory iinventory = ((CraftInventory) inventory).getInventory();
IChatBaseComponent title;
IChatBaseComponent titleComponent;
if (title == null) {
if (iinventory instanceof ITileInventory)
title = ((ITileInventory) iinventory).getScoreboardDisplayName();
else title = new ChatComponentText(container.getBukkitView().getTitle());
titleComponent = ((ITileInventory) iinventory).getScoreboardDisplayName();
else titleComponent = new ChatComponentText(container.getBukkitView().getTitle());
} else titleComponent = new ChatComponentText(title);
entityPlayer.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, windowType, title));
entityPlayer.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, windowType, titleComponent));
entityPlayer.activeContainer = container;
entityPlayer.activeContainer.addSlotListener(entityPlayer);
}
}
}
@Override
public void updateOpenInventoryTitle(Player player, String title) {
EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
Container container = entityPlayer.activeContainer;
entityPlayer.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, container.getType(), new ChatComponentText(title)));
}
}

@ -14,6 +14,11 @@ public class InventoryUtilsImpl implements InventoryUtils {
@Override
public void openCustomInventory(Player player, Inventory inventory) {
openCustomInventory(player, inventory, null);
}
@Override
public void openCustomInventory(Player player, Inventory inventory, String title) {
EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
Containers<?> windowType = CraftContainer.getNotchInventoryType(inventory);
@ -22,16 +27,26 @@ public class InventoryUtilsImpl implements InventoryUtils {
container = CraftEventFactory.callInventoryOpenEvent(entityPlayer, container);
if (container != null) {
IInventory iinventory = ((CraftInventory) inventory).getInventory();
IChatBaseComponent title;
IChatBaseComponent titleComponent;
if (title == null) {
if (iinventory instanceof ITileInventory)
title = ((ITileInventory) iinventory).getScoreboardDisplayName();
else title = CraftChatMessage.fromString(container.getBukkitView().getTitle())[0];
titleComponent = ((ITileInventory) iinventory).getScoreboardDisplayName();
else titleComponent = CraftChatMessage.fromString(container.getBukkitView().getTitle())[0];
} else titleComponent = CraftChatMessage.fromString(title)[0];
entityPlayer.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, windowType, title));
entityPlayer.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, windowType, titleComponent));
entityPlayer.activeContainer = container;
entityPlayer.activeContainer.addSlotListener(entityPlayer);
}
}
}
@Override
public void updateOpenInventoryTitle(Player player, String title) {
EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
Container container = entityPlayer.activeContainer;
IChatBaseComponent titleComponent = CraftChatMessage.fromString(container.getBukkitView().getTitle())[0];
entityPlayer.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, container.getType(), titleComponent));
}
}

@ -14,6 +14,11 @@ public class InventoryUtilsImpl implements InventoryUtils {
@Override
public void openCustomInventory(Player player, Inventory inventory) {
openCustomInventory(player, inventory, null);
}
@Override
public void openCustomInventory(Player player, Inventory inventory, String title) {
EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
Containers<?> windowType = CraftContainer.getNotchInventoryType(inventory);
@ -22,16 +27,26 @@ public class InventoryUtilsImpl implements InventoryUtils {
container = CraftEventFactory.callInventoryOpenEvent(entityPlayer, container);
if (container != null) {
IInventory iinventory = ((CraftInventory) inventory).getInventory();
IChatBaseComponent title;
IChatBaseComponent titleComponent;
if (title == null) {
if (iinventory instanceof ITileInventory)
title = ((ITileInventory) iinventory).getScoreboardDisplayName();
else title = CraftChatMessage.fromString(container.getBukkitView().getTitle())[0];
titleComponent = ((ITileInventory) iinventory).getScoreboardDisplayName();
else titleComponent = CraftChatMessage.fromString(container.getBukkitView().getTitle())[0];
} else titleComponent = CraftChatMessage.fromString(title)[0];
entityPlayer.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, windowType, title));
entityPlayer.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, windowType, titleComponent));
entityPlayer.activeContainer = container;
entityPlayer.activeContainer.addSlotListener(entityPlayer);
}
}
}
@Override
public void updateOpenInventoryTitle(Player player, String title) {
EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
Container container = entityPlayer.activeContainer;
IChatBaseComponent titleComponent = CraftChatMessage.fromString(container.getBukkitView().getTitle())[0];
entityPlayer.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, container.getType(), titleComponent));
}
}

@ -14,6 +14,11 @@ public class InventoryUtilsImpl implements InventoryUtils {
@Override
public void openCustomInventory(Player player, Inventory inventory) {
openCustomInventory(player, inventory, null);
}
@Override
public void openCustomInventory(Player player, Inventory inventory, String title) {
EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
Containers<?> windowType = CraftContainer.getNotchInventoryType(inventory);
@ -22,16 +27,26 @@ public class InventoryUtilsImpl implements InventoryUtils {
container = CraftEventFactory.callInventoryOpenEvent(entityPlayer, container);
if (container != null) {
IInventory iinventory = ((CraftInventory) inventory).getInventory();
IChatBaseComponent title;
IChatBaseComponent titleComponent;
if (title == null) {
if (iinventory instanceof ITileInventory)
title = ((ITileInventory) iinventory).getScoreboardDisplayName();
else title = CraftChatMessage.fromString(container.getBukkitView().getTitle())[0];
titleComponent = ((ITileInventory) iinventory).getScoreboardDisplayName();
else titleComponent = CraftChatMessage.fromString(container.getBukkitView().getTitle())[0];
} else titleComponent = CraftChatMessage.fromString(title)[0];
entityPlayer.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, windowType, title));
entityPlayer.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, windowType, titleComponent));
entityPlayer.activeContainer = container;
entityPlayer.activeContainer.addSlotListener(entityPlayer);
}
}
}
@Override
public void updateOpenInventoryTitle(Player player, String title) {
EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
Container container = entityPlayer.activeContainer;
IChatBaseComponent titleComponent = CraftChatMessage.fromString(container.getBukkitView().getTitle())[0];
entityPlayer.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, container.getType(), titleComponent));
}
}

@ -20,6 +20,11 @@ public class InventoryUtilsImpl implements InventoryUtils {
@Override
public void openCustomInventory(Player player, Inventory inventory) {
openCustomInventory(player, inventory, null);
}
@Override
public void openCustomInventory(Player player, Inventory inventory, String title) {
ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle();
MenuType<?> menuType = CraftContainer.getNotchInventoryType(inventory);
@ -28,13 +33,15 @@ public class InventoryUtilsImpl implements InventoryUtils {
menu = CraftEventFactory.callInventoryOpenEvent(serverPlayer, menu);
if (menu != null) {
Container container = ((CraftInventory) inventory).getInventory();
Component title;
Component titleComponent;
if (title == null) {
if (container instanceof MenuProvider)
title = ((MenuProvider) container).getDisplayName();
else title = CraftChatMessage.fromString(menu.getBukkitView().getTitle())[0];
titleComponent = ((MenuProvider) container).getDisplayName();
else titleComponent = CraftChatMessage.fromString(menu.getBukkitView().getTitle())[0];
} else titleComponent = CraftChatMessage.fromString(title)[0];
menu.checkReachable = false;
serverPlayer.connection.send(new ClientboundOpenScreenPacket(menu.containerId, menuType, title));
serverPlayer.connection.send(new ClientboundOpenScreenPacket(menu.containerId, menuType, titleComponent));
serverPlayer.containerMenu = menu;
serverPlayer.initMenu(menu);
}
@ -42,4 +49,11 @@ public class InventoryUtilsImpl implements InventoryUtils {
}
@Override
public void updateOpenInventoryTitle(Player player, String title) {
ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle();
AbstractContainerMenu menu = serverPlayer.containerMenu;
serverPlayer.connection.send(new ClientboundOpenScreenPacket(menu.containerId, menu.getType(), CraftChatMessage.fromString(title)[0]));
}
}

@ -17,4 +17,24 @@ public interface InventoryUtils {
*/
void openCustomInventory(Player player, Inventory inventory);
/**
* Opens an {@link Inventory} as a custom inventory with a title that differs from the
* actual title of the {@link Inventory}.
* Internally, this creates a CraftContainer which can save the {@link InventoryView},
* unlike when using nms Containers, which is the default way for opening Inventories of
* TileEntities.
*
* @param player The {@link Player} to open the {@link Inventory} for
* @param inventory The {@link Inventory}
*/
void openCustomInventory(Player player, Inventory inventory, String title);
/**
* Changes the title of the {@link Inventory} the player is currently viewing.
*
* @param player The {@link Player}
* @param title The new title
*/
void updateOpenInventoryTitle(Player player, String title);
}