From bdc2264fc6127fe0fe2f222cd9b30f74cf6b42f5 Mon Sep 17 00:00:00 2001 From: fullwall Date: Mon, 20 Mar 2023 17:28:17 +0800 Subject: [PATCH] Enable text display by default --- .../net/citizensnpcs/trait/HologramTrait.java | 32 ++++++++++++------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/main/src/main/java/net/citizensnpcs/trait/HologramTrait.java b/main/src/main/java/net/citizensnpcs/trait/HologramTrait.java index ef8ab34ba..9daa2007e 100644 --- a/main/src/main/java/net/citizensnpcs/trait/HologramTrait.java +++ b/main/src/main/java/net/citizensnpcs/trait/HologramTrait.java @@ -9,8 +9,10 @@ import java.util.stream.Collectors; import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.entity.Display.Billboard; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; +import org.bukkit.entity.TextDisplay; import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.inventory.ItemStack; @@ -46,7 +48,7 @@ public class HologramTrait extends Trait { private NPC nameNPC; private final NPCRegistry registry = CitizensAPI.createCitizensBackedNPCRegistry(new MemoryNPCDataStore()); private int t; - private boolean useTextDisplay = false; + private boolean useTextDisplay = SUPPORTS_TEXT_DISPLAY; public HologramTrait() { super("hologramtrait"); @@ -91,6 +93,7 @@ public class HologramTrait extends Trait { NPC hologramNPC = null; if (useTextDisplay) { hologramNPC = registry.createNPC(EntityType.TEXT_DISPLAY, line); + hologramNPC.addTrait(new ClickRedirectTrait(npc)); } else { hologramNPC = registry.createNPC(EntityType.ARMOR_STAND, line); hologramNPC.getOrAddTrait(ArmorStandTrait.class).setAsHelperEntityWithName(npc); @@ -104,6 +107,10 @@ public class HologramTrait extends Trait { + (direction == HologramDirection.BOTTOM_UP ? heightOffset : getMaxHeight() - heightOffset), 0)); + if (useTextDisplay) { + ((TextDisplay) hologramNPC.getEntity()).setBillboard(Billboard.CENTER); + } + Matcher itemMatcher = ITEM_MATCHER.matcher(line); if (itemMatcher.matches()) { Material item = SpigotUtil.isUsing1_13API() ? Material.matchMaterial(itemMatcher.group(1), false) @@ -141,7 +148,7 @@ public class HologramTrait extends Trait { private double getHeight(int lineNumber) { double base = (lastNameplateVisible ? 0 : -getLineHeight()); if (useTextDisplay) { - base += 0.15; + base += 0.27; } for (int i = 0; i <= lineNumber; i++) { HologramLine line = lines.get(i); @@ -186,11 +193,6 @@ public class HologramTrait extends Trait { return nameNPC != null && nameNPC.isSpawned() ? nameNPC.getEntity() : null; } - private double getRotationDistance(Location loc) { - return Math.abs(loc.getYaw() - npc.getStoredLocation().getYaw()) - + Math.abs(loc.getPitch() - npc.getStoredLocation().getPitch()); - } - @Override public void load(DataKey root) { clear(); @@ -284,8 +286,7 @@ public class HologramTrait extends Trait { boolean updatePosition = currentLoc.getWorld() != npc.getStoredLocation().getWorld() || currentLoc.distance(npc.getStoredLocation()) >= 0.001 || lastNameplateVisible != nameplateVisible - || Math.abs(lastEntityHeight - getEntityHeight()) >= 0.05 - || (useTextDisplay && getRotationDistance(currentLoc) >= 0.001); + || Math.abs(lastEntityHeight - getEntityHeight()) >= 0.05; boolean updateName = false; if (t++ >= Setting.HOLOGRAM_UPDATE_RATE.asTicks() + Util.getFastRandom().nextInt(3) /* add some jitter */) { t = 0; @@ -396,8 +397,9 @@ public class HologramTrait extends Trait { reloadLineHolograms(); } - public void setUseTextDisplay(boolean useTextDisplay) { - this.useTextDisplay = useTextDisplay; + public void setUseTextDisplay(boolean use) { + this.useTextDisplay = use; + reloadLineHolograms(); } public enum HologramDirection { @@ -448,4 +450,12 @@ public class HologramTrait extends Trait { } private static final Pattern ITEM_MATCHER = Pattern.compile(""); + private static boolean SUPPORTS_TEXT_DISPLAY = false; + static { + try { + EntityType.valueOf("TEXT_DISPLAY"); + SUPPORTS_TEXT_DISPLAY = true; + } catch (IllegalArgumentException iae) { + } + } }