diff --git a/nicko-core/src/main/java/net/artelnatif/nicko/disguise/AppearanceManager.java b/nicko-core/src/main/java/net/artelnatif/nicko/disguise/AppearanceManager.java index 3150341..b6c5670 100644 --- a/nicko-core/src/main/java/net/artelnatif/nicko/disguise/AppearanceManager.java +++ b/nicko-core/src/main/java/net/artelnatif/nicko/disguise/AppearanceManager.java @@ -69,13 +69,17 @@ public class AppearanceManager { final String defaultName = instance.getDataStore().getStoredName(player); this.profile.setName(defaultName); this.profile.setSkin(defaultName); - final ActionResult actionResult = updatePlayer(true); + final ActionResult actionResult = resetPlayer(); this.profile.setSkin(null); this.profile.setName(null); return actionResult; } + public ActionResult resetPlayer() { + return NickoBukkit.getInstance().getInternals().updateProfile(player, profile, true, true); + } + public ActionResult updatePlayer(boolean skinChange) { - return NickoBukkit.getInstance().getInternals().updateProfile(player, profile, skinChange); + return NickoBukkit.getInstance().getInternals().updateProfile(player, profile, skinChange, false); } } diff --git a/nicko-core/src/main/java/net/artelnatif/nicko/impl/Internals.java b/nicko-core/src/main/java/net/artelnatif/nicko/impl/Internals.java index a4e31ef..da503a9 100644 --- a/nicko-core/src/main/java/net/artelnatif/nicko/impl/Internals.java +++ b/nicko-core/src/main/java/net/artelnatif/nicko/impl/Internals.java @@ -9,5 +9,5 @@ public interface Internals { void updateOthers(Player player); - ActionResult updateProfile(Player player, NickoProfile profile, boolean skinChange); + ActionResult updateProfile(Player player, NickoProfile profile, boolean skinChange, boolean reset); } diff --git a/nicko-core/src/main/java/net/artelnatif/nicko/mojang/MojangAPI.java b/nicko-core/src/main/java/net/artelnatif/nicko/mojang/MojangAPI.java index 3e70068..5f8744f 100644 --- a/nicko-core/src/main/java/net/artelnatif/nicko/mojang/MojangAPI.java +++ b/nicko-core/src/main/java/net/artelnatif/nicko/mojang/MojangAPI.java @@ -46,6 +46,10 @@ public class MojangAPI { return cache.get(uuid); } + public Optional getSkinWithoutCaching(String uuid) throws IOException { + return getSkinFromMojang(uuid); + } + public Optional getUUID(String name) throws IOException { final String parametrizedUrl = URL_NAME.replace("{name}", name); final JsonObject object = getRequestToUrl(parametrizedUrl); diff --git a/v1_17_R1/src/main/java/net/artelnatif/nicko/impl/v1_17_R1.java b/v1_17_R1/src/main/java/net/artelnatif/nicko/impl/v1_17_R1.java index 651607c..176ffd9 100644 --- a/v1_17_R1/src/main/java/net/artelnatif/nicko/impl/v1_17_R1.java +++ b/v1_17_R1/src/main/java/net/artelnatif/nicko/impl/v1_17_R1.java @@ -7,6 +7,7 @@ import net.artelnatif.nicko.NickoBukkit; import net.artelnatif.nicko.disguise.NickoProfile; import net.artelnatif.nicko.disguise.ActionResult; import net.artelnatif.nicko.i18n.I18NDict; +import net.artelnatif.nicko.mojang.MojangAPI; import net.artelnatif.nicko.mojang.MojangSkin; import net.minecraft.network.chat.IChatBaseComponent; import net.minecraft.network.protocol.game.*; @@ -82,7 +83,7 @@ public class v1_17_R1 implements Internals { } @Override - public ActionResult updateProfile(Player player, NickoProfile profile, boolean skinChange) { + public ActionResult updateProfile(Player player, NickoProfile profile, boolean skinChange, boolean reset) { final CraftPlayer craftPlayer = (CraftPlayer) player; final EntityPlayer entityPlayer = craftPlayer.getHandle(); final boolean changeOnlyName = profile.getSkin() != null && !profile.getSkin().equalsIgnoreCase(player.getName()); @@ -95,9 +96,10 @@ public class v1_17_R1 implements Internals { if (skinChange || changeOnlyName) { try { - final Optional uuid = NickoBukkit.getInstance().getMojangAPI().getUUID(profile.getSkin()); + final MojangAPI mojang = NickoBukkit.getInstance().getMojangAPI(); + final Optional uuid = mojang.getUUID(profile.getSkin()); if (uuid.isPresent()) { - skin = NickoBukkit.getInstance().getMojangAPI().getSkin(uuid.get()); + skin = (reset ? mojang.getSkinWithoutCaching(uuid.get()) : mojang.getSkin(uuid.get())); if (skin.isPresent()) { final PropertyMap properties = gameProfile.getProperties(); properties.put("textures", new Property("textures", skin.get().value(), skin.get().signature())); diff --git a/v1_18_R1/src/main/java/net/artelnatif/nicko/impl/v1_18_R1.java b/v1_18_R1/src/main/java/net/artelnatif/nicko/impl/v1_18_R1.java index 04c6546..a684336 100644 --- a/v1_18_R1/src/main/java/net/artelnatif/nicko/impl/v1_18_R1.java +++ b/v1_18_R1/src/main/java/net/artelnatif/nicko/impl/v1_18_R1.java @@ -7,6 +7,7 @@ import net.artelnatif.nicko.NickoBukkit; import net.artelnatif.nicko.disguise.NickoProfile; import net.artelnatif.nicko.disguise.ActionResult; import net.artelnatif.nicko.i18n.I18NDict; +import net.artelnatif.nicko.mojang.MojangAPI; import net.artelnatif.nicko.mojang.MojangSkin; import net.minecraft.network.chat.IChatBaseComponent; import net.minecraft.network.protocol.game.*; @@ -84,7 +85,7 @@ public class v1_18_R1 implements Internals { } @Override - public ActionResult updateProfile(Player player, NickoProfile profile, boolean skinChange) { + public ActionResult updateProfile(Player player, NickoProfile profile, boolean skinChange, boolean reset) { final CraftPlayer craftPlayer = (CraftPlayer) player; final EntityPlayer entityPlayer = craftPlayer.getHandle(); final boolean changeOnlyName = profile.getSkin() != null && !profile.getSkin().equalsIgnoreCase(player.getName()); @@ -97,9 +98,10 @@ public class v1_18_R1 implements Internals { if (skinChange || changeOnlyName) { try { - final Optional uuid = NickoBukkit.getInstance().getMojangAPI().getUUID(profile.getSkin()); + final MojangAPI mojang = NickoBukkit.getInstance().getMojangAPI(); + final Optional uuid = mojang.getUUID(profile.getSkin()); if (uuid.isPresent()) { - skin = NickoBukkit.getInstance().getMojangAPI().getSkin(uuid.get()); + skin = (reset ? mojang.getSkinWithoutCaching(uuid.get()) : mojang.getSkin(uuid.get())); if (skin.isPresent()) { final PropertyMap properties = gameProfile.getProperties(); properties.put("textures", new Property("textures", skin.get().value(), skin.get().signature())); diff --git a/v1_18_R2/src/main/java/net/artelnatif/nicko/impl/v1_18_R2.java b/v1_18_R2/src/main/java/net/artelnatif/nicko/impl/v1_18_R2.java index 8889153..3765a1d 100644 --- a/v1_18_R2/src/main/java/net/artelnatif/nicko/impl/v1_18_R2.java +++ b/v1_18_R2/src/main/java/net/artelnatif/nicko/impl/v1_18_R2.java @@ -7,6 +7,7 @@ import net.artelnatif.nicko.NickoBukkit; import net.artelnatif.nicko.disguise.NickoProfile; import net.artelnatif.nicko.disguise.ActionResult; import net.artelnatif.nicko.i18n.I18NDict; +import net.artelnatif.nicko.mojang.MojangAPI; import net.artelnatif.nicko.mojang.MojangSkin; import net.minecraft.core.Holder; import net.minecraft.network.chat.IChatBaseComponent; @@ -84,7 +85,7 @@ public class v1_18_R2 implements Internals { } @Override - public ActionResult updateProfile(Player player, NickoProfile profile, boolean skinChange) { + public ActionResult updateProfile(Player player, NickoProfile profile, boolean skinChange, boolean reset) { final CraftPlayer craftPlayer = (CraftPlayer) player; final EntityPlayer entityPlayer = craftPlayer.getHandle(); final boolean changeOnlyName = profile.getSkin() != null && !profile.getSkin().equalsIgnoreCase(player.getName()); @@ -97,9 +98,10 @@ public class v1_18_R2 implements Internals { if (skinChange || changeOnlyName) { try { - final Optional uuid = NickoBukkit.getInstance().getMojangAPI().getUUID(profile.getSkin()); + final MojangAPI mojang = NickoBukkit.getInstance().getMojangAPI(); + final Optional uuid = mojang.getUUID(profile.getSkin()); if (uuid.isPresent()) { - skin = NickoBukkit.getInstance().getMojangAPI().getSkin(uuid.get()); + skin = (reset ? mojang.getSkinWithoutCaching(uuid.get()) : mojang.getSkin(uuid.get())); if (skin.isPresent()) { final PropertyMap properties = gameProfile.getProperties(); properties.put("textures", new Property("textures", skin.get().value(), skin.get().signature())); diff --git a/v1_19_R1/src/main/java/net/artelnatif/nicko/impl/v1_19_R1.java b/v1_19_R1/src/main/java/net/artelnatif/nicko/impl/v1_19_R1.java index 8146e59..9397406 100644 --- a/v1_19_R1/src/main/java/net/artelnatif/nicko/impl/v1_19_R1.java +++ b/v1_19_R1/src/main/java/net/artelnatif/nicko/impl/v1_19_R1.java @@ -7,6 +7,7 @@ import net.artelnatif.nicko.NickoBukkit; import net.artelnatif.nicko.disguise.NickoProfile; import net.artelnatif.nicko.disguise.ActionResult; import net.artelnatif.nicko.i18n.I18NDict; +import net.artelnatif.nicko.mojang.MojangAPI; import net.artelnatif.nicko.mojang.MojangSkin; import net.minecraft.network.chat.IChatBaseComponent; import net.minecraft.network.protocol.game.*; @@ -86,7 +87,7 @@ public class v1_19_R1 implements Internals { } @Override - public ActionResult updateProfile(Player player, NickoProfile profile, boolean skinChange) { + public ActionResult updateProfile(Player player, NickoProfile profile, boolean skinChange, boolean reset) { final CraftPlayer craftPlayer = (CraftPlayer) player; final EntityPlayer entityPlayer = craftPlayer.getHandle(); final boolean changeOnlyName = profile.getSkin() != null && !profile.getSkin().equalsIgnoreCase(player.getName()); @@ -102,9 +103,10 @@ public class v1_19_R1 implements Internals { if (skinChange || changeOnlyName) { try { - final Optional uuid = NickoBukkit.getInstance().getMojangAPI().getUUID(profile.getSkin()); + final MojangAPI mojang = NickoBukkit.getInstance().getMojangAPI(); + final Optional uuid = mojang.getUUID(profile.getSkin()); if (uuid.isPresent()) { - skin = NickoBukkit.getInstance().getMojangAPI().getSkin(uuid.get()); + skin = (reset ? mojang.getSkinWithoutCaching(uuid.get()) : mojang.getSkin(uuid.get())); if (skin.isPresent()) { final PropertyMap properties = gameProfile.getProperties(); properties.put("textures", new Property("textures", skin.get().value(), skin.get().signature()));