Skip to content

Commit 64cba7d

Browse files
committed
Refactor
Signed-off-by: BT <43831917+calcastor@users.noreply.github.com>
1 parent ab98257 commit 64cba7d

12 files changed

Lines changed: 338 additions & 112 deletions

File tree

buildSrc/src/main/kotlin/buildlogic.java-conventions.gradle.kts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,28 @@ repositories {
1616
maven("https://repo.papermc.io/repository/maven-public/") // Paper builds & paperweight plugin
1717
maven("https://repo.aikar.co/content/groups/aikar/") // Aikar repo
1818
maven("https://repo.codemc.io/repository/maven-releases/") // PacketEvents
19+
exclusiveContent {
20+
forRepository {
21+
maven("https://jitpack.io")
22+
}
23+
filter {
24+
includeGroup("com.github.OvercastCommunity.adventure-platform")
25+
includeGroup("com.github.MinusKube")
26+
}
27+
}
1928
mavenLocal() // Local last
2029
}
2130

2231
dependencies {
2332
api("com.zaxxer:HikariCP:2.4.1") { isTransitive = false }
24-
api("fr.minuskube.inv:smart-invs:1.2.7") { isTransitive = false }
33+
// Latest SmartInvs commit
34+
api("com.github.MinusKube:SmartInvs:9c9dbbee16") { isTransitive = false }
2535
api("redis.clients:jedis:3.5.1")
2636
api("net.kyori:adventure-api:4.26.1")
2737
api("net.kyori:adventure-text-serializer-plain:4.26.1")
28-
api("net.kyori:adventure-platform-bukkit:4.4.1")
38+
// adventure-platform fork with ViaVersion and 1.21.11+ fixes
39+
// https://github.com/OvercastCommunity/adventure-platform
40+
api("com.github.OvercastCommunity.adventure-platform:adventure-platform-bukkit:32fc5eaf06")
2941
api("org.reflections:reflections:0.10.2")
3042

3143
// Annotations

core/src/main/java/dev/pgm/community/Community.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package dev.pgm.community;
22

3+
import static dev.pgm.community.util.FakeIdentityStore.fakeIdentityStore;
4+
35
import dev.pgm.community.commands.graph.CommunityCommandGraph;
46
import dev.pgm.community.events.CommunityEvent;
57
import dev.pgm.community.feature.FeatureManager;
@@ -65,6 +67,7 @@ public void onEnable() {
6567
public void onDisable() {
6668
Platform.MANIFEST.onDisable();
6769
if (features != null) features.disable();
70+
fakeIdentityStore.clearAll();
6871
dev.pgm.community.database.DatabaseExecutor.shutdown();
6972
}
7073

core/src/main/java/dev/pgm/community/nick/feature/PGMNickIntegration.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package dev.pgm.community.nick.feature;
22

3-
import static dev.pgm.community.util.PlayerUtils.PLAYER_UTILS;
3+
import static dev.pgm.community.util.FakeIdentityStore.fakeIdentityStore;
44
import static net.kyori.adventure.text.Component.text;
55

66
import dev.pgm.community.utils.PGMUtils;
@@ -41,7 +41,7 @@ public String getNick(Player player) {
4141

4242
@Override
4343
public Skin getPlayerSkin(@NonNull Player player, Player viewer) {
44-
return PLAYER_UTILS.getPlayerSkin(player, viewer);
44+
return fakeIdentityStore.getSkin(player, viewer);
4545
}
4646

4747
public void cancelTask() {

core/src/main/java/dev/pgm/community/nick/feature/types/NickFeatureCore.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,21 @@ public SkinManager getSkinManager() {
8686
@Override
8787
public void enable() {
8888
super.enable();
89+
skins.enable();
8990
integrate();
9091
}
9192

93+
@Override
94+
public void disable() {
95+
if (pgmNicks != null) {
96+
pgmNicks.cancelTask();
97+
pgmNicks = null;
98+
}
99+
100+
skins.disable();
101+
super.disable();
102+
}
103+
92104
private void integrate() {
93105
if (isPGMEnabled()) {
94106
pgmNicks = new PGMNickIntegration(this);
@@ -183,12 +195,12 @@ public void onJoin(PlayerJoinEvent event) {
183195
.thenAcceptAsync(name -> this.setNick(player.getUniqueId(), name)
184196
.thenAcceptAsync(success -> {
185197
if (success) {
186-
nickedPlayers.put(player.getUniqueId(), nick.getName());
198+
nickedPlayers.put(player.getUniqueId(), name);
187199
Audience.get(player)
188200
.sendWarning(text(
189201
"You had no nickname, so a random one has been assigned",
190202
NamedTextColor.GREEN));
191-
sendLoginNotification(player, nick.getName(), true);
203+
sendLoginNotification(player, name, true);
192204
}
193205
}));
194206
}

core/src/main/java/dev/pgm/community/nick/skin/SkinCache.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package dev.pgm.community.nick.skin;
22

3+
import static dev.pgm.community.util.FakeIdentityStore.fakeIdentityStore;
34
import static dev.pgm.community.util.PlayerUtils.PLAYER_UTILS;
45

56
import com.google.common.cache.Cache;
@@ -66,6 +67,12 @@ public void onPlayerQuit(PlayerQuitEvent event) {
6667
if (canUseSkin(player)) {
6768
offlineSkins.put(player.getUniqueId(), PLAYER_UTILS.getPlayerSkin(player));
6869
}
70+
71+
fakeIdentityStore.clearViewer(player.getUniqueId());
72+
UUID playerId = player.getUniqueId();
73+
String playerName = player.getName();
74+
Bukkit.getScheduler()
75+
.runTask(Community.get(), () -> fakeIdentityStore.clearPlayer(playerId, playerName));
6976
}
7077

7178
@EventHandler(priority = EventPriority.LOW)
@@ -78,9 +85,6 @@ public void refreshNamesOnLogin(PlayerJoinEvent event) {
7885
refreshPlayer(event.getPlayer());
7986
}
8087

81-
// SPORTPAPER STUFF - TODO: Add alternative method and check if server is running SportPaper to
82-
// enable
83-
8488
private void refreshAllViewers(Player player) {
8589
Bukkit.getOnlinePlayers().forEach(viewer -> refreshFakeName(player, viewer));
8690
}
@@ -108,7 +112,6 @@ private void refreshSelfView(Player viewer) {
108112
Bukkit.getOnlinePlayers().forEach(other -> refreshFakeName(other, viewer));
109113
}
110114

111-
// TODO: Figure out how to use without SPORTPAPER API
112115
private void refreshFakeName(Player player, Player viewer) {
113116
boolean nicked = Integration.getNick(player) != null;
114117
boolean areFriends = Integration.isFriend(player, viewer);
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,39 @@
11
package dev.pgm.community.nick.skin;
22

3+
import static dev.pgm.community.util.FakeIdentityStore.fakeIdentityStore;
4+
35
import dev.pgm.community.Community;
46
import org.bukkit.entity.Player;
7+
import org.bukkit.event.HandlerList;
58
import tc.oc.pgm.util.skin.Skin;
69

710
public class SkinManager {
811

912
private final SkinCache cache;
13+
private boolean registered;
1014

1115
public SkinManager() {
1216
this.cache = new SkinCache();
17+
enable();
18+
}
19+
20+
public void enable() {
21+
if (registered) return;
22+
1323
Community.get().registerListener(cache);
24+
registered = true;
1425
}
1526

1627
public void setSkin(Player player, Skin skin) {
1728
cache.onSkinRefresh(player, skin);
1829
}
30+
31+
public void disable() {
32+
if (registered) {
33+
HandlerList.unregisterAll(cache);
34+
registered = false;
35+
}
36+
37+
fakeIdentityStore.clearAll();
38+
}
1939
}

platform/platform-modern/src/main/java/dev/pgm/community/platform/modern/ModernPlayerUtils.java

Lines changed: 19 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package dev.pgm.community.platform.modern;
22

3+
import static dev.pgm.community.util.FakeIdentityStore.fakeIdentityStore;
34
import static dev.pgm.community.util.Supports.Variant.PAPER;
45

56
import com.destroystokyo.paper.profile.CraftPlayerProfile;
@@ -13,9 +14,7 @@
1314
import java.net.URI;
1415
import java.net.URISyntaxException;
1516
import java.util.Arrays;
16-
import java.util.HashMap;
1717
import java.util.List;
18-
import java.util.Map;
1918
import java.util.UUID;
2019
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
2120
import org.bukkit.Material;
@@ -25,7 +24,7 @@
2524
import org.bukkit.inventory.ItemStack;
2625
import org.bukkit.inventory.meta.SkullMeta;
2726
import org.bukkit.profile.PlayerTextures;
28-
import org.bukkit.scoreboard.Team;
27+
import org.jspecify.annotations.NonNull;
2928
import tc.oc.pgm.platform.modern.util.Skins;
3029
import tc.oc.pgm.util.skin.Skin;
3130

@@ -37,37 +36,32 @@ public Skin getPlayerSkin(Player player) {
3736
return Skins.fromProfile(craftPlayer.getProfile());
3837
}
3938

40-
private final Map<UUID, Map<UUID, Skin>> playerSkins = new HashMap<>();
41-
private final Map<UUID, Map<UUID, String>> playerNames = new HashMap<>();
42-
private final Map<UUID, Map<UUID, String>> playerDisplayNames = new HashMap<>();
43-
4439
@Override
4540
public void setFakeNameAndSkin(
4641
Player player, Player viewer, String displayName, String nick, Skin skin) {
47-
String oldName = getPlayerName(player, viewer);
42+
String oldName = fakeIdentityStore.getName(player, viewer);
4843

49-
playerSkins
50-
.computeIfAbsent(player.getUniqueId(), k -> new HashMap<>())
51-
.put(viewer.getUniqueId(), skin);
52-
playerNames
53-
.computeIfAbsent(player.getUniqueId(), k -> new HashMap<>())
54-
.put(viewer.getUniqueId(), nick);
55-
playerDisplayNames
56-
.computeIfAbsent(player.getUniqueId(), k -> new HashMap<>())
57-
.put(viewer.getUniqueId(), displayName);
44+
fakeIdentityStore.set(player, viewer, displayName, nick, skin);
5845

59-
String newName = getPlayerName(player, viewer);
46+
String newName = fakeIdentityStore.getName(player, viewer);
6047

6148
if (!oldName.equals(newName)) {
62-
Team team = viewer.getScoreboard().getEntryTeam(player.getName());
63-
if (team != null) {
64-
// Skip handler in PacketManipulations
65-
sendTeamPacketSilently(viewer, team.getName(), TeamMode.REMOVE_ENTITIES, List.of(oldName));
66-
sendTeamPacketSilently(viewer, team.getName(), TeamMode.ADD_ENTITIES, List.of(newName));
67-
}
49+
updateTeamEntry(viewer, oldName, newName);
6850
}
6951
}
7052

53+
private void updateTeamEntry(@NonNull Player viewer, String oldName, String newName) {
54+
UUID viewerId = viewer.getUniqueId();
55+
String teamName = fakeIdentityStore.getTeamName(viewerId, oldName);
56+
if (teamName == null) return;
57+
58+
sendTeamPacketSilently(viewer, teamName, TeamMode.REMOVE_ENTITIES, List.of(oldName));
59+
fakeIdentityStore.removeTeamEntries(viewerId, teamName, List.of(oldName));
60+
61+
sendTeamPacketSilently(viewer, teamName, TeamMode.ADD_ENTITIES, List.of(newName));
62+
fakeIdentityStore.addTeamEntries(viewerId, teamName, List.of(newName));
63+
}
64+
7165
private void sendTeamPacketSilently(
7266
Player viewer, String teamName, TeamMode mode, java.util.Collection<String> names) {
7367
PacketEvents.getAPI()
@@ -79,40 +73,7 @@ private void sendTeamPacketSilently(
7973
}
8074

8175
@Override
82-
public String getPlayerDisplayName(Player player, Player viewer) {
83-
if (playerDisplayNames.containsKey(player.getUniqueId())) {
84-
Map<UUID, String> uuidStringMap = playerDisplayNames.get(player.getUniqueId());
85-
String displayName = uuidStringMap.get(viewer.getUniqueId());
86-
if (displayName != null) return displayName;
87-
}
88-
89-
return LegacyComponentSerializer.legacySection().serialize(player.displayName());
90-
}
91-
92-
@Override
93-
public String getPlayerName(Player player, Player viewer) {
94-
if (playerNames.containsKey(player.getUniqueId())) {
95-
Map<UUID, String> uuidStringMap = playerNames.get(player.getUniqueId());
96-
String name = uuidStringMap.get(viewer.getUniqueId());
97-
if (name != null) return name;
98-
}
99-
100-
return player.getName();
101-
}
102-
103-
@Override
104-
public Skin getPlayerSkin(Player player, Player viewer) {
105-
if (playerSkins.containsKey(player.getUniqueId())) {
106-
Map<UUID, Skin> uuidSkinMap = playerSkins.get(player.getUniqueId());
107-
Skin skin = uuidSkinMap.get(viewer.getUniqueId());
108-
if (skin != null && !skin.isEmpty()) return skin;
109-
}
110-
111-
return getPlayerSkin(player);
112-
}
113-
114-
@Override
115-
public ItemStack customSkull(String url, String displayName, String... lore) {
76+
public ItemStack customSkull(@NonNull String url, String displayName, String... lore) {
11677
ItemStack head = new ItemStack(Material.PLAYER_HEAD);
11778
if (url.isEmpty()) {
11879
return head;

0 commit comments

Comments
 (0)