fancynpcs: fix parsed placeholders being saved as skin identifier

This commit is contained in:
Oliver
2025-03-29 19:14:34 +01:00
parent 2291663aac
commit c63f90c13e
10 changed files with 74 additions and 5 deletions

View File

@@ -163,6 +163,7 @@ public class NpcData {
*/
public NpcData setSkin(String skin, SkinData.SkinVariant variant) {
SkinData data = FancyNpcsPlugin.get().getSkinManager().getByIdentifier(skin, variant);
data.setIdentifier(skin);
return setSkinData(data);
}

View File

@@ -1,5 +1,7 @@
package de.oliver.fancynpcs.api.skins;
import org.lushplugins.chatcolorhandler.ChatColorHandler;
public class SkinData {
private String identifier;
@@ -34,6 +36,14 @@ public class SkinData {
this.identifier = identifier;
}
public String getParsedIdentifier() {
if (identifier.startsWith("%") && identifier.endsWith("%") || identifier.startsWith("{") && identifier.endsWith("}")) {
return ChatColorHandler.translate(identifier);
} else {
return identifier;
}
}
public SkinVariant getVariant() {
return variant;
}

View File

@@ -43,6 +43,7 @@ allprojects {
maven(url = "https://repo.fancyplugins.de/releases")
maven(url = "https://repo.lushplugins.org/releases")
maven(url = "https://repo.inventivetalent.org/repository/maven-snapshots/")
maven(url = "https://repo.extendedclip.com/releases/")
}
}
@@ -73,6 +74,7 @@ dependencies {
annotationProcessor("org.incendo:cloud-annotations:2.1.0-SNAPSHOT")
implementation("org.mineskin:java-client-jsoup:3.0.3-SNAPSHOT")
compileOnly("me.clip:placeholderapi:2.11.6")
compileOnly("com.intellectualsites.plotsquared:plotsquared-core:7.5.1")
}

View File

@@ -35,6 +35,7 @@ import de.oliver.fancynpcs.skins.SkinManagerImpl;
import de.oliver.fancynpcs.skins.SkinUtils;
import de.oliver.fancynpcs.skins.cache.SkinCacheFile;
import de.oliver.fancynpcs.skins.cache.SkinCacheMemory;
import de.oliver.fancynpcs.tests.PlaceholderApiEnv;
import de.oliver.fancynpcs.tracker.TurnToPlayerTracker;
import de.oliver.fancynpcs.tracker.VisibilityTracker;
import de.oliver.fancynpcs.utils.OldSkinCacheMigrator;
@@ -320,6 +321,10 @@ public class FancyNpcs extends JavaPlugin implements FancyNpcsPlugin {
getLogger().warning("Commands and related components have not been registered. This can be changed by setting 'register_commands' to true, and restarting the server.");
}
if (ENABLE_DEBUG_MODE_FEATURE_FLAG.isEnabled()) {
PlaceholderApiEnv.registerPlaceholders();
}
fancyLogger.info("FancyNpcs (" + versionConfig.getVersion() + ") has been enabled.");
}

View File

@@ -275,6 +275,7 @@ public class NpcManagerImpl implements NpcManager {
SkinData.SkinVariant skinVariant = SkinData.SkinVariant.valueOf(skinVariantStr);
if (!skinIdentifier.isEmpty()) {
skin = FancyNpcs.getInstance().getSkinManagerImpl().getByIdentifier(skinIdentifier, skinVariant);
skin.setIdentifier(skinIdentifier);
}

View File

@@ -67,6 +67,7 @@ public enum SkinCMD {
} else {
SkinData.SkinVariant variant = slim ? SkinData.SkinVariant.SLIM : SkinData.SkinVariant.AUTO;
SkinData skinData = FancyNpcs.getInstance().getSkinManagerImpl().getByIdentifier(skin, variant);
skinData.setIdentifier(skin);
if (!skinData.hasTexture()) {
translator.translate("npc_skin_set_later").replace("npc", npc.getData().getName()).send(sender);
}

View File

@@ -155,12 +155,12 @@ public class SkinManagerImpl implements SkinManager, Listener {
if (skin == null)
continue;
String id = skin.getIdentifier();
if (SkinUtils.isPlaceholder(id)) {
id = ChatColorHandler.translate(id);
String id = skin.getParsedIdentifier();
if(SkinUtils.isUsername(id)) {
id = UUIDFetcher.getUUID(id).toString();
}
if (id.equals(event.getId())) {
event.getSkin().setIdentifier(skin.getIdentifier());
npc.getData().setSkinData(event.getSkin());
npc.removeForAll();
npc.spawnForAll();

View File

@@ -17,4 +17,8 @@ public class SkinUtils {
public static boolean isFile(String identifier) {
return identifier.endsWith(".png") || identifier.endsWith(".jpg") || identifier.endsWith(".jpeg");
}
public static boolean isUsername(String identifier) {
return !identifier.isEmpty() && !isUUID(identifier) && !isURL(identifier) && !isFile(identifier);
}
}

View File

@@ -32,7 +32,7 @@ public class SkinCacheMemory implements SkinCache {
@Override
public void addSkin(SkinData skin) {
SkinCacheData skinCacheData = new SkinCacheData(skin, System.currentTimeMillis(), CACHE_TIME);
cache.put(skin.getIdentifier(), skinCacheData);
cache.put(skin.getParsedIdentifier(), skinCacheData);
}
@Override

View File

@@ -0,0 +1,45 @@
package de.oliver.fancynpcs.tests;
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class PlaceholderApiEnv extends PlaceholderExpansion {
public static void registerPlaceholders() {
if (!Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
return;
}
PlaceholderExpansion expansion = new PlaceholderApiEnv();
expansion.register();
}
@Override
public @NotNull String getIdentifier() {
return "fn-test";
}
@Override
public @NotNull String getAuthor() {
return "Oliver";
}
@Override
public @NotNull String getVersion() {
return "1.0.0";
}
@Override
public @Nullable String onPlaceholderRequest(Player player, @NotNull String params) {
return "Grabsky";
}
@Override
public @Nullable String onRequest(OfflinePlayer player, @NotNull String params) {
return "Grabsky";
}
}