diff --git a/bukkit/src/main/java/net/william278/husksync/data/BukkitData.java b/bukkit/src/main/java/net/william278/husksync/data/BukkitData.java index ff565756..ab2f5894 100644 --- a/bukkit/src/main/java/net/william278/husksync/data/BukkitData.java +++ b/bukkit/src/main/java/net/william278/husksync/data/BukkitData.java @@ -678,12 +678,14 @@ public abstract class BukkitData implements Data { private List attributes; @NotNull - public static BukkitData.Attributes adapt(@NotNull Player player) { + public static BukkitData.Attributes adapt(@NotNull Player player, @NotNull HuskSync plugin) { final List attributes = Lists.newArrayList(); Registry.ATTRIBUTE.forEach(id -> { final AttributeInstance instance = player.getAttribute(id); - if (instance == null || instance.getValue() == instance.getDefaultValue()) { - return; // We don't sync unmodified attributes + if (instance == null || instance.getValue() == instance.getDefaultValue() || plugin + .getSettings().getSynchronization().isIgnoredAttribute(id.getKey().toString())) { + // We don't sync unmodified or disabled attributes + return; } attributes.add(adapt(instance)); }); diff --git a/bukkit/src/main/java/net/william278/husksync/data/BukkitUserDataHolder.java b/bukkit/src/main/java/net/william278/husksync/data/BukkitUserDataHolder.java index 32f6ac12..da51ff32 100644 --- a/bukkit/src/main/java/net/william278/husksync/data/BukkitUserDataHolder.java +++ b/bukkit/src/main/java/net/william278/husksync/data/BukkitUserDataHolder.java @@ -121,7 +121,7 @@ public interface BukkitUserDataHolder extends UserDataHolder { @NotNull @Override default Optional getAttributes() { - return Optional.of(BukkitData.Attributes.adapt(getBukkitPlayer())); + return Optional.of(BukkitData.Attributes.adapt(getBukkitPlayer(), getPlugin())); } @NotNull diff --git a/common/src/main/java/net/william278/husksync/config/Settings.java b/common/src/main/java/net/william278/husksync/config/Settings.java index b252f329..04e5f4ff 100644 --- a/common/src/main/java/net/william278/husksync/config/Settings.java +++ b/common/src/main/java/net/william278/husksync/config/Settings.java @@ -255,9 +255,6 @@ public class Settings { @Comment("Persist maps locked in a Cartography Table to let them be viewed on any server") private boolean persistLockedMaps = true; - @Comment("Whether to synchronize player max health (requires health syncing to be enabled)") - private boolean synchronizeMaxHealth = true; - @Comment("If using the DELAY sync method, how long should this server listen for Redis key data updates before " + "pulling data from the database instead (i.e., if the user did not change servers).") private int networkLatencyMilliseconds = 500; @@ -273,6 +270,11 @@ public class Settings { @Getter(AccessLevel.NONE) private Map eventPriorities = EventListener.ListenerType.getDefaults(); + @Comment({"For attribute syncing, which attributes should be ignored/skipped when syncing", + "(e.g. \"minecraft:generic.max_health\", \"minecraft:generic.attack_damage\")"}) + @Getter(AccessLevel.NONE) + private List ignoredAttributes = new ArrayList<>(List.of("")); + public boolean doAutoPin(@NotNull DataSnapshot.SaveCause cause) { return autoPinnedSaveCauses.contains(cause.name()); } @@ -281,6 +283,10 @@ public class Settings { return id.isCustom() || features.getOrDefault(id.getKeyValue(), id.isEnabledByDefault()); } + public boolean isIgnoredAttribute(@NotNull String attribute) { + return ignoredAttributes.contains(attribute); + } + @NotNull public EventListener.Priority getEventPriority(@NotNull EventListener.ListenerType type) { try {