diff --git a/src/main/java/com/mattmx/nametags/EventsListener.java b/src/main/java/com/mattmx/nametags/EventsListener.java index 3fc25d7..0764262 100644 --- a/src/main/java/com/mattmx/nametags/EventsListener.java +++ b/src/main/java/com/mattmx/nametags/EventsListener.java @@ -1,11 +1,7 @@ package com.mattmx.nametags; -import com.mattmx.nametags.config.TextDisplayMetaConfiguration; import com.mattmx.nametags.entity.NameTagEntity; -import com.mattmx.nametags.entity.trait.RefreshTrait; import com.mattmx.nametags.entity.trait.SneakTrait; -import com.mattmx.nametags.event.NameTagEntityCreateEvent; -import org.bukkit.Color; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerChangedWorldEvent; @@ -18,11 +14,10 @@ public class EventsListener implements Listener { @EventHandler public void onPlayerJoin(@NotNull PlayerJoinEvent event) { - final NameTagEntity tag = NameTags.getInstance() + NameTags.getInstance() .getEntityManager() - .getOrCreateNameTagEntity(event.getPlayer()); - - tag.updateVisibility(); + .getOrCreateNameTagEntity(event.getPlayer()) + .updateVisibility(); } @EventHandler diff --git a/src/main/java/com/mattmx/nametags/NameTags.java b/src/main/java/com/mattmx/nametags/NameTags.java index 5c5033f..badb7a5 100644 --- a/src/main/java/com/mattmx/nametags/NameTags.java +++ b/src/main/java/com/mattmx/nametags/NameTags.java @@ -12,6 +12,7 @@ import org.bukkit.Bukkit; import org.bukkit.Color; import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.event.HandlerList; import org.bukkit.permissions.Permission; import org.bukkit.plugin.java.JavaPlugin; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/mattmx/nametags/config/ConfigDefaultsListener.java b/src/main/java/com/mattmx/nametags/config/ConfigDefaultsListener.java index 4154f5d..ff31072 100644 --- a/src/main/java/com/mattmx/nametags/config/ConfigDefaultsListener.java +++ b/src/main/java/com/mattmx/nametags/config/ConfigDefaultsListener.java @@ -32,12 +32,20 @@ private ConfigurationSection defaultSection() { public void onCreate(@NotNull NameTagEntityCreateEvent event) { if (!(event.getNameTag().getBukkitEntity() instanceof Player player)) return; + // By default, we shouldn't notify until we have finished processing. + event.getNameTag() + .getPassenger() + .getEntityMeta() + .setNotifyAboutChanges(false); + + long refreshMillis = plugin.getConfig().getLong("defaults.refresh-every", 50); + event.getNameTag() .getTraits() .getOrAddTrait(RefreshTrait.class, () -> - RefreshTrait.ofSeconds( - NameTags.getInstance(), - 1L, + RefreshTrait.ofMillis( + plugin, + refreshMillis, (entity) -> { TextDisplayMetaConfiguration.applyMeta(defaultSection(), entity.getMeta()); TextDisplayMetaConfiguration.applyTextMeta(defaultSection(), entity.getMeta(), player, player); @@ -52,13 +60,13 @@ public void onCreate(@NotNull NameTagEntityCreateEvent event) { TextDisplayMetaConfiguration.applyTextMeta(e.getValue(), entity.getMeta(), player, player); }); - entity.updateVisibility(); if (entity.getMeta().getBillboardConstraints() == AbstractDisplayMeta.BillboardConstraints.CENTER) { // Look passenger down to remove debug getting in the way entity.getPassenger().rotateHead(0f, 90f); } + entity.updateVisibility(); entity.getPassenger().refresh(); } ) diff --git a/src/main/java/com/mattmx/nametags/entity/trait/RefreshTrait.java b/src/main/java/com/mattmx/nametags/entity/trait/RefreshTrait.java index fb13a34..e5ee3db 100644 --- a/src/main/java/com/mattmx/nametags/entity/trait/RefreshTrait.java +++ b/src/main/java/com/mattmx/nametags/entity/trait/RefreshTrait.java @@ -46,8 +46,12 @@ public void onDestroy() { return new RefreshTrait(plugin, seconds, TimeUnit.SECONDS, update); } + public static @NotNull RefreshTrait ofMillis(@NotNull JavaPlugin plugin, long millis, Consumer update) { + return new RefreshTrait(plugin, millis, TimeUnit.MILLISECONDS, update); + } + public static @NotNull RefreshTrait ofTicks(@NotNull JavaPlugin plugin, long ticks, Consumer update) { - return new RefreshTrait(plugin, ticks * 50, TimeUnit.MILLISECONDS, update); + return ofMillis(plugin, ticks * 50, update); } } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index e8f675e..3719f0e 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -9,6 +9,8 @@ sneak: defaults: # If not enabled then plugin simulates vanilla name tags enabled: true + # How often should we refresh tags (in milliseconds) + refresh-every: 50 text: - "%player_name%" - "%player_ping%ms"