vhagedorn / Packet

Minecraft packet listener utility

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Packet

A simple netty packet listener framework.

Cerebral dysfunction

For those of you who are mentally impaired: this requires NMS. It's way faster than using some garbage API like ProtocolLib, which uses reflection.1

1If you disagree with the fact that 1.8 is dead then please leave immediately and use TinyProtocol or even (God have mercy) ProtocolLib.

Dependency

With all that out of the way let's get down to business.

You can either

  • Copy the literally only 3 classes directly into your project (recommended).
  • Follow the below procedure to add this as a dependency to your project (cooler).

To install as a dependency

  1. Clone this repo into a new folder
  2. Init gradle
  3. publishToMavenLocal
git clone https://github.com/RuthlessJailer/Packet/
cd Packet
gradle init
./gradlew publishToMavenLocal

With that out of the way you can now add it to your build script.

Gradle 😎

repositories {
	mavenCentral()
	mavenLocal()
	
	// More repositories below...
}

dependencies {
	implementation 'com.ruthlessjailer.api.packet:Packet:1.0.0'
	
	// More dependencies below...
}

Maven 🤮

<dependencies>
	<dependency>
		<groupId>com.ruthlessjailer.api.packet</groupId>
		<artifactId>Packet</artifactId>
		<version>1.0.0</version>
		<scope>compile</scope>
	</dependency>
	    
	<!-- More dependencies below... -->
	
</dependencies>

Example usage

Main:

/**
 * @author vadim
 */
public class ListenerPlugin extends JavaPlugin {
	private static ListenerPlugin badDesignPatterns;

	public final ListenerManager listenerManager = new PacketInjector();

	@Override
	public void onEnable() {
		badDesignPatterns = this;
		listenerManager.listen(this); // begin listening

		// ~~standard~~ boring register method
		listenerManager.register(new SpecialPacketListener());
	}

	@Override
	public void onDisable() {
		listenerManager.drop(this); // stop listening
	}

	public static ListenerPlugin singletonCringe() { return badDesignPatterns; }
}

Listener:

/**
 * @author vadim
 */
public final class SpecialPacketListener implements PacketListener<SpecialPacket> {

	// Long, boring way of doing it -_-

	@Override
	public @NotNull
	Class<SpecialPacket> getType() {
		return SpecialPacket.class;
	}

	@Override
	public @Nullable
	SpecialPacket mutate(final Player player, final SpecialPacket packet) {
		if (player.getName() == "RuthlessJailer") { // very cool
			return packet;
		} else { // pleb
			return null;
		}
	}

	// Lazy way to do it 😎
	// (this can be literally anywhere so long as the plugin has loaded)

	static { // ✨ static blocks ✨
		ListenerManager listenerManager = ListenerPlugin.singletonCringe().listenerManager;

		// ~~convenience~~ chad register method
		listenerManager.register(SpecialPacket.class, (player, packet) -> {

			// returning `packet` will passively monitor all incoming or outgoing SpecialPackets
			// returning `null` will "cancel" the "event", preventing it from going to the server or client as this listener takes priority over the server's packet handler

			return packet;
		});
	}

}

About

Minecraft packet listener utility


Languages

Language:Java 100.0%