Skip to content

Commit 94b5681

Browse files
committed
Modern implementations & begin nick support
Signed-off-by: Christopher White <[email protected]>
1 parent 92ec515 commit 94b5681

File tree

10 files changed

+196
-20
lines changed

10 files changed

+196
-20
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ repositories {
1616
maven("https://repo.pgm.fyi/snapshots") // Sportpaper & other pgm-specific stuff
1717
maven("https://hub.spigotmc.org/nexus/content/repositories/snapshots/") // Spigot repo
1818
maven("https://repo.aikar.co/content/groups/aikar/") // aikar repo
19+
maven("https://jitpack.io") // Backup: jitpack
1920
}
2021

2122
dependencies {
@@ -36,6 +37,7 @@ dependencies {
3637
compileOnly("tc.oc.occ:Environment:1.0.0-SNAPSHOT")
3738
compileOnly("org.incendo:cloud-annotations:2.0.0")
3839
compileOnly("org.jetbrains:annotations:22.0.0")
40+
compileOnly("com.github.dmulloy2:ProtocolLib:5.3.0")
3941

4042
// Minecraft includes these (or equivalents)
4143
compileOnly("com.mojang:authlib:6.0.54")

core/src/main/java/dev/pgm/community/mutations/MutationType.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,8 @@
22

33
import static net.kyori.adventure.text.Component.text;
44

5-
<<<<<<< HEAD
65
import dev.pgm.community.utils.compatibility.Enchantments;
76
import dev.pgm.community.utils.compatibility.Materials;
8-
=======
9-
import dev.pgm.community.utils.compatability.Enchantments;
10-
import dev.pgm.community.utils.compatability.Materials;
11-
>>>>>>> 462d7dd (Add sportpaper platform implementation)
127
import net.kyori.adventure.text.Component;
138
import net.kyori.adventure.text.event.HoverEvent;
149
import net.kyori.adventure.text.format.NamedTextColor;

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,9 +121,9 @@ private void refreshFakeName(Player player, Player viewer) {
121121
String displayName = PGM.get()
122122
.getNameDecorationRegistry()
123123
.getDecoratedName(player, matchPlayer.getParty().getColor());
124-
PLAYER_UTILS.setFakeNameAndSkin(player, viewer, displayName, nick);
124+
PLAYER_UTILS.setFakeNameAndSkin(player, viewer, displayName, nick, getSkin(player));
125125
} else {
126-
PLAYER_UTILS.setFakeNameAndSkin(player, viewer, null, null);
126+
PLAYER_UTILS.setFakeNameAndSkin(player, viewer, null, null, null);
127127
}
128128
}
129129

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

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import dev.pgm.community.util.Effects;
66
import dev.pgm.community.util.Supports;
77
import org.bukkit.Location;
8+
import org.bukkit.Particle;
9+
import org.bukkit.Sound;
810
import org.bukkit.entity.Player;
911
import org.bukkit.entity.TNTPrimed;
1012

@@ -14,14 +16,22 @@ public class ModernEffects implements Effects {
1416
public void dummy() {}
1517

1618
@Override
17-
public void tntRainExplode(TNTPrimed tnt) {}
19+
public void tntRainExplode(TNTPrimed tnt) {
20+
tnt.getWorld().spawnParticle(Particle.LAVA, tnt.getLocation(), 10, 1);
21+
}
1822

1923
@Override
20-
public void mobSpawnEffect(Location loc) {}
24+
public void mobSpawnEffect(Location loc) {
25+
loc.getWorld().spawnParticle(Particle.FLAME, loc, 10, 1);
26+
}
2127

2228
@Override
23-
public void explosionEffect(Location loc) {}
29+
public void explosionEffect(Location loc) {
30+
loc.getWorld().spawnParticle(Particle.LAVA, loc, 15);
31+
}
2432

2533
@Override
26-
public void batTakeoffSound(Player player) {}
34+
public void batTakeoffSound(Player player) {
35+
player.playSound(player.getLocation(), Sound.ENTITY_BAT_TAKEOFF, 2, 1.2f);
36+
}
2737
}

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

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,20 @@
44

55
import dev.pgm.community.util.InventoryUtils;
66
import dev.pgm.community.util.Supports;
7+
import java.util.List;
78
import java.util.Random;
9+
import java.util.stream.Collectors;
10+
import java.util.stream.Stream;
811
import org.bukkit.Material;
912
import org.bukkit.attribute.Attribute;
1013
import org.bukkit.attribute.AttributeModifier;
14+
import org.bukkit.inventory.ItemFlag;
1115
import org.bukkit.inventory.ItemStack;
1216
import org.bukkit.inventory.meta.ItemMeta;
17+
import org.bukkit.inventory.meta.PotionMeta;
18+
import org.bukkit.potion.PotionType;
19+
import tc.oc.pgm.kits.tag.ItemTags;
20+
import tc.oc.pgm.util.bukkit.BukkitUtils;
1321

1422
@Supports(value = PAPER, minVersion = "1.20.6")
1523
public class ModernInventoryUtils implements InventoryUtils {
@@ -20,6 +28,24 @@ public void addAttributeModifier(ItemMeta meta, Attribute attribute, AttributeMo
2028

2129
@Override
2230
public ItemStack getRandomPotion(boolean splash, Random random) {
23-
return new ItemStack(Material.POTION);
31+
List<PotionType> safeTypes = Stream.of(PotionType.values())
32+
.filter(p -> switch (p) {
33+
case WATER, MUNDANE, THICK, AWKWARD, WEAVING, OOZING, INFESTED -> false;
34+
default -> true;
35+
})
36+
.collect(Collectors.toList());
37+
PotionType randomType = safeTypes.get(random.nextInt(safeTypes.size()));
38+
ItemStack item = new ItemStack(splash ? Material.SPLASH_POTION : Material.POTION);
39+
if (item.getItemMeta() instanceof PotionMeta meta) {
40+
meta.setBasePotionType(randomType);
41+
item.setItemMeta(meta);
42+
}
43+
44+
ItemMeta meta = item.getItemMeta();
45+
meta.setDisplayName(BukkitUtils.colorize("&d&lMystery Potion"));
46+
meta.addItemFlags(ItemFlag.values());
47+
item.setItemMeta(meta);
48+
ItemTags.PREVENT_SHARING.set(item, true);
49+
return item;
2450
}
2551
}

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,7 @@
1010
@Supports(value = PAPER, minVersion = "1.20.6", priority = HIGHEST)
1111
public class ModernPlatform implements Platform.Manifest {
1212
@Override
13-
public void onEnable(Plugin plugin) {}
13+
public void onEnable(Plugin plugin) {
14+
new PacketManipulations(plugin);
15+
}
1416
}

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

Lines changed: 52 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44

55
import dev.pgm.community.util.PlayerUtils;
66
import dev.pgm.community.util.Supports;
7+
import java.util.HashMap;
8+
import java.util.Map;
9+
import java.util.UUID;
710
import org.bukkit.craftbukkit.entity.CraftPlayer;
811
import org.bukkit.entity.Player;
912
import tc.oc.pgm.platform.modern.util.Skins;
@@ -17,8 +20,55 @@ public Skin getPlayerSkin(Player player) {
1720
return Skins.fromProfile(craftPlayer.getProfile());
1821
}
1922

23+
private final Map<UUID, Map<UUID, Skin>> playerSkins = new HashMap<>();
24+
private final Map<UUID, Map<UUID, String>> playerNames = new HashMap<>();
25+
private final Map<UUID, Map<UUID, String>> playerDisplayNames = new HashMap<>();
26+
27+
@Override
28+
public void setFakeNameAndSkin(
29+
Player player, Player viewer, String displayName, String nick, Skin skin) {
30+
playerSkins
31+
.computeIfAbsent(player.getUniqueId(), k -> new HashMap<>())
32+
.put(viewer.getUniqueId(), skin);
33+
playerNames
34+
.computeIfAbsent(player.getUniqueId(), k -> new HashMap<>())
35+
.put(viewer.getUniqueId(), nick);
36+
playerDisplayNames
37+
.computeIfAbsent(player.getUniqueId(), k -> new HashMap<>())
38+
.put(viewer.getUniqueId(), displayName);
39+
}
40+
41+
@Override
42+
public String getPlayerDisplayName(Player player, Player viewer) {
43+
if (playerDisplayNames.containsKey(player.getUniqueId())) {
44+
Map<UUID, String> uuidStringMap = playerDisplayNames.get(player.getUniqueId());
45+
String displayName = uuidStringMap.get(viewer.getUniqueId());
46+
return displayName == null ? player.getDisplayName() : displayName;
47+
}
48+
return player.getDisplayName();
49+
}
50+
51+
@Override
52+
public String getPlayerName(Player player, Player viewer) {
53+
if (playerNames.containsKey(player.getUniqueId())) {
54+
Map<UUID, String> uuidStringMap = playerNames.get(player.getUniqueId());
55+
String name = uuidStringMap.get(viewer.getUniqueId());
56+
return name == null ? player.getName() : name;
57+
}
58+
return player.getName();
59+
}
60+
2061
@Override
21-
public void setFakeNameAndSkin(Player player, Player viewer, String displayName, String nick) {
22-
// TODO
62+
public Skin getPlayerSkin(Player player, Player viewer) {
63+
return null;
64+
// if (playerSkins.containsKey(player.getUniqueId())) {
65+
// Map<UUID, Skin> uuidSkinMap = playerSkins.get(player.getUniqueId());
66+
// Skin skin = uuidSkinMap.get(viewer.getUniqueId());
67+
// if (skin == null) {
68+
// return new Skin(player.getPlayerProfile().getTextures())
69+
// }
70+
// return skin == null ? Skin.EMPTY : skin;
71+
// }
72+
// return Skin.EMPTY;
2373
}
2474
}
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package dev.pgm.community.platform.modern;
2+
3+
import com.comphenix.protocol.PacketType;
4+
import com.comphenix.protocol.events.ListenerPriority;
5+
import com.comphenix.protocol.events.PacketEvent;
6+
import com.comphenix.protocol.wrappers.EnumWrappers;
7+
import com.comphenix.protocol.wrappers.PlayerInfoData;
8+
import com.comphenix.protocol.wrappers.WrappedChatComponent;
9+
import dev.pgm.community.util.PlayerUtils;
10+
import java.util.List;
11+
import java.util.Map;
12+
import java.util.UUID;
13+
import org.apache.commons.lang3.StringUtils;
14+
import org.bukkit.Bukkit;
15+
import org.bukkit.entity.Player;
16+
import org.bukkit.plugin.Plugin;
17+
import tc.oc.pgm.platform.modern.packets.PacketSender;
18+
import tc.oc.pgm.platform.modern.util.Packets;
19+
20+
public class PacketManipulations implements PacketSender {
21+
22+
public PacketManipulations(Plugin plugin) {
23+
Packets.register(
24+
plugin,
25+
ListenerPriority.LOWEST,
26+
Map.of(PacketType.Play.Server.PLAYER_INFO, this::handlePlayerInfo));
27+
}
28+
29+
private void handlePlayerInfo(PacketEvent event) {
30+
Player viewer = event.getPlayer();
31+
32+
if (event
33+
.getPacket()
34+
.getPlayerInfoActions()
35+
.read(0)
36+
.contains(EnumWrappers.PlayerInfoAction.ADD_PLAYER)) {
37+
List<PlayerInfoData> infoList = event.getPacket().getPlayerInfoDataLists().read(1);
38+
event
39+
.getPacket()
40+
.getPlayerInfoDataLists()
41+
.write(
42+
1,
43+
infoList.stream()
44+
.map((playerInfoData -> {
45+
UUID playerId = playerInfoData.getProfileId();
46+
Player player = Bukkit.getPlayer(playerId);
47+
if (player == null || player.equals(viewer) || !player.isOnline()) {
48+
return playerInfoData;
49+
}
50+
51+
String playerDisplayName =
52+
PlayerUtils.PLAYER_UTILS.getPlayerDisplayName(player, viewer);
53+
String playerName = PlayerUtils.PLAYER_UTILS.getPlayerName(player, viewer);
54+
55+
if (StringUtils.isBlank(playerName) || StringUtils.isBlank(playerDisplayName)) {
56+
return playerInfoData;
57+
}
58+
59+
return new PlayerInfoData(
60+
playerId,
61+
playerInfoData.getLatency(),
62+
playerInfoData.isListed(),
63+
playerInfoData.getGameMode(),
64+
playerInfoData.getProfile().withName(playerName),
65+
WrappedChatComponent.fromLegacyText(playerDisplayName));
66+
}))
67+
.toList());
68+
}
69+
}
70+
}

platform/platform-sportpaper/src/main/java/dev/pgm/community/platform/sportpaper/SpPlayerUtils.java

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,25 @@ public Skin getPlayerSkin(Player player) {
1919
}
2020

2121
@Override
22-
public void setFakeNameAndSkin(Player player, Player viewer, String displayName, String nick) {
22+
public void setFakeNameAndSkin(
23+
Player player, Player viewer, String displayName, String nick, Skin skin) {
2324
player.setFakeDisplayName(viewer, displayName);
24-
Skin playerSkin = getPlayerSkin(player);
25-
player.setFakeNameAndSkin(
26-
viewer, nick, new org.bukkit.Skin(playerSkin.getData(), playerSkin.getSignature()));
25+
player.setFakeNameAndSkin(viewer, nick, player.getSkin(viewer));
26+
}
27+
28+
@Override
29+
public String getPlayerDisplayName(Player player, Player viewer) {
30+
return player.getDisplayName(viewer);
31+
}
32+
33+
@Override
34+
public String getPlayerName(Player player, Player viewer) {
35+
return player.getName(viewer);
36+
}
37+
38+
@Override
39+
public Skin getPlayerSkin(Player player, Player viewer) {
40+
org.bukkit.Skin skin = player.getSkin(viewer);
41+
return new Skin(skin.getData(), skin.getSignature());
2742
}
2843
}

util/src/main/java/dev/pgm/community/util/PlayerUtils.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,11 @@ public interface PlayerUtils {
88

99
Skin getPlayerSkin(Player player);
1010

11-
void setFakeNameAndSkin(Player player, Player viewer, String displayName, String nick);
11+
void setFakeNameAndSkin(Player player, Player viewer, String displayName, String nick, Skin skin);
12+
13+
String getPlayerDisplayName(Player player, Player viewer);
14+
15+
String getPlayerName(Player player, Player viewer);
16+
17+
Skin getPlayerSkin(Player player, Player viewer);
1218
}

0 commit comments

Comments
 (0)