ProtocolLib Plugin (1.15.2, 1.14.4) has, for the most part, moved over to Spigot. Certain tasks are impossible to perform with the standard Bukkit API and may require working with and even modifying Minecraft directly. A common technique is to modify incoming and outgoing packets or inject custom packets into the stream. This is quite cumbersome to do, however, and most implementations will break as soon as a new version of Minecraft has been released, mostly due to obfuscation.

Critically, different plugins that use this approach may hook into the same classes, with unpredictable outcomes. More than often this causes plugins to crash, but it may also lead to more subtle bugs.

Support

  • Please create a issue with as much information as possible if you experience a problem that has not already been reported. Comments with a huge stack trace will be deleted.
  • If you need help with the API, please use the issue tracker. If your question cannot be made public for whatever reason (including security bugs), send me a personal message instead.

Commands

Protocol

Main administrative command. Supports the following sub-commands:

  • config: Reload the configuration file.
  • check: Check for new versions on BukkitDev.
  • update: Check for new versions and automatically download the JAR. The server must be restarted for this to take effect.
  • timings: Toggle measuring the amount of CPU time spent by each plugin. See here for more information.
  • listeners: Display what plugins are using ProtocolLib, and the packet types they are intercepting.

All of these commands require the permission protocol.admin.

Example:

/protocol update

Packet

Add or remove a debug packet listener. This is useful for plugin authors who just wants to see when a packet is sent, and with what content.

Sub commands:

  • add: Add a packet listener with a given packet ID.
  • remove: Remove one or every packet listener with the given packet IDs.
  • names: Print the name of every given packet ID.

Parameters (in order):

  • Connection side: Either client or server.
  • Multiple ID ranges: Can be a single packet ID like 14, or a range like 10 – 15. Defaults to 0 – 255 if not specified.
  • Detailed: If TRUE, prints the full packet content.

Example:

/packet add client 10-13 true

For 3.0.0 and above, you should specify the protocol, sender and name instead:

/packet add play server chat true

In 3.4.0-SNAPSHOT and above, you can also display the packet before its modified by any packet listeners:

/packet add play server chat compare

Remove all listeners:

/packet remove client /packet remove server

Note that this command should rarely be used on a production server. Listening to too many packets may crash the server.

Filter

The filter system (introduced in 2.4.1) uses the built-in JavaScript interpreter in JVM 6 (Rhino) to extend the packet command with filtering capabilities – it is now possible to, say, only print entity metadata packet events (packet add server 40) for a given entity ID:

> packet add server 40 true Added listener ListeningWhitelist{priority=MONITOR, packets=[40]} > filter add entity_filter 40 Enter filter program (‘}’ to complete or CANCEL): function(event, packet) { > return packet.a == 1000; >} Added filter entity_filter.

This should be much more convenient than having to compile a test plugin and reload the whole server. Note that this feature is disabled by default for security reasons. To enable it, add “debug: true” to config.yml.

Configuration

A small set of configuration options are available:

Global section

Option Default Description
auto updater.notify true Inform any player with the permission protocol.info when a new version of ProtocolLib is out.
auto updater.download true Automatically download and install the newest version of ProtocolLib. The installation will take effect when the server restarts.
auto updater.delay 43200 The number of seconds between each check for a new update.
auto updater.last 0 This simply records the last time (in seconds since 01.01.1970) an update check was performed. Set it to 0 to force a new update check.
metrics true If TRUE, ProtocolLib will publish anonymous usage data to mcstats.org. Set it to FALSE to opt-out.
background compiler true If TRUE, ProtocolLib will try and improve performance by replacing reflection with compiled code on-the-fly.
ignore version check None Force ProtocolLib to start for a specified Minecraft version, even if it is incompatible.

Compatibility

One of the main goals of this project was to achieve maximum compatibility with Minecraft. And the end result is quite good, it should be resilient against future changes. It’s likely that I won’t have to update ProtocolLib for anything but bug and performance fixes.

How is this possible? It all comes down to reflection in the end. Essentially, no name is hard coded – every field, method, and class is deduced by looking at field types, package names, or parameter types. It’s remarkably consistent across different versions.

Plugins that appear to be compatible

  • NoLagg
  • NoCheatPlus

Plugins known to be compatible

  • SpoutPlugin

Plugins using ProtocolLib

  • Orebfuscator
  • TagAPI
  • DisguiseCraft
  • VanishNoPacket (v3.18.5 and earlier)
  • BkCommonLib
  • CraftBook
  • ChairsReloaded (3.0.2 and earlier)
  • Scavenger
  • TabAPI
  • Individual-Signs
  • ItemRenamer
  • RandomCoords
  • AntiCommandTab
  • Sneaky
  • Spy
  • Statues
  • Seasons
  • Safe Command Block
  • PlayerHider
  • Phantasma Chat Filter
  • Ghost Hunt
  • ReMap
  • AttributeHider
  • uCars
  • uPlanes
  • PropHunt
  • Portable-Horses
  • ClickEdit
  • RageBan
  • ReChat
  • PlayEffect
  • FakePlayers
  • PlayerCountMessage
  • Vampire
  • Murder
  • NoSpy
  • PingNachricht
  • NoCheatPlus
  • ScoreboardStats

Screenshots:

How to install:

  • Download a plugin of your choice.
  • Place the .jar and any other files in your plugins directory.
  • Run the server and wait for it to fully load.
  • Type stop in your Minecraft server console to bring the server to a clean stop.
  • Run the server.
  • All done! Your plugin should be installed and ready to be used.

ProtocolLib Plugin (1.15.2, 1.14.4) Download Links

For All Versions from Minecraft Bukkit 1.12 to Minecraft Bukkit 1.15

 Download from Server 1

Click to rate this post!
[Total: 0 Average: 0]