fancyholograms v3: Add offset when npc has the pose attribute set to sitting

This commit is contained in:
Oliver
2025-07-30 18:37:45 +02:00
parent 20951b02ff
commit 982d9db32c
2 changed files with 19 additions and 6 deletions

View File

@@ -1,13 +1,15 @@
package com.fancyinnovations.fancyholograms.controller; package com.fancyinnovations.fancyholograms.controller;
import com.google.common.cache.CacheBuilder;
import com.fancyinnovations.fancyholograms.api.HologramController; import com.fancyinnovations.fancyholograms.api.HologramController;
import com.fancyinnovations.fancyholograms.api.data.DisplayHologramData; import com.fancyinnovations.fancyholograms.api.data.DisplayHologramData;
import com.fancyinnovations.fancyholograms.api.data.HologramData; import com.fancyinnovations.fancyholograms.api.data.HologramData;
import com.fancyinnovations.fancyholograms.api.data.TextHologramData; import com.fancyinnovations.fancyholograms.api.data.TextHologramData;
import com.fancyinnovations.fancyholograms.api.hologram.Hologram; import com.fancyinnovations.fancyholograms.api.hologram.Hologram;
import com.fancyinnovations.fancyholograms.main.FancyHologramsPlugin; import com.fancyinnovations.fancyholograms.main.FancyHologramsPlugin;
import com.google.common.cache.CacheBuilder;
import de.oliver.fancynpcs.api.FancyNpcsPlugin; import de.oliver.fancynpcs.api.FancyNpcsPlugin;
import de.oliver.fancynpcs.api.Npc;
import de.oliver.fancynpcs.api.NpcAttribute;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@@ -16,6 +18,7 @@ import org.jetbrains.annotations.NotNull;
import org.joml.Vector3f; import org.joml.Vector3f;
import java.time.Duration; import java.time.Duration;
import java.util.Map;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
public class HologramControllerImpl implements HologramController { public class HologramControllerImpl implements HologramController {
@@ -166,12 +169,12 @@ public class HologramControllerImpl implements HologramController {
* @param hologram The hologram to sync. * @param hologram The hologram to sync.
*/ */
public void syncHologramWithNpc(@NotNull final Hologram hologram) { public void syncHologramWithNpc(@NotNull final Hologram hologram) {
final var linkedNpcName = hologram.getData().getLinkedNpcName(); String linkedNpcName = hologram.getData().getLinkedNpcName();
if (linkedNpcName == null) { if (linkedNpcName == null) {
return; return;
} }
final var npc = FancyNpcsPlugin.get().getNpcManager().getNpc(linkedNpcName); Npc npc = FancyNpcsPlugin.get().getNpcManager().getNpc(linkedNpcName);
if (npc == null) { if (npc == null) {
return; return;
} }
@@ -180,13 +183,23 @@ public class HologramControllerImpl implements HologramController {
npc.getData().setShowInTab(false); npc.getData().setShowInTab(false);
npc.updateForAll(); npc.updateForAll();
final var npcScale = npc.getData().getScale(); float npcScale = npc.getData().getScale();
if (hologram.getData() instanceof DisplayHologramData displayData) { if (hologram.getData() instanceof DisplayHologramData displayData) {
displayData.setScale(new Vector3f(npcScale)); displayData.setScale(new Vector3f(npcScale));
} }
final var location = npc.getData().getLocation().clone().add(0, (npc.getEyeHeight() * npcScale) + (0.5 * npcScale), 0); Location location = npc.getData().getLocation().clone().add(0, (npc.getEyeHeight() * npcScale) + (0.5 * npcScale), 0);
for (Map.Entry<NpcAttribute, String> entry : npc.getData().getAttributes().entrySet()) {
NpcAttribute attribute = entry.getKey();
String value = entry.getValue();
if (attribute.getName().equalsIgnoreCase("pose") && value.equalsIgnoreCase("sitting")) {
location.subtract(0, 0.5 * npcScale, 0);
}
}
hologram.getData().setLocation(location); hologram.getData().setLocation(location);
} }
} }

View File

@@ -34,7 +34,7 @@ public final class NpcListener implements Listener {
final var holograms = this.plugin.getRegistry().getAll(); final var holograms = this.plugin.getRegistry().getAll();
switch (event.getModification()) { switch (event.getModification()) {
case TYPE, LOCATION, SCALE -> { case TYPE, LOCATION, SCALE, ATTRIBUTE -> {
final var needsToBeUpdated = holograms.stream() final var needsToBeUpdated = holograms.stream()
.filter(hologram -> event.getNpc().getData().getName().equals(hologram.getData().getLinkedNpcName())) .filter(hologram -> event.getNpc().getData().getName().equals(hologram.getData().getLinkedNpcName()))
.toList(); .toList();