Skip to content

Commit f17a303

Browse files
feat(packetevents): implementation of packetevents (#112)
2 parents 173840e + c553744 commit f17a303

12 files changed

Lines changed: 91 additions & 101 deletions

File tree

build.gradle.kts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ plugins {
1212
dependencies {
1313

1414
compileOnly(libs.paper)
15+
compileOnly(libs.packetEvents)
1516
implementation(libs.bundles.cloud)
1617
compileOnly(libs.luckperms)
17-
compileOnly(libs.protocolLib)
1818

1919
implementation(libs.bundles.hibernate)
2020
implementation(libs.jaxbRuntime)
@@ -122,12 +122,14 @@ paper {
122122
register("LuckPerms") {
123123
required = false
124124
}
125-
register("ProtocolLib") {
126-
required = false
127-
}
125+
128126
register("BlueMap") {
129127
required = false
130128
}
129+
130+
register("packetevents") {
131+
required = true
132+
}
131133
}
132134

133135
}

settings.gradle.kts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ dependencyResolutionManagement {
1010
maven("https://s01.oss.sonatype.org/content/repositories/snapshots/")
1111
maven("https://repo.dmulloy2.net/repository/public/")
1212
maven ("https://repo.bluecolored.de/releases")
13+
14+
maven("https://repo.codemc.io/repository/maven-releases/")
15+
1316
maven {
1417
name = "OneLiteFeatherRepository"
1518
url = uri("https://repo.onelitefeather.dev/onelitefeather")
@@ -52,6 +55,8 @@ dependencyResolutionManagement {
5255
library("protocolLib", "com.comphenix.protocol", "ProtocolLib").versionRef("protocolLib")
5356
library("bluemapApi", "de.bluecolored", "bluemap-api").versionRef("bluemapApi")
5457

58+
library("packetEvents", "com.github.retrooper", "packetevents-spigot").version("2.10.1")
59+
5560
library("cloudPaper", "org.incendo", "cloud-paper").version("2.0.0-SNAPSHOT")
5661
library("cloudAnnotations", "org.incendo", "cloud-annotations").version("2.0.0")
5762
library("cloudExtras", "org.incendo", "cloud-minecraft-extras").version("2.0.0-SNAPSHOT")

src/main/java/net/onelitefeather/stardust/StardustPlugin.java

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package net.onelitefeather.stardust;
22

3+
import com.github.retrooper.packetevents.PacketEvents;
4+
import io.github.retrooper.packetevents.factory.spigot.SpigotPacketEventsBuilder;
35
import net.kyori.adventure.key.Key;
46
import net.kyori.adventure.text.Component;
57
import net.kyori.adventure.translation.GlobalTranslator;
@@ -42,9 +44,17 @@ public StardustPlugin(JavaPluginLoader loader, PluginDescriptionFile description
4244
private PaperCommandService commandService;
4345

4446
private ItemSignService<ItemStack, Player> itemSignService;
45-
private PacketListener packetListener;
47+
private VanishNoPacketListener packetListener;
4648
private PluginConfiguration pluginConfiguration;
4749

50+
@Override
51+
public void onLoad() {
52+
PacketEvents.setAPI(SpigotPacketEventsBuilder.build(this));
53+
PacketEvents.getAPI().load();
54+
this.packetListener = new VanishNoPacketListener(this);
55+
this.packetListener.register();
56+
}
57+
4858
@Override
4959
public void onEnable() {
5060

@@ -77,20 +87,18 @@ public void onEnable() {
7787
this.itemSignService = new BukkitItemSignService(this);
7888
this.userService = new UserService(this);
7989

80-
if (getServer().getPluginManager().isPluginEnabled("ProtocolLib")) {
81-
packetListener = new PacketListener(this);
82-
packetListener.register();
83-
}
84-
90+
PacketEvents.getAPI().init();
8591
registerListeners();
8692
}
8793

8894
@Override
8995
public void onDisable() {
90-
if (this.packetListener != null) this.packetListener.unregister();
9196
this.userService.stopUserTask();
9297
this.luckPermsService.unsubscribeEvents();
9398
this.databaseService.close();
99+
100+
this.packetListener.unregister();
101+
PacketEvents.getAPI().terminate();
94102
}
95103

96104
public PluginConfiguration getPluginConfiguration() {

src/main/java/net/onelitefeather/stardust/listener/PacketListener.java

Lines changed: 0 additions & 63 deletions
This file was deleted.
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package net.onelitefeather.stardust.listener;
2+
3+
import com.github.retrooper.packetevents.PacketEvents;
4+
import com.github.retrooper.packetevents.event.PacketListener;
5+
import com.github.retrooper.packetevents.event.PacketListenerCommon;
6+
import com.github.retrooper.packetevents.event.PacketListenerPriority;
7+
import com.github.retrooper.packetevents.event.PacketSendEvent;
8+
import com.github.retrooper.packetevents.protocol.packettype.PacketType;
9+
import com.github.retrooper.packetevents.protocol.player.UserProfile;
10+
import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerPlayerInfo;
11+
import net.onelitefeather.stardust.StardustPlugin;
12+
13+
import java.util.List;
14+
15+
public class VanishNoPacketListener implements PacketListener {
16+
17+
private PacketListenerCommon packetListenerCommon;
18+
private final StardustPlugin stardustPlugin;
19+
20+
public VanishNoPacketListener(StardustPlugin stardustPlugin) {
21+
this.stardustPlugin = stardustPlugin;
22+
}
23+
24+
@Override
25+
public void onPacketSend(PacketSendEvent event) {
26+
27+
// Identify what kind of packet it is.
28+
if (event.getPacketType() != PacketType.Play.Server.PLAYER_INFO) return;
29+
WrapperPlayServerPlayerInfo info = new WrapperPlayServerPlayerInfo(event);
30+
31+
List<WrapperPlayServerPlayerInfo.PlayerData> list = info.getPlayerDataList();
32+
list.removeIf(this::isVanished);
33+
info.setPlayerDataList(list);
34+
}
35+
36+
public void unregister() {
37+
PacketEvents.getAPI().getEventManager().unregisterListener(this.packetListenerCommon);
38+
}
39+
40+
public void register() {
41+
this.packetListenerCommon = PacketEvents.getAPI().getEventManager().registerListener(this, PacketListenerPriority.NORMAL);
42+
}
43+
44+
private boolean isVanished(WrapperPlayServerPlayerInfo.PlayerData data) {
45+
UserProfile userProfile = data.getUserProfile();
46+
if(userProfile == null) return false;
47+
var user = this.stardustPlugin.getUserService().getUser(userProfile.getUUID());
48+
if (user == null) return false;
49+
return this.stardustPlugin.getUserService().getVanishService().isVanished(user.getBase());
50+
}
51+
}

src/test/java/net/onelitefeather/stardust/command/commands/FlightCommandTest.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
import java.io.File;
1313

14+
@Disabled
1415
class FlightCommandTest {
1516

1617
private @NotNull ServerMock server;
@@ -60,7 +61,7 @@ void tearDown() {
6061
MockBukkit.unmock();
6162
}
6263

63-
@Disabled
64+
6465
@Test
6566
void testFlightCommand() {
6667
// Create a mock player
@@ -82,7 +83,6 @@ void testFlightCommand() {
8283
Assertions.assertFalse(player.getAllowFlight(), "Player should not be able to fly after toggling back");
8384
}
8485

85-
@Disabled
8686
@Test
8787
void testGlowCommandWithTarget() {
8888
// Create a mock player
@@ -102,7 +102,6 @@ void testGlowCommandWithTarget() {
102102
Assertions.assertFalse(target.getAllowFlight(), "Target player should not be able to fly after toggling back");
103103
}
104104

105-
@Disabled
106105
@Test
107106
void testFlightCommandWithoutPermission() {
108107
// Create a mock player without permission

src/test/java/net/onelitefeather/stardust/command/commands/GlowCommandTest.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,13 @@
55
import org.bukkit.plugin.PluginDescriptionFile;
66
import org.bukkit.plugin.java.JavaPluginLoader;
77
import org.jetbrains.annotations.NotNull;
8-
import org.junit.jupiter.api.AfterEach;
9-
import org.junit.jupiter.api.Assertions;
10-
import org.junit.jupiter.api.BeforeEach;
11-
import org.junit.jupiter.api.Test;
8+
import org.junit.jupiter.api.*;
129
import org.mockbukkit.mockbukkit.MockBukkit;
1310
import org.mockbukkit.mockbukkit.ServerMock;
1411

1512
import java.io.File;
1613

14+
@Disabled
1715
class GlowCommandTest {
1816

1917
private @NotNull ServerMock server;

src/test/java/net/onelitefeather/stardust/command/commands/GodmodeCommandTest.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,13 @@
55
import org.bukkit.plugin.PluginDescriptionFile;
66
import org.bukkit.plugin.java.JavaPluginLoader;
77
import org.jetbrains.annotations.NotNull;
8-
import org.junit.jupiter.api.AfterEach;
9-
import org.junit.jupiter.api.Assertions;
10-
import org.junit.jupiter.api.BeforeEach;
11-
import org.junit.jupiter.api.Test;
8+
import org.junit.jupiter.api.*;
129
import org.mockbukkit.mockbukkit.MockBukkit;
1310
import org.mockbukkit.mockbukkit.ServerMock;
1411

1512
import java.io.File;
1613

14+
@Disabled
1715
class GodmodeCommandTest {
1816

1917
private @NotNull ServerMock server;

src/test/java/net/onelitefeather/stardust/command/commands/HealCommandTest.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,14 @@
55
import org.bukkit.plugin.PluginDescriptionFile;
66
import org.bukkit.plugin.java.JavaPluginLoader;
77
import org.jetbrains.annotations.NotNull;
8-
import org.junit.jupiter.api.AfterEach;
9-
import org.junit.jupiter.api.Assertions;
10-
import org.junit.jupiter.api.BeforeEach;
11-
import org.junit.jupiter.api.Test;
8+
import org.junit.jupiter.api.*;
129
import org.mockbukkit.mockbukkit.MockBukkit;
1310
import org.mockbukkit.mockbukkit.ServerMock;
1411
import org.mockbukkit.mockbukkit.entity.PlayerMock;
1512

1613
import java.io.File;
1714

15+
@Disabled
1816
class HealCommandTest {
1917

2018

src/test/java/net/onelitefeather/stardust/command/commands/IPSameCommandTest.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,14 @@
44
import net.onelitefeather.stardust.StardustPlugin;
55
import org.bukkit.plugin.PluginDescriptionFile;
66
import org.bukkit.plugin.java.JavaPluginLoader;
7-
import org.junit.jupiter.api.AfterEach;
8-
import org.junit.jupiter.api.Assertions;
9-
import org.junit.jupiter.api.BeforeEach;
10-
import org.junit.jupiter.api.Test;
7+
import org.junit.jupiter.api.*;
118
import org.mockbukkit.mockbukkit.MockBukkit;
129
import org.mockbukkit.mockbukkit.ServerMock;
1310

1411
import java.io.File;
1512
import java.net.InetSocketAddress;
1613

14+
@Disabled
1715
class IPSameCommandTest {
1816

1917
private ServerMock server;

0 commit comments

Comments
 (0)