Skip to content

Commit

Permalink
use new hover api that doesn't work because spigot is bad
Browse files Browse the repository at this point in the history
  • Loading branch information
mcmonkey4eva committed Jul 13, 2020
1 parent 789b2ad commit 4560fed
Show file tree
Hide file tree
Showing 8 changed files with 120 additions and 40 deletions.
Expand Up @@ -11,6 +11,7 @@
import com.denizenscript.denizen.nms.abstracts.ProfileEditor;
import com.denizenscript.denizen.nms.abstracts.Sidebar;
import com.denizenscript.denizen.utilities.packets.DenizenPacketHandler;
import net.md_5.bungee.api.chat.HoverEvent;
import org.bukkit.Location;
import org.bukkit.block.Biome;
import org.bukkit.entity.Player;
Expand Down Expand Up @@ -169,4 +170,6 @@ public boolean isCorrectMappingsCode() {
public abstract int getPort();

public abstract String getTitle(Inventory inventory);

public abstract String stringForHover(HoverEvent hover);
}
Expand Up @@ -49,43 +49,31 @@ public RenameCommand() {

@Override
public void parseArgs(ScriptEntry scriptEntry) throws InvalidArgumentsException {

for (Argument arg : scriptEntry.getProcessedArgs()) {

if (!scriptEntry.hasObject("name")) {
scriptEntry.addObject("name", arg.asElement());
}

}

if (!scriptEntry.hasObject("name")) {
throw new InvalidArgumentsException("Must specify a name!");
}

if (Utilities.getEntryNPC(scriptEntry) == null || !Utilities.getEntryNPC(scriptEntry).isValid()) {
throw new InvalidArgumentsException("Must have a NPC attached!");
}
}

@Override
public void execute(final ScriptEntry scriptEntry) {

ElementTag name = scriptEntry.getElement("name");

if (scriptEntry.dbCallShouldDebug()) {

Debug.report(scriptEntry, getName(), name.debug());

}

NPC npc = Utilities.getEntryNPC(scriptEntry).getCitizen();

Location prev = npc.isSpawned() ? npc.getEntity().getLocation() : null;
npc.despawn(DespawnReason.PENDING_RESPAWN);
npc.setName(name.asString().length() > 128 ? name.asString().substring(0, 128) : name.asString());
if (prev != null) {
npc.spawn(prev);
}

}
}
@@ -1,11 +1,16 @@
package com.denizenscript.denizen.utilities;

import com.denizenscript.denizen.nms.NMSHandler;
import com.denizenscript.denizen.nms.NMSVersion;
import com.denizenscript.denizen.objects.EntityTag;
import com.denizenscript.denizen.objects.ItemTag;
import com.denizenscript.denizencore.utilities.CoreUtilities;
import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.chat.*;
import net.md_5.bungee.api.chat.hover.content.Content;
import net.md_5.bungee.api.chat.hover.content.Entity;
import net.md_5.bungee.api.chat.hover.content.Item;
import net.md_5.bungee.api.chat.hover.content.Text;

import java.util.ArrayList;
import java.util.List;
Expand Down Expand Up @@ -60,7 +65,7 @@ public static String stringify(BaseComponent component) {
boolean hasHover = component.getHoverEvent() != null;
if (hasHover) {
HoverEvent hover = component.getHoverEvent();
builder.append(ChatColor.COLOR_CHAR).append("[hover=").append(hover.getAction().name()).append(";").append(escape(stringify(hover.getValue()))).append("]");
builder.append(ChatColor.COLOR_CHAR).append("[hover=").append(hover.getAction().name()).append(";").append(escape(NMSHandler.getInstance().stringForHover(hover))).append("]");
}
boolean hasClick = component.getClickEvent() != null;
if (hasClick) {
Expand Down Expand Up @@ -205,27 +210,57 @@ else if (innardType.equals("hover")) {
}
TextComponent hoverableText = new TextComponent();
HoverEvent.Action action = HoverEvent.Action.valueOf(innardBase.get(1).toUpperCase());
BaseComponent[] hoverValue;
if (action == HoverEvent.Action.SHOW_ITEM) {
ItemTag item = ItemTag.valueOf(unescape(innardParts.get(0)), CoreUtilities.noDebugContext);
if (item == null) {
continue;
if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_16)) {
Content content;
if (action == HoverEvent.Action.SHOW_ITEM) {
ItemTag item = ItemTag.valueOf(unescape(innardParts.get(0)), CoreUtilities.noDebugContext);
if (item == null) {
continue;
}
// TODO: Why is there not a direct conversion method for Spigot ItemStack -> BungeeChat Item?
String itemNbt = NMSHandler.getItemHelper().getRawHoverText(item.getItemStack());
content = new Item(item.getItemStack().getType().getKey().toString(), item.getAmount(), net.md_5.bungee.api.chat.ItemTag.ofNbt(itemNbt));
}
// no ItemComponent?
hoverValue = new BaseComponent[] { new TextComponent(NMSHandler.getItemHelper().getRawHoverText(item.getItemStack())) };
}
else if (action == HoverEvent.Action.SHOW_ENTITY) {
EntityTag entity = EntityTag.valueOf(unescape(innardParts.get(0)), CoreUtilities.basicContext);
if (entity == null) {
continue;
else if (action == HoverEvent.Action.SHOW_ENTITY) {
EntityTag entity = EntityTag.valueOf(unescape(innardParts.get(0)), CoreUtilities.basicContext);
if (entity == null) {
continue;
}
BaseComponent name = null;
if (entity.getBukkitEntity() != null && entity.getBukkitEntity().isCustomNameVisible()) {
name = new TextComponent();
for (BaseComponent component : parse(entity.getBukkitEntity().getCustomName())) {
name.addExtra(component);
}
}
content = new Entity(entity.getBukkitEntityType().getKey().toString(), entity.getUUID().toString(), name);
}
else {
content = new Text(parse(unescape(innardParts.get(0))));
}
// no EntityComponent?
hoverValue = new BaseComponent[] { new TextComponent(NMSHandler.getEntityHelper().getRawHoverText(entity.getBukkitEntity())) };
hoverableText.setHoverEvent(new HoverEvent(action, content));
}
else {
hoverValue = parse(unescape(innardParts.get(0)));
BaseComponent[] hoverValue;
if (action == HoverEvent.Action.SHOW_ITEM) {
ItemTag item = ItemTag.valueOf(unescape(innardParts.get(0)), CoreUtilities.noDebugContext);
if (item == null) {
continue;
}
hoverValue = new BaseComponent[] {new TextComponent(NMSHandler.getItemHelper().getRawHoverText(item.getItemStack()))};
}
else if (action == HoverEvent.Action.SHOW_ENTITY) {
EntityTag entity = EntityTag.valueOf(unescape(innardParts.get(0)), CoreUtilities.basicContext);
if (entity == null) {
continue;
}
hoverValue = new BaseComponent[] {new TextComponent(NMSHandler.getEntityHelper().getRawHoverText(entity.getBukkitEntity()))};
}
else {
hoverValue = parse(unescape(innardParts.get(0)));
}
hoverableText.setHoverEvent(new HoverEvent(action, hoverValue));
}
hoverableText.setHoverEvent(new HoverEvent(action, hoverValue));
for (BaseComponent subComponent : parse(str.substring(endBracket + 1, endIndex))) {
hoverableText.addExtra(subComponent);
}
Expand Down
Expand Up @@ -11,6 +11,7 @@
import com.denizenscript.denizen.nms.util.PlayerProfile;
import com.denizenscript.denizen.nms.util.jnbt.CompoundTag;
import com.denizenscript.denizen.nms.util.jnbt.Tag;
import com.denizenscript.denizen.utilities.FormattedTextHelper;
import com.denizenscript.denizen.utilities.packets.DenizenPacketHandler;
import com.google.common.collect.Iterables;
import com.mojang.authlib.GameProfile;
Expand All @@ -20,6 +21,7 @@
import com.denizenscript.denizen.nms.abstracts.ProfileEditor;
import com.denizenscript.denizen.nms.abstracts.Sidebar;
import com.denizenscript.denizencore.utilities.debugging.Debug;
import net.md_5.bungee.api.chat.HoverEvent;
import net.minecraft.server.v1_13_R2.MinecraftServer;
import org.bukkit.Bukkit;
import org.bukkit.Location;
Expand Down Expand Up @@ -173,4 +175,9 @@ public ProfileEditor getProfileEditor() {
public BiomeNMS getBiomeNMS(Biome biome) {
return new BiomeNMSImpl(biome);
}

@Override
public String stringForHover(HoverEvent hover) {
return FormattedTextHelper.stringify(hover.getValue());
}
}
Expand Up @@ -10,6 +10,7 @@
import com.denizenscript.denizen.nms.v1_14.impl.jnbt.CompoundTagImpl;
import com.denizenscript.denizen.nms.v1_14.impl.network.handlers.DenizenPacketListenerImpl;
import com.denizenscript.denizen.nms.util.jnbt.Tag;
import com.denizenscript.denizen.utilities.FormattedTextHelper;
import com.denizenscript.denizen.utilities.packets.DenizenPacketHandler;
import com.google.common.collect.Iterables;
import com.mojang.authlib.GameProfile;
Expand All @@ -19,6 +20,7 @@
import com.denizenscript.denizen.nms.util.jnbt.CompoundTag;
import com.denizenscript.denizencore.utilities.CoreUtilities;
import com.denizenscript.denizencore.utilities.debugging.Debug;
import net.md_5.bungee.api.chat.HoverEvent;
import net.minecraft.server.v1_14_R1.Entity;
import net.minecraft.server.v1_14_R1.IInventory;
import net.minecraft.server.v1_14_R1.INamableTileEntity;
Expand Down Expand Up @@ -215,4 +217,9 @@ public ProfileEditor getProfileEditor() {
public BiomeNMS getBiomeNMS(Biome biome) {
return new BiomeNMSImpl(biome);
}

@Override
public String stringForHover(HoverEvent hover) {
return FormattedTextHelper.stringify(hover.getValue());
}
}
Expand Up @@ -10,6 +10,7 @@
import com.denizenscript.denizen.nms.v1_15.impl.jnbt.CompoundTagImpl;
import com.denizenscript.denizen.nms.v1_15.impl.network.handlers.DenizenPacketListenerImpl;
import com.denizenscript.denizen.nms.util.jnbt.Tag;
import com.denizenscript.denizen.utilities.FormattedTextHelper;
import com.denizenscript.denizen.utilities.packets.DenizenPacketHandler;
import com.google.common.collect.Iterables;
import com.mojang.authlib.GameProfile;
Expand All @@ -19,6 +20,7 @@
import com.denizenscript.denizen.nms.util.jnbt.CompoundTag;
import com.denizenscript.denizencore.utilities.CoreUtilities;
import com.denizenscript.denizencore.utilities.debugging.Debug;
import net.md_5.bungee.api.chat.HoverEvent;
import net.minecraft.server.v1_15_R1.Entity;
import net.minecraft.server.v1_15_R1.IInventory;
import net.minecraft.server.v1_15_R1.INamableTileEntity;
Expand Down Expand Up @@ -215,4 +217,9 @@ public ProfileEditor getProfileEditor() {
public BiomeNMS getBiomeNMS(Biome biome) {
return new BiomeNMSImpl(biome);
}

@Override
public String stringForHover(HoverEvent hover) {
return FormattedTextHelper.stringify(hover.getValue());
}
}
Expand Up @@ -10,6 +10,8 @@
import com.denizenscript.denizen.nms.v1_16.impl.jnbt.CompoundTagImpl;
import com.denizenscript.denizen.nms.v1_16.impl.network.handlers.DenizenPacketListenerImpl;
import com.denizenscript.denizen.nms.util.jnbt.Tag;
import com.denizenscript.denizen.objects.ItemTag;
import com.denizenscript.denizen.utilities.FormattedTextHelper;
import com.denizenscript.denizen.utilities.packets.DenizenPacketHandler;
import com.google.common.collect.Iterables;
import com.mojang.authlib.GameProfile;
Expand All @@ -19,10 +21,12 @@
import com.denizenscript.denizen.nms.util.jnbt.CompoundTag;
import com.denizenscript.denizencore.utilities.CoreUtilities;
import com.denizenscript.denizencore.utilities.debugging.Debug;
import net.minecraft.server.v1_16_R1.Entity;
import net.minecraft.server.v1_16_R1.IInventory;
import net.minecraft.server.v1_16_R1.INamableTileEntity;
import net.minecraft.server.v1_16_R1.MinecraftServer;
import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.api.chat.HoverEvent;
import net.md_5.bungee.api.chat.hover.content.Content;
import net.md_5.bungee.api.chat.hover.content.Item;
import net.md_5.bungee.api.chat.hover.content.Text;
import net.minecraft.server.v1_16_R1.*;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.block.Biome;
Expand All @@ -34,6 +38,7 @@
import org.bukkit.craftbukkit.v1_16_R1.util.CraftMagicNumbers;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.spigotmc.AsyncCatcher;

import java.lang.reflect.Field;
Expand Down Expand Up @@ -215,4 +220,35 @@ public ProfileEditor getProfileEditor() {
public BiomeNMS getBiomeNMS(Biome biome) {
return new BiomeNMSImpl(biome);
}

@Override
public String stringForHover(HoverEvent hover) {
if (hover.getContents().isEmpty()) {
return "";
}
Content contentObject = hover.getContents().get(0);
if (contentObject instanceof Text) {
Object value = ((Text) contentObject).getValue();
if (value instanceof BaseComponent[]) {
return FormattedTextHelper.stringify((BaseComponent[]) value);
}
else {
return value.toString();
}
}
else if (contentObject instanceof Item) {
Item item = (Item) contentObject;
ItemStack itemStack = new ItemStack(org.bukkit.Material.getMaterial(item.getId()), item.getCount());
// TODO: Apply tag somehow
return new ItemTag(itemStack).identify();
}
else if (contentObject instanceof net.md_5.bungee.api.chat.hover.content.Entity) {
net.md_5.bungee.api.chat.hover.content.Entity entity = (net.md_5.bungee.api.chat.hover.content.Entity) contentObject;
// TODO: Maybe a stabler way of doing this?
return "e@" + entity.getId();
}
else {
throw new UnsupportedOperationException();
}
}
}
Expand Up @@ -170,14 +170,11 @@ public String getJsonString(ItemStack itemStack) {

@Override
public String getRawHoverText(ItemStack itemStack) {
throw new UnsupportedOperationException();
// TODO: 1.16
/*
if (itemStack == null || itemStack.getType() == Material.AIR) {
return "";
NBTTagCompound tag = CraftItemStack.asNMSCopy(itemStack).getTag();
if (tag == null) {
return null;
}
return CraftItemStack.asNMSCopy(itemStack).C().getChatModifier().getHoverEvent().b().getText();
*/
return tag.toString();
}

@Override
Expand Down

0 comments on commit 4560fed

Please sign in to comment.