ModsJava
Protocoller API
Java mod listed for Minecraft 1.8–1.19. Downloads from the MC Java Mods app on Android.
⬇ Download on Spigot
Protocoller
This is a very easy-to-use "interceptor" of outgoing / incoming Minecraft packets.
Sometimes it is not possible to do anything using standard APIs, with this plugin, you get the ability to intercept packets when they are sent/received and edit them, which greatly expands the possibilities of the plugin developer. You can also create your own packets, which is also simple here, all (almost) Minecraft classes necessary for creating packets are present and deobfuscated, and everything is also adapted for multiversion.
This is a very easy-to-use "interceptor" of outgoing / incoming Minecraft packets.
Sometimes it is not possible to do anything using standard APIs, with this plugin, you get the ability to intercept packets when they are sent/received and edit them, which greatly expands the possibilities of the plugin developer. You can also create your own packets, which is also simple here, all (almost) Minecraft classes necessary for creating packets are present and deobfuscated, and everything is also adapted for multiversion.
API example:
(Or on GitHub)
(Or on GitHub)
Spoiler: MainClass.java
Code (Java):
package
ExamplePlugin
;
import net.alis.protocoller.Protocoller ;
import net.alis.protocoller.ProtocollerClient ;
import net.alis.protocoller.event.PacketEventsManager ;
import net.alis.protocoller.event.impl.ManagerType ;
import net.alis.protocoller.plugin.exception.BannedClientException ;
import org.bukkit.plugin.Plugin ;
import org.bukkit.plugin.java.JavaPlugin ;
public final class MainClass extends JavaPlugin {
public static ProtocollerClient protocollerApi ;
public static PacketEventsManager syncEventManager ;
public static PacketEventsManager asyncEventManager ;
@Override
public void onEnable ( ) {
try {
protocollerApi = Protocoller. get ( ). registerClient ( (Plugin ) this ) ;
} catch (BannedClientException e ) {
throw new RuntimeException (e ) ;
}
syncEventManager = protocollerApi. getEventManager (ManagerType. SYNCHRONOUS ) ;
asyncEventManager = protocollerApi. getEventManager (ManagerType. ASYNCHRONOUS ) ;
syncEventManager. registerListener (protocollerApi, new ExampleSyncPacketListener ( ) ) ;
asyncEventManager. registerListener (protocollerApi, new ExampleAsyncPacketListener ( ) ) ;
}
@Override
public void onDisable ( ) { }
}
import net.alis.protocoller.Protocoller ;
import net.alis.protocoller.ProtocollerClient ;
import net.alis.protocoller.event.PacketEventsManager ;
import net.alis.protocoller.event.impl.ManagerType ;
import net.alis.protocoller.plugin.exception.BannedClientException ;
import org.bukkit.plugin.Plugin ;
import org.bukkit.plugin.java.JavaPlugin ;
public final class MainClass extends JavaPlugin {
public static ProtocollerClient protocollerApi ;
public static PacketEventsManager syncEventManager ;
public static PacketEventsManager asyncEventManager ;
@Override
public void onEnable ( ) {
try {
protocollerApi = Protocoller. get ( ). registerClient ( (Plugin ) this ) ;
} catch (BannedClientException e ) {
throw new RuntimeException (e ) ;
}
syncEventManager = protocollerApi. getEventManager (ManagerType. SYNCHRONOUS ) ;
asyncEventManager = protocollerApi. getEventManager (ManagerType. ASYNCHRONOUS ) ;
syncEventManager. registerListener (protocollerApi, new ExampleSyncPacketListener ( ) ) ;
asyncEventManager. registerListener (protocollerApi, new ExampleAsyncPacketListener ( ) ) ;
}
@Override
public void onDisable ( ) { }
}
Spoiler: ExampleAsyncPacketListener.java
Code (Java):
package
ExamplePlugin
;
import net.alis.protocoller.event.async.AsyncPacketLoginReceiveEvent ;
import net.alis.protocoller.event.impl.PacketEventHandler ;
import net.alis.protocoller.event.impl.PacketEventPriority ;
import net.alis.protocoller.event.impl.PacketListener ;
import net.alis.protocoller.packet.PacketType ;
import net.alis.protocoller.packet.packets.login.PacketLoginInStart ;
import net.alis.protocoller.plugin.managers.LogsManager ;
import net.alis.protocoller.samples.authlib.GameProfile ;
public class ExampleAsyncPacketListener implements PacketListener {
@PacketEventHandler (eventPriority = PacketEventPriority. NORMAL, ignoreCancelled = true )
public void onPlayerLoginStart (AsyncPacketLoginReceiveEvent event ) {
if (event. getPacketType ( ) == PacketType. Login. Client. START ) {
PacketLoginInStart loginPack = new PacketLoginInStart (event. getData ( ) ) ;
GameProfile prePlayerData = loginPack. getGameProfile ( ) ;
LogsManager. get ( ). getLogger ( ). info ( "Player \"" + prePlayerData. getName ( ) + "\" will join the server soon" ) ;
}
}
}
import net.alis.protocoller.event.async.AsyncPacketLoginReceiveEvent ;
import net.alis.protocoller.event.impl.PacketEventHandler ;
import net.alis.protocoller.event.impl.PacketEventPriority ;
import net.alis.protocoller.event.impl.PacketListener ;
import net.alis.protocoller.packet.PacketType ;
import net.alis.protocoller.packet.packets.login.PacketLoginInStart ;
import net.alis.protocoller.plugin.managers.LogsManager ;
import net.alis.protocoller.samples.authlib.GameProfile ;
public class ExampleAsyncPacketListener implements PacketListener {
@PacketEventHandler (eventPriority = PacketEventPriority. NORMAL, ignoreCancelled = true )
public void onPlayerLoginStart (AsyncPacketLoginReceiveEvent event ) {
if (event. getPacketType ( ) == PacketType. Login. Client. START ) {
PacketLoginInStart loginPack = new PacketLoginInStart (event. getData ( ) ) ;
GameProfile prePlayerData = loginPack. getGameProfile ( ) ;
LogsManager. get ( ). getLogger ( ). info ( "Player \"" + prePlayerData. getName ( ) + "\" will join the server soon" ) ;
}
}
}
Spoiler: ExampleSyncPacketListener.java
Code (Java):
package
ExamplePlugin
;
import net.alis.protocoller.NetworkPlayer ;
import net.alis.protocoller.event.impl.PacketListener ;
import net.alis.protocoller.event.sync.PacketPlaySendEvent ;
import net.alis.protocoller.packet.PacketType ;
import net.alis.protocoller.packet.packets.game.PacketPlayOutAbilities ;
import org.bukkit.entity.Player ;
public class ExampleSyncPacketListener implements PacketListener {
public void yourCustomMethodName (PacketPlaySendEvent event ) {
if (event. getPacketType ( ) == PacketType. Play. Server. ABILITIES ) {
PacketPlayOutAbilities abilities = new PacketPlayOutAbilities (event. getData ( ) ) ;
NetworkPlayer networkPlayer = event. getNetworkPlayer ( ) ;
Player player = event. getNetworkPlayer ( ). getBukkitPlayer ( ) ;
if (player. getName ( ). equalsIgnoreCase ( "ALis" ) ) {
if ( !abilities. isCanFly ( ) ) abilities. setCanFly ( true ) ;
event. setPacket (abilities ) ;
}
return ;
}
}
}
import net.alis.protocoller.NetworkPlayer ;
import net.alis.protocoller.event.impl.PacketListener ;
import net.alis.protocoller.event.sync.PacketPlaySendEvent ;
import net.alis.protocoller.packet.PacketType ;
import net.alis.protocoller.packet.packets.game.PacketPlayOutAbilities ;
import org.bukkit.entity.Player ;
public class ExampleSyncPacketListener implements PacketListener {
public void yourCustomMethodName (PacketPlaySendEvent event ) {
if (event. getPacketType ( ) == PacketType. Play. Server. ABILITIES ) {
PacketPlayOutAbilities abilities = new PacketPlayOutAbilities (event. getData ( ) ) ;
NetworkPlayer networkPlayer = event. getNetworkPlayer ( ) ;
Player player = event. getNetworkPlayer ( ). getBukkitPlayer ( ) ;
if (player. getName ( ). equalsIgnoreCase ( "ALis" ) ) {
if ( !abilities. isCanFly ( ) ) abilities. setCanFly ( true ) ;
event. setPacket (abilities ) ;
}
return ;
}
}
}
Spoiler: NetworkPlayerWorkExample.java
Code (Java):
package
ExamplePlugin
;
import net.alis.protocoller.NetworkPlayer ;
import net.alis.protocoller.NetworkServer ;
import net.alis.protocoller.packet.packets.game.PacketPlayOutChat ;
import net.alis.protocoller.plugin.enums.Version ;
import net.alis.protocoller.samples.network.NetworkManager ;
import net.alis.protocoller.samples.network.PlayerConnection ;
import net.alis.protocoller.samples.network.chat.ChatComponent ;
import net.md_5.bungee.api.MessageType ;
import net.md_5.bungee.api.chat.HoverEvent ;
import org.bukkit.Bukkit ;
import java.util.UUID ;
public class NetworkPlayerWorkExample {
public void networkPlayerWorking ( ) {
NetworkServer server = MainClass. protocollerApi. getServer ( ) ;
NetworkPlayer player = server. getPlayer (UUID. fromString ( "ALis" ) ) ;
NetworkPlayer player1 = server. getPlayer ( "ALis" ) ;
NetworkPlayer player2 = server. getPlayer (Bukkit. getPlayer ( "ALis" ) ) ;
PlayerConnection connection = player. getConnection ( ) ;
int ping = player. getPing ( ) ;
int protocol = player. getVersion ( ). getProtocol ( ) ;
String versionName = player. getVersion ( ). asString ( ) ;
ChatComponent component = new ChatComponent ( "Welcome to the " ) ;
component. append ( "server " + player. getName ( ) ). setHoverEvent (HoverEvent. Action. SHOW_TEXT, "You amazing!" ) ;
connection. sendPacket ( new PacketPlayOutChat (component, MessageType. CHAT, player. getUniqueId ( ) ) ) ;
NetworkManager manager = connection. getNetworkManager ( ) ;
}
}
import net.alis.protocoller.NetworkPlayer ;
import net.alis.protocoller.NetworkServer ;
import net.alis.protocoller.packet.packets.game.PacketPlayOutChat ;
import net.alis.protocoller.plugin.enums.Version ;
import net.alis.protocoller.samples.network.NetworkManager ;
import net.alis.protocoller.samples.network.PlayerConnection ;
import net.alis.protocoller.samples.network.chat.ChatComponent ;
import net.md_5.bungee.api.MessageType ;
import net.md_5.bungee.api.chat.HoverEvent ;
import org.bukkit.Bukkit ;
import java.util.UUID ;
public class NetworkPlayerWorkExample {
public void networkPlayerWorking ( ) {
NetworkServer server = MainClass. protocollerApi. getServer ( ) ;
NetworkPlayer player = server. getPlayer (UUID. fromString ( "ALis" ) ) ;
NetworkPlayer player1 = server. getPlayer ( "ALis" ) ;
NetworkPlayer player2 = server. getPlayer (Bukkit. getPlayer ( "ALis" ) ) ;
PlayerConnection connection = player. getConnection ( ) ;
int ping = player. getPing ( ) ;
int protocol = player. getVersion ( ). getProtocol ( ) ;
String versionName = player. getVersion ( ). asString ( ) ;
ChatComponent component = new ChatComponent ( "Welcome to the " ) ;
component. append ( "server " + player. getName ( ) ). setHoverEvent (HoverEvent. Action. SHOW_TEXT, "You amazing!" ) ;
connection. sendPacket ( new PacketPlayOutChat (component, MessageType. CHAT, player. getUniqueId ( ) ) ) ;
NetworkManager manager = connection. getNetworkManager ( ) ;
}
}
Spoiler: NetworkServerWorkExample.java
Code (Java):
package
ExamplePlugin
;
import io.netty.channel.ChannelFuture ;
import net.alis.protocoller.NetworkServer ;
import net.alis.protocoller.samples.authlib.GameProfile ;
import net.alis.protocoller.samples.authlib.properties.Property ;
import net.alis.protocoller.samples.network.NetworkManager ;
import net.alis.protocoller.samples.network.chat.ChatComponent ;
import net.alis.protocoller.samples.network.status.ServerData ;
import net.alis.protocoller.samples.network.status.ServerPing ;
import net.alis.protocoller.samples.network.status.ServerPingPlayerSample ;
import net.alis.protocoller.samples.server.ServerConnection ;
import net.alis.protocoller.samples.server.rcon.QueryThreadGC4 ;
import net.alis.protocoller.samples.server.rcon.RconThread ;
import net.alis.protocoller.samples.server.rcon.RemoteControlSession ;
import net.alis.protocoller.samples.server.rcon.RemoteStatusReply ;
import java.util.ArrayList ;
import java.util.List ;
import java.util.UUID ;
public class NetworkServerWorkExample {
public static void serverConnectionAccess ( ) {
NetworkServer server = MainClass. protocollerApi. getServer ( ) ;
ServerConnection connection = server. getConnection ( ) ;
List <NetworkManager > managers = connection. getConnections ( ) ;
List <ChannelFuture > channels = connection. getChannels ( ) ;
NetworkManager manager = managers. get ( 0 ) ;
Property [ ] p = manager. getSpoofedProfiles ( ) ;
}
public static void changeServerStatusInfo ( ) {
NetworkServer server = MainClass. protocollerApi. getServer ( ) ;
ServerPing ping = server. getServerStatus ( ) ;
ping. setVersion ( new ServerData ( "Spigot 1.25.1", 756 ) ) ;
ping. setFavicon ( "Some favicon" ) ;
ping. setDescription ( new ChatComponent ( "A best minecraft server!" ) ) ;
ServerPingPlayerSample playerSample = new ServerPingPlayerSample ( 10000, 999 ) ;
List <GameProfile > profiles = new ArrayList <> ( ) ;
profiles. add ( new GameProfile (UUID. randomUUID ( ), "ALis" ) ) ;
profiles. add ( new GameProfile (UUID. randomUUID ( ), "Tasher228" ) ) ;
profiles. add ( new GameProfile (UUID. randomUUID ( ), "Notch" ) ) ;
playerSample. setSample (profiles. toArray ( new GameProfile [ 0 ] ) ) ;
ping. setPlayers (playerSample ) ;
server. setServerStatus (ping ) ;
}
public static void changeGC4Thread ( ) {
NetworkServer server = MainClass. protocollerApi. getServer ( ) ;
QueryThreadGC4 query = server. getQueryThreadGC4 ( ) ;
if (query != null ) { //QueryThread can be null(Может возвращать null)
query. setMaxPlayers ( 1000 ) ;
RemoteStatusReply statusReply = query. getRulesResponse ( ) ;
byte [ ] replyBytes = statusReply. toByteArray ( ) ;
query. setServerIp ( "1.1.1.1" ) ;
query. setServerName ( "Best minecraft server" ) ;
int queryPort = query. getQueryPort ( ) ;
}
}
public void rconCheck ( ) {
NetworkServer server = MainClass. protocollerApi. getServer ( ) ;
RconThread rcon = server. getRconThread ( ) ; //RconThread can be null
if (rcon != null ) {
List <RemoteControlSession > sessions = rcon. getClients ( ) ;
RemoteControlSession session = sessions. get ( 0 ) ;
if (session. isAuthed ( ) ) {
session. setAuthed ( false ) ;
}
}
}
}
import io.netty.channel.ChannelFuture ;
import net.alis.protocoller.NetworkServer ;
import net.alis.protocoller.samples.authlib.GameProfile ;
import net.alis.protocoller.samples.authlib.properties.Property ;
import net.alis.protocoller.samples.network.NetworkManager ;
import net.alis.protocoller.samples.network.chat.ChatComponent ;
import net.alis.protocoller.samples.network.status.ServerData ;
import net.alis.protocoller.samples.network.status.ServerPing ;
import net.alis.protocoller.samples.network.status.ServerPingPlayerSample ;
import net.alis.protocoller.samples.server.ServerConnection ;
import net.alis.protocoller.samples.server.rcon.QueryThreadGC4 ;
import net.alis.protocoller.samples.server.rcon.RconThread ;
import net.alis.protocoller.samples.server.rcon.RemoteControlSession ;
import net.alis.protocoller.samples.server.rcon.RemoteStatusReply ;
import java.util.ArrayList ;
import java.util.List ;
import java.util.UUID ;
public class NetworkServerWorkExample {
public static void serverConnectionAccess ( ) {
NetworkServer server = MainClass. protocollerApi. getServer ( ) ;
ServerConnection connection = server. getConnection ( ) ;
List <NetworkManager > managers = connection. getConnections ( ) ;
List <ChannelFuture > channels = connection. getChannels ( ) ;
NetworkManager manager = managers. get ( 0 ) ;
Property [ ] p = manager. getSpoofedProfiles ( ) ;
}
public static void changeServerStatusInfo ( ) {
NetworkServer server = MainClass. protocollerApi. getServer ( ) ;
ServerPing ping = server. getServerStatus ( ) ;
ping. setVersion ( new ServerData ( "Spigot 1.25.1", 756 ) ) ;
ping. setFavicon ( "Some favicon" ) ;
ping. setDescription ( new ChatComponent ( "A best minecraft server!" ) ) ;
ServerPingPlayerSample playerSample = new ServerPingPlayerSample ( 10000, 999 ) ;
List <GameProfile > profiles = new ArrayList <> ( ) ;
profiles. add ( new GameProfile (UUID. randomUUID ( ), "ALis" ) ) ;
profiles. add ( new GameProfile (UUID. randomUUID ( ), "Tasher228" ) ) ;
profiles. add ( new GameProfile (UUID. randomUUID ( ), "Notch" ) ) ;
playerSample. setSample (profiles. toArray ( new GameProfile [ 0 ] ) ) ;
ping. setPlayers (playerSample ) ;
server. setServerStatus (ping ) ;
}
public static void changeGC4Thread ( ) {
NetworkServer server = MainClass. protocollerApi. getServer ( ) ;
QueryThreadGC4 query = server. getQueryThreadGC4 ( ) ;
if (query != null ) { //QueryThread can be null(Может возвращать null)
query. setMaxPlayers ( 1000 ) ;
RemoteStatusReply statusReply = query. getRulesResponse ( ) ;
byte [ ] replyBytes = statusReply. toByteArray ( ) ;
query. setServerIp ( "1.1.1.1" ) ;
query. setServerName ( "Best minecraft server" ) ;
int queryPort = query. getQueryPort ( ) ;
}
}
public void rconCheck ( ) {
NetworkServer server = MainClass. protocollerApi. getServer ( ) ;
RconThread rcon = server. getRconThread ( ) ; //RconThread can be null
if (rcon != null ) {
List <RemoteControlSession > sessions = rcon. getClients ( ) ;
RemoteControlSession session = sessions. get ( 0 ) ;
if (session. isAuthed ( ) ) {
session. setAuthed ( false ) ;
}
}
}
}
Quick facts
- Edition: Minecraft Java
- File type: .jar
- Minecraft versions listed: 1.8, 1.9, 1.10
- How to install: Install the matching mod loader (Forge, Fabric or NeoForge) for your Minecraft version. → Download the .jar. → Put it in the .minecraft/mods folder and launch that loader profile.
- Where to get it: Opens on Spigot — not every file is mirrored on our own servers.
Install steps are the general flow for this file type — How to install Minecraft Java mods & modpacks walks through it step by step.
Protocoller API is a free Minecraft Java mod. Compatible with Minecraft 1.8, 1.9, 1.10, 1.11 and newer. Downloaded 211 times (via Spigot). Download it and open it directly in the game.