Skip to content

Commit

Permalink
Paper component API usage
Browse files Browse the repository at this point in the history
  • Loading branch information
mcmonkey4eva committed Apr 25, 2021
1 parent c873bf4 commit 9e160f7
Show file tree
Hide file tree
Showing 9 changed files with 135 additions and 22 deletions.
Expand Up @@ -7,9 +7,16 @@
import com.denizenscript.denizen.paper.events.*;
import com.denizenscript.denizen.paper.properties.*;
import com.denizenscript.denizen.paper.tags.PaperTagBase;
import com.denizenscript.denizen.paper.utilities.PaperAdvancedTextImpl;
import com.denizenscript.denizen.utilities.FormattedTextHelper;
import com.denizenscript.denizen.utilities.AdvancedTextImpl;
import com.denizenscript.denizen.utilities.debugging.Debug;
import com.denizenscript.denizencore.events.ScriptEvent;
import com.denizenscript.denizencore.objects.properties.PropertyParser;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.chat.ComponentSerializer;
import org.bukkit.Bukkit;

public class PaperModule {
Expand Down Expand Up @@ -50,5 +57,22 @@ public static void init() {

// Other helpers
Bukkit.getPluginManager().registerEvents(new PaperEventHelpers(), Denizen.getInstance());
AdvancedTextImpl.instance = new PaperAdvancedTextImpl();
}

public static Component parseFormattedText(String text, ChatColor baseColor) {
return jsonToComponent(ComponentSerializer.toString(FormattedTextHelper.parse(text, baseColor)));
}

public static String stringifyComponent(Component component, ChatColor baseColor) {
return FormattedTextHelper.stringify(ComponentSerializer.parse(componentToJson(component)), baseColor);
}

public static Component jsonToComponent(String json) {
return GsonComponentSerializer.gson().deserialize(json);
}

public static String componentToJson(Component component) {
return GsonComponentSerializer.gson().serialize(component);
}
}
Expand Up @@ -2,12 +2,14 @@

import com.denizenscript.denizen.events.server.ListPingScriptEvent;
import com.denizenscript.denizen.objects.PlayerTag;
import com.denizenscript.denizen.paper.PaperModule;
import com.denizenscript.denizencore.objects.ArgumentHelper;
import com.denizenscript.denizencore.objects.ObjectTag;
import com.denizenscript.denizencore.objects.core.ElementTag;
import com.denizenscript.denizencore.objects.core.ListTag;
import com.denizenscript.denizencore.utilities.CoreUtilities;
import com.destroystokyo.paper.event.server.PaperServerListPingEvent;
import net.md_5.bungee.api.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;

Expand Down Expand Up @@ -47,9 +49,16 @@ else if (lower.startsWith("exclude_players:")) {
return super.applyDetermination(path, determinationObj);
}

@Override
public void setMotd(String text) {
event.motd(PaperModule.parseFormattedText(text, ChatColor.WHITE));
}

@Override
public ObjectTag getContext(String name) {
switch (name) {
case "motd":
return new ElementTag(PaperModule.stringifyComponent(event.motd(), ChatColor.WHITE));
case "protocol_version":
return new ElementTag(((PaperServerListPingEvent) event).getProtocolVersion());
case "version_name":
Expand Down
@@ -0,0 +1,40 @@
package com.denizenscript.denizen.paper.utilities;

import com.denizenscript.denizen.nms.NMSHandler;
import com.denizenscript.denizen.paper.PaperModule;
import com.denizenscript.denizen.utilities.AdvancedTextImpl;
import net.md_5.bungee.api.ChatColor;
import org.bukkit.Bukkit;
import org.bukkit.entity.Entity;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder;

public class PaperAdvancedTextImpl extends AdvancedTextImpl {

@Override
public Inventory createInventory(InventoryHolder holder, int slots, String title) {
return Bukkit.getServer().createInventory(holder, slots, PaperModule.parseFormattedText(title, ChatColor.BLACK));
}

@Override
public Inventory createInventory(InventoryHolder holder, InventoryType type, String title) {
return Bukkit.getServer().createInventory(holder, type, PaperModule.parseFormattedText(title, ChatColor.BLACK));
}

@Override
public String getTitle(Inventory inventory) {
// TODO: Paper lacks an inventory.getTitle? 0.o
return NMSHandler.getInstance().getTitle(inventory);
}

@Override
public void setCustomName(Entity entity, String name) {
entity.customName(PaperModule.parseFormattedText(name, ChatColor.WHITE));
}

@Override
public String getCustomName(Entity entity) {
return PaperModule.stringifyComponent(entity.customName(), ChatColor.WHITE);
}
}
Expand Up @@ -74,6 +74,10 @@ public String getName() {
// Despite the 'cached' class name, there's no actual internal cache.
public static HashMap<String, CachedServerIcon> iconCache = new HashMap<>();

public void setMotd(String text) {
event.setMotd(text);
}

@Override
public boolean applyDetermination(ScriptPath path, ObjectTag determinationObj) {
String determination = determinationObj.toString();
Expand Down Expand Up @@ -107,11 +111,11 @@ public boolean applyDetermination(ScriptPath path, ObjectTag determinationObj) {
if (ArgumentHelper.matchesInteger(values.get(0))) {
event.setMaxPlayers(Integer.parseInt(values.get(0)));
if (values.size() == 2) {
event.setMotd(values.get(1));
setMotd(values.get(1));
}
}
else {
event.setMotd(determination);
setMotd(determination);
}
return true;
}
Expand Down
Expand Up @@ -4,6 +4,7 @@
import com.denizenscript.denizen.scripts.containers.core.InventoryScriptContainer;
import com.denizenscript.denizen.scripts.containers.core.InventoryScriptHelper;
import com.denizenscript.denizen.scripts.containers.core.ItemScriptHelper;
import com.denizenscript.denizen.utilities.AdvancedTextImpl;
import com.denizenscript.denizen.utilities.debugging.Debug;
import com.denizenscript.denizen.utilities.depends.Depends;
import com.denizenscript.denizen.utilities.inventory.InventoryTrackerSystem;
Expand Down Expand Up @@ -163,16 +164,16 @@ public void setInventory(Inventory inventory) {
public void makeUnique(String id) {
InventoryTag toNote = new InventoryTag(inventory, idType, idHolder);
toNote.uniquifier = null;
String title = NMSHandler.getInstance().getTitle(inventory);
String title = AdvancedTextImpl.instance.getTitle(inventory);
if (title == null || title.startsWith("container.")) {
title = toNote.inventory.getType().getDefaultTitle();
}
ItemStack[] contents = toNote.inventory.getContents();
if (getInventoryType() == InventoryType.CHEST) {
toNote.inventory = Bukkit.getServer().createInventory(null, toNote.inventory.getSize(), title);
toNote.inventory = AdvancedTextImpl.instance.createInventory(null, toNote.inventory.getSize(), title);
}
else {
toNote.inventory = Bukkit.getServer().createInventory(null, toNote.inventory.getType(), title);
toNote.inventory = AdvancedTextImpl.instance.createInventory(null, toNote.inventory.getType(), title);
}
toNote.inventory.setContents(contents);
InventoryScriptHelper.notedInventories.put(toNote.inventory, toNote);
Expand Down Expand Up @@ -501,7 +502,7 @@ public InventoryTag(int size, String title) {
Debug.echoError("InventorySize must be multiple of 9, and greater than 0.");
return;
}
inventory = Bukkit.getServer().createInventory(null, size, title);
inventory = AdvancedTextImpl.instance.createInventory(null, size, title);
idType = "generic";
idHolder = new ElementTag("chest");
}
Expand All @@ -513,7 +514,7 @@ public InventoryTag(InventoryType type) {
}

public InventoryTag(InventoryType type, String title) {
inventory = Bukkit.getServer().createInventory(null, type, title);
inventory = AdvancedTextImpl.instance.createInventory(null, type, title);
idType = "generic";
idHolder = new ElementTag(CoreUtilities.toLowerCase(type.name()));
}
Expand Down Expand Up @@ -582,12 +583,12 @@ else if (inventory == null) {
else {
newContents = oldContents;
}
String title = NMSHandler.getInstance().getTitle(inventory);
String title = AdvancedTextImpl.instance.getTitle(inventory);
if (title == null) {
setInventory(Bukkit.getServer().createInventory(null, size));
}
else {
setInventory(Bukkit.getServer().createInventory(null, size, title));
setInventory(AdvancedTextImpl.instance.createInventory(null, size, title));
}
inventory.setContents(newContents);
trackTemporaryInventory(this);
Expand Down Expand Up @@ -1167,7 +1168,7 @@ public static void registerTags() {
}

InventoryType type = object.inventory.getType();
InventoryTag dummyInv = new InventoryTag(type == InventoryType.PLAYER ? InventoryType.CHEST : type, NMSHandler.getInstance().getTitle(object.inventory));
InventoryTag dummyInv = new InventoryTag(type == InventoryType.PLAYER ? InventoryType.CHEST : type, AdvancedTextImpl.instance.getTitle(object.inventory));
ItemStack[] contents = object.getStorageContents();
if (dummyInv.getInventoryType() == InventoryType.CHEST) {
dummyInv.setSize(contents.length);
Expand Down Expand Up @@ -1234,7 +1235,7 @@ public static void registerTags() {
return null;
}
List<ItemTag> items = ListTag.getListFor(attribute.getContextObject(1), attribute.context).filter(ItemTag.class, attribute.context);
InventoryTag dummyInv = new InventoryTag(object.inventory.getType(), NMSHandler.getInstance().getTitle(object.inventory));
InventoryTag dummyInv = new InventoryTag(object.inventory.getType(), AdvancedTextImpl.instance.getTitle(object.inventory));
if (object.inventory.getType() == InventoryType.CHEST) {
dummyInv.setSize(object.inventory.getSize());
}
Expand Down Expand Up @@ -1278,7 +1279,7 @@ public static void registerTags() {
return null;
}
List<ItemTag> items = ListTag.getListFor(attribute.getContextObject(1), attribute.context).filter(ItemTag.class, attribute.context);
InventoryTag dummyInv = new InventoryTag(object.inventory.getType(), NMSHandler.getInstance().getTitle(object.inventory));
InventoryTag dummyInv = new InventoryTag(object.inventory.getType(), AdvancedTextImpl.instance.getTitle(object.inventory));
if (object.inventory.getType() == InventoryType.CHEST) {
dummyInv.setSize(object.inventory.getSize());
}
Expand Down
@@ -1,6 +1,7 @@
package com.denizenscript.denizen.objects.properties.entity;

import com.denizenscript.denizen.objects.EntityTag;
import com.denizenscript.denizen.utilities.AdvancedTextImpl;
import com.denizenscript.denizencore.objects.core.ElementTag;
import com.denizenscript.denizencore.objects.Mechanism;
import com.denizenscript.denizencore.objects.ObjectTag;
Expand Down Expand Up @@ -37,7 +38,7 @@ private EntityCustomName(EntityTag ent) {

@Override
public String getPropertyString() {
return entity.getBukkitEntity().getCustomName();
return AdvancedTextImpl.instance.getCustomName(entity.getBukkitEntity());
}

@Override
Expand All @@ -61,7 +62,7 @@ public ObjectTag getObjectAttribute(Attribute attribute) {
// Returns the entity's custom name (as set by plugin or name tag item), if any.
// -->
else if (attribute.startsWith("custom_name")) {
String name = entity.getBukkitEntity().getCustomName();
String name = AdvancedTextImpl.instance.getCustomName(entity.getBukkitEntity());
if (name == null) {
return null;
}
Expand All @@ -87,7 +88,7 @@ public void adjust(Mechanism mechanism) {
// <EntityTag.custom_name>
// -->
if (mechanism.matches("custom_name")) {
entity.getBukkitEntity().setCustomName(CoreUtilities.clearNBSPs(mechanism.getValue().asString()));
AdvancedTextImpl.instance.setCustomName(entity.getBukkitEntity(), CoreUtilities.clearNBSPs(mechanism.getValue().asString()));
}

}
Expand Down
@@ -1,13 +1,12 @@
package com.denizenscript.denizen.objects.properties.inventory;

import com.denizenscript.denizen.nms.NMSHandler;
import com.denizenscript.denizen.objects.InventoryTag;
import com.denizenscript.denizen.utilities.AdvancedTextImpl;
import com.denizenscript.denizencore.objects.core.ElementTag;
import com.denizenscript.denizencore.objects.Mechanism;
import com.denizenscript.denizencore.objects.ObjectTag;
import com.denizenscript.denizencore.objects.properties.Property;
import com.denizenscript.denizencore.objects.properties.PropertyParser;
import org.bukkit.Bukkit;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.inventory.ItemStack;

Expand Down Expand Up @@ -37,7 +36,7 @@ public InventoryTitle(InventoryTag inventory) {

public String getTitle() {
if (inventory.getInventory() != null) {
String title = NMSHandler.getInstance().getTitle(inventory.getInventory());
String title = AdvancedTextImpl.instance.getTitle(inventory.getInventory());
if (title != null) {
if (!title.startsWith("container.")) {
return title;
Expand Down Expand Up @@ -96,21 +95,21 @@ public void adjust(Mechanism mechanism) {
return;
}
String title = mechanism.getValue().asString();
if (inventory.getInventory() != null && NMSHandler.getInstance().getTitle(inventory.getInventory()).equals(title)) {
if (inventory.getInventory() != null && AdvancedTextImpl.instance.getTitle(inventory.getInventory()).equals(title)) {
return;
}
inventory.uniquifier = null;
if (inventory.getInventory() == null) {
inventory.setInventory(Bukkit.getServer().createInventory(null, InventoryTag.maxSlots, title));
inventory.setInventory(AdvancedTextImpl.instance.createInventory(null, InventoryTag.maxSlots, title));
InventoryTag.trackTemporaryInventory(inventory);
return;
}
ItemStack[] contents = inventory.getContents();
if (inventory.getInventory().getType() == InventoryType.CHEST) {
inventory.setInventory(Bukkit.getServer().createInventory(null, inventory.getSize(), title));
inventory.setInventory(AdvancedTextImpl.instance.createInventory(null, inventory.getSize(), title));
}
else {
inventory.setInventory(Bukkit.getServer().createInventory(null, inventory.getInventory().getType(), title));
inventory.setInventory(AdvancedTextImpl.instance.createInventory(null, inventory.getInventory().getType(), title));
}
inventory.setContents(contents);
InventoryTag.trackTemporaryInventory(inventory);
Expand Down
@@ -0,0 +1,33 @@
package com.denizenscript.denizen.utilities;

import com.denizenscript.denizen.nms.NMSHandler;
import org.bukkit.Bukkit;
import org.bukkit.entity.Entity;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder;

public class AdvancedTextImpl {

public static AdvancedTextImpl instance = new AdvancedTextImpl();

public Inventory createInventory(InventoryHolder holder, int slots, String title) {
return Bukkit.getServer().createInventory(holder, slots, title);
}

public Inventory createInventory(InventoryHolder holder, InventoryType type, String title) {
return Bukkit.getServer().createInventory(holder, type, title);
}

public String getTitle(Inventory inventory) {
return NMSHandler.getInstance().getTitle(inventory);
}

public void setCustomName(Entity entity, String name) {
entity.setCustomName(name);
}

public String getCustomName(Entity entity) {
return entity.getCustomName();
}
}
Expand Up @@ -33,6 +33,8 @@ public class FormattedTextHelper {
// Also be aware that click events, hover events, etc. are exclusively limited to the chat bar and the pages of books, as you cannot mouse over anything else.
//
// Also note that RGB colors use a format that Spigot invented, meaning they will work in places that use Spigot's parser OR Denizen's version, but nowhere that uses the vanilla format still.
//
// Thanks to Paper's implementation of component APIs where Spigot was too lazy to, Paper servers have advanced text formatting available in more areas.
// -->


Expand Down

0 comments on commit 9e160f7

Please sign in to comment.