diff --git a/src/main/java/com/mattmx/nametags/config/ConfigDefaultsListener.java b/src/main/java/com/mattmx/nametags/config/ConfigDefaultsListener.java index 2ff96ee..d8c823f 100644 --- a/src/main/java/com/mattmx/nametags/config/ConfigDefaultsListener.java +++ b/src/main/java/com/mattmx/nametags/config/ConfigDefaultsListener.java @@ -6,6 +6,7 @@ import com.mattmx.nametags.entity.trait.SneakTrait; import com.mattmx.nametags.event.NameTagEntityCreateEvent; import me.tofaa.entitylib.meta.display.AbstractDisplayMeta; +import org.bukkit.Bukkit; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -25,8 +26,22 @@ public ConfigDefaultsListener(@NotNull NameTags plugin) { .getEntityManager() .setDefaultProvider(((entity, meta) -> { meta.setUseDefaultBackground(false); - meta.setTransformationInterpolationDuration(5); - meta.setPositionRotationInterpolationDuration(5); + + // Version-specific interpolation handling + String version = Bukkit.getMinecraftVersion(); + int defaultTransformation = 10; + int defaultPositionRotation = 10; + + // For 1.21.5+ use higher interpolation values for smoother movement + if (isVersion1215OrLater(version)) { + defaultTransformation = 15; + defaultPositionRotation = 15; + } + + int transformationDuration = plugin.getConfig().getInt("options.interpolation.transformation-duration", defaultTransformation); + int positionRotationDuration = plugin.getConfig().getInt("options.interpolation.position-rotation-duration", defaultPositionRotation); + meta.setTransformationInterpolationDuration(transformationDuration); + meta.setPositionRotationInterpolationDuration(positionRotationDuration); TextDisplayMetaConfiguration.applyMeta(defaultSection(), meta); })); } @@ -109,4 +124,24 @@ public void registerDefaultRefreshListener(@NotNull NameTagEntity tag, long refr ); } + private boolean isVersion1215OrLater(String version) { + try { + // Parse version string like "1.21.5" or "1.21" + String[] parts = version.split("\\."); + if (parts.length >= 2) { + int major = Integer.parseInt(parts[0]); + int minor = Integer.parseInt(parts[1]); + int patch = parts.length > 2 ? Integer.parseInt(parts[2]) : 0; + + if (major > 1) return true; + if (major == 1 && minor > 21) return true; + if (major == 1 && minor == 21 && patch >= 5) return true; + } + } catch (NumberFormatException e) { + // If we can't parse the version, assume it's a newer version + return true; + } + return false; + } + } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 4174f6d..5de815f 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,6 +1,14 @@ options: threads: 2 relative-placeholders-support: true + # Interpolation settings for smoother movement (1.21.5+) + # Minecraft 1.21.5 changed how text display entities handle interpolation + # Higher values = smoother movement but slightly more delayed updates + # Lower values = more responsive but potentially choppy movement + # Recommended: 15-20 for 1.21.5+, 5-10 for older versions + interpolation: + transformation-duration: 15 + position-rotation-duration: 15 # Base default options applied first defaults: @@ -10,7 +18,8 @@ defaults: enabled: true # How often should we refresh tags (in milliseconds) # Do not go lower than 50ms (1 tick) or clients may be kicked. - refresh-every: 500 + # For 1.21.5+, consider using 250ms for smoother movement + refresh-every: 250 # Lines of text to display. text: - "%player_name%"