From 690aeadf67f3af821a7ea567a8aabd2a5cc7eb84 Mon Sep 17 00:00:00 2001 From: aro <pantoine.rochas@gmail.com> Date: Thu, 19 Jan 2023 20:08:10 +0100 Subject: [PATCH] feat: do not cache skin reset --- .../net/artelnatif/nicko/disguise/AppearanceManager.java | 8 ++++++-- .../main/java/net/artelnatif/nicko/impl/Internals.java | 2 +- .../main/java/net/artelnatif/nicko/mojang/MojangAPI.java | 4 ++++ .../src/main/java/net/artelnatif/nicko/impl/v1_17_R1.java | 8 +++++--- .../src/main/java/net/artelnatif/nicko/impl/v1_18_R1.java | 8 +++++--- .../src/main/java/net/artelnatif/nicko/impl/v1_18_R2.java | 8 +++++--- .../src/main/java/net/artelnatif/nicko/impl/v1_19_R1.java | 8 +++++--- 7 files changed, 31 insertions(+), 15 deletions(-) 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<MojangSkin> getSkinWithoutCaching(String uuid) throws IOException { + return getSkinFromMojang(uuid); + } + public Optional<String> 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<String> uuid = NickoBukkit.getInstance().getMojangAPI().getUUID(profile.getSkin()); + final MojangAPI mojang = NickoBukkit.getInstance().getMojangAPI(); + final Optional<String> 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<String> uuid = NickoBukkit.getInstance().getMojangAPI().getUUID(profile.getSkin()); + final MojangAPI mojang = NickoBukkit.getInstance().getMojangAPI(); + final Optional<String> 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<String> uuid = NickoBukkit.getInstance().getMojangAPI().getUUID(profile.getSkin()); + final MojangAPI mojang = NickoBukkit.getInstance().getMojangAPI(); + final Optional<String> 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<String> uuid = NickoBukkit.getInstance().getMojangAPI().getUUID(profile.getSkin()); + final MojangAPI mojang = NickoBukkit.getInstance().getMojangAPI(); + final Optional<String> 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()));