Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
e860498
bump: project ver to 1.1.2
3add May 15, 2026
3d9d415
refactor: replace logger with LogUtil for consistent logging and use …
3add May 15, 2026
4c1b46c
fix: useless import
3add May 15, 2026
955d70f
feat: add update checker functionality with configurable options
3add May 15, 2026
f96ed1e
add: name for ExprFakeMetaGravity
3add May 16, 2026
36eecd9
add: aliases for PacketConstructorRegistry (and thus for SecExprNewPa…
3add May 16, 2026
976ffae
remove: UserManager, it wasn't being used
3add May 16, 2026
9bc0d74
fix: naming consistency
3add May 16, 2026
1e61e46
refactor: restructure project for more consistency
3add May 16, 2026
61d2dd4
fix: useless import
3add May 16, 2026
0da046e
fix: make "field" optional for packet field expr (didn't experience a…
3add May 16, 2026
5571760
fix: null safety for ConversionUtil and PacketDefinitionRegistry
3add May 16, 2026
f8b58f2
add: packet support for WrapperPlayClientInteractEntity
3add May 16, 2026
0acba58
add: english.lang for types
3add May 16, 2026
9749424
remove: all ExprMetaProperty related classes
3add May 16, 2026
b85afeb
fix: change packet type to be literal nullable instead of just nullable
3add May 16, 2026
8f45f8f
redo fields
3add May 17, 2026
c8d16c2
a lot of stuff, cba, if you want to see changes. Press the see differ…
3add May 18, 2026
df5a262
a lot of stuff, cba, if you want to see changes. Press the see differ…
3add May 18, 2026
0132a14
Merge remote-tracking branch 'origin/dev' into dev
3add May 18, 2026
6eaa464
small fixes
3add May 18, 2026
a179278
Update README to clarify SkBee integration
3add May 19, 2026
e3f9e4f
Update README.md
3add May 19, 2026
ebcc583
Clarify SkBee dependency for element registration
3add May 19, 2026
72dea59
Clarify entity pose dependency on SkBee
3add May 19, 2026
e4b3627
EntityLib added the required getter.
3add May 19, 2026
ba651b2
Update entity lib and fix building bug
3add May 19, 2026
b2ebb33
Fix inconsistencies within the EffDisplayedSkin effect
3add May 19, 2026
8a5ae75
refine EffFetchSkin pattern
3add May 19, 2026
97a0c29
fix types.skin toString
3add May 19, 2026
9920c9b
Merge remote-tracking branch 'origin/dev' into dev
3add May 19, 2026
f484567
Register pose field conditionally based on addon availability
3add May 19, 2026
cbe1c36
refactor: re-order fields according to the mcwiki
3add May 19, 2026
3d08a65
refactor: re-order fields according to the mcwiki
3add May 19, 2026
e5622d7
refactor: comment out air time field until entity lib issue is resolved
3add May 19, 2026
a36d875
refactor: update metadata field registration to match Minecraft proto…
3add May 19, 2026
4752547
fixes: https://github.com/3add/PacketEventsSK/pull/13#discussion_r326…
3add May 19, 2026
d9c93ba
fixes: https://github.com/3add/PacketEventsSK/pull/13#discussion_r326…
3add May 19, 2026
91899b9
fixes: https://github.com/3add/PacketEventsSK/pull/13#discussion_r326…
3add May 19, 2026
6371905
fixes: https://github.com/3add/PacketEventsSK/pull/13#discussion_r326…
3add May 19, 2026
365fa75
fixes: https://github.com/3add/PacketEventsSK/pull/13#discussion_r326…
3add May 19, 2026
96dbc9b
fixes: https://github.com/3add/PacketEventsSK/pull/13#discussion_r326…
3add May 19, 2026
8d0484e
fixes: https://github.com/3add/PacketEventsSK/pull/13#discussion_r326…
3add May 19, 2026
43b1fe6
fixes: https://github.com/3add/PacketEventsSK/pull/13#discussion_r326…
3add May 19, 2026
09d75ad
fixes: https://github.com/3add/PacketEventsSK/pull/13#discussion_r326…
3add May 19, 2026
5f9acf7
fixes: https://github.com/3add/PacketEventsSK/pull/13#discussion_r326…
3add May 19, 2026
37aa4fe
fixes: https://github.com/3add/PacketEventsSK/pull/13#discussion_r326…
3add May 19, 2026
be2d880
fixes: https://github.com/3add/PacketEventsSK/pull/13#discussion_r326…
3add May 19, 2026
c0778c8
fixes: https://github.com/3add/PacketEventsSK/pull/13#discussion_r326…
3add May 19, 2026
b656e1e
Merge remote-tracking branch 'origin/dev' into dev
3add May 19, 2026
59ace43
fixes: https://github.com/3add/PacketEventsSK/pull/13#discussion_r326…
3add May 19, 2026
5e1a663
fixes: https://github.com/3add/PacketEventsSK/pull/13#discussion_r326…
3add May 19, 2026
c97aea2
just use skbee's way man
3add May 19, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,9 +58,16 @@ Fake entity management and metadata wrappers.
- [GitHub Repository](https://github.com/Tofaa2/EntityLib)
- **Included with PacketEventsSK**
### SkBee
NBT Compound hook.
SkBee provides the NBT Compound hook for fields using NBT.

- [GitHub Repository](https://github.com/ShaneBeee/SkBee)
- [Install Here](https://modrinth.com/plugin/skbee/versions)
### Other
Other elements use common types provided by other frequently used addons.

Such as:
- Entity Pose (provided by: SkBee)

These elements will not register without SkBee present.
## Support
Need help, found a bug, or want to contribute? Join [the Discord](https://discord.gg/CzQ863nxDB)! (alternatively open a PR or an issue)
46 changes: 33 additions & 13 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,16 +1,19 @@
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar

plugins {
java
id("com.gradleup.shadow") version "9.3.0"
id("xyz.jpenilla.run-paper") version "2.3.1"
id("io.papermc.paperweight.userdev") version "2.0.0-beta.21"
}

// Version of PacketEventsSK
val projectVersion = "1.1.1"
// Server version
val serverVersion = "26.1.2"
// Minimum version of Minecraft that PacketEventsSK supports
val apiVersion = "1.21.10"
val projectVersion = "1.1.2"
// API Version
val apiVersion = "26.1.2"
// Minimum paper version that PacketEventsSK supports
val minApiVersion = "1.21.10"
// Where this builds on the server
val serverLocation = "C:/Users/jaspe/Desktop/Servers/packetSKTestServer/plugins"

repositories {
mavenCentral()
Expand All @@ -21,19 +24,24 @@ repositories {
// Skript
maven("https://repo.skriptlang.org/releases")

// EntityLib (entity management)
maven("https://maven.pvphub.me/tofaa")

// Skript Registration (SKR) and SkBee (Skript implementation of NBT-API)
maven("https://jitpack.io")
maven("https://jitpack.io") {
mavenContent {
// JitPack holds an outdated version of entity lib that's private, causes issues so exclude and just use pvphub
excludeGroup("io.github.tofaa2")
}
}

// PacketEvents (packet library)
maven("https://repo.codemc.org/repository/maven-public")

// EntityLib (entity management)
maven("https://maven.pvphub.me/tofaa")
}

dependencies {
// Paper (and NMS)
paperweight.paperDevBundle("$serverVersion.build.+")
paperweight.paperDevBundle("$apiVersion.build.+")

// PacketEvents
compileOnly("com.github.retrooper:packetevents-spigot:2.12.1")
Expand All @@ -48,17 +56,29 @@ dependencies {
implementation("com.github.ShaneBeee:SkriptRegistration:1.4.2")

// EntityLib
implementation("io.github.tofaa2:spigot:3.2.3-SNAPSHOT")
implementation("io.github.tofaa2:spigot:3.3.0-SNAPSHOT")

// bStats Metrics
implementation("org.bstats:bstats-bukkit:3.2.1")
}

tasks {
register<Copy>("buildServer") {
group = "build"

dependsOn("shadowJar")

val shadowJarTask = named<ShadowJar>("shadowJar")

from(shadowJarTask.flatMap { it.archiveFile })
into(file(serverLocation))

outputs.dir(file(serverLocation))
}
processResources {
val props = mapOf(
"projectVersion" to projectVersion,
"apiversion" to apiVersion
"apiversion" to minApiVersion
)

filesNotMatching("assets/**") {
Expand Down
62 changes: 28 additions & 34 deletions src/main/java/dev/threeadd/packeteventssk/AddonLoader.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,27 +2,20 @@

import ch.njol.skript.Skript;
import com.github.shanebeee.skr.Registration;
import dev.threeadd.packeteventssk.api.general.SkBeePacketRegistrations;
import dev.threeadd.packeteventssk.api.util.LogUtil;
import dev.threeadd.packeteventssk.api.util.registry.element.SkriptElementRegistration;
import dev.threeadd.packeteventssk.api.util.registry.element.SkriptElementRegistry;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.TextColor;
import net.kyori.adventure.text.format.TextDecoration;
import org.bukkit.Bukkit;
import org.bukkit.plugin.Plugin;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class AddonLoader {

private static final Logger log = LoggerFactory.getLogger(AddonLoader.class);

private final Plugin skriptPlugin;
private final Registration registration;

protected AddonLoader() {
this.skriptPlugin = Bukkit.getPluginManager().getPlugin("Skript");
this.registration = new Registration("PacketEventsSK", false);
this.registration = new Registration("PacketEventsSK", true);
}

public Registration getRegistration() {
Expand All @@ -31,37 +24,43 @@ public Registration getRegistration() {

protected boolean canLoad() {
if (skriptPlugin == null || !skriptPlugin.isEnabled()) {
log.error("Skript plugin not found or is disabled, Skript elements cannot load,");
LogUtil.error("Skript plugin not found or is disabled, Skript elements cannot load");
return false;
}

if (!Skript.isAcceptRegistrations()) {
log.error("Skript is no longer accepting registrations, PacketEventsSK can no longer load");
LogUtil.error("Skript is no longer accepting registrations, PacketEventsSK can no longer load");
return false;
}

if (isPlugmanReloaded()) {
log.error("PacketEventsSK does not support reloading with PlugMan, stuff will break!");
LogUtil.error("PacketEventsSK does not support reloading with PlugMan, stuff will break!");
return false;
}

try {
Class<?> nbtApiClass = Class.forName("com.shanebeestudios.skbee.api.nbt.NBTApi");
boolean enabled = (boolean) nbtApiClass.getMethod("isEnabled").invoke(null);
if (enabled) {
log.info("Hooked into SkBee NBT using NBT-API");
SkBeePacketRegistrations.register();
}
} catch (ClassNotFoundException ignored) {
log.warn("SkBee not found, PacketEventsSK elements depending on NBT will not be registered");
} catch (Exception e) {
log.error("Failed to hook into SkBee NBT", e);
}

SkriptElementRegistry.INSTANCE.register(PacketEventsSK.getInstance().getPluginConfig());
SkriptElementRegistry.INSTANCE.getRegisteredItems().forEach(this::loadElement);
this.registration.finalizeRegistration();

// ELEMENT COUNT
int typeCount = this.registration.getTypes().size();
int structureCount = this.registration.getStructures().size();
int eventCount = this.registration.getEvents().size();
int sectionCount = this.registration.getSections().size();
int effectCount = this.registration.getEffects().size();
int expressionCount = this.registration.getExpressions().size();
int conditionCount = this.registration.getConditions().size();
int total = eventCount + effectCount + expressionCount + conditionCount + sectionCount + typeCount + structureCount;

LogUtil.info("Loaded %s PacketEventsSK elements", total);
LogUtil.info(" - %s types", typeCount);
LogUtil.info(" - %s structures", structureCount);
LogUtil.info(" - %s events", eventCount);
LogUtil.info(" - %s sections", sectionCount);
LogUtil.info(" - %s effects", effectCount);
LogUtil.info(" - %s expressions", expressionCount);
LogUtil.info(" - %s conditions", conditionCount);

return true;
}

Expand All @@ -71,20 +70,15 @@ private void loadElement(SkriptElementRegistration element) {
logElementStatus(element.identifier(), true);
} catch (Exception e) {
logElementStatus(element.identifier(), false);
log.error("Something went wrong loading {}", element.identifier(), e);
throw new IllegalStateException("Failed to load element " + element.identifier(), e);
}
}

private void logElementStatus(String elementName, boolean success) {
String statusText = success ? "successfully" : "failed";
int color = success ? 0x89F53B : 0xF52A0D;

PacketEventsSK.getInstance().getComponentLogger()
.info(Component.text(elementName + " loaded")
.appendSpace()
.append(Component.text(statusText)
.decorate(TextDecoration.UNDERLINED)
.color(TextColor.color(color))));
String color = success ? "89F53B" : "F52A0D";

LogUtil.mini("loaded %s <#%s><u>%s</u>", elementName, color, statusText);
}
Comment thread
3add marked this conversation as resolved.

private boolean isPlugmanReloaded() {
Expand Down
21 changes: 10 additions & 11 deletions src/main/java/dev/threeadd/packeteventssk/PacketEventsSK.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,31 +4,30 @@
import com.github.retrooper.packetevents.event.PacketListenerPriority;
import dev.threeadd.packeteventssk.api.general.EntityTracker;
import dev.threeadd.packeteventssk.api.general.PlayerSkinRegistry;
import dev.threeadd.packeteventssk.api.general.UserManager;
import dev.threeadd.packeteventssk.api.simple.ChatSessionListener;
import dev.threeadd.packeteventssk.api.simple.GlowingEntityListener;
import dev.threeadd.packeteventssk.api.simple.PlayerSkinListener;
import dev.threeadd.packeteventssk.api.util.LogUtil;
import dev.threeadd.packeteventssk.config.Config;
import dev.threeadd.packeteventssk.config.Configurable;
import dev.threeadd.packeteventssk.metrics.MetricsLoader;
import dev.threeadd.packeteventssk.update.UpdateChecker;
import me.tofaa.entitylib.APIConfig;
import me.tofaa.entitylib.EntityLib;
import me.tofaa.entitylib.spigot.SpigotEntityLibPlatform;
import org.bukkit.Bukkit;
import org.bukkit.plugin.java.JavaPlugin;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public final class PacketEventsSK extends JavaPlugin {

private static final Logger log = LoggerFactory.getLogger(PacketEventsSK.class);
private static PacketEventsSK instance;
private Config config;
private AddonLoader loader;

@Override
public void onLoad() {
long start = System.nanoTime();
log.info("Loading PacketEventsSK");
LogUtil.info("Loading PacketEventsSK");

instance = this;
this.config = new Config(this);
Expand All @@ -52,33 +51,33 @@ public void onLoad() {
EntityLib.init(platform, config);

long end = System.nanoTime();
log.info("Finished loading PacketEventsSK v{} in {}ms", getPluginMeta().getVersion(), (end - start) / 1_000_000F);
LogUtil.info("Finished loading PacketEventsSK v%s in %sms", getPluginMeta().getVersion(), (end - start) / 1_000_000F);
}

@Override
public void onEnable() {
long start = System.nanoTime();
log.info("Starting PacketEventsSK");
LogUtil.info("Starting PacketEventsSK");

this.loader = new AddonLoader();
if (!this.loader.canLoad()) return;

MetricsLoader.loadMetrics(this);

UpdateChecker.enable();

// Exclusive to online-mode servers
if (Bukkit.getServerConfig().isProxyOnlineMode()) {
getServer().getPluginManager().registerEvents(new PlayerSkinRegistry(), this);
}

getServer().getPluginManager().registerEvents(new UserManager(), this);

long end = System.nanoTime();
log.info("Starting up PacketEventsSK v{} in {}ms", getPluginMeta().getVersion(), (end - start) / 1_000_000F);
LogUtil.info("Finished loading PacketEventsSK v%s in %sms", getPluginMeta().getVersion(), (end - start) / 1_000_000F);
}

@Override
public void onDisable() {
log.info("Disabling PacketEventsSK");
LogUtil.info("Disabling PacketEventsSK");
}

public static PacketEventsSK getInstance() {
Expand Down

This file was deleted.

Loading
Loading