From f935a619585cd7bde23bbdce5e9612e8d4920367 Mon Sep 17 00:00:00 2001 From: XiaoMoMi <70987828+Xiao-MoMi@users.noreply.github.com> Date: Sun, 6 Oct 2024 22:42:27 +0800 Subject: [PATCH] improve shaders --- .../api/AbstractCNPlayer.java | 2 +- .../api/helper/AdventureHelper.java | 4 ++ .../customnameplates/api/network/Tracker.java | 13 ++--- .../internal/AdaptiveImageText.java | 24 +++++--- .../api/placeholder/internal/VanillaHud.java | 7 +-- .../feature/pack/ResourcePackManagerImpl.java | 34 ++++++----- .../placeholder/PlaceholderManagerImpl.java | 27 +++++++-- .../backend/storage/StorageManagerImpl.java | 6 +- .../shaders/core/rendertype_text.fsh | 9 ++- .../shaders/core/rendertype_text.fsh | 13 ++++- backend/src/main/resources/config.yml | 2 +- .../resources/configs/custom-placeholders.yml | 54 ++++++++++++++++-- .../src/main/resources/configs/nameplate.yml | 4 +- .../resources/contents/backgrounds/b0.png | Bin 1615 -> 120 bytes .../resources/contents/backgrounds/b1.png | Bin 1609 -> 115 bytes .../resources/contents/backgrounds/b128.png | Bin 1621 -> 148 bytes .../resources/contents/backgrounds/b16.png | Bin 1614 -> 124 bytes .../resources/contents/backgrounds/b2.png | Bin 1611 -> 117 bytes .../resources/contents/backgrounds/b32.png | Bin 1595 -> 131 bytes .../resources/contents/backgrounds/b4.png | Bin 1615 -> 118 bytes .../resources/contents/backgrounds/b64.png | Bin 1614 -> 139 bytes .../resources/contents/backgrounds/b8.png | Bin 1612 -> 121 bytes .../contents/backgrounds/bedrock_1.yml | 6 +- .../contents/backgrounds/bedrock_2.yml | 6 +- gradle.properties | 2 +- 25 files changed, 147 insertions(+), 66 deletions(-) diff --git a/api/src/main/java/net/momirealms/customnameplates/api/AbstractCNPlayer.java b/api/src/main/java/net/momirealms/customnameplates/api/AbstractCNPlayer.java index c71044f..ce77b84 100644 --- a/api/src/main/java/net/momirealms/customnameplates/api/AbstractCNPlayer.java +++ b/api/src/main/java/net/momirealms/customnameplates/api/AbstractCNPlayer.java @@ -421,7 +421,7 @@ public abstract class AbstractCNPlayer implements CNPlayer { @Override public Set getTrackedPassengerIds(CNPlayer another) { - return Optional.ofNullable(trackers.get(another)).map(tracker -> new HashSet<>(tracker.getPassengerIDs())).orElse(new HashSet<>()); + return Optional.ofNullable(trackers.get(another)).map(Tracker::getPassengerIDs).orElse(new HashSet<>()); } @Override diff --git a/api/src/main/java/net/momirealms/customnameplates/api/helper/AdventureHelper.java b/api/src/main/java/net/momirealms/customnameplates/api/helper/AdventureHelper.java index c8ff0a3..ff320f6 100644 --- a/api/src/main/java/net/momirealms/customnameplates/api/helper/AdventureHelper.java +++ b/api/src/main/java/net/momirealms/customnameplates/api/helper/AdventureHelper.java @@ -209,6 +209,10 @@ public class AdventureHelper { return "<#FFFEFD>" + text + ""; } + public static String removeShadow(String text) { + return "<#F0F0F0>" + text + ""; + } + /** * Surrounds text with a MiniMessage font tag. * diff --git a/api/src/main/java/net/momirealms/customnameplates/api/network/Tracker.java b/api/src/main/java/net/momirealms/customnameplates/api/network/Tracker.java index 9bcc288..786fbbd 100644 --- a/api/src/main/java/net/momirealms/customnameplates/api/network/Tracker.java +++ b/api/src/main/java/net/momirealms/customnameplates/api/network/Tracker.java @@ -19,9 +19,8 @@ package net.momirealms.customnameplates.api.network; import net.momirealms.customnameplates.api.CNPlayer; -import java.util.Collections; -import java.util.HashSet; -import java.util.Set; +import java.util.*; +import java.util.concurrent.CopyOnWriteArrayList; public class Tracker { @@ -29,7 +28,7 @@ public class Tracker { private double scale; private final CNPlayer tracker; - private final Set passengerIDs = Collections.synchronizedSet(new HashSet<>()); + private final CopyOnWriteArrayList passengerIDs = new CopyOnWriteArrayList<>(); /** * Constructs a new Tracker for the specified player. @@ -63,15 +62,15 @@ public class Tracker { } public void addPassengerID(int passengerID) { - passengerIDs.add(passengerID); + this.passengerIDs.add(passengerID); } public void removePassengerID(int passengerID) { - passengerIDs.remove(passengerID); + this.passengerIDs.remove((Object) passengerID); } public Set getPassengerIDs() { - return passengerIDs; + return new HashSet<>(passengerIDs); } public boolean isEmpty() { diff --git a/api/src/main/java/net/momirealms/customnameplates/api/placeholder/internal/AdaptiveImageText.java b/api/src/main/java/net/momirealms/customnameplates/api/placeholder/internal/AdaptiveImageText.java index 9631083..2336b4e 100644 --- a/api/src/main/java/net/momirealms/customnameplates/api/placeholder/internal/AdaptiveImageText.java +++ b/api/src/main/java/net/momirealms/customnameplates/api/placeholder/internal/AdaptiveImageText.java @@ -31,23 +31,25 @@ public class AdaptiveImageText { private final String id; private final String text; private final T t; - private final boolean removeShadow; + private final boolean removeShadowOld; + private final boolean removeShadowNew; private final PreParsedDynamicText preParsedDynamicText; private final int leftMargin; private final int rightMargin; - public AdaptiveImageText(String id, String text, T t, boolean removeShadow, int leftMargin, int rightMargin) { + public AdaptiveImageText(String id, String text, T t, boolean removeShadowOld, boolean removeShadowNew, int rightMargin, int leftMargin) { this.text = text; this.id = id; this.t = t; - this.removeShadow = removeShadow; + this.removeShadowOld = removeShadowOld; + this.removeShadowNew = removeShadowNew; this.preParsedDynamicText = new PreParsedDynamicText(text); this.leftMargin = leftMargin; this.rightMargin = rightMargin; } - public static AdaptiveImageText create(String id, final String text, final T t, final boolean removeShadow, int leftMargin, int rightMargin) { - return new AdaptiveImageText<>(id, text, t, removeShadow, leftMargin, rightMargin); + public static AdaptiveImageText create(String id, final String text, final T t, final boolean removeShadowOld, final boolean removeShadowNew, int leftMargin, int rightMargin) { + return new AdaptiveImageText<>(id, text, t, removeShadowOld, removeShadowNew, rightMargin, leftMargin); } public PreParsedDynamicText getPreParsedDynamicText() { @@ -71,8 +73,13 @@ public class AdaptiveImageText { String suffix = t.createImageSuffix(advance, leftMargin, rightMargin); String prefixWithFont = AdventureHelper.surroundWithNameplatesFont(prefix); String suffixWithFont = AdventureHelper.surroundWithNameplatesFont(suffix); - if (removeShadow) prefixWithFont = AdventureHelper.removeShadowTricky(prefixWithFont); - if (removeShadow) suffixWithFont = AdventureHelper.removeShadowTricky(suffixWithFont); + if (removeShadowOld) { + prefixWithFont = AdventureHelper.removeShadowTricky(prefixWithFont); + suffixWithFont = AdventureHelper.removeShadowTricky(suffixWithFont); + } else if (removeShadowNew) { + prefixWithFont = AdventureHelper.removeShadow(prefixWithFont); + suffixWithFont = AdventureHelper.removeShadow(suffixWithFont); + } return prefixWithFont + parsed + suffixWithFont; } @@ -83,7 +90,8 @@ public class AdaptiveImageText { float advance = CustomNameplates.getInstance().getAdvanceManager().getLineAdvance(parsed); String image = t.createImage(advance, leftMargin, rightMargin); String imageWithFont = AdventureHelper.surroundWithNameplatesFont(image); - if (removeShadow) imageWithFont = AdventureHelper.removeShadowTricky(imageWithFont); + if (removeShadowOld) imageWithFont = AdventureHelper.removeShadowTricky(imageWithFont); + else if (removeShadowNew) imageWithFont = AdventureHelper.removeShadow(imageWithFont); return imageWithFont; } diff --git a/api/src/main/java/net/momirealms/customnameplates/api/placeholder/internal/VanillaHud.java b/api/src/main/java/net/momirealms/customnameplates/api/placeholder/internal/VanillaHud.java index 0191c8b..59b55c8 100644 --- a/api/src/main/java/net/momirealms/customnameplates/api/placeholder/internal/VanillaHud.java +++ b/api/src/main/java/net/momirealms/customnameplates/api/placeholder/internal/VanillaHud.java @@ -34,13 +34,11 @@ public class VanillaHud { private final boolean reverse; private final PreParsedDynamicText current; private final PreParsedDynamicText max; - private final boolean removeShadow; - public VanillaHud(Image empty, Image half, Image full, boolean reverse, String current, String max, boolean removeShadow) { + public VanillaHud(Image empty, Image half, Image full, boolean reverse, String current, String max) { this.empty = String.valueOf(empty.character().character()) + OffsetFont.NEG_2.character(); this.half = String.valueOf(half.character().character()) + OffsetFont.NEG_2.character(); this.full = String.valueOf(full.character().character()) + OffsetFont.NEG_2.character(); - this.removeShadow = removeShadow; this.reverse = reverse; this.current = new PreParsedDynamicText(current); this.max = new PreParsedDynamicText(max); @@ -95,7 +93,6 @@ public class VanillaHud { .append(String.valueOf(half).repeat(half_amount)) .append(String.valueOf(empty).repeat(empty_amount)); } - return removeShadow ? AdventureHelper.removeShadowTricky(AdventureHelper.surroundWithNameplatesFont(builder.toString())) : - AdventureHelper.surroundWithNameplatesFont(builder.toString()); + return AdventureHelper.surroundWithNameplatesFont(builder.toString()); } } diff --git a/backend/src/main/java/net/momirealms/customnameplates/backend/feature/pack/ResourcePackManagerImpl.java b/backend/src/main/java/net/momirealms/customnameplates/backend/feature/pack/ResourcePackManagerImpl.java index f428136..e7427e1 100644 --- a/backend/src/main/java/net/momirealms/customnameplates/backend/feature/pack/ResourcePackManagerImpl.java +++ b/backend/src/main/java/net/momirealms/customnameplates/backend/feature/pack/ResourcePackManagerImpl.java @@ -487,41 +487,39 @@ public class ResourcePackManagerImpl implements ResourcePackManager { public static final String Nameplates_Shader_1_20_5 = "if (Color.xyz == vec3(255., 254., 253.) / 255.) {\n" + - " vertexColor = Color*texelFetch(Sampler2, UV2 / 16, 0);\n" + + " vertexColor = Color * texelFetch(Sampler2, UV2 / 16, 0);\n" + " vertex.y += 1;\n" + " vertex.x += 1;\n" + " gl_Position = ProjMat * ModelViewMat * vertex;\n" + - " } else if (Color.xyz == vec3(254., 254., 254.) / 255.) {\n" + - " vertexColor = Color*texelFetch(Sampler2, UV2 / 16, 0);\n" + - " vertex.z *= 1.001;\n" + - " vertex.x *= 1.001;\n" + + " } else if (Color.xyz == vec3(240., 240., 240.) / 255.) {\n" + + " vertexColor = Color * texelFetch(Sampler2, UV2 / 16, 0);\n" + + " vertexColor.rgb = texelFetch(Sampler2, UV2 / 16, 0).rgb;\n" + " gl_Position = ProjMat * ModelViewMat * vertex;\n" + - " } else if (Color.xyz == vec3(253., 254., 254.) / 255.) {\n" + - " vertexColor = Color*texelFetch(Sampler2, UV2 / 16, 0);\n" + - " vertex.z *= 1.001001;\n" + - " vertex.x *= 1.001001;\n" + + " } else if (Color.xyz == vec3(60., 60., 60.) / 255.) {\n" + + " vertexColor = Color * texelFetch(Sampler2, UV2 / 16, 0);\n" + + " depthLevel = 114514.0;\n" + " gl_Position = ProjMat * ModelViewMat * vertex;\n" + " } else {\n" + - " vertexColor = Color*texelFetch(Sampler2, UV2 / 16, 0);\n" + + " vertexColor = Color * texelFetch(Sampler2, UV2 / 16, 0);\n" + " gl_Position = ProjMat * ModelViewMat * vertex;\n" + " }"; public static final String Nameplates_Shader_1_20_4 = "if (Color.xyz == vec3(255., 254., 253.) / 255.) {\n" + - " vertexColor = Color*texelFetch(Sampler2, UV2 / 16, 0);\n" + + " vertexColor = Color * texelFetch(Sampler2, UV2 / 16, 0);\n" + " vertex.y += 1;\n" + " vertex.x += 1;\n" + " gl_Position = ProjMat * ModelViewMat * vertex;\n" + - " } else if (Color.xyz == vec3(254., 254., 254.) / 255.) {\n" + - " vertexColor = Color*texelFetch(Sampler2, UV2 / 16, 0);\n" + - " vertex.z -= 0.001;\n" + + " } else if (Color.xyz == vec3(240., 240., 240.) / 255.) {\n" + + " vertexColor = Color * texelFetch(Sampler2, UV2 / 16, 0);\n" + + " vertexColor.rgb = texelFetch(Sampler2, UV2 / 16, 0).rgb;\n" + " gl_Position = ProjMat * ModelViewMat * vertex;\n" + - " } else if (Color.xyz == vec3(253., 254., 254.) / 255.) {\n" + - " vertexColor = Color*texelFetch(Sampler2, UV2 / 16, 0);\n" + - " vertex.z -= 0.0011;\n" + + " } else if (Color.xyz == vec3(60., 60., 60.) / 255.) {\n" + + " vertexColor = Color * texelFetch(Sampler2, UV2 / 16, 0);\n" + + " depthLevel = 114514.0;\n" + " gl_Position = ProjMat * ModelViewMat * vertex;\n" + " } else {\n" + - " vertexColor = Color*texelFetch(Sampler2, UV2 / 16, 0);\n" + + " vertexColor = Color * texelFetch(Sampler2, UV2 / 16, 0);\n" + " gl_Position = ProjMat * ModelViewMat * vertex;\n" + " }"; diff --git a/backend/src/main/java/net/momirealms/customnameplates/backend/placeholder/PlaceholderManagerImpl.java b/backend/src/main/java/net/momirealms/customnameplates/backend/placeholder/PlaceholderManagerImpl.java index 24a627b..ec54c3f 100644 --- a/backend/src/main/java/net/momirealms/customnameplates/backend/placeholder/PlaceholderManagerImpl.java +++ b/backend/src/main/java/net/momirealms/customnameplates/backend/placeholder/PlaceholderManagerImpl.java @@ -179,6 +179,22 @@ public class PlaceholderManagerImpl implements PlaceholderManager { }); this.registerSharedPlaceholder("%shared_np_is-latest%", () -> String.valueOf(plugin.isUpToDate())); this.registerPlayerPlaceholder("%np_is-latest%", (player) -> String.valueOf(plugin.isUpToDate())); + for (int i = 1; i <= 20; i++) { + int speed = i; + this.registerPlayerPlaceholder("%np_gradient_" + i + "%", (player) -> { + int currentTicks = MainTask.getTicks(); + double progress = currentTicks * 0.01 * speed; + return String.format("%.2f", -1 + (progress % 2.0001)); + }); + } + for (int i = 1; i <= 20; i++) { + int speed = i; + this.registerPlayerPlaceholder("%np_gradient_" + i + "%", (player) -> { + int currentTicks = MainTask.getTicks(); + double progress = currentTicks * 0.01 * speed; + return String.format("%.2f", -1 + (progress % 2.0001)); + }); + } this.registerPlayerPlaceholder("%np_time%", (player) -> { long time = player.playerTime() % 24_000; String ap = time >= 6000 && time < 18000 ? " PM" : " AM"; @@ -284,8 +300,7 @@ public class PlaceholderManagerImpl implements PlaceholderManager { Image full = requireNonNull(plugin.getImageManager().imageById(inner.getString("images.full")), "image.full should not be null"); String currentValue = section.getString("placeholder.value", "1"); String maxValue = section.getString("placeholder.max-value", currentValue); - boolean removeShadow = section.getBoolean("remove-shadow", false); - VanillaHud vanillaHud = new VanillaHud(empty, half, full, reverse, currentValue, maxValue, removeShadow); + VanillaHud vanillaHud = new VanillaHud(empty, half, full, reverse, currentValue, maxValue); List list = List.of(vanillaHud.getCurrent(), vanillaHud.getMax()); Placeholder placeholder1 = registerSharedPlaceholder("%shared_np_vanilla_" + id + "%", vanillaHud::create); Placeholder placeholder2 = registerPlayerPlaceholder("%np_vanilla_" + id + "%", vanillaHud::create); @@ -349,7 +364,7 @@ public class PlaceholderManagerImpl implements PlaceholderManager { Bubble bubble = plugin.getBubbleManager().bubbleById(bbID); if (bubble != null) { AdaptiveImageText adaptiveImageText = AdaptiveImageText.create( - id, inner.getString("text"), bubble, inner.getBoolean("remove-shadow"), + id, inner.getString("text"), bubble, inner.getBoolean("remove-shadow"), !inner.getBoolean("shadow", false), inner.getInt("left-margin", 1), inner.getInt("right-margin", 1) ); List list = new ArrayList<>(); @@ -387,7 +402,7 @@ public class PlaceholderManagerImpl implements PlaceholderManager { Nameplate nameplate = plugin.getNameplateManager().nameplateById(npID); if (nameplate != null) { AdaptiveImageText adaptiveImageText = AdaptiveImageText.create( - id, inner.getString("text"), nameplate, inner.getBoolean("remove-shadow"), + id, inner.getString("text"), nameplate, inner.getBoolean("remove-shadow"), !inner.getBoolean("shadow", false), inner.getInt("left-margin", 1), inner.getInt("right-margin", 1) ); List list = new ArrayList<>(); @@ -425,8 +440,8 @@ public class PlaceholderManagerImpl implements PlaceholderManager { Background background = plugin.getBackgroundManager().backgroundById(bgID); if (background != null) { AdaptiveImageText adaptiveImageText = AdaptiveImageText.create( - id, inner.getString("text"), background, inner.getBoolean("remove-shadow"), - inner.getInt("left-margin", 2), inner.getInt("right-margin", 0) + id, inner.getString("text"), background, inner.getBoolean("remove-shadow"), !inner.getBoolean("shadow", false), + inner.getInt("left-margin", 1), inner.getInt("right-margin", 1) ); List list = new ArrayList<>(); list.add(adaptiveImageText.getPreParsedDynamicText()); diff --git a/backend/src/main/java/net/momirealms/customnameplates/backend/storage/StorageManagerImpl.java b/backend/src/main/java/net/momirealms/customnameplates/backend/storage/StorageManagerImpl.java index b6e3bae..216bfb7 100644 --- a/backend/src/main/java/net/momirealms/customnameplates/backend/storage/StorageManagerImpl.java +++ b/backend/src/main/java/net/momirealms/customnameplates/backend/storage/StorageManagerImpl.java @@ -52,8 +52,8 @@ public class StorageManagerImpl implements StorageManager, JoinQuitListener { this.redisManager.getPlayerData(uuid, async).thenAccept(playerData1 -> { if (playerData1.isPresent()) { PlayerData data = playerData1.get(); - handleDataLoad(player, data); ((AbstractCNPlayer) player).setLoaded(true); + handleDataLoad(player, data); plugin.getEventManager().dispatch(DataLoadEvent.class, data); this.redisManager.updatePlayerData(data, async).thenAccept(result -> { if (!result) { @@ -64,8 +64,8 @@ public class StorageManagerImpl implements StorageManager, JoinQuitListener { this.dataSource().getPlayerData(uuid, async).thenAccept(playerData2 -> { if (playerData2.isPresent()) { PlayerData data = playerData2.get(); - handleDataLoad(player, data); ((AbstractCNPlayer) player).setLoaded(true); + handleDataLoad(player, data); plugin.getEventManager().dispatch(DataLoadEvent.class, data); this.redisManager.updatePlayerData(data, async).thenAccept(result -> { if (!result) { @@ -82,8 +82,8 @@ public class StorageManagerImpl implements StorageManager, JoinQuitListener { this.dataSource().getPlayerData(uuid, async).thenAccept(playerData -> { if (playerData.isPresent()) { PlayerData data = playerData.get(); - handleDataLoad(player, data); ((AbstractCNPlayer) player).setLoaded(true); + handleDataLoad(player, data); } else { plugin.getPluginLogger().warn("Failed to load player data for " + player.name()); } diff --git a/backend/src/main/resources/ResourcePack/assets/minecraft/shaders/core/rendertype_text.fsh b/backend/src/main/resources/ResourcePack/assets/minecraft/shaders/core/rendertype_text.fsh index a3e3b84..308fb3f 100644 --- a/backend/src/main/resources/ResourcePack/assets/minecraft/shaders/core/rendertype_text.fsh +++ b/backend/src/main/resources/ResourcePack/assets/minecraft/shaders/core/rendertype_text.fsh @@ -20,8 +20,15 @@ void main() { if (color.a < 0.1) { discard; } + if (depthLevel == 114514.0) { + discard; + } if (texColor.a == 254.0/255.0) { - if (depthLevel == 0.00) { + if (depthLevel == 0.0 + || depthLevel == 100 + || depthLevel == 200 + || depthLevel == 400 + ) { discard; } else { color = vec4(texColor.rgb, 1.0) * vertexColor * ColorModulator; diff --git a/backend/src/main/resources/ResourcePack/overlay_1_20_5/assets/minecraft/shaders/core/rendertype_text.fsh b/backend/src/main/resources/ResourcePack/overlay_1_20_5/assets/minecraft/shaders/core/rendertype_text.fsh index 1736129..2d15cd1 100644 --- a/backend/src/main/resources/ResourcePack/overlay_1_20_5/assets/minecraft/shaders/core/rendertype_text.fsh +++ b/backend/src/main/resources/ResourcePack/overlay_1_20_5/assets/minecraft/shaders/core/rendertype_text.fsh @@ -20,8 +20,19 @@ void main() { if (color.a < 0.1) { discard; } + if (depthLevel == 114514.0) { + discard; + } if (texColor.a == 254.0/255.0) { - if (depthLevel == 1000.00) { + if (depthLevel == 1000.0 + || depthLevel == 2200 + || depthLevel == 50 + || depthLevel == 2650 + || depthLevel == 200 + || depthLevel == 400 + || depthLevel == 2800 + || depthLevel == 2400 + ) { discard; } else { color = vec4(texColor.rgb, 1.0) * vertexColor * ColorModulator; diff --git a/backend/src/main/resources/config.yml b/backend/src/main/resources/config.yml index 7139595..9a97e10 100644 --- a/backend/src/main/resources/config.yml +++ b/backend/src/main/resources/config.yml @@ -56,7 +56,7 @@ resource-pack: shader: # Enables shader generation enable: true - # Hides scoreboard numbers + # Hides scoreboard numbers (1.20.4- requires shader to remove that) hide-scoreboard-number: false # Enables support for animated text shaders animated-text: false diff --git a/backend/src/main/resources/configs/custom-placeholders.yml b/backend/src/main/resources/configs/custom-placeholders.yml index a185913..c9508c7 100644 --- a/backend/src/main/resources/configs/custom-placeholders.yml +++ b/backend/src/main/resources/configs/custom-placeholders.yml @@ -39,33 +39,47 @@ nameplate-text: halloween: nameplate: halloween text: 'Today is Halloween! Trick or treat!' + left-margin: 1 + right-margin: 1 # https://mo-mi.gitbook.io/xiaomomi-plugins/plugin-wiki/customnameplates/custom-placeholders/background-text background-text: location: background: bedrock_1 text: '%np_image_compass% %np_shift_location%' - remove-shadow: true + shadow: false + left-margin: 1 + right-margin: 1 time: background: bedrock_1 text: '%np_image_clock% %np_shift_time%' - remove-shadow: true + shadow: false + left-margin: 1 + right-margin: 1 weather: background: bedrock_1 text: '%np_image_weather% %np_shift_weather%' - remove-shadow: true + shadow: false + left-margin: 1 + right-margin: 1 hello: background: bedrock_1 text: '%np_image_bubble% %np_shift_hello%' - remove-shadow: true + shadow: false + left-margin: 1 + right-margin: 1 update: background: bedrock_1 text: '%np_image_bell% %np_shift_update%' - remove-shadow: true + shadow: false + left-margin: 1 + right-margin: 1 other_actionbar: background: bedrock_2 text: '%np_actionbar%' - remove-shadow: true + shadow: false + left-margin: 1 + right-margin: 1 # https://mo-mi.gitbook.io/xiaomomi-plugins/plugin-wiki/customnameplates/custom-placeholders/static-text static-text: @@ -104,6 +118,34 @@ shift-text: # https://mo-mi.gitbook.io/xiaomomi-plugins/plugin-wiki/customnameplates/custom-placeholders/switch-text switch-text: + nameplate_color_prefix: + switch: "%np_equipped_nameplate%" + default: "" + case: + 'wither': "" + 'halloween': "" + 'hutao': "" + 'rabbit': "" + 'starsky': "" + 'trident': "" + 'cheems': "" + 'egg': "" + 'cat': "" + 'xmas': "" + nameplate_color_suffix: + switch: "%np_equipped_nameplate%" + default: "" + case: + 'wither': "" + 'halloween': "" + 'hutao': "" + 'rabbit': "" + 'starsky': "" + 'trident': "" + 'cheems': "" + 'egg': "" + 'cat': "" + 'xmas': "" world: switch: '%player_world%' case: diff --git a/backend/src/main/resources/configs/nameplate.yml b/backend/src/main/resources/configs/nameplate.yml index da12535..b5dd8af 100644 --- a/backend/src/main/resources/configs/nameplate.yml +++ b/backend/src/main/resources/configs/nameplate.yml @@ -11,13 +11,13 @@ always-show: false nameplate: # Prefix to be displayed before the player's name. # The prefix here will become part of the nameplate - prefix: '' + prefix: '%np_switch_nameplate_color_prefix%' # Placeholder for the player's name # The default configuration uses shift to ensure that the player name not affected by the clientside `force-unicode-font` setting. player-name: '%np_shift_player_name%' # Suffix to be displayed after the player's name. # The suffix here will become part of the nameplate - suffix: '' + suffix: '%np_switch_nameplate_color_suffix%' # Configuration for Unlimited tags. unlimited: diff --git a/backend/src/main/resources/contents/backgrounds/b0.png b/backend/src/main/resources/contents/backgrounds/b0.png index 1130ab394164edce32b2ecefaf5ff31d314b60fe..f9bec4bd730d37931c90343a8a1e934164553a74 100644 GIT binary patch delta 101 zcmX@lQ!zm@o{fQl;hl3?43Ls6ag8Vm&QB{TPb^Aha7@WhN>%X8O-xS>N=;0uEIgTN z15_mC>EaktaVzP^|Nr*P93lpd9+x=TCNMHEvN3#8W^43n@_GtX#o+1c=d#Wzp$PzR C(;zzl literal 1615 zcmbVMO>f*p7fN3jCV&_dyGBF zZgN80_yHWK`WN62R4O@?Gshm`#tp7L^w8J)VI|e}L$&-do_XeZpZ8p^80AAeFm=ZuGst{TRNf6M-!-b=nCOl3CZ zY9Q=sRsh;CZrq#}lJPswil?ZO!RMdnEBf;i4(GO;JVt;(U}h9MAmj^|l` zu&Se6)2WqL*Ov^js8}frEme+cMmkUjIx<1(+=r}aX!B|jCy1CcrG?|#xb|rV#YkyYjnr$Xo8>bGAht=;*jTA0%Ni4v-aG_176Dm_uKGuX zaCSwd4oW6A4?*Vj+M9xOOF^|N`$~De|F- znlO^C8mkfvgF5&0e6QQxDOD=Run;SaZc&*-)qOTonk1x`SDNNb^y0{bxY$y1!f3!- z9qL+xc0es3uMey+^tt8J&cF?@&v+Ot_s5DI)Y)I|=dgd!65M00)CyegS{`3-TVWfw zE#Benj+>@I%IA>+`*%tS$B&NRo2NdMb=i`OEjw#LRozRB9qmr z7u;M-%M}rLHxK5tlaT<@H68etxAF tZ}czx%AWsqa`Ml~(~}>sxi5x>(Ox@$@0aAxe|5|6ZEnZEfAjrMF9F6h_2~cr diff --git a/backend/src/main/resources/contents/backgrounds/b1.png b/backend/src/main/resources/contents/backgrounds/b1.png index ae76d6ab6bf79e8aa309674fbf1b223aa6522dc5..f64fd9a3e3ec10140b14f3812a9ca10031fd1b99 100644 GIT binary patch delta 96 zcmX@fQ#?U3ij9GR;hl3?43Ls6ag8Vm&QB{TPb^Aha7@WhN>%X8O-xS>N=;0uEIgTN x15_mH>EaktaVseyAweU7Nr-2P00Sc%gTfYuZoPj``GE=;JYD@<);T3K0RV~O9J>Gj literal 1609 zcmbVM%Wl&^6m=y)KfoKK=Rw9%u8_m!+nizfxTb+Q&~ZtR6X?s8L$npGqn0c<@=V)c7-Qu5CT)7I9s75XgB{z#KKu=giR%%! ziKagt+!aZeY=n=e&fqK1`%2}+vWCNm!8%4E`xmwb+c2TO8JqTl(kh$oxv!8QogO_r*V0>i{WL~eL z$w{l=RLP*=UYBWcNjEWk0Svk$Mg zTdnm%cEtcTLaERbDl+K08)KzWMA})YXvTOu40OngDMUiJ?Z+NlN(}BmKY8(zZ#1#n zHDcQIeZ1sUy*slHCEKm4KeJE3zT0q`4dyis@2=+?b_48b;xr8ECS4r!2KDbIGyCU- zfa6C8|IJe!%BpS1swknL`_ogi$zM<31_F&cg-}+VfIw$e={YEvEQ>iAI9UV}`(d90 z=|5Ux0xM-#4QaubdyuVTTh98M_>%7ZTl&e0H&6PU7X2UT)3mZa&3YW>sijxJSk>T} z6vg_pUgNz(Luv+x$ydGBGZ#MUsm(K>E?_2qzw_`G%=63baJjSifo3VtQ&&YGO)d;mK4R1_lN*PZ!6K zid%0kISMi`a2(#ynDl4=2gc5pIPH@y+oPD66Bu|J7!4TM4lqbCKsY{-FMA0OZWFJW|>Un#53+6n|1y8VWGMU{Cx5>n0?so4g z6$Nc<1Pisd5JYUR&_XOkEc_E}tklNR!Y}&>D(eH6WHXukzTfxwee>O!pF6vKa^IvR zN!#nQwFP)ygL}v3P4NHm=57j)Ey?VqOp>n~&!2CjUu>|rmNX6$3qdr6|x$;!*5G{K1Xqu-CRaIS~7-LkmRbo|5-M5b+ z0~@-AZMYPS9kc3~78?F!aF+&6XQ6gx=nURmxh+KEXj-@1RlBCj)0U>&HV_z^VJLu5 zvej6So)TvVM+`NV(KJj%$YYc<5}z*%SB6jrIYdc88)w5hLB+HlNic}{&`Knq;5 zoOb%o1FEqOi&!i&!0H7yX>-A|HvbKE@%bkQP+QL{e2k4HiV7E*m|1}|h6Ndm&Kj!; z(-v69ms84SRv^rSc{YhNoiZYL+Tgr1Qfht_GBQjRqr(@&IN;sv$PWgrMg((ZP|Z+q zRWYg!-E`o>=22`p7!RNx55nf^&rlOL48YmHLZN2@BFJCC0d<-@jR+(hMx@2GByP#5 zD5EpYJ3Ix)5S`hN!t0f{Ov@?<VNxT0FB@<)$(OAPvNDQ$Selx6y|N|-o`^Pt54NyQ;o%2pWf>e6596i*>&UFlhd#7 z9-3VH`u6Sq=bu-k^=&&_*Q^b%_M&&v)lIj}Q;#M-6kDG+Jboixet7u6{e1A(XXa{8 IPhYw59ln+Ju>b%7 diff --git a/backend/src/main/resources/contents/backgrounds/b16.png b/backend/src/main/resources/contents/backgrounds/b16.png index 83d0f34e7b65cc65f93ffc8d4fc670af5ad69b79..f4f2e9304d6583f7ac208e342a0157a120711ef1 100644 GIT binary patch delta 105 zcmX@dQ!_y_nT>&gK}~;77m$)Hag8Vm&QB{TPb^Aha7@WhN>%X8O-xS>N=;0uEIgTN z15_mE>EaktaVse$AweTy0fT{I0EZi|glWPR1`Y-e1BQbK8G3|dj)VbKGI+ZBxvX5jn7*?Qx)FC0X6iiNoLPL^P(nwlc(hwy$D>q(jxyD(r3q53ZG};}!(x}qd zyY?Z6+ybFJ1w!a==(*5C`!90LA1Jgxp|AEs*kx^p2z`uZo_XHq{h0UF&i2zAOShLa zO}o+Ah<4$73!a_*?sjKN>150om1WsOE7bL5(`>|1sa0D)sUjsXax zI?fdx8+mnS&Jgj6m7-8W=BQ?*J$a}?9i&cu$clzGuV!(Ah*@J=Shk64pC-VBHMrui z98QcU%;H0y@my7awHs_PkV;kqc@A~6e8vF8HjWz`3$>)N8rXRAPdn|_qgEJ zF0bTa$@uya$h=c~Q;>Gasgh+^%HcdyJ9Ej%aZQZw?TI{*qw4;t4LqWXhdN}eS6O)zV4cQPCB=mT8YM$|*W}~4%lS(0!)h8g-S)F>G z=(B0DAOauf!IXA1;6QpoNlamtOx1{%e60`By0ql1^Tb#5=wj&~m%K&N7nJCyNS}q3 z4QSry&`&MBcE+k3&on94|MN9jJJqD-aOiyXu<5z*({yc~19b^K`S%X8O-xS>N=;0uEIgTN z15_mL>EaktaVse$Awh#7iA{}7V}Uxe!T|=GLkvBqrW6zcl`wd^`njxgN@xNAxdk2W literal 1611 zcmbVM-D=!M6jnnF`60bX2!vb>GJ&*>q|wOE?haOhyK?P?$T7}>9mvIwMx))qD~%$J zy=y~nN^c6i=xsv?d4e|gx#&yuK9A5>=+XWNJ8WWOp`X#rH|KokJ7>;sJKLMLZrs0N z7{;y6Rtk{2@9Qe~*J$Rc&9eG{loV@UJbY*x;60>zv$%N^IoRZJ6L%xheJ zSPUo5WA2EdNJXYgz`8XyA1JNLf%<~!dijh4&^8Qf9}BspY3-ua8%GevOpt}>vU{8h zXIGT!u;60j2xu->(d4vU2&PrhRcbiT)XtnTBA$)W!#$bBYE*uAYJ&)v7QP8tBNlF0 zq|tRf>Jo}qf51(O@e~@WSSH73p&srMkKz{O_zV-!Rrg@RGz@7cD>ciw=mfqAy4X_26h|x~ zE7-FVLK4eeU5TtH5w6uB++*=d;)!NF-ybM`SY>~{KZgBLvnk@oL|6&-606x*;a01e z2vCd=s8zzmOeygHypVAG*znSJszX_o4c(F@B=mT8YF>!fv(ZqZNu^N6s}taxyh^=* z2&U6=fdUtcV7h-a5McBxB{7ASD$yfWi1j|Gb#BQyUm{hSod7`sk^qwz;ppU`Q6|Hhkky$6RdZy k{mJ9J*Xu>S_rDv)-TTI?@AOV diff --git a/backend/src/main/resources/contents/backgrounds/b32.png b/backend/src/main/resources/contents/backgrounds/b32.png index 31ce74f3f69fc0debf4f9ad90c6f58b9b1f59582..5a3c44a01c9a9384d4ba1bebd5519806334ff7f9 100644 GIT binary patch delta 102 zcmdnZ)66(QC0??`HKHUqKdq!Zu_%?nF(p4KRlzeiF+DXXH8G{K@MNkD0|SGqr;B4q z#jT{2ganNQ35Nqm3=Sk*VO-27QF>qnvzx5JD~1LJW`??WhMvmp@#}yZ7(8A5T-G@y GGywo5O(Nd_ literal 1595 zcmbVNzi-<{6lPE~Xk9o<7o$Ln0|OKZ5|T$!7Rf_c*RkwaK&TqF0J}g39gjzeu*hS{ zlO=o15@aaasY8*iOQsH8Gt@w~&K>(F6zIRuNBtn|Lbd}FB6%dg_r34^xTjZpooA~n zpRFj0vfAEl?ZX|xdGDjUaP9p4#qV(YIN$xYRFqFXtXz)N#?8nzWqZ*N#v`C>j4h(Ej~zg&kBBU*6FgdW9CKb z##iXcgaARxB}J2Tn3ZJWt5aSA>*}?kqA5fk`|4)p5FG`3XiF3vIl8Gaj4^UNow|-~ zhTdajVaqhI2R{vCVmrik(fm-sT@l4(zqK=W22Z{^kTNHRF&>Zgv8{`uZN71Z_TOAa8nK~VcxswGWp7p2@jfiUI?S&A;Z zr#UzFc_~H(TH!TS!Khtz-1yFv%h@E+1Yn;4Lb-uR_%< z4Lh3UbWNL>4l(UV*d-Xxpn-^z`1CT=#$C%M*du215)^tSqLSVSju?qWkx~daNok)O zdDd4^okp@HhN1w+pw6DE2m;d1N=Y-u+bv&(nDr!yNbJQ89?JY+%=EnpU{5|E5S_ zYtiAYd8!RpwFKEsN+{Opd`BGc@8_#wf~H+SD66{LS6Nk79;x%!$&w7bUj#GS@qh#A zHRYbcN)gL3E%;_1vUOuS8CQuf>B;rd->-Pfq%Uc|+en|Ml?`at=P)Y`wF<_lhRUoc z#{cUz{dQphE#NTKs%1S-;h~<$JOkHT%**L!QD^EV&te0~mxqCC!(?{@xq4gUa&(%$a0etX(`@gL@Z>`(vz diff --git a/backend/src/main/resources/contents/backgrounds/b4.png b/backend/src/main/resources/contents/backgrounds/b4.png index 0532849a5a21ae128a90a7643944ea03c19c018a..0c30d026ebe3b6f34e66c429a3efd651e0089cfb 100644 GIT binary patch delta 99 zcmX@lQ#L^|mW_ddfg@|L1dx&}ag8Vm&QB{TPb^Aha7@WhN>%X8O-xS>N=;0uEIgTN z15_m8>EaktaVse$AweU-fysv_Bf)}`fklF$B#5EMB`|OSPz{5ptDnm{r-UW|p!XbK literal 1615 zcmbVMO>f*p7&f9vrKnsgp^DSU6%`0Axc+jDp4upnc3Y@)*jcM z&2Dn!#(@(j5QmB%z#rhi&)`^zKhR5m0I&DMO3931Q8^gF^-Zd0x@ zVbAjt(1!6~dtOp@Dm2Q(NEWgA>aV{|BzbH;>83a>dtxm2FDmi);$XloPFcjw?T6^W zoB%;CG)41#Qq*J~n+sk7<7V11(E_4RV{@l5h>p`k)Kir}f$drhV~m2xreWZ_S@aF^ zu;)5Bg4@EF_yO@lw7N_%SMeb^N*=9@!C!2SwJwR{%w{ut=G&?oIc^jIf#-Oh1qiD? zFEpK7MSXA0kcgU9veZ%)s9~g;n(EjDsY@U7vZXERRh%GV&YYHxYvabJ1(35AS5B+R z!Z>G+n21~yx(2M+dyJsNtUgJ$kdX=DBRRg6a>r5T4B_q$bG5Yd}EV!E0UtQWD5~@XPLe@MB2bLEM zT%Wie>Ef?(NHAVPQ^n=*{3_JP1J5ToB7Wxz6l#W3P2URUj0{zkQ*c=3bR?Xz7@4RI zBk8G$s=zR)b1%>Ld%eR-4dnzD5~a}|l?7DY7Yn6nO8P~uX~9H4iA{)$EhQ&Gw~M`u zcdacRY*{Sp2#aoQL4^*(h`JGX!=YI3PZXOr*KU!X&IqFQ){=9s6JOJ_H%ouFg^|7+4lwKJslo&nJP#;Js~kk8uhpI5aRYGO=(7C?s4KPhj}o!_cEz^xGJy Ok-^i|&t;ucLK6UcJ|+nO literal 1614 zcmbVM&2Q936gR30EhwO>mlg@taxNgSJ+|38o?^&08`zcVG$e~is~(sgzumR6_85DT z-9#J;7nBPUSA+zA079I&TZO_=h_j|whF>hyi z>C(*M*!|(@&4euk2M2WAx+I^;}QRr(|D**}81?Wcg?F?48mzsQg zoqM5n;kVn8Xbq!1Bgb>yB z3^wOFR?9o1+Qha@;^AK>ggP#D=G5^|Lw8x&rYp6JV`sSYwXT#YHO+p%Z}c5QWF6D; zJS4D9+tv}G=Ua(n13k%SCk!>nc^0KI5{X(cvXVaCh>OHIol zMNC6r$V*(hk@beoLvBJ3Vn}3;SgXXQT_Hu@6>p&~KksvZxebES$5btGT)N2R;wFYM zPRLYr-rP#TT!CC{WE>VZQRZwBO-dIsU{YjFA$pTaEl(t?wqp?W6ZIQ(c z1CC8|Av-L}qhojI+F-tz30Ym+b}m2hJJ zV;14jV!e;%DGprG60{!WSgft_iCBf}<5e$Ghh0D!FS^^;cu`hB1*6x|lni`W1S9)? z7m)NF`OVEX#R{n{pyUg47w#+r1mrRh-pcqgHL!cV0fPe(@Vo{&@0e z@6T`kzV_ecBRBtg@pSk0i4zYi^M|@K&ky|kiTw2+rQH5|?8+VG7vt-@OU1-*EH2d^ Ie}C=PYlIT_NB{r; diff --git a/backend/src/main/resources/contents/backgrounds/b8.png b/backend/src/main/resources/contents/backgrounds/b8.png index 87d0de7057c4e24b7e088c945f51ab455fd99cc6..03bf2659de8d5213d3db184c9be8f9ef516e5f33 100644 GIT binary patch delta 102 zcmX@ZQ#nC0fsKKIK`1PC8jzAKag8Vm&QB{TPb^Aha7@WhN>%X8O-xS>N=;0uEIgTN z15_mK>EaktaVse$AweVI0P_q9j)p+iW_L!121bU*MGQSpR*3`xl`(j_`njxgN@xNA DJ5L{z literal 1612 zcmbVMO^f727|wzV7-&( zGu<;sZ(aotioe0L;K74G#GfGe3w+ZbVMcmC*pQD()l<*=ydU-caCG?O-ktaFSeA8f zG)#`+y93X=J8!}J_iumt06uS5!>=35dgp%o+_HZ8^*zhF{kIyQn$z?t<+^Z~(3x}= zMFnWfdiZ!zF@7cu%H%|qG5+U|KQU4w#wWd$q}4!9)$pp8&#n%~{OXKH0zZC)9xf;l z6w)xXC}w3t7cpM)QW&?>E=Eg;Ig9arYY?5LM`)mHi9*M-IUxjvk;D37;APRL$S1z% zk_c{_5E_Iu=%e+8!CWnJdYpW*HU@t&o*Gk8*PYMj&OC5*J#oD#0s`OleH##Vb6Fa; zu*>Gbh9Qv+uT^D~E>X+KGJS4h3{qD<6jeuCHtRS+#M}j|T+bn`PfMWS9j-dBXG`OP zyK*KAS(*m0UWcuw+URDgUqIb0-!K5NP1DZCRxL%*nP|+x1-P*e$X0YSzO1BsEE|1Z zb9rz9G9R?wRCG{FW^_H)dbY{b(MB@z1BalGPE;xMy!rUr2AMD;V+>jIZ4%mkIQ9bS z`E-|jLi&`D6*SdC<(D_10U7%NB@y+b8&Iej!3=vPSa6!_x?te2D%eE2RXM?^3nLxq znXbVwsPnGRj|PLITIXs83yC)92~#Ch-G@u1X-Y?BV_3=MD2Xw|#ZgMoy*%s*o(r1< zfv}mk>)Tlv?AgK#`<}$$oBhpx0sHeTmm(K?Hs@K-_WQe$&31cPOOpAr zm*=t!~^_QpKzp=`^B4pjpQyClIYymYn+{@eR9px%Agd-Ztr5O7u;nufxixtei;b zr!H=taofhTN{ajcd@a|mHK`38I$t~NdM^BQU0aqwT|-aC=1T$n{QfA}AMgCkMfLo% fTTk!a{p-ZChW}dMKs*1j?f0XD!{oQmpMU=!Y?$%3 diff --git a/backend/src/main/resources/contents/backgrounds/bedrock_1.yml b/backend/src/main/resources/contents/backgrounds/bedrock_1.yml index 304e825..81134b8 100644 --- a/backend/src/main/resources/contents/backgrounds/bedrock_1.yml +++ b/backend/src/main/resources/contents/backgrounds/bedrock_1.yml @@ -1,16 +1,16 @@ left: image: b0 height: 14 - ascent: 7 + ascent: 6 right: image: b0 height: 14 - ascent: 7 + ascent: 6 middle: height: 14 - ascent: 7 + ascent: 6 1: b1 2: b2 4: b4 diff --git a/backend/src/main/resources/contents/backgrounds/bedrock_2.yml b/backend/src/main/resources/contents/backgrounds/bedrock_2.yml index cdc9017..dde917c 100644 --- a/backend/src/main/resources/contents/backgrounds/bedrock_2.yml +++ b/backend/src/main/resources/contents/backgrounds/bedrock_2.yml @@ -1,16 +1,16 @@ left: image: b0 height: 14 - ascent: 12 + ascent: 11 right: image: b0 height: 14 - ascent: 12 + ascent: 11 middle: height: 14 - ascent: 12 + ascent: 11 1: b1 2: b2 4: b4 diff --git a/gradle.properties b/gradle.properties index 02658e5..8c47989 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ # Project settings # Rule: [major update].[feature update].[bug fix] -project_version=3.0.0 +project_version=3.0.0-beta-1 config_version=36 project_group=net.momirealms