BaseComponent[] as Window title

This commit is contained in:
NichtStudioCode 2021-07-03 14:05:27 +02:00
parent eb735c5811
commit 890553cd5c
25 changed files with 222 additions and 89 deletions

@ -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}

@ -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<HumanEntity> viewers = getInventories()[0].getViewers();

@ -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();
}

@ -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);

@ -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);
}
}

@ -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<String> renameHandler) {
super(player, upperGui, lowerGui, null, false, closeable, true);
public AnvilSplitWindow(Player player, BaseComponent[] title, GUI upperGui, GUI lowerGui, boolean closeable, Consumer<String> 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<String> renameHandler) {
this(player, title, upperGui, lowerGui, true, renameHandler);
}
public AnvilSplitWindow(Player player, String title, GUI upperGui, GUI lowerGui, boolean closeable, Consumer<String> renameHandler) {
this(player, TextComponent.fromLegacyText(title), upperGui, lowerGui, closeable, renameHandler);
}
public AnvilSplitWindow(Player player, String title, GUI upperGui, GUI lowerGui, Consumer<String> renameHandler) {
this(player, title, upperGui, lowerGui, true, renameHandler);
}

@ -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) {

@ -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;

@ -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<String> renameHandler) {
super(player.getUniqueId(), gui, null, false, closeable, true);
public AnvilWindow(Player player, BaseComponent[] title, GUI gui, boolean closable, Consumer<String> 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<String> renameHandler) {
this(player, TextComponent.fromLegacyText(title), gui, closeable, renameHandler);
}
public AnvilWindow(Player player, String title, GUI gui, Consumer<String> renameHandler) {
this(player, title, gui, true, renameHandler);
}
public AnvilWindow(Player player, BaseComponent[] title, GUI gui, Consumer<String> renameHandler) {
this(player, title, gui, true, renameHandler);
}
@Override
protected void setInvItem(int slot, ItemStack itemStack) {
anvilInventory.setItem(slot, itemStack);

@ -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) {

@ -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;

@ -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<String> 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<String> renameHandler) {
this(((CraftPlayer) player).getHandle(), title, renameHandler);
public AnvilInventoryImpl(Player player, BaseComponent[] title, Consumer<String> renameHandler) {
this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title), renameHandler);
}
public AnvilInventoryImpl(EntityPlayer player, String title, Consumer<String> renameHandler) {
public AnvilInventoryImpl(EntityPlayer player, IChatBaseComponent title, Consumer<String> 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<ItemStack> itemsList = NonNullList.a(ItemStack.a, getItem(0), getItem(1), getItem(2));

@ -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);
}
}

@ -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<String> 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<String> renameHandler) {
this(((CraftPlayer) player).getHandle(), title, renameHandler);
public AnvilInventoryImpl(Player player, BaseComponent[] title, Consumer<String> renameHandler) {
this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title), renameHandler);
}
public AnvilInventoryImpl(EntityPlayer player, String title, Consumer<String> renameHandler) {
public AnvilInventoryImpl(EntityPlayer player, IChatBaseComponent title, Consumer<String> 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<ItemStack> 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

@ -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);
}
}

@ -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<String> 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<String> renameHandler) {
this(((CraftPlayer) player).getHandle(), title, renameHandler);
public AnvilInventoryImpl(Player player, BaseComponent[] title, Consumer<String> renameHandler) {
this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title), renameHandler);
}
public AnvilInventoryImpl(EntityPlayer player, String title, Consumer<String> renameHandler) {
public AnvilInventoryImpl(EntityPlayer player, IChatBaseComponent title, Consumer<String> 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<ItemStack> itemsList = NonNullList.a(ItemStack.b, getItem(0), getItem(1), getItem(2));

@ -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);
}
}

@ -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<String> 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<String> renameHandler) {
this(((CraftPlayer) player).getHandle(), title, renameHandler);
public AnvilInventoryImpl(Player player, BaseComponent[] title, Consumer<String> renameHandler) {
this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title), renameHandler);
}
public AnvilInventoryImpl(EntityPlayer player, String title, Consumer<String> renameHandler) {
public AnvilInventoryImpl(EntityPlayer player, IChatBaseComponent title, Consumer<String> 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<ItemStack> itemsList = NonNullList.a(ItemStack.b, getItem(0), getItem(1), getItem(2));

@ -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);
}
}

@ -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<String> 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<String> renameHandler) {
this(((CraftPlayer) player).getHandle(), title, renameHandler);
public AnvilInventoryImpl(Player player, BaseComponent[] title, Consumer<String> renameHandler) {
this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title), renameHandler);
}
public AnvilInventoryImpl(EntityPlayer player, String title, Consumer<String> renameHandler) {
public AnvilInventoryImpl(EntityPlayer player, IChatBaseComponent title, Consumer<String> 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<ItemStack> itemsList = NonNullList.a(ItemStack.b, getItem(0), getItem(1), getItem(2));

@ -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);
}
}

@ -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<String> 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<String> renameHandler) {
this(((CraftPlayer) player).getHandle(), title, renameHandler);
public AnvilInventoryImpl(org.bukkit.entity.Player player, BaseComponent[] title, Consumer<String> renameHandler) {
this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title), renameHandler);
}
public AnvilInventoryImpl(ServerPlayer player, String title, Consumer<String> renameHandler) {
public AnvilInventoryImpl(ServerPlayer player, Component title, Consumer<String> 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<ItemStack> itemsList = NonNullList.of(ItemStack.EMPTY, getItem(0), getItem(1), getItem(2));

@ -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);
}
}

@ -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);
}

@ -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<AnvilInventory> ANVIL_INVENTORY_CLASS = ReflectionUtils.getImplClass("inventory.AnvilInventoryImpl");
private static final Constructor<AnvilInventory> 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<String> renameHandler) {
public static AnvilInventory createAnvilInventory(Player player, BaseComponent[] title, Consumer<String> renameHandler) {
return ReflectionUtils.construct(ANVIL_INVENTORY_CONSTRUCTOR, player, title, renameHandler);
}