-
-
Notifications
You must be signed in to change notification settings - Fork 700
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Implement Event Management System and Native Geyser Extension System #742
Conversation
Well if Bungeecord has plugins, then why shouldn't Geyser? I can think of a few uses for this, at least |
This is good because I wanted to make a Chest GUI to Custom Form Window. So it’s easier for bedrock users to interact. So instead of opening the Chest GUI it just opens the custom form window. |
This should have access to packets and be able to modify them before they get sent |
I think it needs a pre and post event for both downstream and upstream. This way packets can be modified before and after geyser does it's thing. |
So wait, with this am i able to run plugins for bedrock players only? Because that would be awesome |
Correct, but keep in mind these are geyser plugins and not spigot plugins. So they would deal with Geyser related stuff. For now that would be modifying packets before they are received by Geyser or after its done its thing, and injecting packets towards the java server or up to the geyser client (ie the comment about chest gui would block creating the chest gui and send upstream the window creation packets). You could also potentially communicate with spigot plugins in the downstream server but that's not yet planned as we would need some way to send messages and may require a hop through something like floodgate as a message bridge unless there is some way to send messages using the java packets (perhaps specially encoded packets that do not cause an effect on the java server like chat messages that your java plugin then suppress and captures the data from). |
https://dinnerbone.com/blog/2012/01/13/minecraft-plugin-channels-messaging/ |
I was not aware of that. This solves a whole bunch of things and props to Dinnerbone for implementing it. As another suggested feature for this branch I'd like to propose single shot events with lambdas which would be super useful for co-ordinating stuff that needs to be done in an ordered fashion without needing the whole event method setup. For example something like: session.sendDownstream(something);
pluginManager.when(DownstreamPacketReceivedEvent.class, (event) -> {
if (event.getPacket().getId() == -1 ) { do something and cancel event }
}); I've not thought much more about it than that but it would temporarily add it to the list of events being triggered and can self cancel itself out when its fulfilled. Allows putting the code closer to where its relevant in the code. |
Instead of plugins being the focus Geyser instead implements an Event Management system that can be used internally. Plugins are then able to utilize this through the convenience of an external jar and registering annotated classes.
I've expanded that thought further by moving the event system into its own system which will be useful for within Geyser as well. The Event system now becomes useful for Geyser itself to utilize and can possibly clean up things by placing code closer to where it is useful. The plugin system now just uses the EventSystem by allowing 3rd party jars to be dropped into the Geyser plugins folder and provides some convenience through the use of annotations. Plugins also now extend from GeyserPlugin as a requirement. This means that as well as the plugin system described in this topic one can also perform event hooking through the use of lambdas and through the magic of Generic and TypeVariables the runnable will have the correct event type. Example 1: // Load all this data into memory
myHugeData = readAllTheData();
// We want to save it all when Geyser Shuts down
eventManager.on(DisableEvent.class, (ctx, event) -> {
writeAllTheData(myHugeData);
}); Example 2: // We need to send this second packet only when we get a respose
session.sendUpstreamPacket(somePacket);
eventManager.on(BedrockPacketReceiveEvent.class, (ctx, event) -> {
if (event.getPacket() instance of ResponsePacket) {
session.sendUpstreamPacket(otherPacket);
ctx.unregister(); // Unregister ourself
}
}); |
With regard to the plugin message channels this will simply need a sendMessage method on the session likely and a PluginMessageReceive event for receiving messages. It should just "work" then with communicating with server side plugins. |
The EventManager will now allow classes to be registered and all methods of the class annotated with @event will be added as event handlers. PluginManager provides a proxy to some of the registration functions in EventManager to allow it to track EventHandlers that belong to a plugin.
The EventManager will now allow classes to be registered and all methods of the class annotated with @event will be added as event handlers making them first class citizens of EventManager. PluginManager provides a proxy to some of the registration functions in EventManager directly in GeyserPlugin to allow it to track EventHandlers that belong to a plugin but otherwise is now only responsible for purely plugin related things. |
As this would require good documentation I've added both some initial documentation as well as a github action to automatically build + deploy both an online and offline documentation. For now it triggers when pushed to this branch and deploys to my pages repo and the 'edit' button in the docs will not work as it assumes it's editing master. The idea is the dev who is responsible for adding an event (or other feature) will also add to the documentation for it and the branch is not merged till that happens. Online Documentation: https://bundabrg.github.io/Geyser/ |
Changes: * Rename EnableEvent, DisableEvent to PluginEnableEvent and PluginDisableEvent. These are now triggered for all plugins when enabling/disabling. * Added GeyserStartEvent, GeyserStopEvent, triggered after starting and before stopping Geyser * Updated EventManager.trigger to return an EventResult which contains chainable methods with runnables * Add UpstreamPacketSendEvent, UpstreamPacketReceiveEvent, DownstreamPacketSendEvent, DownstreamPacketReceiveEvent which trigger for the respective direction of packet flow and are cancellable. * Update Documentation
Changes: * New method on GeyserSession: sendPluginMessage(String channel, byte[] data) that will send a ClientPluginMessage packet to downstream * New Event: PluginMessageEvent. Triggers when a PluginMessage is received. * Update Documentation
The last commit added support for sending PluginMessages downstream as well as an event that triggers when receiving a channel message. However its important to note here:
Note: If geyser is running as a bukkit plugin then it implicitly is able to send trusted messages. So perhaps a method on the bootstrap to send a trusted message, and those without the direct facility must then establish it through a relay plugin. The relay plugin could also technically provide some missing things from non-bukkit Geyser instances. For example being able to query chunks etc, however I'd recommend that the relationship be optional and still work without else vanilla servers will not work. |
Changes: * You can now register/unregister for plugin channels using GeyserSession#registerPluginChannel, GeyserSession#unregisterPluginChannel. Any new session will then automatically register these channels as well. * Added documentation describing how Plugin Message Channels work
This allows chaining a delay to unregister a lambda event so that it can be cancelled should it not fire in a reasonable amount of time.
We don't want to actually call defineClass when searching for the Plugin so we instead load and parse the annotation from the bytecode.
I have put together a plugin that is a Geyser plugin, Spigot plugin and Bungeecord plugin all rolled into one. When added to any of these services it will merely send ping messages to a plugin message channel and report any that it see's. If you were to put one in all 3 then you should see ping messages from the other two participating servers in your logs. This provides a simple example of how to create a plugin supporting all 3 servers and demonstrates the plugin message channel in use. Source: https://github.com/bundabrg/GeyserLink |
This provides a thin wrapper to the regular logger with the plugin name prefixed to the messages.
Can you please implement plugins api as annotation processor like how velocity does? It's more easy for devs. |
# Conflicts: # bootstrap/velocity/pom.xml # connector/pom.xml # connector/src/main/java/org/geysermc/connector/network/UpstreamPacketHandler.java # connector/src/main/java/org/geysermc/connector/network/session/GeyserSession.java # connector/src/main/resources/languages # connector/src/main/resources/mappings # pom.xml
d30292c
to
27777aa
Compare
# Conflicts: # connector/src/main/java/org/geysermc/connector/network/session/GeyserSession.java # connector/src/main/java/org/geysermc/connector/network/translators/inventory/InventoryTranslator.java
*/ | ||
public void registerPluginChannel(String channel) { | ||
if (registeredPluginChannels.contains(channel)) { | ||
return; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This should throw an exception instead of silently returning.
Just wondering, is there any reason why this hasn't been merged yet? Being able to handle custom packets for bedrock specific features is very important for what I need to do. |
I doubt this will be merged anytime soon Also this will need alot of fine tuning and testing before it's ready to be merged into master |
Merge branch 'master' into feature/plugins # Conflicts: # bootstrap/bungeecord/pom.xml # bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePlugin.java # bootstrap/pom.xml # bootstrap/spigot/pom.xml # bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotPlugin.java # bootstrap/sponge/pom.xml # bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongePlugin.java # bootstrap/standalone/pom.xml # bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneBootstrap.java # bootstrap/velocity/pom.xml # bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityPlugin.java # common/pom.xml # connector/src/main/java/org/geysermc/connector/network/translators/PacketTranslatorRegistry.java # connector/src/main/java/org/geysermc/connector/network/translators/sound/SoundHandlerRegistry.java # connector/src/main/java/org/geysermc/connector/skin/SkinManager.java # core/pom.xml # core/src/main/java/org/geysermc/geyser/GeyserImpl.java # core/src/main/java/org/geysermc/geyser/event/Cancellable.java # core/src/main/java/org/geysermc/geyser/event/EventManager.java # core/src/main/java/org/geysermc/geyser/event/EventResult.java # core/src/main/java/org/geysermc/geyser/event/EventSession.java # core/src/main/java/org/geysermc/geyser/event/GeyserEvent.java # core/src/main/java/org/geysermc/geyser/event/annotations/GeyserEventHandler.java # core/src/main/java/org/geysermc/geyser/event/events/extension/ExtensionDisableEvent.java # core/src/main/java/org/geysermc/geyser/event/events/extension/ExtensionEnableEvent.java # core/src/main/java/org/geysermc/geyser/event/events/geyser/GeyserLoginEvent.java # core/src/main/java/org/geysermc/geyser/event/events/geyser/GeyserStartEvent.java # core/src/main/java/org/geysermc/geyser/event/events/geyser/GeyserStopEvent.java # core/src/main/java/org/geysermc/geyser/event/events/geyser/LoadBedrockSkinEvent.java # core/src/main/java/org/geysermc/geyser/event/events/geyser/ResourceReadEvent.java # core/src/main/java/org/geysermc/geyser/event/events/network/BedrockPongEvent.java # core/src/main/java/org/geysermc/geyser/event/events/network/SessionConnectEvent.java # core/src/main/java/org/geysermc/geyser/event/events/network/SessionDisconnectEvent.java # core/src/main/java/org/geysermc/geyser/event/events/packet/DownstreamPacketReceiveEvent.java # core/src/main/java/org/geysermc/geyser/event/events/packet/DownstreamPacketSendEvent.java # core/src/main/java/org/geysermc/geyser/event/events/packet/UpstreamPacketReceiveEvent.java # core/src/main/java/org/geysermc/geyser/event/events/packet/UpstreamPacketSendEvent.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ClientAdvancementTabPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ClientBlockNBTRequestPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ClientChatPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ClientClickWindowButtonPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ClientCloseWindowPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ClientCreativeInventoryActionPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ClientEditBookPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ClientEntityNBTRequestPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ClientGenerateStructuresPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ClientKeepAlivePacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ClientLockDifficultyPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ClientMoveItemToHotbarPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ClientPlayerAbilitiesPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ClientPlayerActionPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ClientPlayerChangeHeldItemPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ClientPlayerInteractEntityPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ClientPlayerMovementPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ClientPlayerPlaceBlockPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ClientPlayerPositionPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ClientPlayerPositionRotationPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ClientPlayerRotationPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ClientPlayerStatePacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ClientPlayerSwingArmPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ClientPlayerUseItemPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ClientPluginMessagePacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ClientPrepareCraftingGridPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ClientRenameItemPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ClientRequestPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ClientResourcePackStatusPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ClientSelectTradePacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ClientSetBeaconEffectPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ClientSetDifficultyPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ClientSettingsPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ClientSpectatePacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ClientSteerBoatPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ClientSteerVehiclePacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ClientTabCompletePacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ClientTeleportConfirmPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ClientUpdateCommandBlockMinecartPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ClientUpdateCommandBlockPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ClientUpdateJigsawBlockPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ClientUpdateSignPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ClientUpdateStructureBlockPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ClientVehicleMovePacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ClientWindowActionPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/EncryptionRequestPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/EncryptionResponsePacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/HandshakePacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/LoginDisconnectPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/LoginPluginRequestPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/LoginPluginResponsePacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/LoginSetCompressionPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/LoginStartPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/LoginSuccessPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerAdvancementTabPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerAdvancementsPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerBlockBreakAnimPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerBlockChangePacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerBlockValuePacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerBossBarPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerChatPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerChunkDataPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerCloseWindowPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerDeclareCommandsPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerDeclareRecipesPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerDeclareTagsPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerDifficultyPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerDisconnectPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerDisplayScoreboardPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerEntityAnimationPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerEntityAttachPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerEntityCollectItemPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerEntityEffectPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerEntityEquipmentPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerEntityHeadLookPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerEntityMetadataPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerEntityPositionPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerEntityPositionRotationPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerEntityPropertiesPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerEntityRemoveEffectPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerEntityRotationPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerEntitySetPassengersPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerEntitySoundEffectPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerEntityStatusPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerEntityTeleportPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerEntityVelocityPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerExplosionPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerJoinGamePacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerKeepAlivePacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerMapDataPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerMultiBlockChangePacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerNBTResponsePacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerNotifyClientPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerOpenBookPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerOpenHorseWindowPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerOpenTileEntityEditorPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerOpenWindowPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerPlayBuiltinSoundPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerPlayEffectPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerPlaySoundPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerPlayerAbilitiesPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerPlayerActionAckPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerPlayerChangeHeldItemPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerPlayerFacingPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerPlayerHealthPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerPlayerListDataPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerPlayerListEntryPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerPlayerPositionRotationPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerPlayerSetExperiencePacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerPluginMessagePacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerPreparedCraftingGridPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerResourcePackSendPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerRespawnPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerScoreboardObjectivePacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerSetCompressionPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerSetCooldownPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerSetSlotPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerSpawnEntityPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerSpawnExpOrbPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerSpawnLivingEntityPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerSpawnPaintingPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerSpawnParticlePacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerSpawnPlayerPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerSpawnPositionPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerStatisticsPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerStopSoundPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerSwitchCameraPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerTabCompletePacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerTeamPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerTradeListPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerUnloadChunkPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerUnlockRecipesPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerUpdateLightPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerUpdateScorePacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerUpdateTileEntityPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerUpdateTimePacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerUpdateViewDistancePacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerUpdateViewPositionPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerVehicleMovePacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerWindowItemsPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/ServerWindowPropertyPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/StatusPingPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/StatusPongPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/StatusQueryPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/downstream/StatusResponsePacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/AddBehaviorTreePacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/AddBehaviorTreePacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/AddEntityPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/AddEntityPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/AddHangingEntityPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/AddHangingEntityPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/AddItemEntityPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/AddItemEntityPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/AddPaintingPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/AddPaintingPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/AddPlayerPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/AddPlayerPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/AdventureSettingsPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/AdventureSettingsPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/AnimatePacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/AnimatePacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/AnvilDamagePacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/AnvilDamagePacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/AutomationClientConnectPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/AutomationClientConnectPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/AvailableCommandsPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/AvailableCommandsPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/AvailableEntityIdentifiersPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/AvailableEntityIdentifiersPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/BiomeDefinitionListPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/BiomeDefinitionListPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/BlockEntityDataPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/BlockEntityDataPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/BlockEventPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/BlockEventPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/BlockPickRequestPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/BlockPickRequestPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/BookEditPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/BookEditPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/BossEventPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/BossEventPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/CameraPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/CameraPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ChangeDimensionPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ChangeDimensionPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ChunkRadiusUpdatedPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ChunkRadiusUpdatedPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ClientCacheBlobStatusPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ClientCacheBlobStatusPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ClientCacheMissResponsePacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ClientCacheMissResponsePacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ClientCacheStatusPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ClientCacheStatusPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ClientToServerHandshakePacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ClientToServerHandshakePacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ClientboundMapItemDataPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ClientboundMapItemDataPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/CodeBuilderPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/CodeBuilderPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/CommandBlockUpdatePacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/CommandBlockUpdatePacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/CommandOutputPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/CommandOutputPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/CommandRequestPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/CommandRequestPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/CompletedUsingItemPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/CompletedUsingItemPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ContainerClosePacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ContainerClosePacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ContainerOpenPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ContainerOpenPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ContainerSetDataPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ContainerSetDataPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/CraftingDataPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/CraftingDataPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/CraftingEventPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/CraftingEventPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/CreativeContentPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/CreativeContentPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/DebugInfoPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/DebugInfoPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/DisconnectPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/DisconnectPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/EducationSettingsPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/EducationSettingsPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/EmoteListPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/EmoteListPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/EmotePacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/EmotePacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/EntityEventPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/EntityEventPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/EntityFallPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/EntityFallPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/EntityPickRequestPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/EntityPickRequestPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/EventPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/EventPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ExplodePacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ExplodePacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/GameRulesChangedPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/GameRulesChangedPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/GuiDataPickItemPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/GuiDataPickItemPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/HurtArmorPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/HurtArmorPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/InteractPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/InteractPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/InventoryContentPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/InventoryContentPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/InventorySlotPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/InventorySlotPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/InventoryTransactionPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/InventoryTransactionPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ItemFrameDropItemPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ItemFrameDropItemPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ItemStackRequestPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ItemStackRequestPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ItemStackResponsePacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ItemStackResponsePacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/LabTablePacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/LabTablePacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/LecternUpdatePacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/LecternUpdatePacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/LevelChunkPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/LevelChunkPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/LevelEventGenericPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/LevelEventGenericPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/LevelEventPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/LevelEventPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/LevelSoundEvent1PacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/LevelSoundEvent1PacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/LevelSoundEvent2PacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/LevelSoundEvent2PacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/LevelSoundEventPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/LevelSoundEventPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/LoginPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/LoginPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/MapCreateLockedCopyPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/MapCreateLockedCopyPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/MapInfoRequestPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/MapInfoRequestPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/MobArmorEquipmentPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/MobArmorEquipmentPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/MobEffectPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/MobEffectPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/MobEquipmentPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/MobEquipmentPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ModalFormRequestPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ModalFormRequestPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ModalFormResponsePacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ModalFormResponsePacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/MoveEntityAbsolutePacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/MoveEntityAbsolutePacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/MoveEntityDeltaPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/MoveEntityDeltaPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/MovePlayerPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/MovePlayerPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/MultiplayerSettingsPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/MultiplayerSettingsPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/NetworkChunkPublisherUpdatePacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/NetworkChunkPublisherUpdatePacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/NetworkSettingsPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/NetworkSettingsPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/NetworkStackLatencyPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/NetworkStackLatencyPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/NpcRequestPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/NpcRequestPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/OnScreenTextureAnimationPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/OnScreenTextureAnimationPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/PacketViolationWarningPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/PacketViolationWarningPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/PhotoTransferPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/PhotoTransferPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/PlaySoundPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/PlaySoundPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/PlayStatusPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/PlayStatusPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/PlayerActionPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/PlayerActionPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/PlayerArmorDamagePacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/PlayerArmorDamagePacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/PlayerAuthInputPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/PlayerAuthInputPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/PlayerEnchantOptionsPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/PlayerEnchantOptionsPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/PlayerHotbarPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/PlayerHotbarPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/PlayerInputPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/PlayerInputPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/PlayerListPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/PlayerListPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/PlayerSkinPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/PlayerSkinPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/PositionTrackingDBClientRequestPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/PositionTrackingDBClientRequestPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/PositionTrackingDBServerBroadcastPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/PositionTrackingDBServerBroadcastPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/PurchaseReceiptPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/PurchaseReceiptPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/RemoveEntityPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/RemoveEntityPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/RemoveObjectivePacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/RemoveObjectivePacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/RequestChunkRadiusPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/RequestChunkRadiusPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ResourcePackChunkDataPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ResourcePackChunkDataPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ResourcePackChunkRequestPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ResourcePackChunkRequestPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ResourcePackClientResponsePacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ResourcePackClientResponsePacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ResourcePackDataInfoPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ResourcePackDataInfoPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ResourcePackStackPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ResourcePackStackPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ResourcePacksInfoPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ResourcePacksInfoPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/RespawnPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/RespawnPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/RiderJumpPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/RiderJumpPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ScriptCustomEventPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ScriptCustomEventPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ServerSettingsRequestPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ServerSettingsRequestPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ServerSettingsResponsePacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ServerSettingsResponsePacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ServerToClientHandshakePacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ServerToClientHandshakePacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/SetCommandsEnabledPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/SetCommandsEnabledPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/SetDefaultGameTypePacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/SetDefaultGameTypePacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/SetDifficultyPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/SetDifficultyPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/SetDisplayObjectivePacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/SetDisplayObjectivePacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/SetEntityDataPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/SetEntityDataPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/SetEntityLinkPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/SetEntityLinkPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/SetEntityMotionPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/SetEntityMotionPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/SetHealthPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/SetHealthPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/SetLastHurtByPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/SetLastHurtByPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/SetLocalPlayerAsInitializedPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/SetLocalPlayerAsInitializedPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/SetPlayerGameTypePacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/SetPlayerGameTypePacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/SetScorePacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/SetScorePacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/SetScoreboardIdentityPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/SetScoreboardIdentityPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/SetSpawnPositionPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/SetSpawnPositionPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/SetTimePacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/SetTimePacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/SetTitlePacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/SetTitlePacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/SettingsCommandPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/SettingsCommandPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ShowCreditsPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ShowCreditsPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ShowProfilePacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ShowProfilePacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ShowStoreOfferPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/ShowStoreOfferPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/SimpleEventPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/SimpleEventPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/SpawnExperienceOrbPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/SpawnExperienceOrbPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/SpawnParticleEffectPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/SpawnParticleEffectPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/StartGamePacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/StartGamePacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/StopSoundPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/StopSoundPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/StructureBlockUpdatePacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/StructureBlockUpdatePacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/StructureTemplateDataRequestPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/StructureTemplateDataRequestPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/StructureTemplateDataResponsePacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/StructureTemplateDataResponsePacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/SubClientLoginPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/SubClientLoginPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/TakeItemEntityPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/TakeItemEntityPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/TextPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/TextPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/TickSyncPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/TickSyncPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/TransferPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/TransferPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/UnknownPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/UnknownPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/UpdateAttributesPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/UpdateAttributesPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/UpdateBlockPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/UpdateBlockPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/UpdateBlockPropertiesPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/UpdateBlockPropertiesPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/UpdateBlockSyncedPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/UpdateBlockSyncedPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/UpdateEquipPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/UpdateEquipPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/UpdatePlayerGameTypePacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/UpdatePlayerGameTypePacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/UpdateSoftEnumPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/UpdateSoftEnumPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/UpdateTradePacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/UpdateTradePacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/VideoStreamConnectPacketReceive.java # core/src/main/java/org/geysermc/geyser/event/events/packet/upstream/VideoStreamConnectPacketSend.java # core/src/main/java/org/geysermc/geyser/event/events/registry/BlockEntityRegistryEvent.java # core/src/main/java/org/geysermc/geyser/event/events/registry/InventoryTranslatorRegistryEvent.java # core/src/main/java/org/geysermc/geyser/event/events/registry/ItemRemapperRegistryEvent.java # core/src/main/java/org/geysermc/geyser/event/events/registry/PacketTranslatorRegistryEvent.java # core/src/main/java/org/geysermc/geyser/event/events/registry/SoundHandlerRegistryEvent.java # core/src/main/java/org/geysermc/geyser/event/handlers/EventHandler.java # core/src/main/java/org/geysermc/geyser/event/handlers/LambdaEventHandler.java # core/src/main/java/org/geysermc/geyser/event/handlers/MethodEventHandler.java # core/src/main/java/org/geysermc/geyser/extension/ExtensionClassLoader.java # core/src/main/java/org/geysermc/geyser/extension/ExtensionLogger.java # core/src/main/java/org/geysermc/geyser/extension/ExtensionManager.java # core/src/main/java/org/geysermc/geyser/extension/GeyserExtension.java # core/src/main/java/org/geysermc/geyser/extension/annotations/Extension.java # core/src/main/java/org/geysermc/geyser/extension/handlers/ExtensionLambdaEventHandler.java # core/src/main/java/org/geysermc/geyser/extension/handlers/ExtensionMethodEventHandler.java # core/src/main/java/org/geysermc/geyser/extension/relocator/JavaRelocator.java # core/src/main/java/org/geysermc/geyser/extension/relocator/RelocatingRemapper.java # core/src/main/java/org/geysermc/geyser/extension/relocator/Relocation.java # core/src/main/java/org/geysermc/geyser/extension/relocator/RelocatorClassVisitor.java # core/src/main/java/org/geysermc/geyser/extension/relocator/SelectorUtils.java # core/src/main/java/org/geysermc/geyser/network/ConnectorServerEventHandler.java # core/src/main/java/org/geysermc/geyser/network/LoggingPacketHandler.java # core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java # core/src/main/java/org/geysermc/geyser/session/GeyserSession.java # core/src/main/java/org/geysermc/geyser/translator/inventory/InventoryTranslator.java # core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java # core/src/main/java/org/geysermc/geyser/util/FileUtils.java # pom.xml
I've updated it but I suspect Geyser itself may move a different direction with the API development but I don't believe its anywhere near ready to handle the Education Translator extension so I'll keep trying to keep this updated whilst I maintain that extension. |
public static class Priority { | ||
public final static int LOWEST = 10; | ||
public final static int LOW = 4; | ||
public final static int NORMAL = 50; | ||
public final static int HIGH = 60; | ||
public final static int HIGHEST = 90; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is LOW suppose to be 40?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes it is. Nice catch.
We're going to close this in favor of a new extension system actively in development. With that being said, we're incredibly grateful for the work that was done here; it was with the development here that the very idea of the |
Overview
This provides a Thread-safe Event Management System for Geyser. A native plugin system is also provided that can utilize the Event system through the use of 3rd party plugin jars.
Event System
Please refer to the live documentation for up to date information on how the system has been designed. This section is now outdated
An event extends
GeyserEvent
orGeyserCancellableEvent
and can be triggered using the EventManager container on the Connector instance.All event handlers will be run in order of priority and handlers can choose to not get cancelled events.
A handler can be defined using a lambda along with the expected event class.
Example 1:
Example 2:
Data for an event can be passed in the event object.
Events are triggered by creating a new object that inherits from GeyserEvent and calling the
trigger
method on the Event Manager.Plugin System
Please refer to the live documentation for up to date information on how the system has been designed. This section is now outdated
A plugin system is also implemented to allow native Geyser Plugins to be written. This will reduce the amount of code that does not belong in the mainline by pulling it out into plugins that can optionally be used. It will also attract a community of developers who may not be interested in dealing with the low level aspects of Geyser but are happy to create useful optional features.
The plugin jar files are placed inside a
plugins
folder relative to the dataFolder of the appropriate bootstrap. This means relative to the jar for standalone and relative to its datafile folder for the other bootstraps. Each plugin can create its own datafolder under there as well.We make use of a custom classloader that allows a plugin to also specify if it wishes to be part of the global namespace or not (default true). If it is global then other plugins may use its libraries and vice-versa, otherwise it is entirely independent and will not collide with other plugins.
An example plugin which runs on Geyser, Spigot and Bungeecord can be found here
Presently a class annotated with
@Plugin
and extending GeyserPlugin is looked for in the jar and is instantiated, becoming the plugin entrypoint. This annotation also defines all details about the plugin.All event handlers are annotated by
@Event
and reflection is used to determine which event is hooked. Classes that event handers belong to must be registered with the plugin manager unless it is the main plugin class which is automatically registered.Documentation
Online Documentation
Plugins
Please refer to Awesome Geyser Resources for a list of known plugins so far.
ToDo
Handle cases where plugins may need to be run on specific platforms (spigot, standalone) by specifying requirements in the plugin annotation.I'm now not so sure this is needed. A plugin writer should test for this using whatever method they wish.Events Todo
Optimization