From 0bcbcbaa191c7511aea03ca86ead803c73caf147 Mon Sep 17 00:00:00 2001 From: aro Date: Tue, 8 Nov 2022 20:53:23 +0100 Subject: [PATCH] fix: shared object instance causes default profile sharing --- .../nicko/disguise/AppearanceManager.java | 4 ++-- .../net/artelnatif/nicko/disguise/NickoProfile.java | 13 ++++++++++++- .../artelnatif/nicko/storage/PlayerDataStore.java | 2 +- 3 files changed, 15 insertions(+), 4 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 b1f4a86..0ced622 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 @@ -15,12 +15,12 @@ public class AppearanceManager { private AppearanceManager(UUID uuid) { this.player = Bukkit.getPlayer(uuid); - this.profile = dataStore.getData(uuid).orElse(NickoProfile.EMPTY_PROFILE); + this.profile = dataStore.getData(uuid).orElse(NickoProfile.EMPTY_PROFILE.clone()); } private AppearanceManager(String name) { this.player = null; - this.profile = dataStore.getOfflineData(name).orElse(NickoProfile.EMPTY_PROFILE); + this.profile = dataStore.getOfflineData(name).orElse(NickoProfile.EMPTY_PROFILE.clone()); } public static AppearanceManager get(Player player) { diff --git a/nicko-core/src/main/java/net/artelnatif/nicko/disguise/NickoProfile.java b/nicko-core/src/main/java/net/artelnatif/nicko/disguise/NickoProfile.java index 7960730..93c9210 100644 --- a/nicko-core/src/main/java/net/artelnatif/nicko/disguise/NickoProfile.java +++ b/nicko-core/src/main/java/net/artelnatif/nicko/disguise/NickoProfile.java @@ -1,6 +1,6 @@ package net.artelnatif.nicko.disguise; -public class NickoProfile { +public class NickoProfile implements Cloneable { public static final NickoProfile EMPTY_PROFILE = new NickoProfile(null, null); private String name; @@ -39,4 +39,15 @@ public class NickoProfile { ", empty='" + isEmpty() + '\'' + '}'; } + + @Override + public NickoProfile clone() { + Object o; + try { + o = super.clone(); + } catch (CloneNotSupportedException e) { + throw new RuntimeException(e); + } + return (NickoProfile) o; + } } diff --git a/nicko-core/src/main/java/net/artelnatif/nicko/storage/PlayerDataStore.java b/nicko-core/src/main/java/net/artelnatif/nicko/storage/PlayerDataStore.java index 7e60ea5..eacb42f 100644 --- a/nicko-core/src/main/java/net/artelnatif/nicko/storage/PlayerDataStore.java +++ b/nicko-core/src/main/java/net/artelnatif/nicko/storage/PlayerDataStore.java @@ -52,7 +52,7 @@ public class PlayerDataStore { retrievedProfile.ifPresent(profile -> profiles.put(uuid, profile)); return retrievedProfile; } else { - final NickoProfile newProfile = NickoProfile.EMPTY_PROFILE; + final NickoProfile newProfile = NickoProfile.EMPTY_PROFILE.clone(); profiles.put(uuid, newProfile); return Optional.of(newProfile); }