Support for kyori adventure components

This commit is contained in:
NichtStudioCode 2022-06-13 16:07:21 +02:00
parent bc993f0e50
commit 749bd35a26
76 changed files with 470 additions and 278 deletions

@ -87,6 +87,11 @@
<artifactId>IA-R9</artifactId> <artifactId>IA-R9</artifactId>
<version>0.7-SNAPSHOT</version> <version>0.7-SNAPSHOT</version>
</dependency> </dependency>
<dependency>
<groupId>de.studiocode.invui</groupId>
<artifactId>IA-R10</artifactId>
<version>0.7-SNAPSHOT</version>
</dependency>
</dependencies> </dependencies>
</project> </project>

@ -2,7 +2,6 @@ package de.studiocode.invui.gui.impl;
import de.studiocode.invui.gui.GUI; import de.studiocode.invui.gui.GUI;
import de.studiocode.invui.gui.SlotElement; import de.studiocode.invui.gui.SlotElement;
import de.studiocode.invui.gui.structure.Markers;
import de.studiocode.invui.gui.structure.Structure; import de.studiocode.invui.gui.structure.Structure;
import de.studiocode.invui.util.SlotUtils; import de.studiocode.invui.util.SlotUtils;

@ -1,5 +1,7 @@
package de.studiocode.invui.item.builder; package de.studiocode.invui.item.builder;
import de.studiocode.inventoryaccess.component.BaseComponentWrapper;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.inventoryaccess.version.InventoryAccess; import de.studiocode.inventoryaccess.version.InventoryAccess;
import de.studiocode.invui.item.ItemProvider; import de.studiocode.invui.item.ItemProvider;
import de.studiocode.invui.util.ComponentUtils; import de.studiocode.invui.util.ComponentUtils;
@ -26,8 +28,8 @@ abstract class BaseItemBuilder<T> implements ItemProvider {
protected int amount = 1; protected int amount = 1;
protected int damage; protected int damage;
protected int customModelData; protected int customModelData;
protected BaseComponent[] displayName; protected ComponentWrapper displayName;
protected List<BaseComponent[]> lore; protected List<ComponentWrapper> lore;
protected List<ItemFlag> itemFlags; protected List<ItemFlag> itemFlags;
protected HashMap<Enchantment, Pair<Integer, Boolean>> enchantments; protected HashMap<Enchantment, Pair<Integer, Boolean>> enchantments;
protected List<Function<ItemStack, ItemStack>> modifiers; protected List<Function<ItemStack, ItemStack>> modifiers;
@ -142,7 +144,7 @@ abstract class BaseItemBuilder<T> implements ItemProvider {
public T setLegacyLore(@NotNull List<String> lore) { public T setLegacyLore(@NotNull List<String> lore) {
this.lore = lore.stream() this.lore = lore.stream()
.map(ComponentUtils::withoutPreFormatting) .map(line -> new BaseComponentWrapper(ComponentUtils.withoutPreFormatting(line)))
.collect(Collectors.toList()); .collect(Collectors.toList());
return getThis(); return getThis();
} }
@ -151,14 +153,27 @@ abstract class BaseItemBuilder<T> implements ItemProvider {
if (lore == null) lore = new ArrayList<>(); if (lore == null) lore = new ArrayList<>();
for (String line : lines) for (String line : lines)
lore.add(ComponentUtils.withoutPreFormatting(line)); lore.add(new BaseComponentWrapper(ComponentUtils.withoutPreFormatting(line)));
return getThis(); return getThis();
} }
public T addLoreLines(@NotNull BaseComponent[]... lines) { public T addLoreLines(@NotNull BaseComponent[]... lines) {
if (lore == null) lore = new ArrayList<>(); if (lore == null) lore = new ArrayList<>();
lore.addAll(Arrays.stream(lines).map(ComponentUtils::withoutPreFormatting).collect(Collectors.toList())); lore.addAll(
Arrays.stream(lines)
.map(line -> new BaseComponentWrapper(ComponentUtils.withoutPreFormatting(line)))
.collect(Collectors.toList())
);
return getThis();
}
public T addLoreLines(@NotNull ComponentWrapper... lines) {
if (lore == null) lore = new ArrayList<>();
lore.addAll(Arrays.asList(lines));
return getThis(); return getThis();
} }
@ -257,25 +272,30 @@ abstract class BaseItemBuilder<T> implements ItemProvider {
return getThis(); return getThis();
} }
public BaseComponent[] getDisplayName() { public ComponentWrapper getDisplayName() {
return displayName; return displayName;
} }
public T setDisplayName(String displayName) { public T setDisplayName(String displayName) {
this.displayName = ComponentUtils.withoutPreFormatting(displayName); this.displayName = new BaseComponentWrapper(ComponentUtils.withoutPreFormatting(displayName));
return getThis(); return getThis();
} }
public T setDisplayName(BaseComponent... displayName) { public T setDisplayName(BaseComponent... displayName) {
this.displayName = ComponentUtils.withoutPreFormatting(displayName); this.displayName = new BaseComponentWrapper(ComponentUtils.withoutPreFormatting(displayName));
return getThis(); return getThis();
} }
public List<BaseComponent[]> getLore() { public T setDisplayName(ComponentWrapper component) {
this.displayName = component;
return getThis();
}
public List<ComponentWrapper> getLore() {
return lore; return lore;
} }
public T setLore(List<BaseComponent[]> lore) { public T setLore(List<ComponentWrapper> lore) {
this.lore = lore; this.lore = lore;
return getThis(); return getThis();
} }

@ -1,5 +1,6 @@
package de.studiocode.invui.window; package de.studiocode.invui.window;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.invui.gui.GUI; import de.studiocode.invui.gui.GUI;
import de.studiocode.invui.gui.GUIParent; import de.studiocode.invui.gui.GUIParent;
import de.studiocode.invui.item.Item; import de.studiocode.invui.item.Item;
@ -176,6 +177,13 @@ public interface Window extends GUIParent {
*/ */
void setCloseable(boolean closeable); void setCloseable(boolean closeable);
/**
* Changes the title of the {@link Inventory}.
*
* @param title The new title
*/
void changeTitle(@NotNull ComponentWrapper title);
/** /**
* Changes the title of the {@link Inventory}. * Changes the title of the {@link Inventory}.
* *

@ -1,5 +1,7 @@
package de.studiocode.invui.window.impl; package de.studiocode.invui.window.impl;
import de.studiocode.inventoryaccess.component.BaseComponentWrapper;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.inventoryaccess.version.InventoryAccess; import de.studiocode.inventoryaccess.version.InventoryAccess;
import de.studiocode.invui.InvUI; import de.studiocode.invui.InvUI;
import de.studiocode.invui.gui.GUI; import de.studiocode.invui.gui.GUI;
@ -40,11 +42,11 @@ public abstract class BaseWindow implements Window {
private final boolean removeOnClose; private final boolean removeOnClose;
private final SlotElement[] elementsDisplayed; private final SlotElement[] elementsDisplayed;
private final ArrayList<Runnable> closeHandlers = new ArrayList<>(); private final ArrayList<Runnable> closeHandlers = new ArrayList<>();
private BaseComponent[] title; private ComponentWrapper title;
private boolean closeable; private boolean closeable;
private boolean closed; private boolean closed;
public BaseWindow(UUID viewerUUID, BaseComponent[] title, int size, boolean closeable, boolean removeOnClose) { public BaseWindow(UUID viewerUUID, ComponentWrapper title, int size, boolean closeable, boolean removeOnClose) {
this.viewerUUID = viewerUUID; this.viewerUUID = viewerUUID;
this.title = title; this.title = title;
this.closeable = closeable; this.closeable = closeable;
@ -252,7 +254,7 @@ public abstract class BaseWindow implements Window {
} }
@Override @Override
public void changeTitle(@NotNull BaseComponent[] title) { public void changeTitle(@NotNull ComponentWrapper title) {
this.title = title; this.title = title;
Player currentViewer = getCurrentViewer(); Player currentViewer = getCurrentViewer();
if (currentViewer != null) { if (currentViewer != null) {
@ -260,6 +262,11 @@ public abstract class BaseWindow implements Window {
} }
} }
@Override
public void changeTitle(@NotNull BaseComponent[] title) {
changeTitle(new BaseComponentWrapper(title));
}
@Override @Override
public void changeTitle(@NotNull String title) { public void changeTitle(@NotNull String title) {
changeTitle(TextComponent.fromLegacyText(title)); changeTitle(TextComponent.fromLegacyText(title));

@ -1,5 +1,6 @@
package de.studiocode.invui.window.impl.merged; package de.studiocode.invui.window.impl.merged;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.inventoryaccess.version.InventoryAccess; import de.studiocode.inventoryaccess.version.InventoryAccess;
import de.studiocode.invui.gui.GUI; import de.studiocode.invui.gui.GUI;
import de.studiocode.invui.gui.SlotElement; import de.studiocode.invui.gui.SlotElement;
@ -7,7 +8,6 @@ import de.studiocode.invui.util.Pair;
import de.studiocode.invui.util.SlotUtils; import de.studiocode.invui.util.SlotUtils;
import de.studiocode.invui.window.Window; import de.studiocode.invui.window.Window;
import de.studiocode.invui.window.impl.BaseWindow; import de.studiocode.invui.window.impl.BaseWindow;
import net.md_5.bungee.api.chat.BaseComponent;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryClickEvent;
@ -28,7 +28,7 @@ public abstract class MergedWindow extends BaseWindow {
protected Inventory upperInventory; protected Inventory upperInventory;
private boolean isCurrentlyOpened; private boolean isCurrentlyOpened;
public MergedWindow(Player player, BaseComponent[] title, int size, Inventory upperInventory, boolean closeable, boolean removeOnClose) { public MergedWindow(Player player, ComponentWrapper title, int size, Inventory upperInventory, boolean closeable, boolean removeOnClose) {
super(player.getUniqueId(), title, size, closeable, removeOnClose); super(player.getUniqueId(), title, size, closeable, removeOnClose);
this.upperInventory = upperInventory; this.upperInventory = upperInventory;
this.playerInventory = player.getInventory(); this.playerInventory = player.getInventory();

@ -1,12 +1,12 @@
package de.studiocode.invui.window.impl.merged.combined; package de.studiocode.invui.window.impl.merged.combined;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.invui.gui.GUI; import de.studiocode.invui.gui.GUI;
import de.studiocode.invui.gui.SlotElement; import de.studiocode.invui.gui.SlotElement;
import de.studiocode.invui.util.Pair; import de.studiocode.invui.util.Pair;
import de.studiocode.invui.util.SlotUtils; import de.studiocode.invui.util.SlotUtils;
import de.studiocode.invui.window.Window; import de.studiocode.invui.window.Window;
import de.studiocode.invui.window.impl.merged.MergedWindow; import de.studiocode.invui.window.impl.merged.MergedWindow;
import net.md_5.bungee.api.chat.BaseComponent;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
@ -18,7 +18,7 @@ public abstract class CombinedWindow extends MergedWindow {
private final GUI gui; private final GUI gui;
public CombinedWindow(Player player, BaseComponent[] title, GUI gui, Inventory upperInventory, boolean closeable, boolean removeOnClose) { public CombinedWindow(Player player, ComponentWrapper title, GUI gui, Inventory upperInventory, boolean closeable, boolean removeOnClose) {
super(player, title, gui.getSize(), upperInventory, closeable, removeOnClose); super(player, title, gui.getSize(), upperInventory, closeable, removeOnClose);
this.gui = gui; this.gui = gui;

@ -1,5 +1,7 @@
package de.studiocode.invui.window.impl.merged.combined; package de.studiocode.invui.window.impl.merged.combined;
import de.studiocode.inventoryaccess.component.BaseComponentWrapper;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.invui.gui.GUI; import de.studiocode.invui.gui.GUI;
import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.chat.TextComponent;
@ -9,11 +11,23 @@ import org.bukkit.inventory.Inventory;
public final class SimpleCombinedWindow extends CombinedWindow { public final class SimpleCombinedWindow extends CombinedWindow {
public SimpleCombinedWindow(Player player, BaseComponent[] title, GUI gui, boolean closeable, boolean removeOnClose) { public SimpleCombinedWindow(Player player, ComponentWrapper title, GUI gui, boolean closeable, boolean removeOnClose) {
super(player, title, gui, createInventory(gui), closeable, removeOnClose); super(player, title, gui, createInventory(gui), closeable, removeOnClose);
register(); register();
} }
public SimpleCombinedWindow(Player player, ComponentWrapper title, GUI gui) {
this(player, title, gui, true, true);
}
public SimpleCombinedWindow(Player player, BaseComponent[] title, GUI gui, boolean closeable, boolean removeOnClose) {
this(player, new BaseComponentWrapper(title), gui, closeable, removeOnClose);
}
public SimpleCombinedWindow(Player player, BaseComponent[] title, GUI gui) {
this(player, title, gui, true, true);
}
public SimpleCombinedWindow(Player player, String title, GUI gui, boolean closeable, boolean removeOnClose) { public SimpleCombinedWindow(Player player, String title, GUI gui, boolean closeable, boolean removeOnClose) {
this(player, TextComponent.fromLegacyText(title), gui, closeable, removeOnClose); this(player, TextComponent.fromLegacyText(title), gui, closeable, removeOnClose);
} }
@ -22,10 +36,6 @@ public final class SimpleCombinedWindow extends CombinedWindow {
this(player, title, gui, true, true); this(player, title, gui, true, true);
} }
public SimpleCombinedWindow(Player player, BaseComponent[] title, GUI gui) {
this(player, title, gui, true, true);
}
private static Inventory createInventory(GUI gui) { private static Inventory createInventory(GUI gui) {
if (gui.getWidth() != 9) if (gui.getWidth() != 9)
throw new IllegalArgumentException("GUI width has to be 9"); throw new IllegalArgumentException("GUI width has to be 9");

@ -1,6 +1,8 @@
package de.studiocode.invui.window.impl.merged.split; package de.studiocode.invui.window.impl.merged.split;
import de.studiocode.inventoryaccess.abstraction.inventory.AnvilInventory; import de.studiocode.inventoryaccess.abstraction.inventory.AnvilInventory;
import de.studiocode.inventoryaccess.component.BaseComponentWrapper;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.inventoryaccess.version.InventoryAccess; import de.studiocode.inventoryaccess.version.InventoryAccess;
import de.studiocode.invui.gui.GUI; import de.studiocode.invui.gui.GUI;
import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.BaseComponent;
@ -14,7 +16,7 @@ public final class AnvilSplitWindow extends SplitWindow {
private final AnvilInventory anvilInventory; private final AnvilInventory anvilInventory;
public AnvilSplitWindow(Player player, BaseComponent[] title, GUI upperGui, GUI lowerGui, boolean closeable, Consumer<String> renameHandler) { public AnvilSplitWindow(Player player, ComponentWrapper title, GUI upperGui, GUI lowerGui, boolean closeable, Consumer<String> renameHandler) {
super(player, title, upperGui, lowerGui, null, false, closeable, true); super(player, title, upperGui, lowerGui, null, false, closeable, true);
anvilInventory = InventoryAccess.createAnvilInventory(player, title, renameHandler); anvilInventory = InventoryAccess.createAnvilInventory(player, title, renameHandler);
@ -24,6 +26,14 @@ public final class AnvilSplitWindow extends SplitWindow {
register(); register();
} }
public AnvilSplitWindow(Player player, ComponentWrapper title, GUI upperGui, GUI lowerGui, Consumer<String> renameHandler) {
this(player, title, upperGui, lowerGui, true, renameHandler);
}
public AnvilSplitWindow(Player player, BaseComponent[] title, GUI upperGui, GUI lowerGui, boolean closeable, Consumer<String> renameHandler) {
this(player, new BaseComponentWrapper(title), upperGui, lowerGui, closeable, renameHandler);
}
public AnvilSplitWindow(Player player, BaseComponent[] title, GUI upperGui, GUI lowerGui, Consumer<String> renameHandler) { public AnvilSplitWindow(Player player, BaseComponent[] title, GUI upperGui, GUI lowerGui, Consumer<String> renameHandler) {
this(player, title, upperGui, lowerGui, true, renameHandler); this(player, title, upperGui, lowerGui, true, renameHandler);
} }

@ -1,6 +1,8 @@
package de.studiocode.invui.window.impl.merged.split; package de.studiocode.invui.window.impl.merged.split;
import de.studiocode.inventoryaccess.abstraction.inventory.CartographyInventory; import de.studiocode.inventoryaccess.abstraction.inventory.CartographyInventory;
import de.studiocode.inventoryaccess.component.BaseComponentWrapper;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.inventoryaccess.map.MapIcon; import de.studiocode.inventoryaccess.map.MapIcon;
import de.studiocode.inventoryaccess.map.MapPatch; import de.studiocode.inventoryaccess.map.MapPatch;
import de.studiocode.inventoryaccess.version.InventoryAccess; import de.studiocode.inventoryaccess.version.InventoryAccess;
@ -22,19 +24,7 @@ public final class CartographySplitWindow extends SplitWindow {
private final CartographyInventory cartographyInventory; private final CartographyInventory cartographyInventory;
private int mapId; private int mapId;
public CartographySplitWindow(Player player, String title, GUI upperGui, GUI lowerGui) { public CartographySplitWindow(Player player, ComponentWrapper title, GUI upperGui, GUI lowerGui, boolean closeable) {
this(player, TextComponent.fromLegacyText(title), upperGui, lowerGui, true);
}
public CartographySplitWindow(Player player, String title, GUI upperGui, GUI lowerGui, boolean closeable) {
this(player, TextComponent.fromLegacyText(title), upperGui, lowerGui, closeable);
}
public CartographySplitWindow(Player player, BaseComponent[] title, GUI upperGui, GUI lowerGui) {
this(player, title, upperGui, lowerGui, true);
}
public CartographySplitWindow(Player player, BaseComponent[] title, GUI upperGui, GUI lowerGui, boolean closeable) {
super(player, title, createWrappingGUI(upperGui), lowerGui, null, false, closeable, true); super(player, title, createWrappingGUI(upperGui), lowerGui, null, false, closeable, true);
cartographyInventory = InventoryAccess.createCartographyInventory(player, title); cartographyInventory = InventoryAccess.createCartographyInventory(player, title);
@ -45,6 +35,26 @@ public final class CartographySplitWindow extends SplitWindow {
register(); register();
} }
public CartographySplitWindow(Player player, ComponentWrapper title, GUI upperGui, GUI lowerGui) {
this(player, title, upperGui, lowerGui, true);
}
public CartographySplitWindow(Player player, BaseComponent[] title, GUI upperGui, GUI lowerGui) {
this(player, new BaseComponentWrapper(title), upperGui, lowerGui, true);
}
public CartographySplitWindow(Player player, BaseComponent[] title, GUI upperGui, GUI lowerGui, boolean closeable) {
this(player, new BaseComponentWrapper(title), upperGui, lowerGui, closeable);
}
public CartographySplitWindow(Player player, String title, GUI upperGui, GUI lowerGui) {
this(player, TextComponent.fromLegacyText(title), upperGui, lowerGui, true);
}
public CartographySplitWindow(Player player, String title, GUI upperGui, GUI lowerGui, boolean closeable) {
this(player, TextComponent.fromLegacyText(title), upperGui, lowerGui, closeable);
}
private static GUI createWrappingGUI(GUI upperGui) { private static GUI createWrappingGUI(GUI upperGui) {
if (upperGui.getWidth() != 2 || upperGui.getHeight() != 1) if (upperGui.getWidth() != 2 || upperGui.getHeight() != 1)
throw new IllegalArgumentException("GUI has to be 2x1"); throw new IllegalArgumentException("GUI has to be 2x1");

@ -1,5 +1,7 @@
package de.studiocode.invui.window.impl.merged.split; package de.studiocode.invui.window.impl.merged.split;
import de.studiocode.inventoryaccess.component.BaseComponentWrapper;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.invui.gui.GUI; import de.studiocode.invui.gui.GUI;
import de.studiocode.invui.util.InventoryUtils; import de.studiocode.invui.util.InventoryUtils;
import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.BaseComponent;
@ -8,11 +10,19 @@ import org.bukkit.entity.Player;
public final class SimpleSplitWindow extends SplitWindow { public final class SimpleSplitWindow extends SplitWindow {
public SimpleSplitWindow(Player player, BaseComponent[] title, GUI upperGui, GUI lowerGui, boolean closeable, boolean removeOnClose) { public SimpleSplitWindow(Player player, ComponentWrapper title, GUI upperGui, GUI lowerGui, boolean closeable, boolean removeOnClose) {
super(player, title, upperGui, lowerGui, InventoryUtils.createMatchingInventory(upperGui, ""), true, closeable, removeOnClose); super(player, title, upperGui, lowerGui, InventoryUtils.createMatchingInventory(upperGui, ""), true, closeable, removeOnClose);
register(); register();
} }
public SimpleSplitWindow(Player player, ComponentWrapper title, GUI upperGui, GUI lowerGui) {
this(player, title, upperGui, lowerGui, true, true);
}
public SimpleSplitWindow(Player player, BaseComponent[] title, GUI upperGui, GUI lowerGui, boolean closeable, boolean removeOnClose) {
this(player, new BaseComponentWrapper(title), upperGui, lowerGui, closeable, removeOnClose);
}
public SimpleSplitWindow(Player player, BaseComponent[] title, GUI upperGui, GUI lowerGui) { public SimpleSplitWindow(Player player, BaseComponent[] title, GUI upperGui, GUI lowerGui) {
this(player, title, upperGui, lowerGui, true, true); this(player, title, upperGui, lowerGui, true, true);
} }

@ -1,12 +1,12 @@
package de.studiocode.invui.window.impl.merged.split; package de.studiocode.invui.window.impl.merged.split;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.invui.gui.GUI; import de.studiocode.invui.gui.GUI;
import de.studiocode.invui.gui.SlotElement; import de.studiocode.invui.gui.SlotElement;
import de.studiocode.invui.util.Pair; import de.studiocode.invui.util.Pair;
import de.studiocode.invui.util.SlotUtils; import de.studiocode.invui.util.SlotUtils;
import de.studiocode.invui.window.Window; import de.studiocode.invui.window.Window;
import de.studiocode.invui.window.impl.merged.MergedWindow; import de.studiocode.invui.window.impl.merged.MergedWindow;
import net.md_5.bungee.api.chat.BaseComponent;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
@ -19,7 +19,7 @@ public abstract class SplitWindow extends MergedWindow {
private final GUI upperGui; private final GUI upperGui;
private final GUI lowerGui; private final GUI lowerGui;
public SplitWindow(Player player, BaseComponent[] title, GUI upperGui, GUI lowerGui, Inventory upperInventory, boolean initItems, boolean closeable, boolean removeOnClose) { public SplitWindow(Player player, ComponentWrapper title, GUI upperGui, GUI lowerGui, Inventory upperInventory, boolean initItems, boolean closeable, boolean removeOnClose) {
super(player, title, upperGui.getSize() + lowerGui.getSize(), upperInventory, closeable, removeOnClose); super(player, title, upperGui.getSize() + lowerGui.getSize(), upperInventory, closeable, removeOnClose);
this.upperGui = upperGui; this.upperGui = upperGui;
this.lowerGui = lowerGui; this.lowerGui = lowerGui;

@ -1,6 +1,8 @@
package de.studiocode.invui.window.impl.single; package de.studiocode.invui.window.impl.single;
import de.studiocode.inventoryaccess.abstraction.inventory.AnvilInventory; import de.studiocode.inventoryaccess.abstraction.inventory.AnvilInventory;
import de.studiocode.inventoryaccess.component.BaseComponentWrapper;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.inventoryaccess.version.InventoryAccess; import de.studiocode.inventoryaccess.version.InventoryAccess;
import de.studiocode.invui.gui.GUI; import de.studiocode.invui.gui.GUI;
import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.BaseComponent;
@ -14,7 +16,7 @@ public final class AnvilWindow extends SingleWindow {
private final AnvilInventory anvilInventory; private final AnvilInventory anvilInventory;
public AnvilWindow(Player player, BaseComponent[] title, GUI gui, boolean closable, Consumer<String> renameHandler) { public AnvilWindow(Player player, ComponentWrapper title, GUI gui, boolean closable, Consumer<String> renameHandler) {
super(player.getUniqueId(), title, gui, null, false, closable, true); super(player.getUniqueId(), title, gui, null, false, closable, true);
anvilInventory = InventoryAccess.createAnvilInventory(player, title, renameHandler); anvilInventory = InventoryAccess.createAnvilInventory(player, title, renameHandler);
inventory = anvilInventory.getBukkitInventory(); inventory = anvilInventory.getBukkitInventory();
@ -23,6 +25,18 @@ public final class AnvilWindow extends SingleWindow {
register(); register();
} }
public AnvilWindow(Player player, ComponentWrapper title, GUI gui, Consumer<String> renameHandler) {
this(player, title, gui, true, renameHandler);
}
public AnvilWindow(Player player, BaseComponent[] title, GUI gui, boolean closeable, Consumer<String> renameHandler) {
this(player, new BaseComponentWrapper(title), gui, closeable, renameHandler);
}
public AnvilWindow(Player player, BaseComponent[] title, GUI gui, Consumer<String> renameHandler) {
this(player, title, gui, true, renameHandler);
}
public AnvilWindow(Player player, String title, GUI gui, boolean closeable, Consumer<String> renameHandler) { public AnvilWindow(Player player, String title, GUI gui, boolean closeable, Consumer<String> renameHandler) {
this(player, TextComponent.fromLegacyText(title), gui, closeable, renameHandler); this(player, TextComponent.fromLegacyText(title), gui, closeable, renameHandler);
} }
@ -31,10 +45,6 @@ public final class AnvilWindow extends SingleWindow {
this(player, title, gui, true, 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 @Override
protected void setInvItem(int slot, ItemStack itemStack) { protected void setInvItem(int slot, ItemStack itemStack) {
anvilInventory.setItem(slot, itemStack); anvilInventory.setItem(slot, itemStack);

@ -1,6 +1,8 @@
package de.studiocode.invui.window.impl.single; package de.studiocode.invui.window.impl.single;
import de.studiocode.inventoryaccess.abstraction.inventory.CartographyInventory; import de.studiocode.inventoryaccess.abstraction.inventory.CartographyInventory;
import de.studiocode.inventoryaccess.component.BaseComponentWrapper;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.inventoryaccess.map.MapIcon; import de.studiocode.inventoryaccess.map.MapIcon;
import de.studiocode.inventoryaccess.map.MapPatch; import de.studiocode.inventoryaccess.map.MapPatch;
import de.studiocode.inventoryaccess.version.InventoryAccess; import de.studiocode.inventoryaccess.version.InventoryAccess;
@ -23,19 +25,7 @@ public final class CartographyWindow extends SingleWindow {
private final CartographyInventory cartographyInventory; private final CartographyInventory cartographyInventory;
private int mapId; private int mapId;
public CartographyWindow(Player player, String title, GUI gui) { public CartographyWindow(Player player, ComponentWrapper title, GUI gui, boolean closeable) {
this(player, TextComponent.fromLegacyText(title), gui, true);
}
public CartographyWindow(Player player, String title, GUI gui, boolean closeable) {
this(player, TextComponent.fromLegacyText(title), gui, closeable);
}
public CartographyWindow(Player player, BaseComponent[] title, GUI gui) {
this(player, title, gui, true);
}
public CartographyWindow(Player player, BaseComponent[] title, GUI gui, boolean closeable) {
super(player.getUniqueId(), title, gui, null, false, closeable, true); super(player.getUniqueId(), title, gui, null, false, closeable, true);
if (gui.getWidth() != 2 || gui.getHeight() != 1) throw new IllegalArgumentException("GUI has to be 2x1"); if (gui.getWidth() != 2 || gui.getHeight() != 1) throw new IllegalArgumentException("GUI has to be 2x1");
@ -47,6 +37,26 @@ public final class CartographyWindow extends SingleWindow {
register(); register();
} }
public CartographyWindow(Player player, ComponentWrapper title, GUI gui) {
this(player, title, gui, true);
}
public CartographyWindow(Player player, BaseComponent[] title, GUI gui) {
this(player, new BaseComponentWrapper(title), gui, true);
}
public CartographyWindow(Player player, BaseComponent[] title, GUI gui, boolean closeable) {
this(player, new BaseComponentWrapper(title), gui, closeable);
}
public CartographyWindow(Player player, String title, GUI gui) {
this(player, TextComponent.fromLegacyText(title), gui, true);
}
public CartographyWindow(Player player, String title, GUI gui, boolean closeable) {
this(player, TextComponent.fromLegacyText(title), gui, closeable);
}
public void updateMap(@Nullable MapPatch patch, @Nullable List<MapIcon> icons) { public void updateMap(@Nullable MapPatch patch, @Nullable List<MapIcon> icons) {
InventoryAccess.getPlayerUtils().sendMapUpdate(getViewer(), mapId, (byte) 0, false, patch, icons); InventoryAccess.getPlayerUtils().sendMapUpdate(getViewer(), mapId, (byte) 0, false, patch, icons);
} }

@ -1,5 +1,7 @@
package de.studiocode.invui.window.impl.single; package de.studiocode.invui.window.impl.single;
import de.studiocode.inventoryaccess.component.BaseComponentWrapper;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.invui.gui.GUI; import de.studiocode.invui.gui.GUI;
import de.studiocode.invui.util.InventoryUtils; import de.studiocode.invui.util.InventoryUtils;
import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.BaseComponent;
@ -10,23 +12,39 @@ import java.util.UUID;
public final class SimpleWindow extends SingleWindow { public final class SimpleWindow extends SingleWindow {
public SimpleWindow(UUID viewerUUID, BaseComponent[] title, GUI gui, boolean closeable, boolean removeOnClose) { public SimpleWindow(UUID viewerUUID, ComponentWrapper title, GUI gui, boolean closeable, boolean removeOnClose) {
super(viewerUUID, title, gui, InventoryUtils.createMatchingInventory(gui, ""), true, closeable, removeOnClose); super(viewerUUID, title, gui, InventoryUtils.createMatchingInventory(gui, ""), true, closeable, removeOnClose);
register(); register();
} }
public SimpleWindow(UUID viewerUUID, BaseComponent[] title, GUI gui) { public SimpleWindow(UUID viewerUUID, ComponentWrapper title, GUI gui) {
this(viewerUUID, title, gui, true, true); this(viewerUUID, title, gui, true, true);
} }
public SimpleWindow(Player player, BaseComponent[] title, GUI gui, boolean closeable, boolean removeOnClose) { public SimpleWindow(Player player, ComponentWrapper title, GUI gui, boolean closeable, boolean removeOnClose) {
this(player.getUniqueId(), title, gui, closeable, removeOnClose); this(player.getUniqueId(), title, gui, closeable, removeOnClose);
} }
public SimpleWindow(Player player, BaseComponent[] title, GUI gui) { public SimpleWindow(Player player, ComponentWrapper title, GUI gui) {
this(player, title, gui, true, true); this(player, title, gui, true, true);
} }
public SimpleWindow(UUID viewerUUID, BaseComponent[] title, GUI gui, boolean closeable, boolean removeOnClose) {
this(viewerUUID, new BaseComponentWrapper(title), gui, closeable, removeOnClose);
}
public SimpleWindow(UUID viewerUUID, BaseComponent[] title, GUI gui) {
this(viewerUUID, new BaseComponentWrapper(title), gui);
}
public SimpleWindow(Player player, BaseComponent[] title, GUI gui, boolean closeable, boolean removeOnClose) {
this(player, new BaseComponentWrapper(title), gui, closeable, removeOnClose);
}
public SimpleWindow(Player player, BaseComponent[] title, GUI gui) {
this(player, new BaseComponentWrapper(title), gui);
}
public SimpleWindow(UUID viewerUUID, String title, GUI gui, boolean closeable, boolean removeOnClose) { public SimpleWindow(UUID viewerUUID, String title, GUI gui, boolean closeable, boolean removeOnClose) {
this(viewerUUID, TextComponent.fromLegacyText(title), gui, closeable, removeOnClose); this(viewerUUID, TextComponent.fromLegacyText(title), gui, closeable, removeOnClose);
} }

@ -1,12 +1,12 @@
package de.studiocode.invui.window.impl.single; package de.studiocode.invui.window.impl.single;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.invui.gui.GUI; import de.studiocode.invui.gui.GUI;
import de.studiocode.invui.gui.SlotElement; import de.studiocode.invui.gui.SlotElement;
import de.studiocode.invui.util.InventoryUtils; import de.studiocode.invui.util.InventoryUtils;
import de.studiocode.invui.util.Pair; import de.studiocode.invui.util.Pair;
import de.studiocode.invui.window.Window; import de.studiocode.invui.window.Window;
import de.studiocode.invui.window.impl.BaseWindow; import de.studiocode.invui.window.impl.BaseWindow;
import net.md_5.bungee.api.chat.BaseComponent;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryClickEvent;
@ -24,7 +24,7 @@ public abstract class SingleWindow extends BaseWindow {
private final int size; private final int size;
protected Inventory inventory; protected Inventory inventory;
public SingleWindow(UUID viewerUUID, BaseComponent[] title, GUI gui, Inventory inventory, boolean initItems, boolean closeable, boolean removeOnClose) { public SingleWindow(UUID viewerUUID, ComponentWrapper title, GUI gui, Inventory inventory, boolean initItems, boolean closeable, boolean removeOnClose) {
super(viewerUUID, title, gui.getSize(), closeable, removeOnClose); super(viewerUUID, title, gui.getSize(), closeable, removeOnClose);
this.gui = gui; this.gui = gui;
this.size = gui.getSize(); this.size = gui.getSize();

@ -1,9 +1,9 @@
package de.studiocode.inventoryaccess.r1.inventory; package de.studiocode.inventoryaccess.r1.inventory;
import de.studiocode.inventoryaccess.abstraction.inventory.AnvilInventory; import de.studiocode.inventoryaccess.abstraction.inventory.AnvilInventory;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.inventoryaccess.r1.util.InventoryUtilsImpl; import de.studiocode.inventoryaccess.r1.util.InventoryUtilsImpl;
import de.studiocode.inventoryaccess.util.ReflectionUtils; import de.studiocode.inventoryaccess.util.ReflectionUtils;
import net.md_5.bungee.api.chat.BaseComponent;
import net.minecraft.server.v1_14_R1.*; import net.minecraft.server.v1_14_R1.*;
import org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_14_R1.event.CraftEventFactory; import org.bukkit.craftbukkit.v1_14_R1.event.CraftEventFactory;
@ -35,7 +35,7 @@ public class AnvilInventoryImpl extends ContainerAnvil implements AnvilInventory
private String text; private String text;
private boolean open; private boolean open;
public AnvilInventoryImpl(Player player, @NotNull BaseComponent[] title, Consumer<String> renameHandler) { public AnvilInventoryImpl(Player player, @NotNull ComponentWrapper title, Consumer<String> renameHandler) {
this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title), renameHandler); this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title), renameHandler);
} }

@ -1,9 +1,9 @@
package de.studiocode.inventoryaccess.r1.inventory; package de.studiocode.inventoryaccess.r1.inventory;
import de.studiocode.inventoryaccess.abstraction.inventory.CartographyInventory; import de.studiocode.inventoryaccess.abstraction.inventory.CartographyInventory;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.inventoryaccess.r1.util.InventoryUtilsImpl; import de.studiocode.inventoryaccess.r1.util.InventoryUtilsImpl;
import de.studiocode.inventoryaccess.util.ReflectionUtils; import de.studiocode.inventoryaccess.util.ReflectionUtils;
import net.md_5.bungee.api.chat.BaseComponent;
import net.minecraft.server.v1_14_R1.*; import net.minecraft.server.v1_14_R1.*;
import org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_14_R1.event.CraftEventFactory; import org.bukkit.craftbukkit.v1_14_R1.event.CraftEventFactory;
@ -27,7 +27,7 @@ public class CartographyInventoryImpl extends ContainerCartography implements Ca
private boolean open; private boolean open;
public CartographyInventoryImpl(Player player, @NotNull BaseComponent[] title) { public CartographyInventoryImpl(Player player, @NotNull ComponentWrapper title) {
this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title)); this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title));
} }

@ -1,8 +1,7 @@
package de.studiocode.inventoryaccess.r1.util; package de.studiocode.inventoryaccess.r1.util;
import de.studiocode.inventoryaccess.abstraction.util.InventoryUtils; import de.studiocode.inventoryaccess.abstraction.util.InventoryUtils;
import net.md_5.bungee.api.chat.BaseComponent; import de.studiocode.inventoryaccess.component.ComponentWrapper;
import net.md_5.bungee.chat.ComponentSerializer;
import net.minecraft.server.v1_14_R1.*; import net.minecraft.server.v1_14_R1.*;
import org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_14_R1.event.CraftEventFactory; import org.bukkit.craftbukkit.v1_14_R1.event.CraftEventFactory;
@ -12,6 +11,7 @@ import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryType; import org.bukkit.event.inventory.InventoryType;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class InventoryUtilsImpl implements InventoryUtils { public class InventoryUtilsImpl implements InventoryUtils {
@ -37,9 +37,8 @@ public class InventoryUtilsImpl implements InventoryUtils {
} else return CraftContainer.getNotchInventoryType(type); } else return CraftContainer.getNotchInventoryType(type);
} }
public static IChatBaseComponent createNMSComponent(BaseComponent[] components) { public static IChatBaseComponent createNMSComponent(ComponentWrapper component) {
String json = ComponentSerializer.toString(components); return IChatBaseComponent.ChatSerializer.a(component.serializeToJson());
return IChatBaseComponent.ChatSerializer.a(json);
} }
public static int getActiveWindowId(EntityPlayer player) { public static int getActiveWindowId(EntityPlayer player) {
@ -53,7 +52,7 @@ public class InventoryUtilsImpl implements InventoryUtils {
} }
@Override @Override
public void openCustomInventory(@NotNull Player player, @NotNull Inventory inventory, @NotNull BaseComponent[] title) { public void openCustomInventory(@NotNull Player player, @NotNull Inventory inventory, @Nullable ComponentWrapper title) {
EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle(); EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
Containers<?> windowType = getNotchInventoryType(inventory); Containers<?> windowType = getNotchInventoryType(inventory);
@ -77,7 +76,7 @@ public class InventoryUtilsImpl implements InventoryUtils {
} }
@Override @Override
public void updateOpenInventoryTitle(@NotNull Player player, @NotNull BaseComponent[] title) { public void updateOpenInventoryTitle(@NotNull Player player, @NotNull ComponentWrapper title) {
EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle(); EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
Container container = entityPlayer.activeContainer; Container container = entityPlayer.activeContainer;
entityPlayer.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, container.getType(), createNMSComponent(title))); entityPlayer.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, container.getType(), createNMSComponent(title)));

@ -1,9 +1,9 @@
package de.studiocode.inventoryaccess.r1.util; package de.studiocode.inventoryaccess.r1.util;
import de.studiocode.inventoryaccess.abstraction.util.ItemUtils; import de.studiocode.inventoryaccess.abstraction.util.ItemUtils;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.inventoryaccess.util.ReflectionRegistry; import de.studiocode.inventoryaccess.util.ReflectionRegistry;
import de.studiocode.inventoryaccess.util.ReflectionUtils; import de.studiocode.inventoryaccess.util.ReflectionUtils;
import net.md_5.bungee.api.chat.BaseComponent;
import net.minecraft.server.v1_14_R1.ItemStack; import net.minecraft.server.v1_14_R1.ItemStack;
import net.minecraft.server.v1_14_R1.NBTCompressedStreamTools; import net.minecraft.server.v1_14_R1.NBTCompressedStreamTools;
import net.minecraft.server.v1_14_R1.NBTTagCompound; import net.minecraft.server.v1_14_R1.NBTTagCompound;
@ -71,7 +71,7 @@ public class ItemUtilsImpl implements ItemUtils {
} }
@Override @Override
public void setDisplayName(@NotNull ItemMeta itemMeta, BaseComponent[] name) { public void setDisplayName(@NotNull ItemMeta itemMeta, @NotNull ComponentWrapper name) {
ReflectionUtils.setFieldValue( ReflectionUtils.setFieldValue(
ReflectionRegistry.CB_CRAFT_META_ITEM_DISPLAY_NAME_FIELD, ReflectionRegistry.CB_CRAFT_META_ITEM_DISPLAY_NAME_FIELD,
itemMeta, itemMeta,
@ -80,7 +80,7 @@ public class ItemUtilsImpl implements ItemUtils {
} }
@Override @Override
public void setLore(@NotNull ItemMeta itemMeta, @NotNull List<@NotNull BaseComponent[]> lore) { public void setLore(@NotNull ItemMeta itemMeta, @NotNull List<@NotNull ComponentWrapper> lore) {
ReflectionUtils.setFieldValue( ReflectionUtils.setFieldValue(
ReflectionRegistry.CB_CRAFT_META_ITEM_LORE_FIELD, ReflectionRegistry.CB_CRAFT_META_ITEM_LORE_FIELD,
itemMeta, itemMeta,

@ -71,7 +71,7 @@ public class PlayerUtilsImpl implements PlayerUtils {
MapIcon.Type.a(icon.getType().getId()), MapIcon.Type.a(icon.getType().getId()),
icon.getX(), icon.getY(), icon.getX(), icon.getY(),
icon.getRot(), icon.getRot(),
icon.getComponents() != null ? InventoryUtilsImpl.createNMSComponent(icon.getComponents()) : null icon.getComponent() != null ? InventoryUtilsImpl.createNMSComponent(icon.getComponent()) : null
); );
} }

@ -1,8 +1,8 @@
package de.studiocode.inventoryaccess.r10.inventory; package de.studiocode.inventoryaccess.r10.inventory;
import de.studiocode.inventoryaccess.abstraction.inventory.AnvilInventory; import de.studiocode.inventoryaccess.abstraction.inventory.AnvilInventory;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.inventoryaccess.r10.util.InventoryUtilsImpl; import de.studiocode.inventoryaccess.r10.util.InventoryUtilsImpl;
import net.md_5.bungee.api.chat.BaseComponent;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.NonNullList; import net.minecraft.core.NonNullList;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
@ -38,7 +38,7 @@ public class AnvilInventoryImpl extends AnvilMenu implements AnvilInventory {
private String text; private String text;
private boolean open; private boolean open;
public AnvilInventoryImpl(org.bukkit.entity.Player player, @NotNull BaseComponent[] title, Consumer<String> renameHandler) { public AnvilInventoryImpl(org.bukkit.entity.Player player, @NotNull ComponentWrapper title, Consumer<String> renameHandler) {
this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title), renameHandler); this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title), renameHandler);
} }

@ -1,9 +1,9 @@
package de.studiocode.inventoryaccess.r10.inventory; package de.studiocode.inventoryaccess.r10.inventory;
import de.studiocode.inventoryaccess.abstraction.inventory.CartographyInventory; import de.studiocode.inventoryaccess.abstraction.inventory.CartographyInventory;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.inventoryaccess.r10.util.InventoryUtilsImpl; import de.studiocode.inventoryaccess.r10.util.InventoryUtilsImpl;
import de.studiocode.inventoryaccess.util.ReflectionUtils; import de.studiocode.inventoryaccess.util.ReflectionUtils;
import net.md_5.bungee.api.chat.BaseComponent;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.NonNullList; import net.minecraft.core.NonNullList;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
@ -40,7 +40,7 @@ public class CartographyInventoryImpl extends CartographyTableMenu implements Ca
private boolean open; private boolean open;
public CartographyInventoryImpl(Player player, @NotNull BaseComponent[] title) { public CartographyInventoryImpl(Player player, @NotNull ComponentWrapper title) {
this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title)); this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title));
} }

@ -1,8 +1,7 @@
package de.studiocode.inventoryaccess.r10.util; package de.studiocode.inventoryaccess.r10.util;
import de.studiocode.inventoryaccess.abstraction.util.InventoryUtils; import de.studiocode.inventoryaccess.abstraction.util.InventoryUtils;
import net.md_5.bungee.api.chat.BaseComponent; import de.studiocode.inventoryaccess.component.ComponentWrapper;
import net.md_5.bungee.chat.ComponentSerializer;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.network.protocol.game.ClientboundOpenScreenPacket; import net.minecraft.network.protocol.game.ClientboundOpenScreenPacket;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
@ -18,14 +17,13 @@ import org.bukkit.craftbukkit.v1_19_R1.util.CraftChatMessage;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class InventoryUtilsImpl implements InventoryUtils { public class InventoryUtilsImpl implements InventoryUtils {
public static Component createNMSComponent(BaseComponent[] components) { public static Component createNMSComponent(ComponentWrapper component) {
if (components == null) return null; if (component == null) return null;
return CraftChatMessage.fromJSON(component.serializeToJson());
String json = ComponentSerializer.toString(components);
return CraftChatMessage.fromJSON(json);
} }
public static int getActiveWindowId(ServerPlayer player) { public static int getActiveWindowId(ServerPlayer player) {
@ -39,7 +37,7 @@ public class InventoryUtilsImpl implements InventoryUtils {
} }
@Override @Override
public void openCustomInventory(@NotNull Player player, @NotNull Inventory inventory, @NotNull BaseComponent[] title) { public void openCustomInventory(@NotNull Player player, @NotNull Inventory inventory, @Nullable ComponentWrapper title) {
ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle(); ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle();
MenuType<?> menuType = CraftContainer.getNotchInventoryType(inventory); MenuType<?> menuType = CraftContainer.getNotchInventoryType(inventory);
@ -65,7 +63,7 @@ public class InventoryUtilsImpl implements InventoryUtils {
} }
@Override @Override
public void updateOpenInventoryTitle(@NotNull Player player, @NotNull BaseComponent[] title) { public void updateOpenInventoryTitle(@NotNull Player player, @NotNull ComponentWrapper title) {
ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle(); ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle();
AbstractContainerMenu menu = serverPlayer.containerMenu; AbstractContainerMenu menu = serverPlayer.containerMenu;
serverPlayer.connection.send(new ClientboundOpenScreenPacket(menu.containerId, menu.getType(), createNMSComponent(title))); serverPlayer.connection.send(new ClientboundOpenScreenPacket(menu.containerId, menu.getType(), createNMSComponent(title)));

@ -1,10 +1,9 @@
package de.studiocode.inventoryaccess.r10.util; package de.studiocode.inventoryaccess.r10.util;
import de.studiocode.inventoryaccess.abstraction.util.ItemUtils; import de.studiocode.inventoryaccess.abstraction.util.ItemUtils;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.inventoryaccess.util.ReflectionRegistry; import de.studiocode.inventoryaccess.util.ReflectionRegistry;
import de.studiocode.inventoryaccess.util.ReflectionUtils; import de.studiocode.inventoryaccess.util.ReflectionUtils;
import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.chat.ComponentSerializer;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.NbtIo; import net.minecraft.nbt.NbtIo;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
@ -72,20 +71,20 @@ public class ItemUtilsImpl implements ItemUtils {
} }
@Override @Override
public void setDisplayName(@NotNull ItemMeta itemMeta, BaseComponent[] name) { public void setDisplayName(@NotNull ItemMeta itemMeta, @NotNull ComponentWrapper name) {
ReflectionUtils.setFieldValue( ReflectionUtils.setFieldValue(
ReflectionRegistry.CB_CRAFT_META_ITEM_DISPLAY_NAME_FIELD, ReflectionRegistry.CB_CRAFT_META_ITEM_DISPLAY_NAME_FIELD,
itemMeta, itemMeta,
ComponentSerializer.toString(name) name.serializeToJson()
); );
} }
@Override @Override
public void setLore(@NotNull ItemMeta itemMeta, @NotNull List<@NotNull BaseComponent[]> lore) { public void setLore(@NotNull ItemMeta itemMeta, @NotNull List<@NotNull ComponentWrapper> lore) {
ReflectionUtils.setFieldValue( ReflectionUtils.setFieldValue(
ReflectionRegistry.CB_CRAFT_META_ITEM_LORE_FIELD, ReflectionRegistry.CB_CRAFT_META_ITEM_LORE_FIELD,
itemMeta, itemMeta,
lore.stream().map(ComponentSerializer::toString).collect(Collectors.toList()) lore.stream().map(ComponentWrapper::serializeToJson).collect(Collectors.toList())
); );
} }

@ -1,11 +1,11 @@
package de.studiocode.inventoryaccess.r10.util; package de.studiocode.inventoryaccess.r10.util;
import de.studiocode.inventoryaccess.abstraction.util.PlayerUtils; import de.studiocode.inventoryaccess.abstraction.util.PlayerUtils;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.inventoryaccess.map.MapIcon; import de.studiocode.inventoryaccess.map.MapIcon;
import de.studiocode.inventoryaccess.map.MapPatch; import de.studiocode.inventoryaccess.map.MapPatch;
import de.studiocode.inventoryaccess.util.DataUtils; import de.studiocode.inventoryaccess.util.DataUtils;
import de.studiocode.inventoryaccess.util.ReflectionUtils; import de.studiocode.inventoryaccess.util.ReflectionUtils;
import net.md_5.bungee.api.chat.BaseComponent;
import net.minecraft.network.protocol.game.ClientboundMapItemDataPacket; import net.minecraft.network.protocol.game.ClientboundMapItemDataPacket;
import net.minecraft.network.protocol.game.ClientboundResourcePackPacket; import net.minecraft.network.protocol.game.ClientboundResourcePackPacket;
import net.minecraft.server.PlayerAdvancements; import net.minecraft.server.PlayerAdvancements;
@ -69,7 +69,7 @@ public class PlayerUtilsImpl implements PlayerUtils {
MapDecoration.Type.byIcon(icon.getType().getId()), MapDecoration.Type.byIcon(icon.getType().getId()),
icon.getX(), icon.getY(), icon.getX(), icon.getY(),
icon.getRot(), icon.getRot(),
icon.getComponents() != null ? InventoryUtilsImpl.createNMSComponent(icon.getComponents()) : null icon.getComponent() != null ? InventoryUtilsImpl.createNMSComponent(icon.getComponent()) : null
); );
} }
@ -84,7 +84,7 @@ public class PlayerUtilsImpl implements PlayerUtils {
} }
@Override @Override
public void sendResourcePack(@NotNull Player player, @NotNull String url, byte[] hash, @Nullable BaseComponent[] prompt, boolean force) { public void sendResourcePack(@NotNull Player player, @NotNull String url, byte[] hash, @Nullable ComponentWrapper prompt, boolean force) {
var serverPlayer = ((CraftPlayer) player).getHandle(); var serverPlayer = ((CraftPlayer) player).getHandle();
var packet = new ClientboundResourcePackPacket( var packet = new ClientboundResourcePackPacket(
url, url,

@ -1,9 +1,9 @@
package de.studiocode.inventoryaccess.r2.inventory; package de.studiocode.inventoryaccess.r2.inventory;
import de.studiocode.inventoryaccess.abstraction.inventory.AnvilInventory; import de.studiocode.inventoryaccess.abstraction.inventory.AnvilInventory;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.inventoryaccess.r2.util.InventoryUtilsImpl; import de.studiocode.inventoryaccess.r2.util.InventoryUtilsImpl;
import de.studiocode.inventoryaccess.util.ReflectionUtils; import de.studiocode.inventoryaccess.util.ReflectionUtils;
import net.md_5.bungee.api.chat.BaseComponent;
import net.minecraft.server.v1_15_R1.*; import net.minecraft.server.v1_15_R1.*;
import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_15_R1.event.CraftEventFactory; import org.bukkit.craftbukkit.v1_15_R1.event.CraftEventFactory;
@ -35,7 +35,7 @@ public class AnvilInventoryImpl extends ContainerAnvil implements AnvilInventory
private String text; private String text;
private boolean open; private boolean open;
public AnvilInventoryImpl(Player player, @NotNull BaseComponent[] title, Consumer<String> renameHandler) { public AnvilInventoryImpl(Player player, @NotNull ComponentWrapper title, Consumer<String> renameHandler) {
this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title), renameHandler); this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title), renameHandler);
} }

@ -1,9 +1,9 @@
package de.studiocode.inventoryaccess.r2.inventory; package de.studiocode.inventoryaccess.r2.inventory;
import de.studiocode.inventoryaccess.abstraction.inventory.CartographyInventory; import de.studiocode.inventoryaccess.abstraction.inventory.CartographyInventory;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.inventoryaccess.r2.util.InventoryUtilsImpl; import de.studiocode.inventoryaccess.r2.util.InventoryUtilsImpl;
import de.studiocode.inventoryaccess.util.ReflectionUtils; import de.studiocode.inventoryaccess.util.ReflectionUtils;
import net.md_5.bungee.api.chat.BaseComponent;
import net.minecraft.server.v1_15_R1.*; import net.minecraft.server.v1_15_R1.*;
import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_15_R1.event.CraftEventFactory; import org.bukkit.craftbukkit.v1_15_R1.event.CraftEventFactory;
@ -27,7 +27,7 @@ public class CartographyInventoryImpl extends ContainerCartography implements Ca
private boolean open; private boolean open;
public CartographyInventoryImpl(Player player, @NotNull BaseComponent[] title) { public CartographyInventoryImpl(Player player, @NotNull ComponentWrapper title) {
this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title)); this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title));
} }

@ -1,8 +1,7 @@
package de.studiocode.inventoryaccess.r2.util; package de.studiocode.inventoryaccess.r2.util;
import de.studiocode.inventoryaccess.abstraction.util.InventoryUtils; import de.studiocode.inventoryaccess.abstraction.util.InventoryUtils;
import net.md_5.bungee.api.chat.BaseComponent; import de.studiocode.inventoryaccess.component.ComponentWrapper;
import net.md_5.bungee.chat.ComponentSerializer;
import net.minecraft.server.v1_15_R1.*; import net.minecraft.server.v1_15_R1.*;
import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_15_R1.event.CraftEventFactory; import org.bukkit.craftbukkit.v1_15_R1.event.CraftEventFactory;
@ -11,12 +10,12 @@ import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftInventory;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class InventoryUtilsImpl implements InventoryUtils { public class InventoryUtilsImpl implements InventoryUtils {
public static IChatBaseComponent createNMSComponent(BaseComponent[] components) { public static IChatBaseComponent createNMSComponent(ComponentWrapper component) {
String json = ComponentSerializer.toString(components); return IChatBaseComponent.ChatSerializer.a(component.serializeToJson());
return IChatBaseComponent.ChatSerializer.a(json);
} }
public static int getActiveWindowId(EntityPlayer player) { public static int getActiveWindowId(EntityPlayer player) {
@ -30,7 +29,7 @@ public class InventoryUtilsImpl implements InventoryUtils {
} }
@Override @Override
public void openCustomInventory(@NotNull Player player, @NotNull Inventory inventory, @NotNull BaseComponent[] title) { public void openCustomInventory(@NotNull Player player, @NotNull Inventory inventory, @Nullable ComponentWrapper title) {
EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle(); EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
Containers<?> windowType = CraftContainer.getNotchInventoryType(inventory); Containers<?> windowType = CraftContainer.getNotchInventoryType(inventory);
@ -54,7 +53,7 @@ public class InventoryUtilsImpl implements InventoryUtils {
} }
@Override @Override
public void updateOpenInventoryTitle(@NotNull Player player, @NotNull BaseComponent[] title) { public void updateOpenInventoryTitle(@NotNull Player player, @NotNull ComponentWrapper title) {
EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle(); EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
Container container = entityPlayer.activeContainer; Container container = entityPlayer.activeContainer;
entityPlayer.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, container.getType(), createNMSComponent(title))); entityPlayer.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, container.getType(), createNMSComponent(title)));

@ -1,9 +1,9 @@
package de.studiocode.inventoryaccess.r2.util; package de.studiocode.inventoryaccess.r2.util;
import de.studiocode.inventoryaccess.abstraction.util.ItemUtils; import de.studiocode.inventoryaccess.abstraction.util.ItemUtils;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.inventoryaccess.util.ReflectionRegistry; import de.studiocode.inventoryaccess.util.ReflectionRegistry;
import de.studiocode.inventoryaccess.util.ReflectionUtils; import de.studiocode.inventoryaccess.util.ReflectionUtils;
import net.md_5.bungee.api.chat.BaseComponent;
import net.minecraft.server.v1_15_R1.ItemStack; import net.minecraft.server.v1_15_R1.ItemStack;
import net.minecraft.server.v1_15_R1.NBTCompressedStreamTools; import net.minecraft.server.v1_15_R1.NBTCompressedStreamTools;
import net.minecraft.server.v1_15_R1.NBTTagCompound; import net.minecraft.server.v1_15_R1.NBTTagCompound;
@ -71,7 +71,7 @@ public class ItemUtilsImpl implements ItemUtils {
} }
@Override @Override
public void setDisplayName(@NotNull ItemMeta itemMeta, BaseComponent[] name) { public void setDisplayName(@NotNull ItemMeta itemMeta, @NotNull ComponentWrapper name) {
ReflectionUtils.setFieldValue( ReflectionUtils.setFieldValue(
ReflectionRegistry.CB_CRAFT_META_ITEM_DISPLAY_NAME_FIELD, ReflectionRegistry.CB_CRAFT_META_ITEM_DISPLAY_NAME_FIELD,
itemMeta, itemMeta,
@ -80,7 +80,7 @@ public class ItemUtilsImpl implements ItemUtils {
} }
@Override @Override
public void setLore(@NotNull ItemMeta itemMeta, @NotNull List<@NotNull BaseComponent[]> lore) { public void setLore(@NotNull ItemMeta itemMeta, @NotNull List<@NotNull ComponentWrapper> lore) {
ReflectionUtils.setFieldValue( ReflectionUtils.setFieldValue(
ReflectionRegistry.CB_CRAFT_META_ITEM_LORE_FIELD, ReflectionRegistry.CB_CRAFT_META_ITEM_LORE_FIELD,
itemMeta, itemMeta,

@ -71,7 +71,7 @@ public class PlayerUtilsImpl implements PlayerUtils {
MapIcon.Type.a(icon.getType().getId()), MapIcon.Type.a(icon.getType().getId()),
icon.getX(), icon.getY(), icon.getX(), icon.getY(),
icon.getRot(), icon.getRot(),
icon.getComponents() != null ? InventoryUtilsImpl.createNMSComponent(icon.getComponents()) : null icon.getComponent() != null ? InventoryUtilsImpl.createNMSComponent(icon.getComponent()) : null
); );
} }

@ -1,8 +1,8 @@
package de.studiocode.inventoryaccess.r3.inventory; package de.studiocode.inventoryaccess.r3.inventory;
import de.studiocode.inventoryaccess.abstraction.inventory.AnvilInventory; import de.studiocode.inventoryaccess.abstraction.inventory.AnvilInventory;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.inventoryaccess.r3.util.InventoryUtilsImpl; import de.studiocode.inventoryaccess.r3.util.InventoryUtilsImpl;
import net.md_5.bungee.api.chat.BaseComponent;
import net.minecraft.server.v1_16_R1.*; import net.minecraft.server.v1_16_R1.*;
import org.bukkit.craftbukkit.v1_16_R1.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_16_R1.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_16_R1.event.CraftEventFactory; import org.bukkit.craftbukkit.v1_16_R1.event.CraftEventFactory;
@ -26,7 +26,7 @@ public class AnvilInventoryImpl extends ContainerAnvil implements AnvilInventory
private String text; private String text;
private boolean open; private boolean open;
public AnvilInventoryImpl(Player player, @NotNull BaseComponent[] title, Consumer<String> renameHandler) { public AnvilInventoryImpl(Player player, @NotNull ComponentWrapper title, Consumer<String> renameHandler) {
this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title), renameHandler); this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title), renameHandler);
} }

@ -1,9 +1,9 @@
package de.studiocode.inventoryaccess.r3.inventory; package de.studiocode.inventoryaccess.r3.inventory;
import de.studiocode.inventoryaccess.abstraction.inventory.CartographyInventory; import de.studiocode.inventoryaccess.abstraction.inventory.CartographyInventory;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.inventoryaccess.r3.util.InventoryUtilsImpl; import de.studiocode.inventoryaccess.r3.util.InventoryUtilsImpl;
import de.studiocode.inventoryaccess.util.ReflectionUtils; import de.studiocode.inventoryaccess.util.ReflectionUtils;
import net.md_5.bungee.api.chat.BaseComponent;
import net.minecraft.server.v1_16_R1.*; import net.minecraft.server.v1_16_R1.*;
import org.bukkit.craftbukkit.v1_16_R1.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_16_R1.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_16_R1.event.CraftEventFactory; import org.bukkit.craftbukkit.v1_16_R1.event.CraftEventFactory;
@ -27,7 +27,7 @@ public class CartographyInventoryImpl extends ContainerCartography implements Ca
private boolean open; private boolean open;
public CartographyInventoryImpl(Player player, @NotNull BaseComponent[] title) { public CartographyInventoryImpl(Player player, @NotNull ComponentWrapper title) {
this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title)); this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title));
} }

@ -1,8 +1,7 @@
package de.studiocode.inventoryaccess.r3.util; package de.studiocode.inventoryaccess.r3.util;
import de.studiocode.inventoryaccess.abstraction.util.InventoryUtils; import de.studiocode.inventoryaccess.abstraction.util.InventoryUtils;
import net.md_5.bungee.api.chat.BaseComponent; import de.studiocode.inventoryaccess.component.ComponentWrapper;
import net.md_5.bungee.chat.ComponentSerializer;
import net.minecraft.server.v1_16_R1.*; import net.minecraft.server.v1_16_R1.*;
import org.bukkit.craftbukkit.v1_16_R1.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_16_R1.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_16_R1.event.CraftEventFactory; import org.bukkit.craftbukkit.v1_16_R1.event.CraftEventFactory;
@ -12,12 +11,12 @@ import org.bukkit.craftbukkit.v1_16_R1.util.CraftChatMessage;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class InventoryUtilsImpl implements InventoryUtils { public class InventoryUtilsImpl implements InventoryUtils {
public static IChatBaseComponent createNMSComponent(BaseComponent[] components) { public static IChatBaseComponent createNMSComponent(ComponentWrapper component) {
String json = ComponentSerializer.toString(components); return IChatBaseComponent.ChatSerializer.a(component.serializeToJson());
return IChatBaseComponent.ChatSerializer.a(json);
} }
public static int getActiveWindowId(EntityPlayer player) { public static int getActiveWindowId(EntityPlayer player) {
@ -31,7 +30,7 @@ public class InventoryUtilsImpl implements InventoryUtils {
} }
@Override @Override
public void openCustomInventory(@NotNull Player player, @NotNull Inventory inventory, @NotNull BaseComponent[] title) { public void openCustomInventory(@NotNull Player player, @NotNull Inventory inventory, @Nullable ComponentWrapper title) {
EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle(); EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
Containers<?> windowType = CraftContainer.getNotchInventoryType(inventory); Containers<?> windowType = CraftContainer.getNotchInventoryType(inventory);
@ -55,7 +54,7 @@ public class InventoryUtilsImpl implements InventoryUtils {
} }
@Override @Override
public void updateOpenInventoryTitle(@NotNull Player player, @NotNull BaseComponent[] title) { public void updateOpenInventoryTitle(@NotNull Player player, @NotNull ComponentWrapper title) {
EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle(); EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
Container container = entityPlayer.activeContainer; Container container = entityPlayer.activeContainer;
entityPlayer.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, container.getType(), createNMSComponent(title))); entityPlayer.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, container.getType(), createNMSComponent(title)));

@ -1,9 +1,9 @@
package de.studiocode.inventoryaccess.r3.util; package de.studiocode.inventoryaccess.r3.util;
import de.studiocode.inventoryaccess.abstraction.util.ItemUtils; import de.studiocode.inventoryaccess.abstraction.util.ItemUtils;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.inventoryaccess.util.ReflectionRegistry; import de.studiocode.inventoryaccess.util.ReflectionRegistry;
import de.studiocode.inventoryaccess.util.ReflectionUtils; import de.studiocode.inventoryaccess.util.ReflectionUtils;
import net.md_5.bungee.api.chat.BaseComponent;
import net.minecraft.server.v1_16_R1.ItemStack; import net.minecraft.server.v1_16_R1.ItemStack;
import net.minecraft.server.v1_16_R1.NBTCompressedStreamTools; import net.minecraft.server.v1_16_R1.NBTCompressedStreamTools;
import net.minecraft.server.v1_16_R1.NBTTagCompound; import net.minecraft.server.v1_16_R1.NBTTagCompound;
@ -71,7 +71,7 @@ public class ItemUtilsImpl implements ItemUtils {
} }
@Override @Override
public void setDisplayName(@NotNull ItemMeta itemMeta, BaseComponent[] name) { public void setDisplayName(@NotNull ItemMeta itemMeta, @NotNull ComponentWrapper name) {
ReflectionUtils.setFieldValue( ReflectionUtils.setFieldValue(
ReflectionRegistry.CB_CRAFT_META_ITEM_DISPLAY_NAME_FIELD, ReflectionRegistry.CB_CRAFT_META_ITEM_DISPLAY_NAME_FIELD,
itemMeta, itemMeta,
@ -80,7 +80,7 @@ public class ItemUtilsImpl implements ItemUtils {
} }
@Override @Override
public void setLore(@NotNull ItemMeta itemMeta, @NotNull List<@NotNull BaseComponent[]> lore) { public void setLore(@NotNull ItemMeta itemMeta, @NotNull List<@NotNull ComponentWrapper> lore) {
ReflectionUtils.setFieldValue( ReflectionUtils.setFieldValue(
ReflectionRegistry.CB_CRAFT_META_ITEM_LORE_FIELD, ReflectionRegistry.CB_CRAFT_META_ITEM_LORE_FIELD,
itemMeta, itemMeta,

@ -71,7 +71,7 @@ public class PlayerUtilsImpl implements PlayerUtils {
MapIcon.Type.a(icon.getType().getId()), MapIcon.Type.a(icon.getType().getId()),
icon.getX(), icon.getY(), icon.getX(), icon.getY(),
icon.getRot(), icon.getRot(),
icon.getComponents() != null ? InventoryUtilsImpl.createNMSComponent(icon.getComponents()) : null icon.getComponent() != null ? InventoryUtilsImpl.createNMSComponent(icon.getComponent()) : null
); );
} }

@ -1,8 +1,8 @@
package de.studiocode.inventoryaccess.r4.inventory; package de.studiocode.inventoryaccess.r4.inventory;
import de.studiocode.inventoryaccess.abstraction.inventory.AnvilInventory; import de.studiocode.inventoryaccess.abstraction.inventory.AnvilInventory;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.inventoryaccess.r4.util.InventoryUtilsImpl; import de.studiocode.inventoryaccess.r4.util.InventoryUtilsImpl;
import net.md_5.bungee.api.chat.BaseComponent;
import net.minecraft.server.v1_16_R2.*; import net.minecraft.server.v1_16_R2.*;
import org.bukkit.craftbukkit.v1_16_R2.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_16_R2.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_16_R2.event.CraftEventFactory; import org.bukkit.craftbukkit.v1_16_R2.event.CraftEventFactory;
@ -26,7 +26,7 @@ public class AnvilInventoryImpl extends ContainerAnvil implements AnvilInventory
private String text; private String text;
private boolean open; private boolean open;
public AnvilInventoryImpl(Player player, @NotNull BaseComponent[] title, Consumer<String> renameHandler) { public AnvilInventoryImpl(Player player, @NotNull ComponentWrapper title, Consumer<String> renameHandler) {
this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title), renameHandler); this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title), renameHandler);
} }

@ -1,9 +1,9 @@
package de.studiocode.inventoryaccess.r4.inventory; package de.studiocode.inventoryaccess.r4.inventory;
import de.studiocode.inventoryaccess.abstraction.inventory.CartographyInventory; import de.studiocode.inventoryaccess.abstraction.inventory.CartographyInventory;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.inventoryaccess.r4.util.InventoryUtilsImpl; import de.studiocode.inventoryaccess.r4.util.InventoryUtilsImpl;
import de.studiocode.inventoryaccess.util.ReflectionUtils; import de.studiocode.inventoryaccess.util.ReflectionUtils;
import net.md_5.bungee.api.chat.BaseComponent;
import net.minecraft.server.v1_16_R2.*; import net.minecraft.server.v1_16_R2.*;
import org.bukkit.craftbukkit.v1_16_R2.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_16_R2.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_16_R2.event.CraftEventFactory; import org.bukkit.craftbukkit.v1_16_R2.event.CraftEventFactory;
@ -27,7 +27,7 @@ public class CartographyInventoryImpl extends ContainerCartography implements Ca
private boolean open; private boolean open;
public CartographyInventoryImpl(Player player, @NotNull BaseComponent[] title) { public CartographyInventoryImpl(Player player, @NotNull ComponentWrapper title) {
this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title)); this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title));
} }

@ -1,8 +1,7 @@
package de.studiocode.inventoryaccess.r4.util; package de.studiocode.inventoryaccess.r4.util;
import de.studiocode.inventoryaccess.abstraction.util.InventoryUtils; import de.studiocode.inventoryaccess.abstraction.util.InventoryUtils;
import net.md_5.bungee.api.chat.BaseComponent; import de.studiocode.inventoryaccess.component.ComponentWrapper;
import net.md_5.bungee.chat.ComponentSerializer;
import net.minecraft.server.v1_16_R2.*; import net.minecraft.server.v1_16_R2.*;
import org.bukkit.craftbukkit.v1_16_R2.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_16_R2.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_16_R2.event.CraftEventFactory; import org.bukkit.craftbukkit.v1_16_R2.event.CraftEventFactory;
@ -12,12 +11,12 @@ import org.bukkit.craftbukkit.v1_16_R2.util.CraftChatMessage;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class InventoryUtilsImpl implements InventoryUtils { public class InventoryUtilsImpl implements InventoryUtils {
public static IChatBaseComponent createNMSComponent(BaseComponent[] components) { public static IChatBaseComponent createNMSComponent(ComponentWrapper component) {
String json = ComponentSerializer.toString(components); return IChatBaseComponent.ChatSerializer.a(component.serializeToJson());
return IChatBaseComponent.ChatSerializer.a(json);
} }
public static int getActiveWindowId(EntityPlayer player) { public static int getActiveWindowId(EntityPlayer player) {
@ -31,7 +30,7 @@ public class InventoryUtilsImpl implements InventoryUtils {
} }
@Override @Override
public void openCustomInventory(@NotNull Player player, @NotNull Inventory inventory, @NotNull BaseComponent[] title) { public void openCustomInventory(@NotNull Player player, @NotNull Inventory inventory, @Nullable ComponentWrapper title) {
EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle(); EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
Containers<?> windowType = CraftContainer.getNotchInventoryType(inventory); Containers<?> windowType = CraftContainer.getNotchInventoryType(inventory);
@ -55,7 +54,7 @@ public class InventoryUtilsImpl implements InventoryUtils {
} }
@Override @Override
public void updateOpenInventoryTitle(@NotNull Player player, @NotNull BaseComponent[] title) { public void updateOpenInventoryTitle(@NotNull Player player, @NotNull ComponentWrapper title) {
EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle(); EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
Container container = entityPlayer.activeContainer; Container container = entityPlayer.activeContainer;
entityPlayer.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, container.getType(), createNMSComponent(title))); entityPlayer.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, container.getType(), createNMSComponent(title)));

@ -1,9 +1,9 @@
package de.studiocode.inventoryaccess.r4.util; package de.studiocode.inventoryaccess.r4.util;
import de.studiocode.inventoryaccess.abstraction.util.ItemUtils; import de.studiocode.inventoryaccess.abstraction.util.ItemUtils;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.inventoryaccess.util.ReflectionRegistry; import de.studiocode.inventoryaccess.util.ReflectionRegistry;
import de.studiocode.inventoryaccess.util.ReflectionUtils; import de.studiocode.inventoryaccess.util.ReflectionUtils;
import net.md_5.bungee.api.chat.BaseComponent;
import net.minecraft.server.v1_16_R2.ItemStack; import net.minecraft.server.v1_16_R2.ItemStack;
import net.minecraft.server.v1_16_R2.NBTCompressedStreamTools; import net.minecraft.server.v1_16_R2.NBTCompressedStreamTools;
import net.minecraft.server.v1_16_R2.NBTTagCompound; import net.minecraft.server.v1_16_R2.NBTTagCompound;
@ -71,7 +71,7 @@ public class ItemUtilsImpl implements ItemUtils {
} }
@Override @Override
public void setDisplayName(@NotNull ItemMeta itemMeta, BaseComponent[] name) { public void setDisplayName(@NotNull ItemMeta itemMeta, @NotNull ComponentWrapper name) {
ReflectionUtils.setFieldValue( ReflectionUtils.setFieldValue(
ReflectionRegistry.CB_CRAFT_META_ITEM_DISPLAY_NAME_FIELD, ReflectionRegistry.CB_CRAFT_META_ITEM_DISPLAY_NAME_FIELD,
itemMeta, itemMeta,
@ -80,7 +80,7 @@ public class ItemUtilsImpl implements ItemUtils {
} }
@Override @Override
public void setLore(@NotNull ItemMeta itemMeta, @NotNull List<@NotNull BaseComponent[]> lore) { public void setLore(@NotNull ItemMeta itemMeta, @NotNull List<@NotNull ComponentWrapper> lore) {
ReflectionUtils.setFieldValue( ReflectionUtils.setFieldValue(
ReflectionRegistry.CB_CRAFT_META_ITEM_LORE_FIELD, ReflectionRegistry.CB_CRAFT_META_ITEM_LORE_FIELD,
itemMeta, itemMeta,

@ -71,7 +71,7 @@ public class PlayerUtilsImpl implements PlayerUtils {
MapIcon.Type.a(icon.getType().getId()), MapIcon.Type.a(icon.getType().getId()),
icon.getX(), icon.getY(), icon.getX(), icon.getY(),
icon.getRot(), icon.getRot(),
icon.getComponents() != null ? InventoryUtilsImpl.createNMSComponent(icon.getComponents()) : null icon.getComponent() != null ? InventoryUtilsImpl.createNMSComponent(icon.getComponent()) : null
); );
} }

@ -1,8 +1,8 @@
package de.studiocode.inventoryaccess.r5.inventory; package de.studiocode.inventoryaccess.r5.inventory;
import de.studiocode.inventoryaccess.abstraction.inventory.AnvilInventory; import de.studiocode.inventoryaccess.abstraction.inventory.AnvilInventory;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.inventoryaccess.r5.util.InventoryUtilsImpl; import de.studiocode.inventoryaccess.r5.util.InventoryUtilsImpl;
import net.md_5.bungee.api.chat.BaseComponent;
import net.minecraft.server.v1_16_R3.*; import net.minecraft.server.v1_16_R3.*;
import org.bukkit.craftbukkit.v1_16_R3.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_16_R3.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory; import org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory;
@ -26,7 +26,7 @@ public class AnvilInventoryImpl extends ContainerAnvil implements AnvilInventory
private String text; private String text;
private boolean open; private boolean open;
public AnvilInventoryImpl(Player player, @NotNull BaseComponent[] title, Consumer<String> renameHandler) { public AnvilInventoryImpl(Player player, @NotNull ComponentWrapper title, Consumer<String> renameHandler) {
this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title), renameHandler); this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title), renameHandler);
} }

@ -1,9 +1,9 @@
package de.studiocode.inventoryaccess.r5.inventory; package de.studiocode.inventoryaccess.r5.inventory;
import de.studiocode.inventoryaccess.abstraction.inventory.CartographyInventory; import de.studiocode.inventoryaccess.abstraction.inventory.CartographyInventory;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.inventoryaccess.r5.util.InventoryUtilsImpl; import de.studiocode.inventoryaccess.r5.util.InventoryUtilsImpl;
import de.studiocode.inventoryaccess.util.ReflectionUtils; import de.studiocode.inventoryaccess.util.ReflectionUtils;
import net.md_5.bungee.api.chat.BaseComponent;
import net.minecraft.server.v1_16_R3.*; import net.minecraft.server.v1_16_R3.*;
import org.bukkit.craftbukkit.v1_16_R3.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_16_R3.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory; import org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory;
@ -27,7 +27,7 @@ public class CartographyInventoryImpl extends ContainerCartography implements Ca
private boolean open; private boolean open;
public CartographyInventoryImpl(Player player, @NotNull BaseComponent[] title) { public CartographyInventoryImpl(Player player, @NotNull ComponentWrapper title) {
this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title)); this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title));
} }

@ -1,8 +1,7 @@
package de.studiocode.inventoryaccess.r5.util; package de.studiocode.inventoryaccess.r5.util;
import de.studiocode.inventoryaccess.abstraction.util.InventoryUtils; import de.studiocode.inventoryaccess.abstraction.util.InventoryUtils;
import net.md_5.bungee.api.chat.BaseComponent; import de.studiocode.inventoryaccess.component.ComponentWrapper;
import net.md_5.bungee.chat.ComponentSerializer;
import net.minecraft.server.v1_16_R3.*; import net.minecraft.server.v1_16_R3.*;
import org.bukkit.craftbukkit.v1_16_R3.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_16_R3.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory; import org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory;
@ -12,12 +11,12 @@ import org.bukkit.craftbukkit.v1_16_R3.util.CraftChatMessage;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class InventoryUtilsImpl implements InventoryUtils { public class InventoryUtilsImpl implements InventoryUtils {
public static IChatBaseComponent createNMSComponent(BaseComponent[] components) { public static IChatBaseComponent createNMSComponent(ComponentWrapper component) {
String json = ComponentSerializer.toString(components); return IChatBaseComponent.ChatSerializer.a(component.serializeToJson());
return CraftChatMessage.fromJSON(json);
} }
public static int getActiveWindowId(EntityPlayer player) { public static int getActiveWindowId(EntityPlayer player) {
@ -31,7 +30,7 @@ public class InventoryUtilsImpl implements InventoryUtils {
} }
@Override @Override
public void openCustomInventory(@NotNull Player player, @NotNull Inventory inventory, @NotNull BaseComponent[] title) { public void openCustomInventory(@NotNull Player player, @NotNull Inventory inventory, @Nullable ComponentWrapper title) {
EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle(); EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
Containers<?> windowType = CraftContainer.getNotchInventoryType(inventory); Containers<?> windowType = CraftContainer.getNotchInventoryType(inventory);
@ -55,7 +54,7 @@ public class InventoryUtilsImpl implements InventoryUtils {
} }
@Override @Override
public void updateOpenInventoryTitle(@NotNull Player player, @NotNull BaseComponent[] title) { public void updateOpenInventoryTitle(@NotNull Player player, @NotNull ComponentWrapper title) {
EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle(); EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
Container container = entityPlayer.activeContainer; Container container = entityPlayer.activeContainer;
entityPlayer.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, container.getType(), createNMSComponent(title))); entityPlayer.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, container.getType(), createNMSComponent(title)));

@ -1,10 +1,9 @@
package de.studiocode.inventoryaccess.r5.util; package de.studiocode.inventoryaccess.r5.util;
import de.studiocode.inventoryaccess.abstraction.util.ItemUtils; import de.studiocode.inventoryaccess.abstraction.util.ItemUtils;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.inventoryaccess.util.ReflectionRegistry; import de.studiocode.inventoryaccess.util.ReflectionRegistry;
import de.studiocode.inventoryaccess.util.ReflectionUtils; import de.studiocode.inventoryaccess.util.ReflectionUtils;
import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.chat.ComponentSerializer;
import net.minecraft.server.v1_16_R3.ItemStack; import net.minecraft.server.v1_16_R3.ItemStack;
import net.minecraft.server.v1_16_R3.NBTCompressedStreamTools; import net.minecraft.server.v1_16_R3.NBTCompressedStreamTools;
import net.minecraft.server.v1_16_R3.NBTTagCompound; import net.minecraft.server.v1_16_R3.NBTTagCompound;
@ -72,20 +71,20 @@ public class ItemUtilsImpl implements ItemUtils {
} }
@Override @Override
public void setDisplayName(@NotNull ItemMeta itemMeta, BaseComponent[] name) { public void setDisplayName(@NotNull ItemMeta itemMeta, @NotNull ComponentWrapper name) {
ReflectionUtils.setFieldValue( ReflectionUtils.setFieldValue(
ReflectionRegistry.CB_CRAFT_META_ITEM_DISPLAY_NAME_FIELD, ReflectionRegistry.CB_CRAFT_META_ITEM_DISPLAY_NAME_FIELD,
itemMeta, itemMeta,
ComponentSerializer.toString(name) name.serializeToJson()
); );
} }
@Override @Override
public void setLore(@NotNull ItemMeta itemMeta, @NotNull List<@NotNull BaseComponent[]> lore) { public void setLore(@NotNull ItemMeta itemMeta, @NotNull List<@NotNull ComponentWrapper> lore) {
ReflectionUtils.setFieldValue( ReflectionUtils.setFieldValue(
ReflectionRegistry.CB_CRAFT_META_ITEM_LORE_FIELD, ReflectionRegistry.CB_CRAFT_META_ITEM_LORE_FIELD,
itemMeta, itemMeta,
lore.stream().map(ComponentSerializer::toString).collect(Collectors.toList()) lore.stream().map(ComponentWrapper::serializeToJson).collect(Collectors.toList())
); );
} }

@ -71,7 +71,7 @@ public class PlayerUtilsImpl implements PlayerUtils {
MapIcon.Type.a(icon.getType().getId()), MapIcon.Type.a(icon.getType().getId()),
icon.getX(), icon.getY(), icon.getX(), icon.getY(),
icon.getRot(), icon.getRot(),
icon.getComponents() != null ? InventoryUtilsImpl.createNMSComponent(icon.getComponents()) : null icon.getComponent() != null ? InventoryUtilsImpl.createNMSComponent(icon.getComponent()) : null
); );
} }

@ -1,8 +1,8 @@
package de.studiocode.inventoryaccess.r6.inventory; package de.studiocode.inventoryaccess.r6.inventory;
import de.studiocode.inventoryaccess.abstraction.inventory.AnvilInventory; import de.studiocode.inventoryaccess.abstraction.inventory.AnvilInventory;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.inventoryaccess.r6.util.InventoryUtilsImpl; import de.studiocode.inventoryaccess.r6.util.InventoryUtilsImpl;
import net.md_5.bungee.api.chat.BaseComponent;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.NonNullList; import net.minecraft.core.NonNullList;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
@ -37,7 +37,7 @@ public class AnvilInventoryImpl extends AnvilMenu implements AnvilInventory {
private String text; private String text;
private boolean open; private boolean open;
public AnvilInventoryImpl(org.bukkit.entity.Player player, @NotNull BaseComponent[] title, Consumer<String> renameHandler) { public AnvilInventoryImpl(org.bukkit.entity.Player player, @NotNull ComponentWrapper title, Consumer<String> renameHandler) {
this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title), renameHandler); this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title), renameHandler);
} }

@ -1,9 +1,9 @@
package de.studiocode.inventoryaccess.r6.inventory; package de.studiocode.inventoryaccess.r6.inventory;
import de.studiocode.inventoryaccess.abstraction.inventory.CartographyInventory; import de.studiocode.inventoryaccess.abstraction.inventory.CartographyInventory;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.inventoryaccess.r6.util.InventoryUtilsImpl; import de.studiocode.inventoryaccess.r6.util.InventoryUtilsImpl;
import de.studiocode.inventoryaccess.util.ReflectionUtils; import de.studiocode.inventoryaccess.util.ReflectionUtils;
import net.md_5.bungee.api.chat.BaseComponent;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.NonNullList; import net.minecraft.core.NonNullList;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
@ -40,7 +40,7 @@ public class CartographyInventoryImpl extends CartographyTableMenu implements Ca
private boolean open; private boolean open;
public CartographyInventoryImpl(Player player, @NotNull BaseComponent[] title) { public CartographyInventoryImpl(Player player, @NotNull ComponentWrapper title) {
this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title)); this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title));
} }

@ -1,8 +1,7 @@
package de.studiocode.inventoryaccess.r6.util; package de.studiocode.inventoryaccess.r6.util;
import de.studiocode.inventoryaccess.abstraction.util.InventoryUtils; import de.studiocode.inventoryaccess.abstraction.util.InventoryUtils;
import net.md_5.bungee.api.chat.BaseComponent; import de.studiocode.inventoryaccess.component.ComponentWrapper;
import net.md_5.bungee.chat.ComponentSerializer;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.network.protocol.game.ClientboundOpenScreenPacket; import net.minecraft.network.protocol.game.ClientboundOpenScreenPacket;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
@ -18,14 +17,13 @@ import org.bukkit.craftbukkit.v1_17_R1.util.CraftChatMessage;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class InventoryUtilsImpl implements InventoryUtils { public class InventoryUtilsImpl implements InventoryUtils {
public static Component createNMSComponent(BaseComponent[] components) { public static Component createNMSComponent(ComponentWrapper component) {
if (components == null) return null; if (component == null) return null;
return CraftChatMessage.fromJSON(component.serializeToJson());
String json = ComponentSerializer.toString(components);
return CraftChatMessage.fromJSON(json);
} }
public static int getActiveWindowId(ServerPlayer player) { public static int getActiveWindowId(ServerPlayer player) {
@ -39,7 +37,7 @@ public class InventoryUtilsImpl implements InventoryUtils {
} }
@Override @Override
public void openCustomInventory(@NotNull Player player, @NotNull Inventory inventory, @NotNull BaseComponent[] title) { public void openCustomInventory(@NotNull Player player, @NotNull Inventory inventory, @Nullable ComponentWrapper title) {
ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle(); ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle();
MenuType<?> menuType = CraftContainer.getNotchInventoryType(inventory); MenuType<?> menuType = CraftContainer.getNotchInventoryType(inventory);
@ -65,7 +63,7 @@ public class InventoryUtilsImpl implements InventoryUtils {
} }
@Override @Override
public void updateOpenInventoryTitle(@NotNull Player player, @NotNull BaseComponent[] title) { public void updateOpenInventoryTitle(@NotNull Player player, @NotNull ComponentWrapper title) {
ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle(); ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle();
AbstractContainerMenu menu = serverPlayer.containerMenu; AbstractContainerMenu menu = serverPlayer.containerMenu;
serverPlayer.connection.send(new ClientboundOpenScreenPacket(menu.containerId, menu.getType(), createNMSComponent(title))); serverPlayer.connection.send(new ClientboundOpenScreenPacket(menu.containerId, menu.getType(), createNMSComponent(title)));

@ -1,10 +1,9 @@
package de.studiocode.inventoryaccess.r6.util; package de.studiocode.inventoryaccess.r6.util;
import de.studiocode.inventoryaccess.abstraction.util.ItemUtils; import de.studiocode.inventoryaccess.abstraction.util.ItemUtils;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.inventoryaccess.util.ReflectionRegistry; import de.studiocode.inventoryaccess.util.ReflectionRegistry;
import de.studiocode.inventoryaccess.util.ReflectionUtils; import de.studiocode.inventoryaccess.util.ReflectionUtils;
import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.chat.ComponentSerializer;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.NbtIo; import net.minecraft.nbt.NbtIo;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
@ -72,20 +71,20 @@ public class ItemUtilsImpl implements ItemUtils {
} }
@Override @Override
public void setDisplayName(@NotNull ItemMeta itemMeta, BaseComponent[] name) { public void setDisplayName(@NotNull ItemMeta itemMeta, @NotNull ComponentWrapper name) {
ReflectionUtils.setFieldValue( ReflectionUtils.setFieldValue(
ReflectionRegistry.CB_CRAFT_META_ITEM_DISPLAY_NAME_FIELD, ReflectionRegistry.CB_CRAFT_META_ITEM_DISPLAY_NAME_FIELD,
itemMeta, itemMeta,
ComponentSerializer.toString(name) name.serializeToJson()
); );
} }
@Override @Override
public void setLore(@NotNull ItemMeta itemMeta, @NotNull List<@NotNull BaseComponent[]> lore) { public void setLore(@NotNull ItemMeta itemMeta, @NotNull List<@NotNull ComponentWrapper> lore) {
ReflectionUtils.setFieldValue( ReflectionUtils.setFieldValue(
ReflectionRegistry.CB_CRAFT_META_ITEM_LORE_FIELD, ReflectionRegistry.CB_CRAFT_META_ITEM_LORE_FIELD,
itemMeta, itemMeta,
lore.stream().map(ComponentSerializer::toString).collect(Collectors.toList()) lore.stream().map(ComponentWrapper::serializeToJson).collect(Collectors.toList())
); );
} }

@ -1,11 +1,11 @@
package de.studiocode.inventoryaccess.r6.util; package de.studiocode.inventoryaccess.r6.util;
import de.studiocode.inventoryaccess.abstraction.util.PlayerUtils; import de.studiocode.inventoryaccess.abstraction.util.PlayerUtils;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.inventoryaccess.map.MapIcon; import de.studiocode.inventoryaccess.map.MapIcon;
import de.studiocode.inventoryaccess.map.MapPatch; import de.studiocode.inventoryaccess.map.MapPatch;
import de.studiocode.inventoryaccess.util.DataUtils; import de.studiocode.inventoryaccess.util.DataUtils;
import de.studiocode.inventoryaccess.util.ReflectionUtils; import de.studiocode.inventoryaccess.util.ReflectionUtils;
import net.md_5.bungee.api.chat.BaseComponent;
import net.minecraft.network.protocol.game.ClientboundMapItemDataPacket; import net.minecraft.network.protocol.game.ClientboundMapItemDataPacket;
import net.minecraft.network.protocol.game.ClientboundResourcePackPacket; import net.minecraft.network.protocol.game.ClientboundResourcePackPacket;
import net.minecraft.server.PlayerAdvancements; import net.minecraft.server.PlayerAdvancements;
@ -69,7 +69,7 @@ public class PlayerUtilsImpl implements PlayerUtils {
MapDecoration.Type.byIcon(icon.getType().getId()), MapDecoration.Type.byIcon(icon.getType().getId()),
icon.getX(), icon.getY(), icon.getX(), icon.getY(),
icon.getRot(), icon.getRot(),
icon.getComponents() != null ? InventoryUtilsImpl.createNMSComponent(icon.getComponents()) : null icon.getComponent() != null ? InventoryUtilsImpl.createNMSComponent(icon.getComponent()) : null
); );
} }
@ -84,7 +84,7 @@ public class PlayerUtilsImpl implements PlayerUtils {
} }
@Override @Override
public void sendResourcePack(@NotNull Player player, @NotNull String url, byte[] hash, @Nullable BaseComponent[] prompt, boolean force) { public void sendResourcePack(@NotNull Player player, @NotNull String url, byte[] hash, @Nullable ComponentWrapper prompt, boolean force) {
var serverPlayer = ((CraftPlayer) player).getHandle(); var serverPlayer = ((CraftPlayer) player).getHandle();
var packet = new ClientboundResourcePackPacket( var packet = new ClientboundResourcePackPacket(
url, url,

@ -1,8 +1,8 @@
package de.studiocode.inventoryaccess.r7.inventory; package de.studiocode.inventoryaccess.r7.inventory;
import de.studiocode.inventoryaccess.abstraction.inventory.AnvilInventory; import de.studiocode.inventoryaccess.abstraction.inventory.AnvilInventory;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.inventoryaccess.r7.util.InventoryUtilsImpl; import de.studiocode.inventoryaccess.r7.util.InventoryUtilsImpl;
import net.md_5.bungee.api.chat.BaseComponent;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.NonNullList; import net.minecraft.core.NonNullList;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
@ -38,7 +38,7 @@ public class AnvilInventoryImpl extends AnvilMenu implements AnvilInventory {
private String text; private String text;
private boolean open; private boolean open;
public AnvilInventoryImpl(org.bukkit.entity.Player player, @NotNull BaseComponent[] title, Consumer<String> renameHandler) { public AnvilInventoryImpl(org.bukkit.entity.Player player, @NotNull ComponentWrapper title, Consumer<String> renameHandler) {
this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title), renameHandler); this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title), renameHandler);
} }

@ -1,9 +1,9 @@
package de.studiocode.inventoryaccess.r7.inventory; package de.studiocode.inventoryaccess.r7.inventory;
import de.studiocode.inventoryaccess.abstraction.inventory.CartographyInventory; import de.studiocode.inventoryaccess.abstraction.inventory.CartographyInventory;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.inventoryaccess.r7.util.InventoryUtilsImpl; import de.studiocode.inventoryaccess.r7.util.InventoryUtilsImpl;
import de.studiocode.inventoryaccess.util.ReflectionUtils; import de.studiocode.inventoryaccess.util.ReflectionUtils;
import net.md_5.bungee.api.chat.BaseComponent;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.NonNullList; import net.minecraft.core.NonNullList;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
@ -40,7 +40,7 @@ public class CartographyInventoryImpl extends CartographyTableMenu implements Ca
private boolean open; private boolean open;
public CartographyInventoryImpl(Player player, @NotNull BaseComponent[] title) { public CartographyInventoryImpl(Player player, @NotNull ComponentWrapper title) {
this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title)); this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title));
} }

@ -1,8 +1,7 @@
package de.studiocode.inventoryaccess.r7.util; package de.studiocode.inventoryaccess.r7.util;
import de.studiocode.inventoryaccess.abstraction.util.InventoryUtils; import de.studiocode.inventoryaccess.abstraction.util.InventoryUtils;
import net.md_5.bungee.api.chat.BaseComponent; import de.studiocode.inventoryaccess.component.ComponentWrapper;
import net.md_5.bungee.chat.ComponentSerializer;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.network.protocol.game.ClientboundOpenScreenPacket; import net.minecraft.network.protocol.game.ClientboundOpenScreenPacket;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
@ -18,14 +17,13 @@ import org.bukkit.craftbukkit.v1_17_R1.util.CraftChatMessage;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class InventoryUtilsImpl implements InventoryUtils { public class InventoryUtilsImpl implements InventoryUtils {
public static Component createNMSComponent(BaseComponent[] components) { public static Component createNMSComponent(ComponentWrapper component) {
if (components == null) return null; if (component == null) return null;
return CraftChatMessage.fromJSON(component.serializeToJson());
String json = ComponentSerializer.toString(components);
return CraftChatMessage.fromJSON(json);
} }
public static int getActiveWindowId(ServerPlayer player) { public static int getActiveWindowId(ServerPlayer player) {
@ -39,7 +37,7 @@ public class InventoryUtilsImpl implements InventoryUtils {
} }
@Override @Override
public void openCustomInventory(@NotNull Player player, @NotNull Inventory inventory, @NotNull BaseComponent[] title) { public void openCustomInventory(@NotNull Player player, @NotNull Inventory inventory, @Nullable ComponentWrapper title) {
ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle(); ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle();
MenuType<?> menuType = CraftContainer.getNotchInventoryType(inventory); MenuType<?> menuType = CraftContainer.getNotchInventoryType(inventory);
@ -65,7 +63,7 @@ public class InventoryUtilsImpl implements InventoryUtils {
} }
@Override @Override
public void updateOpenInventoryTitle(@NotNull Player player, @NotNull BaseComponent[] title) { public void updateOpenInventoryTitle(@NotNull Player player, @NotNull ComponentWrapper title) {
ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle(); ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle();
AbstractContainerMenu menu = serverPlayer.containerMenu; AbstractContainerMenu menu = serverPlayer.containerMenu;
serverPlayer.connection.send(new ClientboundOpenScreenPacket(menu.containerId, menu.getType(), createNMSComponent(title))); serverPlayer.connection.send(new ClientboundOpenScreenPacket(menu.containerId, menu.getType(), createNMSComponent(title)));

@ -1,10 +1,9 @@
package de.studiocode.inventoryaccess.r7.util; package de.studiocode.inventoryaccess.r7.util;
import de.studiocode.inventoryaccess.abstraction.util.ItemUtils; import de.studiocode.inventoryaccess.abstraction.util.ItemUtils;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.inventoryaccess.util.ReflectionRegistry; import de.studiocode.inventoryaccess.util.ReflectionRegistry;
import de.studiocode.inventoryaccess.util.ReflectionUtils; import de.studiocode.inventoryaccess.util.ReflectionUtils;
import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.chat.ComponentSerializer;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.NbtIo; import net.minecraft.nbt.NbtIo;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
@ -72,20 +71,20 @@ public class ItemUtilsImpl implements ItemUtils {
} }
@Override @Override
public void setDisplayName(@NotNull ItemMeta itemMeta, BaseComponent[] name) { public void setDisplayName(@NotNull ItemMeta itemMeta, @NotNull ComponentWrapper name) {
ReflectionUtils.setFieldValue( ReflectionUtils.setFieldValue(
ReflectionRegistry.CB_CRAFT_META_ITEM_DISPLAY_NAME_FIELD, ReflectionRegistry.CB_CRAFT_META_ITEM_DISPLAY_NAME_FIELD,
itemMeta, itemMeta,
ComponentSerializer.toString(name) name.serializeToJson()
); );
} }
@Override @Override
public void setLore(@NotNull ItemMeta itemMeta, @NotNull List<@NotNull BaseComponent[]> lore) { public void setLore(@NotNull ItemMeta itemMeta, @NotNull List<@NotNull ComponentWrapper> lore) {
ReflectionUtils.setFieldValue( ReflectionUtils.setFieldValue(
ReflectionRegistry.CB_CRAFT_META_ITEM_LORE_FIELD, ReflectionRegistry.CB_CRAFT_META_ITEM_LORE_FIELD,
itemMeta, itemMeta,
lore.stream().map(ComponentSerializer::toString).collect(Collectors.toList()) lore.stream().map(ComponentWrapper::serializeToJson).collect(Collectors.toList())
); );
} }

@ -1,11 +1,11 @@
package de.studiocode.inventoryaccess.r7.util; package de.studiocode.inventoryaccess.r7.util;
import de.studiocode.inventoryaccess.abstraction.util.PlayerUtils; import de.studiocode.inventoryaccess.abstraction.util.PlayerUtils;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.inventoryaccess.map.MapIcon; import de.studiocode.inventoryaccess.map.MapIcon;
import de.studiocode.inventoryaccess.map.MapPatch; import de.studiocode.inventoryaccess.map.MapPatch;
import de.studiocode.inventoryaccess.util.DataUtils; import de.studiocode.inventoryaccess.util.DataUtils;
import de.studiocode.inventoryaccess.util.ReflectionUtils; import de.studiocode.inventoryaccess.util.ReflectionUtils;
import net.md_5.bungee.api.chat.BaseComponent;
import net.minecraft.network.protocol.game.ClientboundMapItemDataPacket; import net.minecraft.network.protocol.game.ClientboundMapItemDataPacket;
import net.minecraft.network.protocol.game.ClientboundResourcePackPacket; import net.minecraft.network.protocol.game.ClientboundResourcePackPacket;
import net.minecraft.server.PlayerAdvancements; import net.minecraft.server.PlayerAdvancements;
@ -69,7 +69,7 @@ public class PlayerUtilsImpl implements PlayerUtils {
MapDecoration.Type.byIcon(icon.getType().getId()), MapDecoration.Type.byIcon(icon.getType().getId()),
icon.getX(), icon.getY(), icon.getX(), icon.getY(),
icon.getRot(), icon.getRot(),
icon.getComponents() != null ? InventoryUtilsImpl.createNMSComponent(icon.getComponents()) : null icon.getComponent() != null ? InventoryUtilsImpl.createNMSComponent(icon.getComponent()) : null
); );
} }
@ -84,7 +84,7 @@ public class PlayerUtilsImpl implements PlayerUtils {
} }
@Override @Override
public void sendResourcePack(@NotNull Player player, @NotNull String url, byte[] hash, @Nullable BaseComponent[] prompt, boolean force) { public void sendResourcePack(@NotNull Player player, @NotNull String url, byte[] hash, @Nullable ComponentWrapper prompt, boolean force) {
var serverPlayer = ((CraftPlayer) player).getHandle(); var serverPlayer = ((CraftPlayer) player).getHandle();
var packet = new ClientboundResourcePackPacket( var packet = new ClientboundResourcePackPacket(
url, url,

@ -1,8 +1,8 @@
package de.studiocode.inventoryaccess.r8.inventory; package de.studiocode.inventoryaccess.r8.inventory;
import de.studiocode.inventoryaccess.abstraction.inventory.AnvilInventory; import de.studiocode.inventoryaccess.abstraction.inventory.AnvilInventory;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.inventoryaccess.r8.util.InventoryUtilsImpl; import de.studiocode.inventoryaccess.r8.util.InventoryUtilsImpl;
import net.md_5.bungee.api.chat.BaseComponent;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.NonNullList; import net.minecraft.core.NonNullList;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
@ -38,7 +38,7 @@ public class AnvilInventoryImpl extends AnvilMenu implements AnvilInventory {
private String text; private String text;
private boolean open; private boolean open;
public AnvilInventoryImpl(org.bukkit.entity.Player player, @NotNull BaseComponent[] title, Consumer<String> renameHandler) { public AnvilInventoryImpl(org.bukkit.entity.Player player, @NotNull ComponentWrapper title, Consumer<String> renameHandler) {
this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title), renameHandler); this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title), renameHandler);
} }

@ -1,9 +1,9 @@
package de.studiocode.inventoryaccess.r8.inventory; package de.studiocode.inventoryaccess.r8.inventory;
import de.studiocode.inventoryaccess.abstraction.inventory.CartographyInventory; import de.studiocode.inventoryaccess.abstraction.inventory.CartographyInventory;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.inventoryaccess.r8.util.InventoryUtilsImpl; import de.studiocode.inventoryaccess.r8.util.InventoryUtilsImpl;
import de.studiocode.inventoryaccess.util.ReflectionUtils; import de.studiocode.inventoryaccess.util.ReflectionUtils;
import net.md_5.bungee.api.chat.BaseComponent;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.NonNullList; import net.minecraft.core.NonNullList;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
@ -40,7 +40,7 @@ public class CartographyInventoryImpl extends CartographyTableMenu implements Ca
private boolean open; private boolean open;
public CartographyInventoryImpl(Player player, @NotNull BaseComponent[] title) { public CartographyInventoryImpl(Player player, @NotNull ComponentWrapper title) {
this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title)); this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title));
} }

@ -1,8 +1,7 @@
package de.studiocode.inventoryaccess.r8.util; package de.studiocode.inventoryaccess.r8.util;
import de.studiocode.inventoryaccess.abstraction.util.InventoryUtils; import de.studiocode.inventoryaccess.abstraction.util.InventoryUtils;
import net.md_5.bungee.api.chat.BaseComponent; import de.studiocode.inventoryaccess.component.ComponentWrapper;
import net.md_5.bungee.chat.ComponentSerializer;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.network.protocol.game.ClientboundOpenScreenPacket; import net.minecraft.network.protocol.game.ClientboundOpenScreenPacket;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
@ -18,14 +17,13 @@ import org.bukkit.craftbukkit.v1_18_R1.util.CraftChatMessage;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class InventoryUtilsImpl implements InventoryUtils { public class InventoryUtilsImpl implements InventoryUtils {
public static Component createNMSComponent(BaseComponent[] components) { public static Component createNMSComponent(ComponentWrapper component) {
if (components == null) return null; if (component == null) return null;
return CraftChatMessage.fromJSON(component.serializeToJson());
String json = ComponentSerializer.toString(components);
return CraftChatMessage.fromJSON(json);
} }
public static int getActiveWindowId(ServerPlayer player) { public static int getActiveWindowId(ServerPlayer player) {
@ -39,7 +37,7 @@ public class InventoryUtilsImpl implements InventoryUtils {
} }
@Override @Override
public void openCustomInventory(@NotNull Player player, @NotNull Inventory inventory, @NotNull BaseComponent[] title) { public void openCustomInventory(@NotNull Player player, @NotNull Inventory inventory, @Nullable ComponentWrapper title) {
ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle(); ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle();
MenuType<?> menuType = CraftContainer.getNotchInventoryType(inventory); MenuType<?> menuType = CraftContainer.getNotchInventoryType(inventory);
@ -65,7 +63,7 @@ public class InventoryUtilsImpl implements InventoryUtils {
} }
@Override @Override
public void updateOpenInventoryTitle(@NotNull Player player, @NotNull BaseComponent[] title) { public void updateOpenInventoryTitle(@NotNull Player player, @NotNull ComponentWrapper title) {
ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle(); ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle();
AbstractContainerMenu menu = serverPlayer.containerMenu; AbstractContainerMenu menu = serverPlayer.containerMenu;
serverPlayer.connection.send(new ClientboundOpenScreenPacket(menu.containerId, menu.getType(), createNMSComponent(title))); serverPlayer.connection.send(new ClientboundOpenScreenPacket(menu.containerId, menu.getType(), createNMSComponent(title)));

@ -1,10 +1,9 @@
package de.studiocode.inventoryaccess.r8.util; package de.studiocode.inventoryaccess.r8.util;
import de.studiocode.inventoryaccess.abstraction.util.ItemUtils; import de.studiocode.inventoryaccess.abstraction.util.ItemUtils;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.inventoryaccess.util.ReflectionRegistry; import de.studiocode.inventoryaccess.util.ReflectionRegistry;
import de.studiocode.inventoryaccess.util.ReflectionUtils; import de.studiocode.inventoryaccess.util.ReflectionUtils;
import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.chat.ComponentSerializer;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.NbtIo; import net.minecraft.nbt.NbtIo;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
@ -72,20 +71,20 @@ public class ItemUtilsImpl implements ItemUtils {
} }
@Override @Override
public void setDisplayName(@NotNull ItemMeta itemMeta, BaseComponent[] name) { public void setDisplayName(@NotNull ItemMeta itemMeta, @NotNull ComponentWrapper name) {
ReflectionUtils.setFieldValue( ReflectionUtils.setFieldValue(
ReflectionRegistry.CB_CRAFT_META_ITEM_DISPLAY_NAME_FIELD, ReflectionRegistry.CB_CRAFT_META_ITEM_DISPLAY_NAME_FIELD,
itemMeta, itemMeta,
ComponentSerializer.toString(name) name.serializeToJson()
); );
} }
@Override @Override
public void setLore(@NotNull ItemMeta itemMeta, @NotNull List<@NotNull BaseComponent[]> lore) { public void setLore(@NotNull ItemMeta itemMeta, @NotNull List<@NotNull ComponentWrapper> lore) {
ReflectionUtils.setFieldValue( ReflectionUtils.setFieldValue(
ReflectionRegistry.CB_CRAFT_META_ITEM_LORE_FIELD, ReflectionRegistry.CB_CRAFT_META_ITEM_LORE_FIELD,
itemMeta, itemMeta,
lore.stream().map(ComponentSerializer::toString).collect(Collectors.toList()) lore.stream().map(ComponentWrapper::serializeToJson).collect(Collectors.toList())
); );
} }

@ -1,11 +1,11 @@
package de.studiocode.inventoryaccess.r8.util; package de.studiocode.inventoryaccess.r8.util;
import de.studiocode.inventoryaccess.abstraction.util.PlayerUtils; import de.studiocode.inventoryaccess.abstraction.util.PlayerUtils;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.inventoryaccess.map.MapIcon; import de.studiocode.inventoryaccess.map.MapIcon;
import de.studiocode.inventoryaccess.map.MapPatch; import de.studiocode.inventoryaccess.map.MapPatch;
import de.studiocode.inventoryaccess.util.DataUtils; import de.studiocode.inventoryaccess.util.DataUtils;
import de.studiocode.inventoryaccess.util.ReflectionUtils; import de.studiocode.inventoryaccess.util.ReflectionUtils;
import net.md_5.bungee.api.chat.BaseComponent;
import net.minecraft.network.protocol.game.ClientboundMapItemDataPacket; import net.minecraft.network.protocol.game.ClientboundMapItemDataPacket;
import net.minecraft.network.protocol.game.ClientboundResourcePackPacket; import net.minecraft.network.protocol.game.ClientboundResourcePackPacket;
import net.minecraft.server.PlayerAdvancements; import net.minecraft.server.PlayerAdvancements;
@ -69,7 +69,7 @@ public class PlayerUtilsImpl implements PlayerUtils {
MapDecoration.Type.byIcon(icon.getType().getId()), MapDecoration.Type.byIcon(icon.getType().getId()),
icon.getX(), icon.getY(), icon.getX(), icon.getY(),
icon.getRot(), icon.getRot(),
icon.getComponents() != null ? InventoryUtilsImpl.createNMSComponent(icon.getComponents()) : null icon.getComponent() != null ? InventoryUtilsImpl.createNMSComponent(icon.getComponent()) : null
); );
} }
@ -84,7 +84,7 @@ public class PlayerUtilsImpl implements PlayerUtils {
} }
@Override @Override
public void sendResourcePack(@NotNull Player player, @NotNull String url, byte[] hash, @Nullable BaseComponent[] prompt, boolean force) { public void sendResourcePack(@NotNull Player player, @NotNull String url, byte[] hash, @Nullable ComponentWrapper prompt, boolean force) {
var serverPlayer = ((CraftPlayer) player).getHandle(); var serverPlayer = ((CraftPlayer) player).getHandle();
var packet = new ClientboundResourcePackPacket( var packet = new ClientboundResourcePackPacket(
url, url,

@ -1,8 +1,8 @@
package de.studiocode.inventoryaccess.r9.inventory; package de.studiocode.inventoryaccess.r9.inventory;
import de.studiocode.inventoryaccess.abstraction.inventory.AnvilInventory; import de.studiocode.inventoryaccess.abstraction.inventory.AnvilInventory;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.inventoryaccess.r9.util.InventoryUtilsImpl; import de.studiocode.inventoryaccess.r9.util.InventoryUtilsImpl;
import net.md_5.bungee.api.chat.BaseComponent;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.NonNullList; import net.minecraft.core.NonNullList;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
@ -38,7 +38,7 @@ public class AnvilInventoryImpl extends AnvilMenu implements AnvilInventory {
private String text; private String text;
private boolean open; private boolean open;
public AnvilInventoryImpl(org.bukkit.entity.Player player, @NotNull BaseComponent[] title, Consumer<String> renameHandler) { public AnvilInventoryImpl(org.bukkit.entity.Player player, @NotNull ComponentWrapper title, Consumer<String> renameHandler) {
this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title), renameHandler); this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title), renameHandler);
} }

@ -1,9 +1,9 @@
package de.studiocode.inventoryaccess.r9.inventory; package de.studiocode.inventoryaccess.r9.inventory;
import de.studiocode.inventoryaccess.abstraction.inventory.CartographyInventory; import de.studiocode.inventoryaccess.abstraction.inventory.CartographyInventory;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.inventoryaccess.r9.util.InventoryUtilsImpl; import de.studiocode.inventoryaccess.r9.util.InventoryUtilsImpl;
import de.studiocode.inventoryaccess.util.ReflectionUtils; import de.studiocode.inventoryaccess.util.ReflectionUtils;
import net.md_5.bungee.api.chat.BaseComponent;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.NonNullList; import net.minecraft.core.NonNullList;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
@ -40,7 +40,7 @@ public class CartographyInventoryImpl extends CartographyTableMenu implements Ca
private boolean open; private boolean open;
public CartographyInventoryImpl(Player player, @NotNull BaseComponent[] title) { public CartographyInventoryImpl(Player player, @NotNull ComponentWrapper title) {
this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title)); this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title));
} }

@ -1,8 +1,7 @@
package de.studiocode.inventoryaccess.r9.util; package de.studiocode.inventoryaccess.r9.util;
import de.studiocode.inventoryaccess.abstraction.util.InventoryUtils; import de.studiocode.inventoryaccess.abstraction.util.InventoryUtils;
import net.md_5.bungee.api.chat.BaseComponent; import de.studiocode.inventoryaccess.component.ComponentWrapper;
import net.md_5.bungee.chat.ComponentSerializer;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.network.protocol.game.ClientboundOpenScreenPacket; import net.minecraft.network.protocol.game.ClientboundOpenScreenPacket;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
@ -18,14 +17,13 @@ import org.bukkit.craftbukkit.v1_18_R2.util.CraftChatMessage;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class InventoryUtilsImpl implements InventoryUtils { public class InventoryUtilsImpl implements InventoryUtils {
public static Component createNMSComponent(BaseComponent[] components) { public static Component createNMSComponent(ComponentWrapper component) {
if (components == null) return null; if (component == null) return null;
return CraftChatMessage.fromJSON(component.serializeToJson());
String json = ComponentSerializer.toString(components);
return CraftChatMessage.fromJSON(json);
} }
public static int getActiveWindowId(ServerPlayer player) { public static int getActiveWindowId(ServerPlayer player) {
@ -39,7 +37,7 @@ public class InventoryUtilsImpl implements InventoryUtils {
} }
@Override @Override
public void openCustomInventory(@NotNull Player player, @NotNull Inventory inventory, @NotNull BaseComponent[] title) { public void openCustomInventory(@NotNull Player player, @NotNull Inventory inventory, @Nullable ComponentWrapper title) {
ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle(); ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle();
MenuType<?> menuType = CraftContainer.getNotchInventoryType(inventory); MenuType<?> menuType = CraftContainer.getNotchInventoryType(inventory);
@ -65,7 +63,7 @@ public class InventoryUtilsImpl implements InventoryUtils {
} }
@Override @Override
public void updateOpenInventoryTitle(@NotNull Player player, @NotNull BaseComponent[] title) { public void updateOpenInventoryTitle(@NotNull Player player, @NotNull ComponentWrapper title) {
ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle(); ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle();
AbstractContainerMenu menu = serverPlayer.containerMenu; AbstractContainerMenu menu = serverPlayer.containerMenu;
serverPlayer.connection.send(new ClientboundOpenScreenPacket(menu.containerId, menu.getType(), createNMSComponent(title))); serverPlayer.connection.send(new ClientboundOpenScreenPacket(menu.containerId, menu.getType(), createNMSComponent(title)));

@ -1,10 +1,9 @@
package de.studiocode.inventoryaccess.r9.util; package de.studiocode.inventoryaccess.r9.util;
import de.studiocode.inventoryaccess.abstraction.util.ItemUtils; import de.studiocode.inventoryaccess.abstraction.util.ItemUtils;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.inventoryaccess.util.ReflectionRegistry; import de.studiocode.inventoryaccess.util.ReflectionRegistry;
import de.studiocode.inventoryaccess.util.ReflectionUtils; import de.studiocode.inventoryaccess.util.ReflectionUtils;
import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.chat.ComponentSerializer;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.NbtIo; import net.minecraft.nbt.NbtIo;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
@ -72,20 +71,20 @@ public class ItemUtilsImpl implements ItemUtils {
} }
@Override @Override
public void setDisplayName(@NotNull ItemMeta itemMeta, BaseComponent[] name) { public void setDisplayName(@NotNull ItemMeta itemMeta, @NotNull ComponentWrapper name) {
ReflectionUtils.setFieldValue( ReflectionUtils.setFieldValue(
ReflectionRegistry.CB_CRAFT_META_ITEM_DISPLAY_NAME_FIELD, ReflectionRegistry.CB_CRAFT_META_ITEM_DISPLAY_NAME_FIELD,
itemMeta, itemMeta,
ComponentSerializer.toString(name) name.serializeToJson()
); );
} }
@Override @Override
public void setLore(@NotNull ItemMeta itemMeta, @NotNull List<@NotNull BaseComponent[]> lore) { public void setLore(@NotNull ItemMeta itemMeta, @NotNull List<@NotNull ComponentWrapper> lore) {
ReflectionUtils.setFieldValue( ReflectionUtils.setFieldValue(
ReflectionRegistry.CB_CRAFT_META_ITEM_LORE_FIELD, ReflectionRegistry.CB_CRAFT_META_ITEM_LORE_FIELD,
itemMeta, itemMeta,
lore.stream().map(ComponentSerializer::toString).collect(Collectors.toList()) lore.stream().map(ComponentWrapper::serializeToJson).collect(Collectors.toList())
); );
} }

@ -1,11 +1,11 @@
package de.studiocode.inventoryaccess.r9.util; package de.studiocode.inventoryaccess.r9.util;
import de.studiocode.inventoryaccess.abstraction.util.PlayerUtils; import de.studiocode.inventoryaccess.abstraction.util.PlayerUtils;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.inventoryaccess.map.MapIcon; import de.studiocode.inventoryaccess.map.MapIcon;
import de.studiocode.inventoryaccess.map.MapPatch; import de.studiocode.inventoryaccess.map.MapPatch;
import de.studiocode.inventoryaccess.util.DataUtils; import de.studiocode.inventoryaccess.util.DataUtils;
import de.studiocode.inventoryaccess.util.ReflectionUtils; import de.studiocode.inventoryaccess.util.ReflectionUtils;
import net.md_5.bungee.api.chat.BaseComponent;
import net.minecraft.network.protocol.game.ClientboundMapItemDataPacket; import net.minecraft.network.protocol.game.ClientboundMapItemDataPacket;
import net.minecraft.network.protocol.game.ClientboundResourcePackPacket; import net.minecraft.network.protocol.game.ClientboundResourcePackPacket;
import net.minecraft.server.PlayerAdvancements; import net.minecraft.server.PlayerAdvancements;
@ -69,7 +69,7 @@ public class PlayerUtilsImpl implements PlayerUtils {
MapDecoration.Type.byIcon(icon.getType().getId()), MapDecoration.Type.byIcon(icon.getType().getId()),
icon.getX(), icon.getY(), icon.getX(), icon.getY(),
icon.getRot(), icon.getRot(),
icon.getComponents() != null ? InventoryUtilsImpl.createNMSComponent(icon.getComponents()) : null icon.getComponent() != null ? InventoryUtilsImpl.createNMSComponent(icon.getComponent()) : null
); );
} }
@ -84,7 +84,7 @@ public class PlayerUtilsImpl implements PlayerUtils {
} }
@Override @Override
public void sendResourcePack(@NotNull Player player, @NotNull String url, byte[] hash, @Nullable BaseComponent[] prompt, boolean force) { public void sendResourcePack(@NotNull Player player, @NotNull String url, byte[] hash, @Nullable ComponentWrapper prompt, boolean force) {
var serverPlayer = ((CraftPlayer) player).getHandle(); var serverPlayer = ((CraftPlayer) player).getHandle();
var packet = new ClientboundResourcePackPacket( var packet = new ClientboundResourcePackPacket(
url, url,

@ -17,6 +17,13 @@
<maven.compiler.target>11</maven.compiler.target> <maven.compiler.target>11</maven.compiler.target>
</properties> </properties>
<repositories>
<repository>
<id>papermc</id>
<url>https://repo.papermc.io/repository/maven-public/</url>
</repository>
</repositories>
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>org.spigotmc</groupId> <groupId>org.spigotmc</groupId>
@ -24,6 +31,18 @@
<version>1.16.4-R0.1-SNAPSHOT</version> <version>1.16.4-R0.1-SNAPSHOT</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency>
<groupId>net.kyori</groupId>
<artifactId>adventure-api</artifactId>
<version>4.11.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>net.kyori</groupId>
<artifactId>adventure-text-serializer-gson</artifactId>
<version>4.11.0</version>
<scope>provided</scope>
</dependency>
</dependencies> </dependencies>
</project> </project>

@ -1,10 +1,11 @@
package de.studiocode.inventoryaccess.abstraction.util; package de.studiocode.inventoryaccess.abstraction.util;
import net.md_5.bungee.api.chat.BaseComponent; import de.studiocode.inventoryaccess.component.ComponentWrapper;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryView; import org.bukkit.inventory.InventoryView;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public interface InventoryUtils { public interface InventoryUtils {
@ -30,7 +31,7 @@ public interface InventoryUtils {
* @param inventory The {@link Inventory} * @param inventory The {@link Inventory}
* @param title The title of the inventory * @param title The title of the inventory
*/ */
void openCustomInventory(@NotNull Player player, @NotNull Inventory inventory, @NotNull BaseComponent[] title); void openCustomInventory(@NotNull Player player, @NotNull Inventory inventory, @Nullable ComponentWrapper title);
/** /**
* Changes the title of the {@link Inventory} the player is currently viewing. * Changes the title of the {@link Inventory} the player is currently viewing.
@ -38,6 +39,6 @@ public interface InventoryUtils {
* @param player The {@link Player} * @param player The {@link Player}
* @param title The new title * @param title The new title
*/ */
void updateOpenInventoryTitle(@NotNull Player player, @NotNull BaseComponent[] title); void updateOpenInventoryTitle(@NotNull Player player, @NotNull ComponentWrapper title);
} }

@ -1,6 +1,6 @@
package de.studiocode.inventoryaccess.abstraction.util; package de.studiocode.inventoryaccess.abstraction.util;
import net.md_5.bungee.api.chat.BaseComponent; import de.studiocode.inventoryaccess.component.ComponentWrapper;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.ItemMeta;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@ -55,16 +55,16 @@ public interface ItemUtils {
* Sets the display name of an {@link ItemMeta} * Sets the display name of an {@link ItemMeta}
* *
* @param itemMeta The {@link ItemMeta} * @param itemMeta The {@link ItemMeta}
* @param name The display name as a {@link BaseComponent BaseComponent[]} * @param name The display name
*/ */
void setDisplayName(@NotNull ItemMeta itemMeta, @NotNull BaseComponent[] name); void setDisplayName(@NotNull ItemMeta itemMeta, @NotNull ComponentWrapper name);
/** /**
* Sets the lore of an {@link ItemMeta} * Sets the lore of an {@link ItemMeta}
* *
* @param itemMeta The {@link ItemMeta} * @param itemMeta The {@link ItemMeta}
* @param lore The lore as a list of {@link BaseComponent BaseComponent[]} * @param lore The lore
*/ */
void setLore(@NotNull ItemMeta itemMeta, @NotNull List<@NotNull BaseComponent[]> lore); void setLore(@NotNull ItemMeta itemMeta, @NotNull List<@NotNull ComponentWrapper> lore);
} }

@ -1,8 +1,8 @@
package de.studiocode.inventoryaccess.abstraction.util; package de.studiocode.inventoryaccess.abstraction.util;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.inventoryaccess.map.MapIcon; import de.studiocode.inventoryaccess.map.MapIcon;
import de.studiocode.inventoryaccess.map.MapPatch; import de.studiocode.inventoryaccess.map.MapPatch;
import net.md_5.bungee.api.chat.BaseComponent;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@ -61,7 +61,7 @@ public interface PlayerUtils {
* @param prompt The prompt message to be displayed (since 1.17) * @param prompt The prompt message to be displayed (since 1.17)
* @param force If the {@link Player} should be forced to download the resource pack (since 1.17) * @param force If the {@link Player} should be forced to download the resource pack (since 1.17)
*/ */
default void sendResourcePack(@NotNull Player player, @NotNull String url, byte[] hash, @Nullable BaseComponent[] prompt, boolean force) { default void sendResourcePack(@NotNull Player player, @NotNull String url, byte[] hash, @Nullable ComponentWrapper prompt, boolean force) {
player.setResourcePack(url, hash); player.setResourcePack(url, hash);
} }

@ -0,0 +1,19 @@
package de.studiocode.inventoryaccess.component;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
public class AdventureComponentWrapper implements ComponentWrapper {
private final Component component;
public AdventureComponentWrapper(Component component) {
this.component = component;
}
@Override
public String serializeToJson() {
return GsonComponentSerializer.gson().serialize(component);
}
}

@ -0,0 +1,19 @@
package de.studiocode.inventoryaccess.component;
import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.chat.ComponentSerializer;
public class BaseComponentWrapper implements ComponentWrapper {
private final BaseComponent[] components;
public BaseComponentWrapper(BaseComponent[] components) {
this.components = components;
}
@Override
public String serializeToJson() {
return ComponentSerializer.toString(components);
}
}

@ -0,0 +1,7 @@
package de.studiocode.inventoryaccess.component;
public interface ComponentWrapper {
String serializeToJson();
}

@ -1,5 +1,7 @@
package de.studiocode.inventoryaccess.map; package de.studiocode.inventoryaccess.map;
import de.studiocode.inventoryaccess.component.BaseComponentWrapper;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.BaseComponent;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@ -10,18 +12,22 @@ public class MapIcon {
private final byte x; private final byte x;
private final byte y; private final byte y;
private final byte rot; private final byte rot;
private final BaseComponent[] components; private final ComponentWrapper component;
public MapIcon(@NotNull MapIconType type, int x, int y, int rot, @Nullable BaseComponent[] components) { public MapIcon(@NotNull MapIconType type, int x, int y, int rot, @Nullable ComponentWrapper component) {
this.type = type; this.type = type;
this.x = (byte) (x - 128); this.x = (byte) (x - 128);
this.y = (byte) (y - 128); this.y = (byte) (y - 128);
this.rot = (byte) rot; this.rot = (byte) rot;
this.components = components; this.component = component;
}
public MapIcon(@NotNull MapIconType type, int x, int y, int rot, @Nullable BaseComponent[] component) {
this(type, x, y, rot, new BaseComponentWrapper(component));
} }
public MapIcon(MapIconType type, byte x, byte y, byte rot) { public MapIcon(MapIconType type, byte x, byte y, byte rot) {
this(type, x, y, rot, null); this(type, x, y, rot, (ComponentWrapper) null);
} }
@NotNull @NotNull
@ -42,8 +48,8 @@ public class MapIcon {
} }
@Nullable @Nullable
public BaseComponent[] getComponents() { public ComponentWrapper getComponent() {
return components; return component;
} }
public enum MapIconType { public enum MapIconType {

@ -5,8 +5,8 @@ import de.studiocode.inventoryaccess.abstraction.inventory.CartographyInventory;
import de.studiocode.inventoryaccess.abstraction.util.InventoryUtils; import de.studiocode.inventoryaccess.abstraction.util.InventoryUtils;
import de.studiocode.inventoryaccess.abstraction.util.ItemUtils; import de.studiocode.inventoryaccess.abstraction.util.ItemUtils;
import de.studiocode.inventoryaccess.abstraction.util.PlayerUtils; import de.studiocode.inventoryaccess.abstraction.util.PlayerUtils;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.inventoryaccess.util.ReflectionUtils; import de.studiocode.inventoryaccess.util.ReflectionUtils;
import net.md_5.bungee.api.chat.BaseComponent;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@ -22,9 +22,9 @@ public class InventoryAccess {
private static final Class<CartographyInventory> CARTOGRAPHY_INVENTORY_CLASS = ReflectionUtils.getImplClass("inventory.CartographyInventoryImpl"); private static final Class<CartographyInventory> CARTOGRAPHY_INVENTORY_CLASS = ReflectionUtils.getImplClass("inventory.CartographyInventoryImpl");
private static final Constructor<AnvilInventory> ANVIL_INVENTORY_CONSTRUCTOR = private static final Constructor<AnvilInventory> ANVIL_INVENTORY_CONSTRUCTOR =
ReflectionUtils.getConstructor(ANVIL_INVENTORY_CLASS, false, Player.class, BaseComponent[].class, Consumer.class); ReflectionUtils.getConstructor(ANVIL_INVENTORY_CLASS, false, Player.class, ComponentWrapper.class, Consumer.class);
private static final Constructor<CartographyInventory> CARTOGRAPHY_INVENTORY_CONSTRUCTOR = private static final Constructor<CartographyInventory> CARTOGRAPHY_INVENTORY_CONSTRUCTOR =
ReflectionUtils.getConstructor(CARTOGRAPHY_INVENTORY_CLASS, false, Player.class, BaseComponent[].class); ReflectionUtils.getConstructor(CARTOGRAPHY_INVENTORY_CLASS, false, Player.class, ComponentWrapper.class);
private static final InventoryUtils INVENTORY_UTILS = ReflectionUtils.constructEmpty(INVENTORY_UTILS_CLASS); private static final InventoryUtils INVENTORY_UTILS = ReflectionUtils.constructEmpty(INVENTORY_UTILS_CLASS);
private static final ItemUtils ITEM_UTILS = ReflectionUtils.constructEmpty(ITEM_UTILS_CLASS); private static final ItemUtils ITEM_UTILS = ReflectionUtils.constructEmpty(ITEM_UTILS_CLASS);
@ -61,12 +61,12 @@ public class InventoryAccess {
* Creates a new {@link AnvilInventory}. * Creates a new {@link AnvilInventory}.
* *
* @param player The {@link Player} that should see this {@link AnvilInventory} * @param player The {@link Player} that should see this {@link AnvilInventory}
* @param title The inventory title as a {@link BaseComponent BaseComponent[]} * @param title The inventory title
* @param renameHandler A {@link Consumer} that is called whenever the {@link Player} * @param renameHandler A {@link Consumer} that is called whenever the {@link Player}
* types something in the renaming section of the anvil * types something in the renaming section of the anvil
* @return The {@link AnvilInventory} * @return The {@link AnvilInventory}
*/ */
public static AnvilInventory createAnvilInventory(@NotNull Player player, @NotNull BaseComponent[] title, Consumer<String> renameHandler) { public static AnvilInventory createAnvilInventory(@NotNull Player player, @NotNull ComponentWrapper title, Consumer<String> renameHandler) {
return ReflectionUtils.construct(ANVIL_INVENTORY_CONSTRUCTOR, player, title, renameHandler); return ReflectionUtils.construct(ANVIL_INVENTORY_CONSTRUCTOR, player, title, renameHandler);
} }
@ -74,10 +74,10 @@ public class InventoryAccess {
* Creates a new {@link CartographyInventory}. * Creates a new {@link CartographyInventory}.
* *
* @param player The {@link Player} that should see this {@link CartographyInventory} * @param player The {@link Player} that should see this {@link CartographyInventory}
* @param title The inventory title as a {@link BaseComponent BaseComponent[]} * @param title The inventory title
* @return The {@link CartographyInventory} * @return The {@link CartographyInventory}
*/ */
public static CartographyInventory createCartographyInventory(@NotNull Player player, @NotNull BaseComponent[] title) { public static CartographyInventory createCartographyInventory(@NotNull Player player, @NotNull ComponentWrapper title) {
return ReflectionUtils.construct(CARTOGRAPHY_INVENTORY_CONSTRUCTOR, player, title); return ReflectionUtils.construct(CARTOGRAPHY_INVENTORY_CONSTRUCTOR, player, title);
} }

@ -1,5 +1,7 @@
package de.studiocode.invui.resourcepack; package de.studiocode.invui.resourcepack;
import de.studiocode.inventoryaccess.component.BaseComponentWrapper;
import de.studiocode.inventoryaccess.component.ComponentWrapper;
import de.studiocode.inventoryaccess.util.ReflectionRegistry; import de.studiocode.inventoryaccess.util.ReflectionRegistry;
import de.studiocode.inventoryaccess.util.VersionUtils; import de.studiocode.inventoryaccess.util.VersionUtils;
import de.studiocode.inventoryaccess.version.InventoryAccess; import de.studiocode.inventoryaccess.version.InventoryAccess;
@ -37,7 +39,7 @@ public class ForceResourcePack implements Listener {
private final HashMap<Player, BukkitTask> tasks = new HashMap<>(); private final HashMap<Player, BukkitTask> tasks = new HashMap<>();
private String resourcePackUrl; private String resourcePackUrl;
private BaseComponent[] prompt; private ComponentWrapper prompt;
private byte[] hash; private byte[] hash;
private ForceResourcePack() { private ForceResourcePack() {
@ -63,10 +65,21 @@ public class ForceResourcePack implements Listener {
* @param resourcePackUrl The ResourcePack URL String * @param resourcePackUrl The ResourcePack URL String
* @param prompt The prompt to be displayed (since 1.17) * @param prompt The prompt to be displayed (since 1.17)
*/ */
public void setResourcePack(@Nullable String resourcePackUrl, @Nullable BaseComponent[] prompt) { public void setResourcePack(@Nullable String resourcePackUrl, @Nullable ComponentWrapper prompt) {
setResourcePack(resourcePackUrl, prompt, true); setResourcePack(resourcePackUrl, prompt, true);
} }
/**
* Sets the URL String for the custom ResourcePack every {@link Player} is required to download.
* Can be set to null to stop forcing the Resource Pack.
*
* @param resourcePackUrl The ResourcePack URL String
* @param prompt The prompt to be displayed (since 1.17)
*/
public void setResourcePack(@Nullable String resourcePackUrl, @Nullable BaseComponent[] prompt) {
setResourcePack(resourcePackUrl, new BaseComponentWrapper(prompt), true);
}
/** /**
* Sets the URL String for the custom ResourcePack every {@link Player} is required to download. * Sets the URL String for the custom ResourcePack every {@link Player} is required to download.
* Can be set to null to stop forcing the Resource Pack. * Can be set to null to stop forcing the Resource Pack.
@ -75,7 +88,7 @@ public class ForceResourcePack implements Listener {
* @param prompt The prompt to be displayed (since 1.17) * @param prompt The prompt to be displayed (since 1.17)
* @param sendToOnlinePlayers If the resource pack should also be sent to all currently online players * @param sendToOnlinePlayers If the resource pack should also be sent to all currently online players
*/ */
public void setResourcePack(@Nullable String resourcePackUrl, @Nullable BaseComponent[] prompt, boolean sendToOnlinePlayers) { public void setResourcePack(@Nullable String resourcePackUrl, @Nullable ComponentWrapper prompt, boolean sendToOnlinePlayers) {
this.prompt = prompt; this.prompt = prompt;
if (resourcePackUrl != null) { if (resourcePackUrl != null) {
@ -93,6 +106,18 @@ public class ForceResourcePack implements Listener {
} }
} }
/**
* Sets the URL String for the custom ResourcePack every {@link Player} is required to download.
* Can be set to null to stop forcing the Resource Pack.
*
* @param resourcePackUrl The ResourcePack URL String
* @param prompt The prompt to be displayed (since 1.17)
* @param sendToOnlinePlayers If the resource pack should also be sent to all currently online players
*/
public void setResourcePack(@Nullable String resourcePackUrl, @Nullable BaseComponent[] prompt, boolean sendToOnlinePlayers) {
setResourcePack(resourcePackUrl, new BaseComponentWrapper(prompt), sendToOnlinePlayers);
}
public void sendResourcePack(Player player) { public void sendResourcePack(Player player) {
if (VersionUtils.isServerHigherOrEqual("1.17.0")) { if (VersionUtils.isServerHigherOrEqual("1.17.0")) {
InventoryAccess.getPlayerUtils().sendResourcePack(player, resourcePackUrl, hash, prompt, true); InventoryAccess.getPlayerUtils().sendResourcePack(player, resourcePackUrl, hash, prompt, true);