diff --git a/InvUI/src/main/java/de/studiocode/invui/window/Window.java b/InvUI/src/main/java/de/studiocode/invui/window/Window.java index d36af34..169cb74 100644 --- a/InvUI/src/main/java/de/studiocode/invui/window/Window.java +++ b/InvUI/src/main/java/de/studiocode/invui/window/Window.java @@ -9,6 +9,7 @@ import de.studiocode.invui.window.impl.merged.MergedWindow; import de.studiocode.invui.window.impl.merged.combined.SimpleCombinedWindow; import de.studiocode.invui.window.impl.merged.split.SimpleSplitWindow; import de.studiocode.invui.window.impl.single.SimpleWindow; +import net.md_5.bungee.api.chat.BaseComponent; import org.bukkit.entity.Player; import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.inventory.InventoryClickEvent; @@ -16,6 +17,7 @@ import org.bukkit.event.inventory.InventoryDragEvent; import org.bukkit.event.inventory.InventoryOpenEvent; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; import java.util.UUID; @@ -165,7 +167,14 @@ public interface Window extends GUIParent { * * @param title The new title */ - void changeTitle(String title); + void changeTitle(@NotNull BaseComponent[] title); + + /** + * Changes the title of the {@link Inventory}. + * + * @param title The new title + */ + void changeTitle(@NotNull String title); /** * Gets the viewer of this {@link Window} diff --git a/InvUI/src/main/java/de/studiocode/invui/window/impl/BaseWindow.java b/InvUI/src/main/java/de/studiocode/invui/window/impl/BaseWindow.java index 7ac7504..c5751d8 100644 --- a/InvUI/src/main/java/de/studiocode/invui/window/impl/BaseWindow.java +++ b/InvUI/src/main/java/de/studiocode/invui/window/impl/BaseWindow.java @@ -15,6 +15,8 @@ import de.studiocode.invui.virtualinventory.event.PlayerUpdateReason; import de.studiocode.invui.virtualinventory.event.UpdateReason; import de.studiocode.invui.window.Window; import de.studiocode.invui.window.WindowManager; +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.chat.TextComponent; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.HumanEntity; @@ -22,6 +24,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryDragEvent; import org.bukkit.event.inventory.InventoryOpenEvent; import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; import java.util.*; @@ -31,13 +34,14 @@ public abstract class BaseWindow implements Window { private final boolean closeOnEvent; private final SlotElement[] elementsDisplayed; - private String updatedTitle; + private BaseComponent[] title; private boolean closeable; private boolean closed; - public BaseWindow(UUID viewerUUID, int size, boolean closeable, boolean closeOnEvent) { + public BaseWindow(UUID viewerUUID, BaseComponent[] title, int size, boolean closeable, boolean closeOnEvent) { this.viewerUUID = viewerUUID; + this.title = title; this.closeable = closeable; this.closeOnEvent = closeOnEvent; this.elementsDisplayed = new SlotElement[size]; @@ -204,18 +208,23 @@ 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], updatedTitle); + InventoryAccess.getInventoryUtils().openCustomInventory(viewer, getInventories()[0], title); } @Override - public void changeTitle(String title) { - updatedTitle = title; + public void changeTitle(@NotNull BaseComponent[] title) { + this.title = title; Player currentViewer = getCurrentViewer(); if (currentViewer != null) { InventoryAccess.getInventoryUtils().updateOpenInventoryTitle(currentViewer, title); } } + @Override + public void changeTitle(@NotNull String title) { + changeTitle(TextComponent.fromLegacyText(title)); + } + @Override public Player getCurrentViewer() { List viewers = getInventories()[0].getViewers(); diff --git a/InvUI/src/main/java/de/studiocode/invui/window/impl/merged/MergedWindow.java b/InvUI/src/main/java/de/studiocode/invui/window/impl/merged/MergedWindow.java index 6a24621..fb8e08b 100644 --- a/InvUI/src/main/java/de/studiocode/invui/window/impl/merged/MergedWindow.java +++ b/InvUI/src/main/java/de/studiocode/invui/window/impl/merged/MergedWindow.java @@ -6,6 +6,7 @@ import de.studiocode.invui.util.Pair; import de.studiocode.invui.util.SlotUtils; import de.studiocode.invui.window.Window; import de.studiocode.invui.window.impl.BaseWindow; +import net.md_5.bungee.api.chat.BaseComponent; import org.bukkit.entity.Player; import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.inventory.InventoryClickEvent; @@ -26,8 +27,8 @@ public abstract class MergedWindow extends BaseWindow { protected Inventory upperInventory; private boolean isCurrentlyOpened; - public MergedWindow(Player player, int size, Inventory upperInventory, boolean closeable, boolean closeOnEvent) { - super(player.getUniqueId(), size, closeable, closeOnEvent); + public MergedWindow(Player player, BaseComponent[] title, int size, Inventory upperInventory, boolean closeable, boolean closeOnEvent) { + super(player.getUniqueId(), title, size, closeable, closeOnEvent); this.upperInventory = upperInventory; this.playerInventory = player.getInventory(); } diff --git a/InvUI/src/main/java/de/studiocode/invui/window/impl/merged/combined/CombinedWindow.java b/InvUI/src/main/java/de/studiocode/invui/window/impl/merged/combined/CombinedWindow.java index 3ee08ff..6878da7 100644 --- a/InvUI/src/main/java/de/studiocode/invui/window/impl/merged/combined/CombinedWindow.java +++ b/InvUI/src/main/java/de/studiocode/invui/window/impl/merged/combined/CombinedWindow.java @@ -6,6 +6,7 @@ import de.studiocode.invui.util.Pair; import de.studiocode.invui.util.SlotUtils; import de.studiocode.invui.window.Window; import de.studiocode.invui.window.impl.merged.MergedWindow; +import net.md_5.bungee.api.chat.BaseComponent; import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.Inventory; @@ -17,8 +18,8 @@ public abstract class CombinedWindow extends MergedWindow { private final GUI gui; - public CombinedWindow(Player player, GUI gui, Inventory upperInventory, boolean closeable, boolean closeOnEvent) { - super(player, gui.getSize(), upperInventory, closeable, closeOnEvent); + public CombinedWindow(Player player, BaseComponent[] title, GUI gui, Inventory upperInventory, boolean closeable, boolean closeOnEvent) { + super(player, title, gui.getSize(), upperInventory, closeable, closeOnEvent); this.gui = gui; gui.addParent(this); diff --git a/InvUI/src/main/java/de/studiocode/invui/window/impl/merged/combined/SimpleCombinedWindow.java b/InvUI/src/main/java/de/studiocode/invui/window/impl/merged/combined/SimpleCombinedWindow.java index 6191472..66ac6e3 100644 --- a/InvUI/src/main/java/de/studiocode/invui/window/impl/merged/combined/SimpleCombinedWindow.java +++ b/InvUI/src/main/java/de/studiocode/invui/window/impl/merged/combined/SimpleCombinedWindow.java @@ -1,27 +1,37 @@ package de.studiocode.invui.window.impl.merged.combined; import de.studiocode.invui.gui.GUI; +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.chat.TextComponent; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; public class SimpleCombinedWindow extends CombinedWindow { + public SimpleCombinedWindow(Player player, BaseComponent[] title, GUI gui, boolean closeable, boolean closeOnEvent) { + super(player, title, gui, createInventory(gui), closeable, closeOnEvent); + } + public SimpleCombinedWindow(Player player, String title, GUI gui, boolean closeable, boolean closeOnEvent) { - super(player, gui, createInventory(gui, title), closeable, closeOnEvent); + this(player, TextComponent.fromLegacyText(title), gui, closeable, closeOnEvent); } public SimpleCombinedWindow(Player player, String title, GUI gui) { this(player, title, gui, true, true); } - private static Inventory createInventory(GUI gui, String title) { + public SimpleCombinedWindow(Player player, BaseComponent[] title, GUI gui) { + this(player, title, gui, true, true); + } + + private static Inventory createInventory(GUI gui) { if (gui.getWidth() != 9) throw new IllegalArgumentException("GUI width has to be 9"); if (gui.getHeight() <= 4) throw new IllegalArgumentException("GUI height has to be bigger than 4"); - return Bukkit.createInventory(null, gui.getSize() - 36, title); + return Bukkit.createInventory(null, gui.getSize() - 36); } } diff --git a/InvUI/src/main/java/de/studiocode/invui/window/impl/merged/split/AnvilSplitWindow.java b/InvUI/src/main/java/de/studiocode/invui/window/impl/merged/split/AnvilSplitWindow.java index a4d9519..f6968b4 100644 --- a/InvUI/src/main/java/de/studiocode/invui/window/impl/merged/split/AnvilSplitWindow.java +++ b/InvUI/src/main/java/de/studiocode/invui/window/impl/merged/split/AnvilSplitWindow.java @@ -3,6 +3,8 @@ package de.studiocode.invui.window.impl.merged.split; import de.studiocode.inventoryaccess.api.abstraction.inventory.AnvilInventory; import de.studiocode.inventoryaccess.api.version.InventoryAccess; import de.studiocode.invui.gui.GUI; +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.chat.TextComponent; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -12,10 +14,8 @@ public class AnvilSplitWindow extends SplitWindow { private final AnvilInventory anvilInventory; - public AnvilSplitWindow(Player player, String title, GUI upperGui, GUI lowerGui, - boolean closeable, Consumer renameHandler) { - - super(player, upperGui, lowerGui, null, false, closeable, true); + public AnvilSplitWindow(Player player, BaseComponent[] title, GUI upperGui, GUI lowerGui, boolean closeable, Consumer renameHandler) { + super(player, title, upperGui, lowerGui, null, false, closeable, true); anvilInventory = InventoryAccess.createAnvilInventory(player, title, renameHandler); upperInventory = anvilInventory.getBukkitInventory(); @@ -23,6 +23,14 @@ public class AnvilSplitWindow extends SplitWindow { initUpperItems(); } + public AnvilSplitWindow(Player player, BaseComponent[] title, GUI upperGui, GUI lowerGui, Consumer renameHandler) { + this(player, title, upperGui, lowerGui, true, renameHandler); + } + + public AnvilSplitWindow(Player player, String title, GUI upperGui, GUI lowerGui, boolean closeable, Consumer renameHandler) { + this(player, TextComponent.fromLegacyText(title), upperGui, lowerGui, closeable, renameHandler); + } + public AnvilSplitWindow(Player player, String title, GUI upperGui, GUI lowerGui, Consumer renameHandler) { this(player, title, upperGui, lowerGui, true, renameHandler); } diff --git a/InvUI/src/main/java/de/studiocode/invui/window/impl/merged/split/SimpleSplitWindow.java b/InvUI/src/main/java/de/studiocode/invui/window/impl/merged/split/SimpleSplitWindow.java index a512b58..78617ec 100644 --- a/InvUI/src/main/java/de/studiocode/invui/window/impl/merged/split/SimpleSplitWindow.java +++ b/InvUI/src/main/java/de/studiocode/invui/window/impl/merged/split/SimpleSplitWindow.java @@ -2,12 +2,22 @@ package de.studiocode.invui.window.impl.merged.split; import de.studiocode.invui.gui.GUI; import de.studiocode.invui.util.InventoryUtils; +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.chat.TextComponent; import org.bukkit.entity.Player; public class SimpleSplitWindow extends SplitWindow { + public SimpleSplitWindow(Player player, BaseComponent[] title, GUI upperGui, GUI lowerGui, boolean closeable, boolean closeOnEvent) { + super(player, title, upperGui, lowerGui, InventoryUtils.createMatchingInventory(upperGui, ""), true, closeable, closeOnEvent); + } + + public SimpleSplitWindow(Player player, BaseComponent[] title, GUI upperGui, GUI lowerGui) { + this(player, title, upperGui, lowerGui, true, true); + } + public SimpleSplitWindow(Player player, String title, GUI upperGui, GUI lowerGui, boolean closeable, boolean closeOnEvent) { - super(player, upperGui, lowerGui, InventoryUtils.createMatchingInventory(upperGui, title), true, closeable, closeOnEvent); + this(player, TextComponent.fromLegacyText(title), upperGui, lowerGui, closeable, closeOnEvent); } public SimpleSplitWindow(Player player, String title, GUI upperGui, GUI lowerGui) { diff --git a/InvUI/src/main/java/de/studiocode/invui/window/impl/merged/split/SplitWindow.java b/InvUI/src/main/java/de/studiocode/invui/window/impl/merged/split/SplitWindow.java index bf98206..8d1d28f 100644 --- a/InvUI/src/main/java/de/studiocode/invui/window/impl/merged/split/SplitWindow.java +++ b/InvUI/src/main/java/de/studiocode/invui/window/impl/merged/split/SplitWindow.java @@ -6,6 +6,7 @@ import de.studiocode.invui.util.Pair; import de.studiocode.invui.util.SlotUtils; import de.studiocode.invui.window.Window; import de.studiocode.invui.window.impl.merged.MergedWindow; +import net.md_5.bungee.api.chat.BaseComponent; import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.Inventory; @@ -18,8 +19,8 @@ public abstract class SplitWindow extends MergedWindow { private final GUI upperGui; private final GUI lowerGui; - public SplitWindow(Player player, GUI upperGui, GUI lowerGui, Inventory upperInventory, boolean initItems, boolean closeable, boolean closeOnEvent) { - super(player, upperGui.getSize() + lowerGui.getSize(), upperInventory, closeable, closeOnEvent); + public SplitWindow(Player player, BaseComponent[] title, GUI upperGui, GUI lowerGui, Inventory upperInventory, boolean initItems, boolean closeable, boolean closeOnEvent) { + super(player, title, upperGui.getSize() + lowerGui.getSize(), upperInventory, closeable, closeOnEvent); this.upperGui = upperGui; this.lowerGui = lowerGui; diff --git a/InvUI/src/main/java/de/studiocode/invui/window/impl/single/AnvilWindow.java b/InvUI/src/main/java/de/studiocode/invui/window/impl/single/AnvilWindow.java index a4763fe..d7ccb74 100644 --- a/InvUI/src/main/java/de/studiocode/invui/window/impl/single/AnvilWindow.java +++ b/InvUI/src/main/java/de/studiocode/invui/window/impl/single/AnvilWindow.java @@ -3,6 +3,8 @@ package de.studiocode.invui.window.impl.single; import de.studiocode.inventoryaccess.api.abstraction.inventory.AnvilInventory; import de.studiocode.inventoryaccess.api.version.InventoryAccess; import de.studiocode.invui.gui.GUI; +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.chat.TextComponent; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -12,18 +14,26 @@ public class AnvilWindow extends SingleWindow { private final AnvilInventory anvilInventory; - public AnvilWindow(Player player, String title, GUI gui, boolean closeable, Consumer renameHandler) { - super(player.getUniqueId(), gui, null, false, closeable, true); + public AnvilWindow(Player player, BaseComponent[] title, GUI gui, boolean closable, Consumer renameHandler) { + super(player.getUniqueId(), title, gui, null, false, closable, true); anvilInventory = InventoryAccess.createAnvilInventory(player, title, renameHandler); inventory = anvilInventory.getBukkitInventory(); - + initItems(); } + public AnvilWindow(Player player, String title, GUI gui, boolean closeable, Consumer renameHandler) { + this(player, TextComponent.fromLegacyText(title), gui, closeable, renameHandler); + } + public AnvilWindow(Player player, String title, GUI gui, Consumer renameHandler) { this(player, title, gui, true, renameHandler); } + public AnvilWindow(Player player, BaseComponent[] title, GUI gui, Consumer renameHandler) { + this(player, title, gui, true, renameHandler); + } + @Override protected void setInvItem(int slot, ItemStack itemStack) { anvilInventory.setItem(slot, itemStack); diff --git a/InvUI/src/main/java/de/studiocode/invui/window/impl/single/SimpleWindow.java b/InvUI/src/main/java/de/studiocode/invui/window/impl/single/SimpleWindow.java index 75dff4b..d18f249 100644 --- a/InvUI/src/main/java/de/studiocode/invui/window/impl/single/SimpleWindow.java +++ b/InvUI/src/main/java/de/studiocode/invui/window/impl/single/SimpleWindow.java @@ -2,14 +2,32 @@ package de.studiocode.invui.window.impl.single; import de.studiocode.invui.gui.GUI; import de.studiocode.invui.util.InventoryUtils; +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.chat.TextComponent; import org.bukkit.entity.Player; import java.util.UUID; public class SimpleWindow extends SingleWindow { + public SimpleWindow(UUID viewerUUID, BaseComponent[] title, GUI gui, boolean closeable, boolean closeOnEvent) { + super(viewerUUID, title, gui, InventoryUtils.createMatchingInventory(gui, ""), true, closeable, closeOnEvent); + } + + public SimpleWindow(UUID viewerUUID, BaseComponent[] title, GUI gui) { + this(viewerUUID, title, gui, true, true); + } + + public SimpleWindow(Player player, BaseComponent[] title, GUI gui, boolean closeable, boolean closeOnEvent) { + this(player.getUniqueId(), title, gui, closeable, closeOnEvent); + } + + public SimpleWindow(Player player, BaseComponent[] title, GUI gui) { + this(player, title, gui, true, true); + } + public SimpleWindow(UUID viewerUUID, String title, GUI gui, boolean closeable, boolean closeOnEvent) { - super(viewerUUID, gui, InventoryUtils.createMatchingInventory(gui, title), true, closeable, closeOnEvent); + this(viewerUUID, TextComponent.fromLegacyText(title), gui, closeable, closeOnEvent); } public SimpleWindow(UUID viewerUUID, String title, GUI gui) { diff --git a/InvUI/src/main/java/de/studiocode/invui/window/impl/single/SingleWindow.java b/InvUI/src/main/java/de/studiocode/invui/window/impl/single/SingleWindow.java index 86fd348..aca241e 100644 --- a/InvUI/src/main/java/de/studiocode/invui/window/impl/single/SingleWindow.java +++ b/InvUI/src/main/java/de/studiocode/invui/window/impl/single/SingleWindow.java @@ -6,6 +6,7 @@ import de.studiocode.invui.util.InventoryUtils; import de.studiocode.invui.util.Pair; import de.studiocode.invui.window.Window; import de.studiocode.invui.window.impl.BaseWindow; +import net.md_5.bungee.api.chat.BaseComponent; import org.bukkit.entity.Player; import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.inventory.InventoryClickEvent; @@ -23,8 +24,8 @@ public abstract class SingleWindow extends BaseWindow { private final int size; protected Inventory inventory; - public SingleWindow(UUID viewerUUID, GUI gui, Inventory inventory, boolean initItems, boolean closeable, boolean closeOnEvent) { - super(viewerUUID, gui.getSize(), closeable, closeOnEvent); + public SingleWindow(UUID viewerUUID, BaseComponent[] title, GUI gui, Inventory inventory, boolean initItems, boolean closeable, boolean closeOnEvent) { + super(viewerUUID, title, gui.getSize(), closeable, closeOnEvent); this.gui = gui; this.size = gui.getSize(); this.inventory = inventory; diff --git a/InventoryAccess/1_14_R1/src/main/java/de/studiocode/inventoryaccess/v1_14_R1/inventory/AnvilInventoryImpl.java b/InventoryAccess/1_14_R1/src/main/java/de/studiocode/inventoryaccess/v1_14_R1/inventory/AnvilInventoryImpl.java index 695141a..9a29cec 100644 --- a/InventoryAccess/1_14_R1/src/main/java/de/studiocode/inventoryaccess/v1_14_R1/inventory/AnvilInventoryImpl.java +++ b/InventoryAccess/1_14_R1/src/main/java/de/studiocode/inventoryaccess/v1_14_R1/inventory/AnvilInventoryImpl.java @@ -2,6 +2,8 @@ package de.studiocode.inventoryaccess.v1_14_R1.inventory; import de.studiocode.inventoryaccess.api.abstraction.inventory.AnvilInventory; import de.studiocode.inventoryaccess.api.version.ReflectionUtils; +import de.studiocode.inventoryaccess.v1_14_R1.util.InventoryUtilsImpl; +import net.md_5.bungee.api.chat.BaseComponent; import net.minecraft.server.v1_14_R1.*; import org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_14_R1.event.CraftEventFactory; @@ -21,7 +23,7 @@ public class AnvilInventoryImpl extends ContainerAnvil implements AnvilInventory private static final Field REPAIR_INVENTORY_FIELD = ReflectionUtils.getField(ContainerAnvil.class, true, "repairInventory"); private static final Field RESULT_INVENTORY_FIELD = ReflectionUtils.getField(ContainerAnvil.class, true, "resultInventory"); - private final String title; + private final IChatBaseComponent title; private final Consumer renameHandler; private final CraftInventoryView view; private final EntityPlayer player; @@ -32,11 +34,11 @@ public class AnvilInventoryImpl extends ContainerAnvil implements AnvilInventory private String text; private boolean open; - public AnvilInventoryImpl(Player player, String title, Consumer renameHandler) { - this(((CraftPlayer) player).getHandle(), title, renameHandler); + public AnvilInventoryImpl(Player player, BaseComponent[] title, Consumer renameHandler) { + this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title), renameHandler); } - public AnvilInventoryImpl(EntityPlayer player, String title, Consumer renameHandler) { + public AnvilInventoryImpl(EntityPlayer player, IChatBaseComponent title, Consumer renameHandler) { super(player.nextContainerCounter(), player.inventory, ContainerAccess.at(player.getWorld(), new BlockPosition(Integer.MAX_VALUE, 0, 0))); @@ -63,7 +65,7 @@ public class AnvilInventoryImpl extends ContainerAnvil implements AnvilInventory player.activeContainer = this; // send open packet - player.playerConnection.sendPacket(new PacketPlayOutOpenWindow(windowId, Containers.ANVIL, new ChatMessage(title))); + player.playerConnection.sendPacket(new PacketPlayOutOpenWindow(windowId, Containers.ANVIL, title)); // send initial items NonNullList itemsList = NonNullList.a(ItemStack.a, getItem(0), getItem(1), getItem(2)); diff --git a/InventoryAccess/1_14_R1/src/main/java/de/studiocode/inventoryaccess/v1_14_R1/util/InventoryUtilsImpl.java b/InventoryAccess/1_14_R1/src/main/java/de/studiocode/inventoryaccess/v1_14_R1/util/InventoryUtilsImpl.java index 08bfa01..516b031 100644 --- a/InventoryAccess/1_14_R1/src/main/java/de/studiocode/inventoryaccess/v1_14_R1/util/InventoryUtilsImpl.java +++ b/InventoryAccess/1_14_R1/src/main/java/de/studiocode/inventoryaccess/v1_14_R1/util/InventoryUtilsImpl.java @@ -1,6 +1,8 @@ package de.studiocode.inventoryaccess.v1_14_R1.util; import de.studiocode.inventoryaccess.api.abstraction.util.InventoryUtils; +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.chat.ComponentSerializer; import net.minecraft.server.v1_14_R1.*; import org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_14_R1.event.CraftEventFactory; @@ -18,7 +20,7 @@ public class InventoryUtilsImpl implements InventoryUtils { } @Override - public void openCustomInventory(Player player, Inventory inventory, String title) { + public void openCustomInventory(Player player, Inventory inventory, BaseComponent[] title) { EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle(); Containers windowType = getNotchInventoryType(inventory); @@ -32,7 +34,7 @@ public class InventoryUtilsImpl implements InventoryUtils { if (iinventory instanceof ITileInventory) titleComponent = ((ITileInventory) iinventory).getScoreboardDisplayName(); else titleComponent = new ChatComponentText(container.getBukkitView().getTitle()); - } else titleComponent = new ChatComponentText(title); + } else titleComponent = createNMSComponent(title); entityPlayer.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, windowType, titleComponent)); entityPlayer.activeContainer = container; @@ -42,10 +44,10 @@ public class InventoryUtilsImpl implements InventoryUtils { } @Override - public void updateOpenInventoryTitle(Player player, String title) { + public void updateOpenInventoryTitle(Player player, BaseComponent[] title) { EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle(); Container container = entityPlayer.activeContainer; - entityPlayer.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, container.getType(), new ChatComponentText(title))); + entityPlayer.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, container.getType(), createNMSComponent(title))); } private static Containers getNotchInventoryType(Inventory inventory) { @@ -70,4 +72,9 @@ public class InventoryUtilsImpl implements InventoryUtils { } else return CraftContainer.getNotchInventoryType(type); } + public static IChatBaseComponent createNMSComponent(BaseComponent[] components) { + String json = ComponentSerializer.toString(components); + return IChatBaseComponent.ChatSerializer.a(json); + } + } diff --git a/InventoryAccess/1_15_R1/src/main/java/de/studiocode/inventoryaccess/v1_15_R1/inventory/AnvilInventoryImpl.java b/InventoryAccess/1_15_R1/src/main/java/de/studiocode/inventoryaccess/v1_15_R1/inventory/AnvilInventoryImpl.java index 7fe2dc2..dba23fd 100644 --- a/InventoryAccess/1_15_R1/src/main/java/de/studiocode/inventoryaccess/v1_15_R1/inventory/AnvilInventoryImpl.java +++ b/InventoryAccess/1_15_R1/src/main/java/de/studiocode/inventoryaccess/v1_15_R1/inventory/AnvilInventoryImpl.java @@ -2,6 +2,8 @@ package de.studiocode.inventoryaccess.v1_15_R1.inventory; import de.studiocode.inventoryaccess.api.abstraction.inventory.AnvilInventory; import de.studiocode.inventoryaccess.api.version.ReflectionUtils; +import de.studiocode.inventoryaccess.v1_15_R1.util.InventoryUtilsImpl; +import net.md_5.bungee.api.chat.BaseComponent; import net.minecraft.server.v1_15_R1.*; import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_15_R1.event.CraftEventFactory; @@ -21,7 +23,7 @@ public class AnvilInventoryImpl extends ContainerAnvil implements AnvilInventory private static final Field REPAIR_INVENTORY_FIELD = ReflectionUtils.getField(ContainerAnvil.class, true, "repairInventory"); private static final Field RESULT_INVENTORY_FIELD = ReflectionUtils.getField(ContainerAnvil.class, true, "resultInventory"); - private final String title; + private final IChatBaseComponent title; private final Consumer renameHandler; private final CraftInventoryView view; private final EntityPlayer player; @@ -32,11 +34,11 @@ public class AnvilInventoryImpl extends ContainerAnvil implements AnvilInventory private String text; private boolean open; - public AnvilInventoryImpl(Player player, String title, Consumer renameHandler) { - this(((CraftPlayer) player).getHandle(), title, renameHandler); + public AnvilInventoryImpl(Player player, BaseComponent[] title, Consumer renameHandler) { + this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title), renameHandler); } - public AnvilInventoryImpl(EntityPlayer player, String title, Consumer renameHandler) { + public AnvilInventoryImpl(EntityPlayer player, IChatBaseComponent title, Consumer renameHandler) { super(player.nextContainerCounter(), player.inventory, ContainerAccess.at(player.getWorld(), new BlockPosition(Integer.MAX_VALUE, 0, 0))); @@ -63,7 +65,7 @@ public class AnvilInventoryImpl extends ContainerAnvil implements AnvilInventory player.activeContainer = this; // send open packet - player.playerConnection.sendPacket(new PacketPlayOutOpenWindow(windowId, Containers.ANVIL, new ChatMessage(title))); + player.playerConnection.sendPacket(new PacketPlayOutOpenWindow(windowId, Containers.ANVIL, title)); // send initial items NonNullList itemsList = NonNullList.a(ItemStack.a, getItem(0), getItem(1), getItem(2)); @@ -160,7 +162,7 @@ public class AnvilInventoryImpl extends ContainerAnvil implements AnvilInventory } /** - * Called when both items in the {@link de.studiocode.inventoryaccess.v1_14_R1.inventory.AnvilInventoryImpl#repairInventory} were set to create + * Called when both items in the {@link AnvilInventoryImpl#repairInventory} were set to create * the resulting product, calculate the level cost and call the {@link PrepareAnvilEvent}. */ @Override diff --git a/InventoryAccess/1_15_R1/src/main/java/de/studiocode/inventoryaccess/v1_15_R1/util/InventoryUtilsImpl.java b/InventoryAccess/1_15_R1/src/main/java/de/studiocode/inventoryaccess/v1_15_R1/util/InventoryUtilsImpl.java index 9dce50e..d3c610d 100644 --- a/InventoryAccess/1_15_R1/src/main/java/de/studiocode/inventoryaccess/v1_15_R1/util/InventoryUtilsImpl.java +++ b/InventoryAccess/1_15_R1/src/main/java/de/studiocode/inventoryaccess/v1_15_R1/util/InventoryUtilsImpl.java @@ -1,6 +1,8 @@ package de.studiocode.inventoryaccess.v1_15_R1.util; import de.studiocode.inventoryaccess.api.abstraction.util.InventoryUtils; +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.chat.ComponentSerializer; import net.minecraft.server.v1_15_R1.*; import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_15_R1.event.CraftEventFactory; @@ -17,7 +19,7 @@ public class InventoryUtilsImpl implements InventoryUtils { } @Override - public void openCustomInventory(Player player, Inventory inventory, String title) { + public void openCustomInventory(Player player, Inventory inventory, BaseComponent[] title) { EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle(); Containers windowType = CraftContainer.getNotchInventoryType(inventory); @@ -31,7 +33,7 @@ public class InventoryUtilsImpl implements InventoryUtils { if (iinventory instanceof ITileInventory) titleComponent = ((ITileInventory) iinventory).getScoreboardDisplayName(); else titleComponent = new ChatComponentText(container.getBukkitView().getTitle()); - } else titleComponent = new ChatComponentText(title); + } else titleComponent = createNMSComponent(title); entityPlayer.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, windowType, titleComponent)); entityPlayer.activeContainer = container; @@ -41,10 +43,15 @@ public class InventoryUtilsImpl implements InventoryUtils { } @Override - public void updateOpenInventoryTitle(Player player, String title) { + public void updateOpenInventoryTitle(Player player, BaseComponent[] title) { EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle(); Container container = entityPlayer.activeContainer; - entityPlayer.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, container.getType(), new ChatComponentText(title))); + entityPlayer.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, container.getType(), createNMSComponent(title))); + } + + public static IChatBaseComponent createNMSComponent(BaseComponent[] components) { + String json = ComponentSerializer.toString(components); + return IChatBaseComponent.ChatSerializer.a(json); } } diff --git a/InventoryAccess/1_16_R1/src/main/java/de/studiocode/inventoryaccess/v1_16_R1/inventory/AnvilInventoryImpl.java b/InventoryAccess/1_16_R1/src/main/java/de/studiocode/inventoryaccess/v1_16_R1/inventory/AnvilInventoryImpl.java index 33a5eb4..a1da112 100644 --- a/InventoryAccess/1_16_R1/src/main/java/de/studiocode/inventoryaccess/v1_16_R1/inventory/AnvilInventoryImpl.java +++ b/InventoryAccess/1_16_R1/src/main/java/de/studiocode/inventoryaccess/v1_16_R1/inventory/AnvilInventoryImpl.java @@ -1,6 +1,8 @@ package de.studiocode.inventoryaccess.v1_16_R1.inventory; import de.studiocode.inventoryaccess.api.abstraction.inventory.AnvilInventory; +import de.studiocode.inventoryaccess.v1_16_R1.util.InventoryUtilsImpl; +import net.md_5.bungee.api.chat.BaseComponent; import net.minecraft.server.v1_16_R1.*; import org.bukkit.craftbukkit.v1_16_R1.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_16_R1.event.CraftEventFactory; @@ -8,13 +10,14 @@ import org.bukkit.craftbukkit.v1_16_R1.inventory.CraftInventoryAnvil; import org.bukkit.craftbukkit.v1_16_R1.inventory.CraftInventoryView; import org.bukkit.craftbukkit.v1_16_R1.inventory.CraftItemStack; import org.bukkit.entity.Player; +import org.bukkit.event.inventory.PrepareAnvilEvent; import org.bukkit.inventory.Inventory; import java.util.function.Consumer; public class AnvilInventoryImpl extends ContainerAnvil implements AnvilInventory { - private final String title; + private final IChatBaseComponent title; private final Consumer renameHandler; private final CraftInventoryView view; private final EntityPlayer player; @@ -22,11 +25,11 @@ public class AnvilInventoryImpl extends ContainerAnvil implements AnvilInventory private String text; private boolean open; - public AnvilInventoryImpl(Player player, String title, Consumer renameHandler) { - this(((CraftPlayer) player).getHandle(), title, renameHandler); + public AnvilInventoryImpl(Player player, BaseComponent[] title, Consumer renameHandler) { + this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title), renameHandler); } - public AnvilInventoryImpl(EntityPlayer player, String title, Consumer renameHandler) { + public AnvilInventoryImpl(EntityPlayer player, IChatBaseComponent title, Consumer renameHandler) { super(player.nextContainerCounter(), player.inventory, ContainerAccess.at(player.getWorld(), new BlockPosition(Integer.MAX_VALUE, 0, 0))); @@ -49,7 +52,7 @@ public class AnvilInventoryImpl extends ContainerAnvil implements AnvilInventory player.activeContainer = this; // send open packet - player.playerConnection.sendPacket(new PacketPlayOutOpenWindow(windowId, Containers.ANVIL, new ChatMessage(title))); + player.playerConnection.sendPacket(new PacketPlayOutOpenWindow(windowId, Containers.ANVIL, title)); // send initial items NonNullList itemsList = NonNullList.a(ItemStack.b, getItem(0), getItem(1), getItem(2)); diff --git a/InventoryAccess/1_16_R1/src/main/java/de/studiocode/inventoryaccess/v1_16_R1/util/InventoryUtilsImpl.java b/InventoryAccess/1_16_R1/src/main/java/de/studiocode/inventoryaccess/v1_16_R1/util/InventoryUtilsImpl.java index 40af255..8ece690 100644 --- a/InventoryAccess/1_16_R1/src/main/java/de/studiocode/inventoryaccess/v1_16_R1/util/InventoryUtilsImpl.java +++ b/InventoryAccess/1_16_R1/src/main/java/de/studiocode/inventoryaccess/v1_16_R1/util/InventoryUtilsImpl.java @@ -1,6 +1,8 @@ package de.studiocode.inventoryaccess.v1_16_R1.util; import de.studiocode.inventoryaccess.api.abstraction.util.InventoryUtils; +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.chat.ComponentSerializer; import net.minecraft.server.v1_16_R1.*; import org.bukkit.craftbukkit.v1_16_R1.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_16_R1.event.CraftEventFactory; @@ -18,7 +20,7 @@ public class InventoryUtilsImpl implements InventoryUtils { } @Override - public void openCustomInventory(Player player, Inventory inventory, String title) { + public void openCustomInventory(Player player, Inventory inventory, BaseComponent[] title) { EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle(); Containers windowType = CraftContainer.getNotchInventoryType(inventory); @@ -32,7 +34,7 @@ public class InventoryUtilsImpl implements InventoryUtils { if (iinventory instanceof ITileInventory) titleComponent = ((ITileInventory) iinventory).getScoreboardDisplayName(); else titleComponent = CraftChatMessage.fromString(container.getBukkitView().getTitle())[0]; - } else titleComponent = CraftChatMessage.fromString(title)[0]; + } else titleComponent = createNMSComponent(title); entityPlayer.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, windowType, titleComponent)); entityPlayer.activeContainer = container; @@ -42,11 +44,15 @@ public class InventoryUtilsImpl implements InventoryUtils { } @Override - public void updateOpenInventoryTitle(Player player, String title) { + public void updateOpenInventoryTitle(Player player, BaseComponent[] 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)); + entityPlayer.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, container.getType(), createNMSComponent(title))); + } + + public static IChatBaseComponent createNMSComponent(BaseComponent[] components) { + String json = ComponentSerializer.toString(components); + return IChatBaseComponent.ChatSerializer.a(json); } } diff --git a/InventoryAccess/1_16_R2/src/main/java/de/studiocode/inventoryaccess/v1_16_R2/inventory/AnvilInventoryImpl.java b/InventoryAccess/1_16_R2/src/main/java/de/studiocode/inventoryaccess/v1_16_R2/inventory/AnvilInventoryImpl.java index 3ba46a6..2b91d97 100644 --- a/InventoryAccess/1_16_R2/src/main/java/de/studiocode/inventoryaccess/v1_16_R2/inventory/AnvilInventoryImpl.java +++ b/InventoryAccess/1_16_R2/src/main/java/de/studiocode/inventoryaccess/v1_16_R2/inventory/AnvilInventoryImpl.java @@ -1,6 +1,8 @@ package de.studiocode.inventoryaccess.v1_16_R2.inventory; import de.studiocode.inventoryaccess.api.abstraction.inventory.AnvilInventory; +import de.studiocode.inventoryaccess.v1_16_R2.util.InventoryUtilsImpl; +import net.md_5.bungee.api.chat.BaseComponent; import net.minecraft.server.v1_16_R2.*; import org.bukkit.craftbukkit.v1_16_R2.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_16_R2.event.CraftEventFactory; @@ -15,7 +17,7 @@ import java.util.function.Consumer; public class AnvilInventoryImpl extends ContainerAnvil implements AnvilInventory { - private final String title; + private final IChatBaseComponent title; private final Consumer renameHandler; private final CraftInventoryView view; private final EntityPlayer player; @@ -23,11 +25,11 @@ public class AnvilInventoryImpl extends ContainerAnvil implements AnvilInventory private String text; private boolean open; - public AnvilInventoryImpl(Player player, String title, Consumer renameHandler) { - this(((CraftPlayer) player).getHandle(), title, renameHandler); + public AnvilInventoryImpl(Player player, BaseComponent[] title, Consumer renameHandler) { + this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title), renameHandler); } - public AnvilInventoryImpl(EntityPlayer player, String title, Consumer renameHandler) { + public AnvilInventoryImpl(EntityPlayer player, IChatBaseComponent title, Consumer renameHandler) { super(player.nextContainerCounter(), player.inventory, ContainerAccess.at(player.getWorld(), new BlockPosition(Integer.MAX_VALUE, 0, 0))); @@ -50,7 +52,7 @@ public class AnvilInventoryImpl extends ContainerAnvil implements AnvilInventory player.activeContainer = this; // send open packet - player.playerConnection.sendPacket(new PacketPlayOutOpenWindow(windowId, Containers.ANVIL, new ChatMessage(title))); + player.playerConnection.sendPacket(new PacketPlayOutOpenWindow(windowId, Containers.ANVIL, title)); // send initial items NonNullList itemsList = NonNullList.a(ItemStack.b, getItem(0), getItem(1), getItem(2)); diff --git a/InventoryAccess/1_16_R2/src/main/java/de/studiocode/inventoryaccess/v1_16_R2/util/InventoryUtilsImpl.java b/InventoryAccess/1_16_R2/src/main/java/de/studiocode/inventoryaccess/v1_16_R2/util/InventoryUtilsImpl.java index a13111e..c33a542 100644 --- a/InventoryAccess/1_16_R2/src/main/java/de/studiocode/inventoryaccess/v1_16_R2/util/InventoryUtilsImpl.java +++ b/InventoryAccess/1_16_R2/src/main/java/de/studiocode/inventoryaccess/v1_16_R2/util/InventoryUtilsImpl.java @@ -1,6 +1,8 @@ package de.studiocode.inventoryaccess.v1_16_R2.util; import de.studiocode.inventoryaccess.api.abstraction.util.InventoryUtils; +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.chat.ComponentSerializer; import net.minecraft.server.v1_16_R2.*; import org.bukkit.craftbukkit.v1_16_R2.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_16_R2.event.CraftEventFactory; @@ -18,7 +20,7 @@ public class InventoryUtilsImpl implements InventoryUtils { } @Override - public void openCustomInventory(Player player, Inventory inventory, String title) { + public void openCustomInventory(Player player, Inventory inventory, BaseComponent[] title) { EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle(); Containers windowType = CraftContainer.getNotchInventoryType(inventory); @@ -32,7 +34,7 @@ public class InventoryUtilsImpl implements InventoryUtils { if (iinventory instanceof ITileInventory) titleComponent = ((ITileInventory) iinventory).getScoreboardDisplayName(); else titleComponent = CraftChatMessage.fromString(container.getBukkitView().getTitle())[0]; - } else titleComponent = CraftChatMessage.fromString(title)[0]; + } else titleComponent = createNMSComponent(title); entityPlayer.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, windowType, titleComponent)); entityPlayer.activeContainer = container; @@ -42,11 +44,15 @@ public class InventoryUtilsImpl implements InventoryUtils { } @Override - public void updateOpenInventoryTitle(Player player, String title) { + public void updateOpenInventoryTitle(Player player, BaseComponent[] 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)); + entityPlayer.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, container.getType(), createNMSComponent(title))); + } + + public static IChatBaseComponent createNMSComponent(BaseComponent[] components) { + String json = ComponentSerializer.toString(components); + return IChatBaseComponent.ChatSerializer.a(json); } } diff --git a/InventoryAccess/1_16_R3/src/main/java/de/studiocode/inventoryaccess/v1_16_R3/inventory/AnvilInventoryImpl.java b/InventoryAccess/1_16_R3/src/main/java/de/studiocode/inventoryaccess/v1_16_R3/inventory/AnvilInventoryImpl.java index 7191ff3..94994f9 100644 --- a/InventoryAccess/1_16_R3/src/main/java/de/studiocode/inventoryaccess/v1_16_R3/inventory/AnvilInventoryImpl.java +++ b/InventoryAccess/1_16_R3/src/main/java/de/studiocode/inventoryaccess/v1_16_R3/inventory/AnvilInventoryImpl.java @@ -1,6 +1,8 @@ package de.studiocode.inventoryaccess.v1_16_R3.inventory; import de.studiocode.inventoryaccess.api.abstraction.inventory.AnvilInventory; +import de.studiocode.inventoryaccess.v1_16_R3.util.InventoryUtilsImpl; +import net.md_5.bungee.api.chat.BaseComponent; import net.minecraft.server.v1_16_R3.*; import org.bukkit.craftbukkit.v1_16_R3.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory; @@ -15,7 +17,7 @@ import java.util.function.Consumer; public class AnvilInventoryImpl extends ContainerAnvil implements AnvilInventory { - private final String title; + private final IChatBaseComponent title; private final Consumer renameHandler; private final CraftInventoryView view; private final EntityPlayer player; @@ -23,11 +25,11 @@ public class AnvilInventoryImpl extends ContainerAnvil implements AnvilInventory private String text; private boolean open; - public AnvilInventoryImpl(Player player, String title, Consumer renameHandler) { - this(((CraftPlayer) player).getHandle(), title, renameHandler); + public AnvilInventoryImpl(Player player, BaseComponent[] title, Consumer renameHandler) { + this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title), renameHandler); } - public AnvilInventoryImpl(EntityPlayer player, String title, Consumer renameHandler) { + public AnvilInventoryImpl(EntityPlayer player, IChatBaseComponent title, Consumer renameHandler) { super(player.nextContainerCounter(), player.inventory, ContainerAccess.at(player.getWorld(), new BlockPosition(Integer.MAX_VALUE, 0, 0))); @@ -50,7 +52,7 @@ public class AnvilInventoryImpl extends ContainerAnvil implements AnvilInventory player.activeContainer = this; // send open packet - player.playerConnection.sendPacket(new PacketPlayOutOpenWindow(windowId, Containers.ANVIL, new ChatMessage(title))); + player.playerConnection.sendPacket(new PacketPlayOutOpenWindow(windowId, Containers.ANVIL, title)); // send initial items NonNullList itemsList = NonNullList.a(ItemStack.b, getItem(0), getItem(1), getItem(2)); diff --git a/InventoryAccess/1_16_R3/src/main/java/de/studiocode/inventoryaccess/v1_16_R3/util/InventoryUtilsImpl.java b/InventoryAccess/1_16_R3/src/main/java/de/studiocode/inventoryaccess/v1_16_R3/util/InventoryUtilsImpl.java index e88026a..3b4a29a 100644 --- a/InventoryAccess/1_16_R3/src/main/java/de/studiocode/inventoryaccess/v1_16_R3/util/InventoryUtilsImpl.java +++ b/InventoryAccess/1_16_R3/src/main/java/de/studiocode/inventoryaccess/v1_16_R3/util/InventoryUtilsImpl.java @@ -1,6 +1,8 @@ package de.studiocode.inventoryaccess.v1_16_R3.util; import de.studiocode.inventoryaccess.api.abstraction.util.InventoryUtils; +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.chat.ComponentSerializer; import net.minecraft.server.v1_16_R3.*; import org.bukkit.craftbukkit.v1_16_R3.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory; @@ -18,7 +20,7 @@ public class InventoryUtilsImpl implements InventoryUtils { } @Override - public void openCustomInventory(Player player, Inventory inventory, String title) { + public void openCustomInventory(Player player, Inventory inventory, BaseComponent[] title) { EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle(); Containers windowType = CraftContainer.getNotchInventoryType(inventory); @@ -32,7 +34,7 @@ public class InventoryUtilsImpl implements InventoryUtils { if (iinventory instanceof ITileInventory) titleComponent = ((ITileInventory) iinventory).getScoreboardDisplayName(); else titleComponent = CraftChatMessage.fromString(container.getBukkitView().getTitle())[0]; - } else titleComponent = CraftChatMessage.fromString(title)[0]; + } else titleComponent = createNMSComponent(title); entityPlayer.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, windowType, titleComponent)); entityPlayer.activeContainer = container; @@ -42,11 +44,15 @@ public class InventoryUtilsImpl implements InventoryUtils { } @Override - public void updateOpenInventoryTitle(Player player, String title) { + public void updateOpenInventoryTitle(Player player, BaseComponent[] 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)); + entityPlayer.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, container.getType(), createNMSComponent(title))); + } + + public static IChatBaseComponent createNMSComponent(BaseComponent[] components) { + String json = ComponentSerializer.toString(components); + return CraftChatMessage.fromJSON(json); } } diff --git a/InventoryAccess/1_17_R1/src/main/java/de/studiocode/inventoryaccess/v1_17_R1/inventory/AnvilInventoryImpl.java b/InventoryAccess/1_17_R1/src/main/java/de/studiocode/inventoryaccess/v1_17_R1/inventory/AnvilInventoryImpl.java index aeb1800..b276e19 100644 --- a/InventoryAccess/1_17_R1/src/main/java/de/studiocode/inventoryaccess/v1_17_R1/inventory/AnvilInventoryImpl.java +++ b/InventoryAccess/1_17_R1/src/main/java/de/studiocode/inventoryaccess/v1_17_R1/inventory/AnvilInventoryImpl.java @@ -1,9 +1,11 @@ package de.studiocode.inventoryaccess.v1_17_R1.inventory; import de.studiocode.inventoryaccess.api.abstraction.inventory.AnvilInventory; +import de.studiocode.inventoryaccess.v1_17_R1.util.InventoryUtilsImpl; +import net.md_5.bungee.api.chat.BaseComponent; import net.minecraft.core.BlockPos; import net.minecraft.core.NonNullList; -import net.minecraft.network.chat.TextComponent; +import net.minecraft.network.chat.Component; import net.minecraft.network.protocol.game.ClientboundContainerSetContentPacket; import net.minecraft.network.protocol.game.ClientboundContainerSetSlotPacket; import net.minecraft.network.protocol.game.ClientboundOpenScreenPacket; @@ -27,7 +29,7 @@ import java.util.function.Consumer; public class AnvilInventoryImpl extends AnvilMenu implements AnvilInventory { - private final String title; + private final Component title; private final Consumer renameHandler; private final CraftInventoryView view; private final ServerPlayer player; @@ -35,11 +37,11 @@ public class AnvilInventoryImpl extends AnvilMenu implements AnvilInventory { private String text; private boolean open; - public AnvilInventoryImpl(org.bukkit.entity.Player player, String title, Consumer renameHandler) { - this(((CraftPlayer) player).getHandle(), title, renameHandler); + public AnvilInventoryImpl(org.bukkit.entity.Player player, BaseComponent[] title, Consumer renameHandler) { + this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title), renameHandler); } - public AnvilInventoryImpl(ServerPlayer player, String title, Consumer renameHandler) { + public AnvilInventoryImpl(ServerPlayer player, Component title, Consumer renameHandler) { super(player.nextContainerCounter(), player.getInventory(), ContainerLevelAccess.create(player.level, new BlockPos(Integer.MAX_VALUE, 0, 0))); @@ -62,7 +64,7 @@ public class AnvilInventoryImpl extends AnvilMenu implements AnvilInventory { player.containerMenu = this; // send open packet - player.connection.send(new ClientboundOpenScreenPacket(containerId, MenuType.ANVIL, new TextComponent(title))); + player.connection.send(new ClientboundOpenScreenPacket(containerId, MenuType.ANVIL, title)); // send initial items NonNullList itemsList = NonNullList.of(ItemStack.EMPTY, getItem(0), getItem(1), getItem(2)); diff --git a/InventoryAccess/1_17_R1/src/main/java/de/studiocode/inventoryaccess/v1_17_R1/util/InventoryUtilsImpl.java b/InventoryAccess/1_17_R1/src/main/java/de/studiocode/inventoryaccess/v1_17_R1/util/InventoryUtilsImpl.java index 06f019c..d04c798 100644 --- a/InventoryAccess/1_17_R1/src/main/java/de/studiocode/inventoryaccess/v1_17_R1/util/InventoryUtilsImpl.java +++ b/InventoryAccess/1_17_R1/src/main/java/de/studiocode/inventoryaccess/v1_17_R1/util/InventoryUtilsImpl.java @@ -1,6 +1,8 @@ package de.studiocode.inventoryaccess.v1_17_R1.util; import de.studiocode.inventoryaccess.api.abstraction.util.InventoryUtils; +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.chat.ComponentSerializer; import net.minecraft.network.chat.Component; import net.minecraft.network.protocol.game.ClientboundOpenScreenPacket; import net.minecraft.server.level.ServerPlayer; @@ -24,7 +26,7 @@ public class InventoryUtilsImpl implements InventoryUtils { } @Override - public void openCustomInventory(Player player, Inventory inventory, String title) { + public void openCustomInventory(Player player, Inventory inventory, BaseComponent[] title) { ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle(); MenuType menuType = CraftContainer.getNotchInventoryType(inventory); @@ -38,7 +40,7 @@ public class InventoryUtilsImpl implements InventoryUtils { if (container instanceof MenuProvider) titleComponent = ((MenuProvider) container).getDisplayName(); else titleComponent = CraftChatMessage.fromString(menu.getBukkitView().getTitle())[0]; - } else titleComponent = CraftChatMessage.fromString(title)[0]; + } else titleComponent = createNMSComponent(title); menu.checkReachable = false; serverPlayer.connection.send(new ClientboundOpenScreenPacket(menu.containerId, menuType, titleComponent)); @@ -50,10 +52,15 @@ public class InventoryUtilsImpl implements InventoryUtils { } @Override - public void updateOpenInventoryTitle(Player player, String title) { + public void updateOpenInventoryTitle(Player player, BaseComponent[] title) { ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle(); AbstractContainerMenu menu = serverPlayer.containerMenu; - serverPlayer.connection.send(new ClientboundOpenScreenPacket(menu.containerId, menu.getType(), CraftChatMessage.fromString(title)[0])); + serverPlayer.connection.send(new ClientboundOpenScreenPacket(menu.containerId, menu.getType(), createNMSComponent(title))); + } + + public static Component createNMSComponent(BaseComponent[] components) { + String json = ComponentSerializer.toString(components); + return CraftChatMessage.fromJSON(json); } } diff --git a/InventoryAccess/api/src/main/java/de/studiocode/inventoryaccess/api/abstraction/util/InventoryUtils.java b/InventoryAccess/api/src/main/java/de/studiocode/inventoryaccess/api/abstraction/util/InventoryUtils.java index b23e854..3c6b836 100644 --- a/InventoryAccess/api/src/main/java/de/studiocode/inventoryaccess/api/abstraction/util/InventoryUtils.java +++ b/InventoryAccess/api/src/main/java/de/studiocode/inventoryaccess/api/abstraction/util/InventoryUtils.java @@ -1,5 +1,6 @@ package de.studiocode.inventoryaccess.api.abstraction.util; +import net.md_5.bungee.api.chat.BaseComponent; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.InventoryView; @@ -26,8 +27,9 @@ public interface InventoryUtils { * * @param player The {@link Player} to open the {@link Inventory} for * @param inventory The {@link Inventory} + * @param title The title of the inventory */ - void openCustomInventory(Player player, Inventory inventory, String title); + void openCustomInventory(Player player, Inventory inventory, BaseComponent[] title); /** * Changes the title of the {@link Inventory} the player is currently viewing. @@ -35,6 +37,6 @@ public interface InventoryUtils { * @param player The {@link Player} * @param title The new title */ - void updateOpenInventoryTitle(Player player, String title); + void updateOpenInventoryTitle(Player player, BaseComponent[] title); } diff --git a/InventoryAccess/api/src/main/java/de/studiocode/inventoryaccess/api/version/InventoryAccess.java b/InventoryAccess/api/src/main/java/de/studiocode/inventoryaccess/api/version/InventoryAccess.java index f840b61..974b855 100644 --- a/InventoryAccess/api/src/main/java/de/studiocode/inventoryaccess/api/version/InventoryAccess.java +++ b/InventoryAccess/api/src/main/java/de/studiocode/inventoryaccess/api/version/InventoryAccess.java @@ -2,6 +2,7 @@ package de.studiocode.inventoryaccess.api.version; import de.studiocode.inventoryaccess.api.abstraction.inventory.AnvilInventory; import de.studiocode.inventoryaccess.api.abstraction.util.InventoryUtils; +import net.md_5.bungee.api.chat.BaseComponent; import org.bukkit.entity.Player; import java.lang.reflect.Constructor; @@ -13,7 +14,7 @@ public class InventoryAccess { private static final Class ANVIL_INVENTORY_CLASS = ReflectionUtils.getImplClass("inventory.AnvilInventoryImpl"); private static final Constructor ANVIL_INVENTORY_CONSTRUCTOR - = ReflectionUtils.getConstructor(ANVIL_INVENTORY_CLASS, Player.class, String.class, Consumer.class); + = ReflectionUtils.getConstructor(ANVIL_INVENTORY_CLASS, Player.class, BaseComponent[].class, Consumer.class); private static final InventoryUtils INVENTORY_UTILS = ReflectionUtils.constructEmpty(INVENTORY_UTILS_CLASS); @@ -35,7 +36,7 @@ public class InventoryAccess { * types something in the renaming section of the anvil * @return The {@link AnvilInventory} */ - public static AnvilInventory createAnvilInventory(Player player, String title, Consumer renameHandler) { + public static AnvilInventory createAnvilInventory(Player player, BaseComponent[] title, Consumer renameHandler) { return ReflectionUtils.construct(ANVIL_INVENTORY_CONSTRUCTOR, player, title, renameHandler); }