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 3c515d08..fa5078f8 100644 --- a/bukkit/src/main/java/net/william278/husksync/data/BukkitData.java +++ b/bukkit/src/main/java/net/william278/husksync/data/BukkitData.java @@ -571,9 +571,9 @@ public abstract class BukkitData implements Data { final AttributeSettings settings = plugin.getSettings().getSynchronization().getAttributes(); Registry.ATTRIBUTE.forEach(id -> { final AttributeInstance instance = player.getAttribute(id); - if (instance == null || Double.compare(instance.getValue(), instance.getDefaultValue()) == 0 - || settings.isIgnoredAttribute(id.getKey().toString())) { - return; // We don't sync unmodified or disabled attributes + if (!settings.isSyncedAttribute(id.getKey().toString()) || instance == null + || Double.compare(instance.getValue(), instance.getDefaultValue()) == 0) { + return; // We don't sync attributes not marked as to be synced } attributes.add(adapt(instance, settings)); }); 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 e087ffd0..ad5ce3e6 100644 --- a/common/src/main/java/net/william278/husksync/config/Settings.java +++ b/common/src/main/java/net/william278/husksync/config/Settings.java @@ -275,12 +275,19 @@ public class Settings { @NoArgsConstructor(access = AccessLevel.PRIVATE) public static class AttributeSettings { - @Comment({"Which attributes should not be saved when syncing users. Supports wildcard matching.", + @Comment({"Which attribute types should be saved as part of attribute syncing. Supports wildcard matching.", "(e.g. ['minecraft:generic.max_health', 'minecraft:generic.*'])"}) @Getter(AccessLevel.NONE) - private List ignoredAttributes = new ArrayList<>(List.of("")); + private List syncedAttributes = new ArrayList<>(List.of( + "minecraft:generic.max_health", "minecraft:max_health", + "minecraft:generic.max_absorption", "minecraft:max_absorption", + "minecraft:generic.luck", "minecraft:luck", + "minecraft:generic.scale", "minecraft:scale", + "minecraft:generic.step_height", "minecraft:step_height", + "minecraft:generic.gravity", "minecraft:gravity" + )); - @Comment({"Which modifiers should not be saved when syncing users. Supports wildcard matching.", + @Comment({"Which attribute modifiers should be saved. Supports wildcard matching.", "(e.g. ['minecraft:effect.speed', 'minecraft:effect.*'])"}) @Getter(AccessLevel.NONE) private List ignoredModifiers = new ArrayList<>(List.of( @@ -297,8 +304,8 @@ public class Settings { return pat.contains("*") ? value.matches(pat.replace("*", ".*")) : pat.equals(value); } - public boolean isIgnoredAttribute(@NotNull String attribute) { - return ignoredAttributes.stream().anyMatch(wildcard -> matchesWildcard(wildcard, attribute)); + public boolean isSyncedAttribute(@NotNull String attribute) { + return syncedAttributes.stream().anyMatch(wildcard -> matchesWildcard(wildcard, attribute)); } public boolean isIgnoredModifier(@NotNull String modifier) { diff --git a/docs/Config-File.md b/docs/Config-File.md index e3805eb2..a992e6ff 100644 --- a/docs/Config-File.md +++ b/docs/Config-File.md @@ -136,10 +136,22 @@ synchronization: - '*' # Configuration for how to sync attributes attributes: - # Which attributes should not be saved when syncing users. Supports wildcard matching. + # Which attribute types should be saved as part of attribute syncing. Supports wildcard matching. # (e.g. ['minecraft:generic.max_health', 'minecraft:generic.*']) - ignored_attributes: [] - # Which modifiers should not be saved when syncing users. Supports wildcard matching. + synced_attributes: + - "minecraft:generic.max_health" + - "minecraft:max_health" + - "minecraft:generic.max_absorption" + - "minecraft:max_absorption" + - "minecraft:generic.luck" + - "minecraft:luck" + - "minecraft:generic.scale" + - "minecraft:scale" + - "minecraft:generic.step_height" + - "minecraft:step_height" + - "minecraft:generic.gravity" + - "minecraft:gravity" + # Which attribute modifiers should not be saved when syncing users. Supports wildcard matching. # (e.g. ['minecraft:effect.speed', 'minecraft:effect.*']) ignored_modifiers: ['minecraft:effect.*', 'minecraft:creative_mode_*'] # Event priorities for listeners (HIGHEST, NORMAL, LOWEST). Change if you encounter plugin conflicts