From 1f15df936a17fa8792a49a0909ac008450455416 Mon Sep 17 00:00:00 2001 From: Matt Van Horn <455140+mvanhorn@users.noreply.github.com> Date: Wed, 1 Jul 2026 01:23:40 -0700 Subject: [PATCH] Fix player disguise skin being comma-split before setSkin The PLAYER disguise case loaded the skin value through RandomUtils.createStringProbabilityMap, which for a plain string descends into ConfigUtils.getList and splits it on commas. A Mojang skin property is a single comma-laden JSON string, so it was fragmented into garbage before reaching PlayerDisguise.setSkin, causing custom skins to render as default characters. Only build the weighted probability map when the skin node is actually a YAML list or configuration section; otherwise read the value verbatim so a single JSON skin string passes through untouched. --- .../bukkit/integration/ModernLibsDisguiseManager.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Magic/src/main/java/com/elmakers/mine/bukkit/integration/ModernLibsDisguiseManager.java b/Magic/src/main/java/com/elmakers/mine/bukkit/integration/ModernLibsDisguiseManager.java index 7824b1ecff..85d82a4a63 100644 --- a/Magic/src/main/java/com/elmakers/mine/bukkit/integration/ModernLibsDisguiseManager.java +++ b/Magic/src/main/java/com/elmakers/mine/bukkit/integration/ModernLibsDisguiseManager.java @@ -64,8 +64,13 @@ public boolean disguise(Entity entity, ConfigurationSection configuration) { DisguiseType disguiseType = DisguiseType.valueOf(disguiseName.toUpperCase()); switch (disguiseType) { case PLAYER: - Deque> skins = RandomUtils.createStringProbabilityMap(configuration, "skin"); - String skin = RandomUtils.weightedRandom(skins); + String skin; + if (configuration.isList("skin") || configuration.isConfigurationSection("skin")) { + Deque> skins = RandomUtils.createStringProbabilityMap(configuration, "skin"); + skin = RandomUtils.weightedRandom(skins); + } else { + skin = configuration.getString("skin"); + } String name = configuration.getString("name", entity.getCustomName()); if (name == null || name.isEmpty()) { name = skin;