Compare commits

..
1825 Commits
Author SHA1 Message Date
retrooper 58f6cf5411 Cut off 1.7.10 injector. We still support 1.7.10 protocol, just not 1.7.10 server software!!!
Attempted reload support again. (Tested on 1.8.8)

PacketSide#getOpposite added
2022-04-07 22:59:38 +02:00
retrooper d966013b69 On Spigot, we now are behind Via & PS again! 2022-04-07 21:27:49 +02:00
retrooper 8261d95a4b Fixed incorrect HealthDisplay data in ScoreboardObjective wrapper by @LeeGodSRC 2022-04-07 20:33:45 +02:00
retrooper 0ec7cbdd64 Merge pull request #311 from FairyProject/bugfix/teams
Teams packet wrapper team name read/write with 16 max characters
2022-04-07 20:31:31 +02:00
retrooper 01aef56066 Fixed Empty NBT from being added to ItemStacks leading to a desync. (DefineOutside) 2022-04-06 22:47:05 +02:00
retrooper a1ca6e68bc Fix 1.8-1.12 entity type mappings
(DefineOutside)
2022-04-06 22:40:28 +02:00
retrooper bd2ae75b08 Fixed duplicate UserLoginEvent calls. 2022-04-03 23:28:36 +02:00
retrooper ed9cd05619 Spigot debug listener unregistered. 2022-04-03 20:43:55 +02:00
retrooper fdbe47a061 PacketListenerReflect removed;
PlayerInjectEvent removed, its replacement is UserLoginEvent
2022-04-03 20:42:18 +02:00
retrooper a4b326cd44 Velocity hopefully working on all versions. 2022-04-03 20:12:36 +02:00
retrooper 7e2c66a82e Optimized WrapperLoginServerLoginSuccess and progress on velocity? 2022-04-03 19:52:22 +02:00
retrooper 0913057d0d Fixed item type mappings on 1.16.2 2022-04-03 18:10:24 +02:00
retrooper 9d75d537cc Merge remote-tracking branch 'origin/version-dynamic' into version-dynamic 2022-04-01 21:30:28 +02:00
retrooper c1a2d05803 Outgoing packets must be in format of server, not client. 2022-04-01 21:30:18 +02:00
retrooper a0e05bb588 Updated our README 2022-04-01 21:19:20 +02:00
retrooper d8d3b77d5f Minor change to README. 2022-04-01 21:14:46 +02:00
retrooper ab4dce2af3 Trying to make protocol translation optional! On proxies we do not want it. 2022-04-01 21:12:11 +02:00
retrooper f0588eed10 Made WrappedBlockState and StateTypes more version dynamic. Now packetevents should hopefully be able to operate before via. 2022-04-01 19:52:57 +02:00
retrooper 99d6ee3554 Merge branch '2.0' into version-dynamic
# Conflicts:
#	spigot/src/main/java/io/github/retrooper/packetevents/injector/latest/connection/ServerConnectionInitializerLatest.java
2022-04-01 17:58:24 +02:00
retrooper 3e00a40918 PlayerManagerImpl in spigot module now reads game profile in players and will pass them into our User class.
User#sendTitle with strings added.
2022-04-01 17:45:06 +02:00
retrooper 1d97510869 Little comment added. 2022-03-31 22:54:39 +02:00
retrooper db3a804d15 NPE for optional in BlockPlacement wrapper fixed;
Decoder handler duplication on reloads fixed on 1.8+ servers
2022-03-31 22:44:27 +02:00
retrooper c83613ab04 Bug fixes for WrapperPlayServerSetTitleText & SetTitleSubtitle HANDLE_JSON should be true by default. 2022-03-28 22:43:59 +02:00
retrooper 42b7bb02c2 Packet type mappings per client version work.
We can process incoming packets ahead of via & protocolsupport successfully, ignoring world packets cause of wrappedblockstate.
2022-03-27 00:20:44 +01:00
retrooper c18739e057 Removed debugs. 2022-03-26 22:34:34 +01:00
retrooper 4ea4bf43e5 PacketType enums are version dynamic. You can get id by version and get the constant by id depending on version. It is beautiful. 2022-03-26 22:32:01 +01:00
retrooper 417571fe8d Bug fix for PotionTypes#getById 2022-03-25 22:23:46 +01:00
retrooper 24a2527fb2 Lots of progress on getting our mapped abstraction more version dynamic. 2022-03-25 22:22:56 +01:00
retrooper c8b94ec829 Optimization to PotionTypes. We removed the mappings and hard-code the IDs statically. EntityEffect & RemoveEntityEffect deprecated constructors removed. 2022-03-23 22:26:45 +01:00
retrooper 8dfbda5e35 We now have more meaningful stacktraces. For example when a packet has no content or fail to read a packet id or map a packet id to a packet type constant. 2022-03-23 22:11:16 +01:00
retrooper a9fb68223a Our netty handlers now produce exceptions in our wrappers and internal api.
WrapperPlayServerMultiBlockChange NPE fixed.
2022-03-23 21:37:14 +01:00
retrooper 9d69afaa81 Updated bug report template. 2022-03-22 23:04:15 +01:00
retrooper 5e1ff9b88a Minor change to namings. 2022-03-22 21:09:50 +01:00
retrooper 9bb6d9326c User#sendTitle implemented.
Implemented all title wrappers.
2022-03-22 20:46:46 +01:00
retrooper b00389f19f Added TimeStampMode setting to allow you to specify details about the timing in our events. You can even disable logging the time if you don't need it. 2022-03-22 19:46:45 +01:00
retrooper a4eb8cbece Minor changes. 2022-03-18 22:36:32 +01:00
retrooper 9463a07e9d PostPlayerInjectEvent removed
Replaced with better UserLoginEvent which also contains the User instance along with the Player instance on the platform.
2022-03-18 22:28:14 +01:00
retrooper 763a6c5d78 readOnly in listeners removed.
Its now a global setting in PacketEventsSettings#readOnlyListeners
2022-03-18 20:21:58 +01:00
retrooper b89ad2e128 Making some helpers in our api module so we don't duplicate lots of code in our implementations(modules)
Added UserConnectEvent & UserDisconnectEvent

threadSafe in PacketListeners removed.
2022-03-18 18:26:33 +01:00
retrooper 747a1a73c4 User references actually get destroyed when they disconnect.
User#getEntityId added.

PacketTransformationUtil memory leaks fixed.
2022-03-16 22:54:21 +01:00
retrooper ab99da9e7a Tryna fix some early packet handling. 2022-03-16 20:18:30 +01:00
retrooper 8969742139 Added few comments. 2022-03-16 16:41:41 +01:00
retrooper c5002778c9 Fixed memory leaks when converting Packetevents itemstack to bukkit and vice versa. 2022-03-16 16:35:42 +01:00
retrooper 97b7e81908 New EntityTypes added.
SpigotDataHelper#fromBukkitEntityType tested to work on 1.8.8
2022-03-13 22:35:23 +01:00
retrooper 323d553d5e Fixed velocity module netty dependency 2022-03-13 19:25:42 +01:00
retrooper fe13d021c1 Improvement to build.gradle 2022-03-13 19:09:12 +01:00
retrooper aa11d7e42e Last minor improvements to ResourcePackSend wrapper. 2022-03-13 18:49:31 +01:00
retrooper 8bca8d1cb5 Code optimization to WrapperPlayServerResourcePackSend. Now accepts a nullable prompt. 2022-03-13 18:43:33 +01:00
retrooper ca5021d090 Merge remote-tracking branch 'origin/2.0' into 2.0 2022-03-13 18:34:04 +01:00
retrooper cbd899983e Cleaned up our build system. Adventure issues fixed. 2022-03-13 18:33:49 +01:00
retrooper 7529499f30 Fixed legacy adventure serializer. 2022-03-13 18:02:49 +01:00
retrooper b69fe1bdc1 Relocating sections of adventure. 2022-03-13 17:57:40 +01:00
MWHunter 424f18e52b Support invalid protocol with 1.8 biome data 2022-03-12 20:22:59 -06:00
retrooper 3a53fa88cb Adventure dependencies are now implementation, not api. 2022-03-13 00:01:20 +01:00
retrooper a1a2275794 Bump up adventure version. 2022-03-13 00:00:10 +01:00
retrooper 354596bc3d Cleaned up weird adventure stuff. We now properly relocate it I hope. 2022-03-12 23:54:13 +01:00
DefineOutside b9b34a4bbe Merge pull request #284 from amnoah/2.0
WrapperPlayServerResourcePackSend
2022-03-12 16:53:33 -06:00
Spiriten 8e8a2a114c Minor issue fix 2022-03-12 17:17:21 -05:00
Spiriten b6667f2fb8 Fixed Define's Points 2022-03-12 17:14:40 -05:00
retrooper ef6a36d5e2 We relocate adventure in Spigot, Velocity & BungeeCord manually. 2022-03-12 22:58:17 +01:00
retrooper 70e385e892 Added "adventure-gson" module.
We now relocate adventure.
2022-03-12 19:41:14 +01:00
Spiriten a74a6b0d0f WrapperPlayServerResourcePackSend
I think I did it correctly, please let me know if anything is wrong.

Basically copied from MCProtocolLib
2022-03-11 23:41:27 -05:00
retrooper 998b950f6f Renaming of methods in PacketWrapper
PacketWrapper#readData() -> read()
PacketWrapper#readData(PacketWrapper) -> copy(PacketWrapper)
PacketWrapper#writeData() -> write()
2022-03-11 23:21:00 +01:00
retrooper 9e54e4f296 Bump adventure api version down. 2022-03-11 23:10:58 +01:00
retrooper 1fb65d2628 Removed redundant .zip extension to builds. 2022-03-11 22:24:30 +01:00
retrooper a7811cd10f Little improvement to github actions. Automatically build all modules. 2022-03-11 22:23:59 +01:00
retrooper 9e3c36d48c Now publish velocity in github actions. Builds are now in .zips cause they are zips 2022-03-11 22:19:14 +01:00
retrooper 57db7d3936 The build names are now normal and not just "spigot" or "bungeecord". 2022-03-11 22:13:52 +01:00
retrooper 98dfccce1a We want the jars to have proper names. Lets see if jitpack can work with these. 2022-03-11 21:58:45 +01:00
retrooper 2eb0959215 Minor change to build.gradle 2022-03-11 21:41:20 +01:00
retrooper 64f1535ae4 Last cleanup/improvement I swear 2022-03-11 17:02:38 +01:00
retrooper 1665fe9ec0 We don't redeclare shadow plugin in each module. 2022-03-11 16:49:59 +01:00
retrooper ac054bee35 Further optimizations to build.gradles. Less code repetition, more coming! 2022-03-11 16:29:41 +01:00
retrooper 92c7c64a19 Cleaning up build.gradles to avoid code repetition. 2022-03-11 16:24:56 +01:00
retrooper 16c4c749e9 Hopefully fixed legacy adventure implementation 2022-03-11 16:17:31 +01:00
retrooper 8dddd3c519 Made sure we bumped the adventure version everywhere. 2022-03-10 22:52:33 +01:00
retrooper f48ba98c22 Our adventure module also bumped up adventure version. 2022-03-10 22:30:55 +01:00
retrooper 9a86f800c7 No debugs 2022-03-10 22:05:04 +01:00
retrooper 3a2e636f1f Cleanup build.gradle files in modules. 2022-03-10 22:04:44 +01:00
retrooper d87439cf0a Optimized/Fixed writePacket implementation on Spigot. 2022-03-10 18:43:10 +01:00
retrooper 0d637e0a2c Bumped jetbrains annotations version. 2022-03-10 17:56:07 +01:00
retrooper 153b751738 Merge pull request #277 from AbhigyaKrishna/2.0
Fix llegacy hover serializer & Update adventure
2022-03-10 17:45:16 +01:00
Abhigya bb6cc79c80 Adventure version bump and Legacy hover serializer 2022-03-10 17:16:19 +05:30
retrooper e67bfb55fe Removed debugs. 2022-03-09 20:57:09 +01:00
retrooper c0212f937e Minor fix in WrapperPlayServerUpdateScore 2022-03-09 19:58:48 +01:00
retrooper e448928194 SpigotDataHelper#fromBukkitItemMaterial probably works now. 2022-03-09 18:24:29 +01:00
retrooper 7c6b6a02a0 Working on converting bukkit material to our data types. 2022-03-09 18:14:23 +01:00
retrooper 79f6903a7d Cleaned up ViaVersionUtil, removed unused methods. 2022-03-09 16:14:16 +01:00
retrooper 800881fec8 Added WrapperStatusClientRequest wrapper (even though it has no fields) 2022-03-08 21:58:12 +01:00
retrooper d47bc0ea29 Removed debugs. 2022-03-08 20:36:47 +01:00
retrooper a9876a0cec Fixed & cleaned up our injector. Optimizations to our handlers. 2022-03-08 20:33:23 +01:00
retrooper 064ceb6c12 Merge branch '2.0' into protocollib_compat 2022-03-08 20:08:50 +01:00
retrooper f6bce0d41b Minor cleanup. 2022-03-08 20:08:11 +01:00
retrooper 31d572a8b6 Fixed update checker. 2022-03-08 20:04:20 +01:00
retrooper 354112c8b3 Again.. 2022-03-06 22:10:50 +01:00
retrooper cc561a6586 Confused, tryna fix jitpack stuff 2022-03-06 22:07:43 +01:00
retrooper 8cbb30711f Trying to fix jitpack? 2022-03-06 22:01:01 +01:00
retrooper ed1d88b1c8 More progress on velocity injector. We just need to support the compression handlers being added. 2022-03-06 20:19:41 +01:00
retrooper ed37c60257 Bug fix in ServerConnectionInitializerLatest#destroyChannel when multiple packetevents instances are present. 2022-03-06 14:24:41 +01:00
retrooper ae2a99a645 We clear our channel cache as soon as the connection closes. 2022-03-06 14:22:18 +01:00
retrooper 88c24308b2 Resolved conflicts. 2022-03-06 14:21:03 +01:00
retrooper 8a86a92504 Merge branch '2.0' into protocollib_compat
# Conflicts:
#	spigot/src/main/java/io/github/retrooper/packetevents/bukkit/InternalBukkitListener.java
2022-03-06 14:20:17 +01:00
retrooper 7d87114d69 Removed ProtocolManager#clearUserData, but we still are vulnerable to memory leaks in our channel caching. Will be fixed in protocollib_compat branch. 2022-03-06 14:16:41 +01:00
retrooper 4c76588493 Minor changes. 2022-03-06 14:03:18 +01:00
retrooper 3a6778eee7 Fixed PlayerDigging status reading, as it's an unsigned byte, not signed.
Fixed WindowConfirmation, OpenHorseWindow, WindowConfirmation window id reading as it's an unsigned byte, not signed.
2022-03-06 13:25:49 +01:00
retrooper 474a2c9e2e Working on Velocity support. 2022-03-06 12:19:01 +01:00
retrooper fdf36cfb62 Merge branch '2.0' into protocollib_compat 2022-03-06 11:35:27 +01:00
retrooper 7ee8799b3d Fixed PostPlayerInjectEvent#getClientVersion 2022-03-06 11:02:41 +01:00
retrooper 8f03460821 Merged "2.0-gradle". Basically cleaning up our gradle stuff. 2022-03-06 10:56:27 +01:00
retrooper 275638339f Make sure we are ideally the last to intercept connecting clients. Not first. 2022-03-05 23:53:37 +01:00
retrooper e86e946463 Merge branch '2.0' into protocollib_compat 2022-03-05 23:51:48 +01:00
retrooper 4d77af307c Merge branch '2.0' into 2.0-gradle 2022-03-05 23:50:39 +01:00
retrooper ec6f947379 Memory usage of mappings already improved, further improvements coming. 2022-03-05 23:49:58 +01:00
retrooper 5b977bb0b9 Added adventure module which does not ship with gson. 2022-03-05 22:02:39 +01:00
retrooper 535a95b199 Attempt to not automatically shade adventure & gson. Allow platforms such as fabric to not include gson. 2022-03-05 21:06:00 +01:00
retrooper 775ebc5de4 PacketCompressionUtil relocated 2022-03-05 18:20:52 +01:00
retrooper b756faf83c Merge branch '2.0' into protocollib_compat
# Conflicts:
#	spigot/src/main/java/io/github/retrooper/packetevents/PacketEventsPlugin.java
2022-03-05 18:16:08 +01:00
retrooper 269df338e4 Debugs removed. 2022-03-05 18:10:10 +01:00
retrooper 2827bef4b9 1.18.2 bug fixes. 2022-03-05 17:53:17 +01:00
retrooper 3d0e7b86b7 Cleaned up mess with using flying and its sub wrappers. Issues fixed. 2022-03-03 23:26:56 +01:00
retrooper 5c5fb9c8c8 Minor change 2022-03-03 22:47:54 +01:00
retrooper 8ae7b30df8 Merge remote-tracking branch 'origin/2.0' into 2.0 2022-03-03 22:02:25 +01:00
retrooper 52d201ac93 Renames of NPC methods 2022-03-03 22:00:09 +01:00
MWHunter 326b3bfe62 WrapperPlayServerWorldBorder 2022-03-03 14:48:22 -06:00
MWHunter 98d037890e World border wrappers 2022-03-03 14:40:33 -06:00
retrooper 6146ef6ac3 NPCManager removed.
NPC class that can be used independently.
2022-03-03 18:21:15 +01:00
MWHunter 117328caf7 Fix multi block change for pre-1.16 servers 2022-03-01 14:22:13 -06:00
retrooper 06b4607769 Added async methods for sending and receiving and writing packets. 2022-03-01 21:18:09 +01:00
retrooper 6d2ffc59da Reverting to older version of packetevents where building worked? 2022-03-01 20:47:32 +01:00
retrooper e91984a2d6 We now relocate the libraries we shade(adventure and gson) 2022-03-01 20:16:05 +01:00
retrooper 9f657bf2ab We really fixed our gradle stuff, we don't unnecessary shade things when we don't need them. Hopefully can get fabric support working sooner than you'd think. 2022-03-01 19:41:39 +01:00
retrooper 0c9475afaf Working on allowing optional adventure & gson shading? Hopefully this works? 2022-03-01 18:48:36 +01:00
retrooper 675fa06ba9 Stop publishing "packetevents" module, only the sub modules. 2022-03-01 18:08:14 +01:00
retrooper 65bc4e18b0 Updated to adventure 4.10.0 2022-03-01 06:41:26 +01:00
retrooper 9d4ecfe283 Added 1.18.2 support. 2022-02-28 22:32:33 +01:00
retrooper b2a664dbd0 WrapperPlayServerEntityHeadLook & WrapperPlayServerEntityRelativeMoveAndRotation & WrapperPlayServerEntityRotation now use floats. 2022-02-27 19:55:09 +01:00
retrooper e80793c71b Cleaned up Spigot injector.
Forgot to commit PacketEncoderLatest
2022-02-27 17:02:00 +01:00
retrooper f3f02fbc28 Cleaned up Spigot injector.
Refactored spigot util classes.
2022-02-27 17:01:25 +01:00
retrooper b469fddae5 Pull optimizations from 2.0, this is a branch where we work on cleaning up the injector. 2022-02-27 14:00:18 +01:00
retrooper 550904f64a Minor change to BungeePipelineInjector 2022-02-27 13:57:22 +01:00
retrooper 6fd8a4c957 Minor optimizations to NetworkChunkData 2022-02-27 10:10:48 +01:00
retrooper e0f5ab6d6d Fixed WrapperPlayClientPlayerDigging for 1.8 2022-02-27 09:54:14 +01:00
retrooper bb8e96da34 User#closeConnection added 2022-02-27 09:27:19 +01:00
retrooper 2a47fa25dd Writing packets is faster now. 2022-02-27 09:16:14 +01:00
retrooper 3a78329fba Removed debug. 2022-02-26 22:44:39 +01:00
retrooper 51879a5003 Removed debug. 2022-02-26 22:16:05 +01:00
retrooper 3b9646436f Reverted back to old encoder system, shoudl work with experimental protocollib builds. 2022-02-26 21:26:39 +01:00
retrooper 0de0042591 Optimizations to utilities 2022-02-25 22:13:10 +01:00
retrooper 4b57de43be Merge remote-tracking branch 'origin/2.0' into 2.0 2022-02-25 16:52:54 +01:00
retrooper f7846f6bc6 Updated to 1.18.2 ahead of time? 2022-02-25 16:51:48 +01:00
MWHunter cc92d8ab69 Flag byte masks are being read wrong 2022-02-24 21:28:37 -06:00
retrooper 62ac36d436 Added support for thread-safe packet listeners(processing packets when not on netty-threads) 2022-02-24 22:13:59 +01:00
MWHunter afe5bed6fc Stop console spam with ProtocolLib + ViaVersion 2022-02-24 13:37:32 -06:00
retrooper a3c956bf04 I don't think we handle cancelling right yet... 2022-02-23 22:46:43 +01:00
retrooper 17d703bf56 Another attempt to fix viaversion cancelling packets.
User#closeInventory added
2022-02-23 21:02:28 +01:00
retrooper 87b58f2ab8 Support ViaVersion cancelling packets. 2022-02-23 20:50:54 +01:00
retrooper 2e660714aa Fixed buffer memory leak in PacketEncoderModern 2022-02-23 20:17:18 +01:00
retrooper 5d983eebf0 Think we support colors now in User#sendMessage(String) 2022-02-23 19:52:07 +01:00
retrooper 2639c615e8 Fixed cancelling outgoing packets. 2022-02-23 19:45:49 +01:00
retrooper e92f1c8e16 Only inject real players. NPCs from plugins such as Citizens will not be injected. 2022-02-23 19:18:17 +01:00
retrooper 6bc8274e2d Removed debugs 2022-02-23 18:48:24 +01:00
retrooper a26b59a233 Trying to fix possibility of null event! 2022-02-23 18:47:38 +01:00
retrooper 6505738fbf Minor change. 2022-02-22 22:21:08 +01:00
retrooper 10c11e3c56 Minor change. 2022-02-22 21:19:36 +01:00
retrooper 4aacdf3a37 Fixed error when closing servers without ViaVersion. 2022-02-22 20:30:47 +01:00
retrooper 6a4cbd5c97 Bug fix on closing servers without viaversion. 2022-02-22 19:54:31 +01:00
retrooper 0f907d9f99 Many bug fixes in spigot injector (1.8+)
Includes stopping server with ViaVersion, attempted to prevent the possibility of null events)
Client version abstraction cleaned up a bit hopefully and implementation.
2022-02-22 19:49:06 +01:00
retrooper 8409bd7d93 Some more features to ChannelHelper and ByteBufHelper (closing channels, copying byte array of buffer without modifying reader index) 2022-02-21 22:34:35 +01:00
retrooper 6123ae9744 Fixed redundant synchronization 2022-02-21 21:32:55 +01:00
retrooper 74751c77c6 Adding more debugs to our server connection initializer, to help catch issues where handlers don't exist for some reason? 2022-02-21 21:26:48 +01:00
retrooper bd5a681a2b Bug fixes in our injector when viaversion is present. 2022-02-21 21:19:10 +01:00
retrooper c2aa0d15cc Removed PacketSendEvent#getPromisedTasks as it was redundant.
Added User#flushPackets
2022-02-21 21:08:32 +01:00
retrooper 9bcc0bb175 Merge remote-tracking branch 'origin/2.0' into 2.0 2022-02-21 20:52:13 +01:00
retrooper dd1c35dfb3 Fixed ProtocolManagerImpl#writePacket on Spigot. 2022-02-21 20:51:29 +01:00
MWHunter 003416e324 Revert gradle upgrade to try to fix jitpack 2022-02-20 16:35:16 -06:00
retrooper 05a44984a3 Merge remote-tracking branch 'origin/2.0' into 2.0 2022-02-20 22:44:14 +01:00
retrooper 03a5f8ec90 Fixed ProtocolLib & Via combination causing an incompatibility. I really hate to have to do this kind of an injector for spigot, but we have to. We will also wrap the vanilla encoder like Via does, and it seems like ProtocolLib caused this mess. 2022-02-20 22:43:54 +01:00
MWHunter b632778c62 Make user versions more resilient 2022-02-20 15:38:49 -06:00
MWHunter 0eb4940cd3 Add debugs for setting client version 2022-02-20 14:34:05 -06:00
MWHunter b964913af0 Bump gradle version 2022-02-19 14:33:17 -06:00
MWHunter 31e12c31ed Add ability to write packets without flushing 2022-02-19 14:32:21 -06:00
retrooper e65c125e01 Merge remote-tracking branch 'origin/2.0' into 2.0 2022-02-18 22:33:35 +01:00
retrooper f08bd9310d Working on PLIB compatibility 2022-02-18 22:33:17 +01:00
DefineOutside 7517493b07 Merge pull request #251 from AbhigyaKrishna/2.0
Created WrapperPlayServerWindowProperty
2022-02-18 12:15:29 -06:00
Abhigya 898f1d86a9 Fixed constructor to PacketSendEvent 2022-02-18 23:43:34 +05:30
MWHunter 873cd20dba Add useful methods to Chunk_v1_18 2022-02-18 10:48:33 -06:00
Abhigya 982a984ad4 Create WrapperPlayServerWindowProperty 2022-02-18 17:26:28 +05:30
MWHunter 8ba3ef0d7f Add method for creating empty chunks 2022-02-17 23:10:41 -06:00
MWHunter 94b8642eec Add WrapperPlayServerUseBed 2022-02-17 21:15:05 -06:00
retrooper 43ed8bcf49 WrapperHandshakingClientHandshake stackoverflow fixed 2022-02-17 22:49:10 +01:00
retrooper 95a6a8ee1f No debugs. 2022-02-17 21:39:20 +01:00
retrooper 444eff637b Nevermind, we were just discarding exceptions which isn't great. 2022-02-17 21:29:53 +01:00
retrooper d2e230c0cb Fixed many exceptions in exceptionCaught method in our netty handlers. Including ClosedChannelException 2022-02-17 21:25:03 +01:00
retrooper 195f3326fc Removed many injector/implementation classes that are no longer needed. File size hopefully gone down by a lot now. 2022-02-17 21:00:41 +01:00
retrooper fefbddcc92 Massive changes to the way netty methods are declared and implemented. 2022-02-17 20:47:37 +01:00
MWHunter bb2e9902c9 Legacy doors have no powered variable 2022-02-15 13:34:00 -06:00
MWHunter 555786d906 Add difficulty to correctly be copied for WrapperPlayServerJoinGame 2022-02-15 09:36:38 -06:00
MWHunter c5926e71ab Even more block mapping bug fixes 2022-02-14 23:15:31 -06:00
MWHunter 0e0d68e6d2 Activator rail was missing from legacy mappings 2022-02-14 23:09:36 -06:00
MWHunter cc3658591c Add warning just in case mappings are wrong 2022-02-14 23:03:47 -06:00
MWHunter 8b9030bda6 Fix some type mappings 2022-02-14 23:00:44 -06:00
MWHunter fe1a718926 Fix some type mappings 2022-02-14 22:52:25 -06:00
MWHunter 4cbc67683d Remove EntityTypes equal method 2022-02-14 22:37:40 -06:00
DefineOutside c308742582 Merge pull request #241 from RohanGoyalDev/2.0
Added MerchantRecipeData and WrapperPlayServerOpenWindowMerchant
2022-02-14 21:20:16 -06:00
RGoyalmc 029b568f5c Changed the name to avoid confusion 2022-02-15 01:14:37 +05:30
RGoyalmc 4bfe3ab62d Fixes for WrapperPlayServerOpenWindow 2022-02-15 00:58:06 +05:30
RGoyalmc 377e2a9c79 Added MerchantRecipeData and WrapperPlayServerOpenWindowMerchant 2022-02-15 00:57:53 +05:30
MWHunter f0192b3d4f pre-1.13 block mappings fixes 2022-02-14 12:19:42 -06:00
retrooper b7a15692d5 ByteBufAllocationHandler created. 2022-02-14 18:11:41 +01:00
retrooper cac05219b4 Added a ByteBufHelper which uses the bytebufhandler methods for us. 2022-02-14 17:56:33 +01:00
retrooper 5732f9e15d Added write buffer methods to ByteBufHandler 2022-02-14 17:36:11 +01:00
retrooper 8378b9265a Working on reducing memory usage with changing our netty declarations (implemented by each platform) 2022-02-14 17:22:37 +01:00
MWHunter 0ba2121283 1.13-1.16 default block states 2022-02-13 23:06:30 -06:00
retrooper ec78edcd7a Forgot to execute build commands for bungee and netty-common in gradle-publish.yml 2022-02-13 19:50:26 +01:00
retrooper de1b368ae8 Updated github gradle publish file. 2022-02-13 19:46:21 +01:00
retrooper 0bc3ab989b netty-common publishing fixed. sorry for all the past down-times. 2022-02-13 19:42:09 +01:00
retrooper b3a23fe9c0 Forgot to publish netty-common. 2022-02-13 19:34:44 +01:00
retrooper b53c9ac6fd Bug fixes in netty-common build script. 2022-02-13 16:53:07 +01:00
retrooper 5de39dd131 Update BungeePacketEventsBuilder to see if jitpack updates their caches? 2022-02-13 16:46:01 +01:00
retrooper 7a08005e53 Looking into why ProtocolLib & ViaVersion and our plugin just aren't compatible. 2022-02-13 11:29:59 +01:00
retrooper 6f3ce820d3 Forgot netty-common's build gradle 2022-02-13 10:30:56 +01:00
retrooper cc9cd837b3 netty-common module created. 2022-02-13 10:30:26 +01:00
MWHunter 170175a4cb 1.7-1.12 items final bug fixes 2022-02-12 22:13:30 -06:00
MWHunter 95cb1fcdfa 1.7-1.12 items bug fixes 2022-02-12 21:45:04 -06:00
MWHunter 81489a70a2 Convert 1.7-1.12 items to use the 1.18 names 2022-02-12 21:26:45 -06:00
MWHunter ea7f455ca7 1.13-1.18 item type bug fixes. pre-1.13 still broken 2022-02-12 18:43:25 -06:00
MWHunter 0056a2c2c7 Replace legacy item type mappings 2022-02-12 18:43:25 -06:00
retrooper 6c6bbca60f Fixed BungeePacketEventsBuilder and updated to latest packetevents-netty-impl. 2022-02-12 21:49:55 +01:00
MWHunter de7ff0439b Fix entity type mappings on legacy versions 2022-02-12 14:29:16 -06:00
retrooper 930f491b3f Made a ProtocolManager with protocol utilities, that don't require a platform-dependent object. Just ChannelAbstracts and User objects usually.
Many deprecations in PlayerManager and ServerManager

ClientVersion minor optimization.

potion_type_mappings.json are now in the potion folder, instead of item(i don't know why they were there in the first place)
2022-02-12 21:08:44 +01:00
MWHunter 8fde01c50f Fix tracking world height 2022-02-11 21:26:06 -06:00
MWHunter c144955530 Fix 1.17/1.18 extended world chunk reading 2022-02-11 21:09:11 -06:00
MWHunter 176161be01 Respawn previous gamemode can be null 2022-02-11 20:05:27 -06:00
MWHunter 0fdc0bf7ce Revert to using spigot-api 1.18 instead of 1.18.1 2022-02-11 14:36:17 -06:00
retrooper ca72e0cbfb Working on more helpful errors. 2022-02-11 20:02:08 +01:00
MWHunter e5212aa687 Check isEmpty() instead of getAmount == -1 2022-02-11 11:59:37 -06:00
MWHunter 959e494b1c Merge ItemStack.AIR into ItemStack.EMPTY to try to fix 1.8 items 2022-02-11 11:59:37 -06:00
retrooper 6cf2e0407e Attempting to fix build.gradle in api module. 2022-02-11 09:02:25 +01:00
retrooper 77d31e32ce Relocated BungeePacketEventsBuilder 2022-02-11 08:09:24 +01:00
MWHunter 0176344bf8 Fix 1.16.2-1.16.5 support 2022-02-10 20:38:59 -06:00
MWHunter f311b0e0c3 bump spigot-api version to 1.18.1 2022-02-10 20:00:22 -06:00
retrooper 9b631a3e21 Actually register the internal bungee processor. 2022-02-10 19:16:48 +01:00
retrooper c43922bdc1 Removed debugs. 2022-02-10 14:41:05 +01:00
retrooper 3fdc992846 Optimizations. 2022-02-10 13:58:33 +01:00
retrooper 30a2e935fd Managed to get compression & decompression issues out the way. Issue is when a client connects to the proxy, the packets are in the format of the client. (Unless ViaVersion is inbetween) 2022-02-10 11:44:36 +01:00
retrooper d432fa0664 More progress on bungee packetevents, can't get passed the PLAY state at the moment. 2022-02-09 23:14:44 +01:00
retrooper e11cc9d9f0 Attempting to fix gradle for jitpack. 2022-02-09 21:09:40 +01:00
retrooper ed2d16d775 Added copyright notices in some files where it was missing.
Progress on bungee.
2022-02-09 21:00:13 +01:00
retrooper 96c1321772 Small changes to bungee 2022-02-09 19:38:36 +01:00
retrooper 1d9ba33b21 Removed IDE config file 2022-02-09 18:00:34 +01:00
retrooper b6766cbaa6 Changes in build configuration files. 2022-02-09 17:58:10 +01:00
retrooper 215ef2a20d Working on BungeeCord support. 2022-02-09 17:55:37 +01:00
retrooper 7efc5b3174 Update .gitignore 2022-02-09 15:54:30 +01:00
retrooper 9f3ca243e2 Removed debugs. 2022-02-09 15:54:16 +01:00
retrooper 0b3746454e Add spigot build.gradle and .gitignore 2022-02-09 15:43:39 +01:00
retrooper c64115661c Back to a gradle multi-module project. 2022-02-09 15:41:06 +01:00
MWHunter 9c5fea1656 Fix isKnownEmpty(), rename to isEmpty() 2022-02-06 16:18:09 -06:00
MWHunter c6f7d4d4f9 Fix negative block position support 2022-02-06 15:48:42 -06:00
MWHunter 8ab1f82e29 Fix WrapperPlayServerJoinGame on 1.17 2022-02-06 14:55:47 -06:00
retrooper f947fd8fdf Merge remote-tracking branch 'origin/api' into api 2022-02-06 21:32:06 +01:00
retrooper 7f460f243c Bug fix in WrapperPlayServerScoreboardObjective 2022-02-06 21:31:50 +01:00
MWHunter 1ffbda71f7 WrapperPlayServerChunkDataBulk for 1.8, in-progress 1.7 2022-02-06 13:34:37 -06:00
retrooper 52a001d7cd Compilation error fixed and PacketListenerCommon is publicly accessible. 2022-02-06 17:20:28 +01:00
retrooper c80d2c094e Fixed WrapperPlayServerWindowItems 2022-02-06 17:15:51 +01:00
retrooper abba5d8870 Updated annotations. 2022-02-06 15:51:47 +01:00
retrooper cf69381c32 Fixed shadowJar(last time) 2022-02-06 11:20:46 +01:00
retrooper 597dd3123d Fixed shadowJar(last time) 2022-02-06 11:19:38 +01:00
retrooper 342da1e039 Added shadowJar to api module. 2022-02-06 11:13:59 +01:00
retrooper dfe0bd5825 Fixed github actions. 2022-02-06 10:38:13 +01:00
retrooper 40b9474896 Must work now. 2022-02-06 10:36:30 +01:00
retrooper 64ddc54325 Eliminated shadowJar. 2022-02-06 10:35:18 +01:00
retrooper 9d2ed8fd9a No longer minimize shadowJar? 2022-02-06 10:11:21 +01:00
retrooper b0740e7af7 Still tryna fix publishing. 2022-02-06 09:55:14 +01:00
retrooper ec5abbe2cb Trying to fix jitpack publishing. 2022-02-06 09:49:25 +01:00
retrooper 7ee7e9897e Added shadowJar plugin to api. 2022-02-06 09:26:04 +01:00
retrooper 91d35cb671 PEVersion is now stored in PacketEventsAPI 2022-02-06 09:01:29 +01:00
retrooper 0064517e99 This is the API branch, removed other modules. 2022-02-06 08:57:39 +01:00
MWHunter e05aa69674 In-progress 1.7 chunk wrapper support 2022-02-05 22:53:20 -06:00
MWHunter e9ffe18674 Port chunk wrapper to 1.8 (for 1.8 - 1.18 support) 2022-02-05 22:10:52 -06:00
MWHunter 3f0bce90ea Port chunk wrapper to 1.12 2022-02-05 21:06:44 -06:00
MWHunter d220a17679 Clean up legacy block mappings 2022-02-05 20:51:53 -06:00
MWHunter a310347420 Port WrappedBlockState to pre-flattening 2022-02-05 18:56:49 -06:00
MWHunter a7096b876f Port chunk wrapper back to 1.13 2022-02-05 17:59:39 -06:00
MWHunter 184e846592 Port chunk wrapper back to 1.14 2022-02-05 17:36:51 -06:00
MWHunter 88b02b60a4 Port chunk wrapper back to 1.15 for 1.15-1.18 support 2022-02-05 17:06:47 -06:00
retrooper 87f8af7977 Changes to PacketEventsAPI. It is now an abstract class, not every method must be implemented! Removed some unused classes. 2022-02-04 21:19:41 +01:00
retrooper 388619661b Merge remote-tracking branch 'origin/2.0' into 2.0 2022-02-04 21:12:39 +01:00
retrooper f9326359af Changes to PacketEventsAPI. It is now an abstract class, not every method must be implemented! 2022-02-04 21:12:01 +01:00
MWHunter f5693273a6 Fix enchantments being reset 2022-02-04 13:43:07 -06:00
retrooper 1b237b5615 Removed debug. 2022-02-04 19:15:54 +01:00
retrooper 8eaea5feb1 Merge remote-tracking branch 'origin/2.0' into 2.0 2022-02-04 19:14:59 +01:00
retrooper 7aa624c8ed In our decoder, we don't process empty buffers anymore. 2022-02-04 19:14:23 +01:00
MWHunter ed866810d6 Fix explosion packet off by 1 generating ghost blocks 2022-02-04 11:39:28 -06:00
retrooper 4fde212445 WrapperPlayServerWindowItems fixed for server versions lower than 1.7.10. Attempted GeyserUtil 2.0 API support, but untested. Cleaned up build.gradle 2022-02-04 18:09:40 +01:00
retrooper a11e013668 Merge pull request #221 from retrooper/revert-220-2.0
Revert "find field in superclass"
2022-02-04 17:41:37 +01:00
retrooper 4bab379986 Revert "find field in superclass" 2022-02-04 17:41:19 +01:00
retrooper 71b3089ae6 Merge pull request #218 from AbhigyaKrishna/2.0
Fixes for legacy mappings
2022-02-04 16:39:26 +01:00
retrooper 7e81bcb5be Merge pull request #220 from huanmeng-qwq/2.0
find field in superclass
2022-02-04 16:30:39 +01:00
huanmeng_qwq 2496b7c2c5 Update ReflectionObject.java 2022-02-03 23:07:04 +08:00
huanmeng_qwq 9aeb148ea9 find field in superclass 2022-02-03 22:53:49 +08:00
Abhigya 8e7c4f2b2c Typo fixes in mapping 2022-02-02 19:18:09 +05:30
Abhigya 60201b4ac3 Spawn entity packet mapping fix 2022-02-02 18:51:35 +05:30
Abhigya 169a7fd064 Mappings for 1.8 items 2022-02-02 18:49:08 +05:30
Abhigya bfba14106e Made the enums public 2022-02-02 18:48:33 +05:30
retrooper f6b22f0ff2 Minor change to javadocs 2022-02-01 23:43:09 +01:00
retrooper 313d2f956c Last bug fix in join game wrapper. 2022-02-01 23:13:59 +01:00
retrooper a0ae5e7dcf Bug fixes for JoinGame wrapper. 2022-02-01 23:02:20 +01:00
retrooper 30c070a60c PlayerManager#clearUserData bug fixes 2022-02-01 22:47:29 +01:00
retrooper 5bf2daa734 Set default values for chunk data wrapper lighting attributes. 2022-02-01 22:33:10 +01:00
retrooper af0faf6436 WrapperPlayServerJoinGame created 2022-02-01 20:08:38 +01:00
retrooper 0333aad4fb PlayerManager#clearUserData method created 2022-01-31 17:34:29 +01:00
retrooper abee3e2cf2 Removed debugs. 2022-01-31 16:56:46 +01:00
retrooper 86fc6bb452 Fixed decoder when ViaVersion isn't present. 2022-01-31 16:44:23 +01:00
retrooper b1681772b0 WrapperPlayServerTeams constructor with sendevent exists. WrapperStatusServerResponse created. 2022-01-30 22:51:07 +01:00
retrooper 6aef8a7b14 Post-tasks in ProtocolPacketEvents now are also called when the event is cancelled! 2022-01-30 22:33:04 +01:00
retrooper 5306c090c0 PacketSendEvent#hasPromisedTasks created 2022-01-30 22:28:30 +01:00
retrooper 248799229d All in all, particle packets are working on 1.8. 1.7.10 still needs some work, and 1.8 a few tweaks.
Fixed issue where JOIN_GAME packet type just wouldn't get called in our listener.
2022-01-30 22:05:06 +01:00
retrooper d84d258d5c PacketSendEvent#getPromisedTasks added to distinct from post-tasks (in receive and send events). 2022-01-30 20:57:47 +01:00
retrooper 751c4f3ce8 Forgot to document that we added post-tasks to receive-events too. 2022-01-30 20:34:56 +01:00
retrooper b52f8d5ce9 Fixed viaversion support, because we misplaced our encoder. 2022-01-30 19:52:07 +01:00
retrooper 94823b93cd Removed debugs. 2022-01-30 19:24:07 +01:00
retrooper b2039f5741 SimplePacketListenerAbstract created. Relocation of so many event classes. Fixed late injectors on reload not updating UserProfile. 2022-01-30 18:52:35 +01:00
retrooper 0fd0c62c96 Working on bug fixes in the injector, worked on ViaVersion bug fixes, but isn't perfect(atleast not on 1.8) 2022-01-29 23:49:29 +01:00
retrooper ce66fa1aa6 Attempt on 1.7 support for particle wrapper. 2022-01-29 15:52:47 +01:00
retrooper a955b85620 Fixed comression issues. Fixed WrapperPlayClientPlayerBlockPlacement for 1.8 and 1.7.10 2022-01-29 07:51:37 +01:00
retrooper 0c3908de28 Minor optimization in ProtocolPacketEvent 2022-01-28 23:21:55 +01:00
retrooper aed27d6fc4 Fixed bug in Spigot Packet encoders! 2022-01-28 23:12:59 +01:00
retrooper f2e232d6cf Optimized build.gradle? 2022-01-28 21:06:19 +01:00
retrooper 5311189ec2 Minor changes 2022-01-28 20:49:33 +01:00
retrooper 719ad602ce All debugs eliminated 2022-01-26 20:49:36 +01:00
retrooper 66831ca814 Fixed login success being play state. Fixed post tasks. 2022-01-26 20:37:09 +01:00
retrooper 323ae164f2 LoginSuccess is allegedly in play state for some packet listeners. 2022-01-26 20:23:11 +01:00
retrooper 082924fe82 Removed debugs 2022-01-26 19:27:37 +01:00
retrooper 86b8d6d7e7 Made encoders more memory efficient and reduced memory leaks. ItemStack items aren't always enchanted now. 2022-01-26 19:26:57 +01:00
retrooper dafc082838 Working on making our decoders more memory efficient and reduce potential memory leaks. 2022-01-26 19:09:43 +01:00
retrooper f0128e0f5d ProtocolPacketEvent#getSocketAddress optimization 2022-01-25 23:24:20 +01:00
retrooper c04322c3a0 Merge remote-tracking branch 'origin/2.0' into 2.0 2022-01-25 23:21:44 +01:00
retrooper b1463a6d5b Attempted optimizations, we now store clientversion and connectionstate in our user instance. Hopefully reduced map calls. 2022-01-25 23:21:27 +01:00
MWHunter 13a532eed0 Fix null pointer when setting invalid block data 2022-01-25 10:13:00 -06:00
MWHunter 625f74fbc5 Fix explosion for 1.17+ 2022-01-24 17:27:06 -06:00
retrooper d23efe4154 Attached good-looking credit to various projects
We might have not credited every single external project out there, I'll look deeply soon.
2022-01-23 23:20:13 +01:00
retrooper 0ef56aab3a Removed debugs 2022-01-23 18:08:50 +01:00
retrooper e2f1415820 ProtocolPacketEvent#getUser finally implemented properly.
GlobalChannelInjector -> SpigotChannelInjector.
 User#sendPacket added.
 We really try ensure getUser never returns null.
2022-01-23 18:07:12 +01:00
retrooper d17747490f PacketEvents.getAPI().getPlayerManager().getUser created. Renamed GameProfile to UserProfile and made a User class 2022-01-23 14:56:20 +01:00
retrooper 1866de2908 DiggingAction is no longer a subclass,
WrapperPlayServerAcknowledgePlayerDigging created
2022-01-23 10:24:10 +01:00
retrooper ffd5ce2f90 Removed debug in flying wrapper 2022-01-23 09:38:38 +01:00
retrooper 83624452a4 Fixed WrapperPlayClientPlayerFlying 2022-01-23 09:22:10 +01:00
retrooper b7b35c3ea1 Merge pull request #201 from AbhigyaKrishna/2.0
Fix for WrapperPlayServerEntityTeleport on 1.8
2022-01-22 20:10:36 +01:00
retrooper fe5c5bf6fa WrapperPlayServerParticle created, still might need some little finishing on versions before 1.13. And particle types doesnt have legacy particles 2022-01-22 20:09:47 +01:00
retrooper 705e2759dc Particle abstraction added 2022-01-22 19:04:38 +01:00
Abhigya 4a6e8cada0 Fixed packet reading for WrapperPlayServerEntityTeleport 2022-01-22 21:29:37 +05:30
Abhigya dcb30a19e4 Fix for WrapperPlayServerEntityTeleport again 2022-01-22 21:19:28 +05:30
retrooper 6e846705ec Merge pull request #199 from RohanGoyalDev/2.0
Added unregisterListeners methods
2022-01-22 15:43:19 +01:00
retrooper 9d018e0886 Added unregisterListener method for single listener, remove unregisterListeners with priority
Priorities are already attached to packetlistenerabstracts. No need to additionally attach a priority.
2022-01-22 15:43:11 +01:00
retrooper c4f6ea71b4 PacketSendEvent#getPostTasks now working 2022-01-21 22:41:43 +01:00
retrooper 4549b8305e No more relocating of libraries, as it causes issues with API users 2022-01-21 21:42:19 +01:00
retrooper ed10be50ea Fixed WrapperPlayServerSpawnPlayer and WrapperPlayServerEntityTeleport for 1.8 & 1.7.10 by AbhigyaKrishna
Fixed WrapperPlayServerSpawnPlayer and WrapperPlayServerEntityTeleport for 1.8 & 1.7.10
2022-01-21 21:39:55 +01:00
retrooper 3a6f0c4c7b Fixed WrapperPlayServerEntityTeleport for 1.8, and fixed 1.7 support broken in this PR 2022-01-21 19:58:58 +01:00
retrooper 1ea32c79e3 Merge remote-tracking branch 'origin/2.0' into 2.0 2022-01-21 19:33:13 +01:00
retrooper 3612d96029 Removed debug listener 2022-01-21 19:32:14 +01:00
Abhigya cd4e5a21f6 Fix for writing entityId in WrapperPlayServerEntityTeleport for 1.8 2022-01-21 21:10:11 +05:30
RGoyalmc aaf3c915bc Merge remote-tracking branch 'origin/2.0' into 2.0 2022-01-21 20:28:22 +05:30
RGoyalmc 3bd9014b5a registerListener returns PacketListenerAbstract to allow unregistering later 2022-01-21 20:28:10 +05:30
Abhigya ab209d950b Removed relocation 2022-01-21 19:14:45 +05:30
Abhigya e92413a53d WrapperPlayServerSpawnPlayer fix for 1.8 and lower 2022-01-21 19:11:11 +05:30
RG fb74a7f99b Merge branch 'retrooper:2.0' into 2.0 2022-01-21 14:02:00 +05:30
RGoyalmc 96b9442c29 Added unregisterListeners methods 2022-01-21 14:00:52 +05:30
MWHunter 7db5ff25f0 Correct Optional_Integer entity data type 2022-01-20 16:55:19 -06:00
retrooper a20d067d62 NPC API additions, custom prefix and suffixes, colored name feature. 2022-01-20 21:15:25 +01:00
retrooper c85b5dce14 Merge pull request #198 from RohanGoyalDev/2.0
Added WrapperPlayServerScoreboardObjective and WrapperPlayServerTeams
2022-01-20 18:35:37 +01:00
retrooper 70ab66889b Removed some examples 2022-01-20 18:30:35 +01:00
RGoyalmc 3acf776efe Added WrapperPlayServerScoreboardObjective and WrapperPlayServerTeams 2022-01-20 22:53:21 +05:30
retrooper 0430a94f31 Moved AdventureSerializer to util package 2022-01-19 22:46:21 +01:00
retrooper 044c3b186d Deleted our chat component abstraction and
migrated to Kyori Adventure
2022-01-19 22:45:34 +01:00
retrooper 620a63f09c Correctly relocate adventure, might do some changes 2022-01-19 22:12:09 +01:00
retrooper b76933f26d Merge pull request #197 from AbhigyaKrishna/2.0
Adventure implementation
2022-01-19 20:52:09 +01:00
Abhigya 3d94e6fb75 Adventure implementation 2022-01-19 23:00:18 +05:30
retrooper 925f9a3c3e Vector3d, Vector3f, Vector3i#zero created 2022-01-17 22:22:40 +01:00
retrooper 1fae8ad4d6 Removed debug 2022-01-17 22:20:51 +01:00
retrooper 1860de9529 WrapperPlayServerCloseWindow default constructor created;
ServerManager#receivePacket and
ServerManager#receivePacketSilently created
2022-01-17 22:20:28 +01:00
retrooper 3dcce9ea5d Merge remote-tracking branch 'origin/2.0' into 2.0 2022-01-17 21:03:48 +01:00
retrooper 4809c8db27 Some optimizations/simplifying to the current netty abstraction implementation of packetevents 2022-01-17 21:03:21 +01:00
MWHunter c14297aa51 WrapperPlayServerCloseWindow 2022-01-17 13:30:32 -06:00
retrooper 0ccfdc6ef4 Minor change to a comment 2022-01-17 19:49:05 +01:00
retrooper 45ad93778d Fixed compatibility with ProtocolSupport 2022-01-17 19:48:01 +01:00
retrooper f1d683abb0 Compilation error fixed!! 2022-01-16 22:04:10 +01:00
retrooper 8fad01156b We now collect our packetevents version with bStats;
SpigotDataHelper.fromBukkitItemStack bug fix
2022-01-16 21:59:26 +01:00
retrooper b1c7f2a3c5 Update bStats notice 2022-01-16 21:11:44 +01:00
retrooper f2c0468487 Vector3d#ZERO created;
Vector3f#ZERO created;
Vector3i#ZERO created
2022-01-15 18:10:13 +01:00
retrooper 89110b21f1 Minor changes 2022-01-13 22:19:22 +01:00
retrooper 79f176221a Equipment and EquipmentSlot now have their own class;
ItemStack#AIR added;
NPC#getMainHand, getOffHand, getHelmet, getChestPlate, getLeggings, getBoots added;
NPCManager#updateEquipment;

PlayerManager#sendPacket works again
2022-01-13 22:03:26 +01:00
retrooper 56ebeffda1 WrapperPlayServerCollectItem created;
ItemStack#Builder default amount is 1;
Vector3d#toVector3i created;
Vector3i#toVector3d created;
2022-01-09 21:54:33 +01:00
retrooper 0fe5d63220 Add WrapperPlayServerEntityEquipment 2022-01-09 19:34:01 +01:00
retrooper 43d18cd6f2 Added WrapperPlayServerEntityEquipment 2022-01-09 19:00:47 +01:00
retrooper ffcb91ef05 Removed preProcessed feature in listeners 2022-01-08 17:36:41 +01:00
retrooper d42de7d96a Removed redundant duplication when sending packet bytebufs 2022-01-07 18:34:37 +01:00
retrooper 04cf207105 Change to debug listener 2022-01-07 17:30:28 +01:00
retrooper b404274e26 Removed debugs 2022-01-07 17:02:34 +01:00
retrooper 011d52a246 Last attempt to support pre processed listener and "cloned" event instances 2022-01-07 16:57:33 +01:00
retrooper 2e01f71e95 Redundant code removed from PacketWrapper 2022-01-07 16:26:10 +01:00
retrooper 17aa045349 Added small debug 2022-01-07 16:14:59 +01:00
retrooper 264e6e5e81 Pre processed events are working 2022-01-07 16:01:44 +01:00
retrooper b5a15cbbbb 2nd Attempt to fix pre processed events 2022-01-07 15:51:57 +01:00
retrooper a8ee5ee79a Attempt to fix pre processed events 2022-01-07 15:34:47 +01:00
retrooper d7be938767 You should now be able to read the same event multiple times with many wrappers. 2022-01-07 15:18:58 +01:00
retrooper 00ecb18efb Compilation error fixed 2022-01-07 14:59:04 +01:00
retrooper 0880664a58 PacketListener and PacketListenerReflect can now be preProcessed. This means the buffer is cached and you can safely read the data in the packet on a separate thread or later. 2022-01-07 14:53:01 +01:00
retrooper a5641ee557 PacketListenerAbstract#isPreProcessed added;
WrapperPlayClientBlockPlacement renamed to WrapperPlayClientPlayerBlockPlacement
2022-01-07 14:36:31 +01:00
retrooper ac4d9601d9 Packet wrapper objects can be sent multiple times now 2022-01-07 12:07:09 +01:00
retrooper 597cd2462c PlayerManager#sendPacketSilently defined;
PlayerManagerImpl#sendPacketSilently implements it
2022-01-07 12:03:04 +01:00
retrooper a4aabcfbcc WrapperPlayServerFacePlayer created 2022-01-06 22:22:48 +01:00
retrooper 58839ae503 WrapperPlayServerPlayerPositionAndLook.java additions;
WrapperPlayClientPlayerFlying#hasPositionChanged and hasRotationChanged now accessible
2022-01-06 21:27:37 +01:00
retrooper 85a0edc131 Set default values for player data providers 2022-01-06 19:09:45 +01:00
retrooper 8aedcff494 Merge remote-tracking branch 'origin/2.0' into 2.0 2022-01-06 18:59:54 +01:00
retrooper 78581d99ae Set default values for entity data providers 2022-01-06 18:58:11 +01:00
MWHunter 8cf6e07a6b WrapperPlayServerOpenHorseWindow 2022-01-06 10:46:47 -06:00
retrooper 7f44343ec7 Attempt to fix WrapperPlayServerPlayerPositionAndLook and RelativeFlags;
SkinSection improvements;

WrapperPlayClientSettings#isSkinSectionVisible, setSkinSectionVisible added
2022-01-06 15:50:47 +01:00
retrooper bb78cfcaf6 Attempt to transform destroy entities packet into multiple when needed;
SpigotDataHelper created, which helps for converting Bukkit data types into packetevents data types
2022-01-06 12:35:01 +01:00
retrooper 3464fa8ea7 Many comments removed, we instead made GitHub issues 2022-01-06 12:07:24 +01:00
retrooper 23c427944f Merge remote-tracking branch 'origin/2.0' into 2.0 2022-01-06 11:49:25 +01:00
retrooper b0943da09f Attempted to complete the entity data provider builders, not entirely perfectbut should work. 2022-01-06 11:49:11 +01:00
retrooper dd20f0c7c7 Credit bStats metrics class owner 2022-01-06 00:24:10 +01:00
retrooper 4093a23fb3 SkinSections refactored;
WrapperPlayClientPlayerFlying can now parse its sub packets;

Working on builders for entity data providers.(player one is left)
2022-01-05 23:27:10 +01:00
retrooper c5c9d6e1fd Merge remote-tracking branch 'origin/2.0' into 2.0 2022-01-05 13:30:05 +01:00
retrooper 3c88c64cac LivingEntityDataProvider created;
PlayerDataProvider also created, now time to test
2022-01-05 13:29:26 +01:00
MWHunter 55dacc62dc Fix MCProtocolLib bug 2022-01-04 21:16:31 -06:00
MWHunter 0056adae8e Fix equals and hashcode comparison for WrappedBlockState 2022-01-04 19:19:41 -06:00
MWHunter 7c9dd702c4 Fix yet another WrappedBlockState corruption method 2022-01-04 18:58:32 -06:00
MWHunter 8e73755566 Fix another WrappedBlockState corruption method 2022-01-04 18:40:47 -06:00
MWHunter 21da5c8be8 Don't let WrappedBlockState become corrupted 2022-01-04 17:50:19 -06:00
DefineOutside 8900e613b2 Fix compilation 2022-01-04 17:34:53 -06:00
retrooper 6e37546336 EntityDataProvider done;
Working on LivingEntityDataProvider
2022-01-04 22:56:12 +01:00
retrooper 4b4aec1e32 Attempting to fix a connection handler issue 2022-01-04 19:30:57 +01:00
retrooper b356696d1e Removed debugs and debug listener 2022-01-04 18:19:25 +01:00
retrooper 3dd75fc51e Attempted to fix PacketEncoderLegacy for 1.7 servers 2022-01-04 18:18:25 +01:00
retrooper d6a0823d57 Some bug fixes, skins now work again! 2022-01-04 17:47:46 +01:00
retrooper eb7e8752ed Fixed encoder issues with sending packets 2022-01-04 17:09:54 +01:00
retrooper 201666365f Fixed encoder issues when cancelling packets;
Improved ViaVersion support(optimizations)
2022-01-04 17:00:25 +01:00
retrooper 04ba2c29dd Merge remote-tracking branch 'origin/2.0' into 2.0 2022-01-04 16:39:11 +01:00
retrooper 8b2750389d Before we try change our encoder system. 2022-01-04 16:38:54 +01:00
MWHunter 586657d973 Fix 1.17+ support for EntityPose 2022-01-03 19:09:08 -06:00
retrooper 7e0f491a73 Merge remote-tracking branch 'origin/2.0' into 2.0 2022-01-03 22:08:29 +01:00
retrooper 8e62e6a6a3 CustomPipelineUtil should now work on 1.7.10 2022-01-03 22:08:06 +01:00
MWHunter 45ab932d3c Fix WrapperPlayClientBlockPlacement and add WrapperPlayClientUseItem 2022-01-03 15:00:55 -06:00
retrooper eb295e16e9 PlayerManagerImpl#sendPacket now calls our send event when Via isn't present 2022-01-03 21:07:14 +01:00
retrooper deec409f02 Fixed compilation error. 2022-01-03 11:33:37 +01:00
retrooper 246c5c4c55 Trying to add plugin.yml 2022-01-03 11:25:58 +01:00
retrooper 352750a247 Relocation of ResourceLocation 2022-01-03 08:44:27 +01:00
retrooper 4abb66f06a Merge remote-tracking branch 'origin/2.0' into 2.0 2022-01-03 08:37:09 +01:00
retrooper 7840391061 Finally we handle Villager data in the entity metadata packet! 2022-01-03 08:36:59 +01:00
MWHunter 5cf2d24098 Fix isReplaceable() 2022-01-02 21:51:12 -06:00
MWHunter 14781b3f7b Fix isSolid() for StateTypes 2022-01-02 17:24:53 -06:00
MWHunter 04beb32199 Fix WrappedBlockState 2022-01-02 15:29:02 -06:00
MWHunter 57c3f00f1d Fix BlockTags + ItemTags and rearrange their code 2022-01-02 14:57:02 -06:00
MWHunter f021974c73 Fix WrapperPlayServerUpdateHealth 2022-01-02 11:05:45 -06:00
MWHunter b97ab7c054 Fix entity metadata writing 2022-01-02 10:45:40 -06:00
MWHunter a930af9656 Fix entity type mappings for 1.16+ 2022-01-01 18:21:15 -06:00
MWHunter b74d0bce71 Try fixing EntityMetadata packet 2022-01-01 17:47:22 -06:00
retrooper 0a5f73d2a6 Finally got NPCManager#changeNPCSkin kind of working;
Removed debug listener
2022-01-02 00:00:13 +01:00
retrooper 94d02606f6 Bug fixes to MojangAPIUtil 2022-01-01 22:33:12 +01:00
retrooper 274618b899 MojangAPIUtil and UUIDUtil created 2022-01-01 22:22:27 +01:00
retrooper e77d23e908 Removed some things to prevent compilation 2022-01-01 21:59:17 +01:00
retrooper db878badae Fixed PacketWrapper#readEntityMetadata and writeEntityMetadata for 1.10+ 2022-01-01 21:58:30 +01:00
retrooper c723bee425 Merge remote-tracking branch 'origin/2.0' into 2.0 2022-01-01 21:50:02 +01:00
retrooper 6cf055501b Fixed WrapperPlayServerEntityProperties on 1.16+;
WrapperPlayServerSpawnPlayer minor addition;

NPCManager#updateNPCSkin and NPCManager#updateNPCDisplayPing added
2022-01-01 21:49:37 +01:00
MWHunter 7152615e3c Allow getting all valid item types and state types 2022-01-01 13:05:16 -06:00
retrooper b7bbdfa3e3 SpigotPacketEventsBuilder#clearBuildCache added 2022-01-01 18:50:44 +01:00
retrooper 1262855d05 SpigotReflectionUtil#getEntityById created 2021-12-31 21:37:14 +01:00
retrooper 1cea4d9766 Merge remote-tracking branch 'origin/2.0' into 2.0 2021-12-31 20:41:37 +01:00
retrooper 627c23ec15 Removed tab completion thing 2021-12-31 20:41:24 +01:00
MWHunter d6d447c6bf Restore getEnchantmentLevel 2021-12-31 13:36:15 -06:00
MWHunter 1852c48e93 ItemStack clean up duplicate code 2021-12-31 13:28:22 -06:00
MWHunter 78f8a6b7db Fix compilation on java 8 2021-12-31 12:48:07 -06:00
MWHunter 63f7d1aac5 ItemTypes <---> StateTypes when placeable 2021-12-31 12:31:01 -06:00
MWHunter c5a1bfdd62 Remove commented out code from ItemTypes 2021-12-31 11:59:18 -06:00
MWHunter 13627a83cf Rewrite ItemTypes to use a design pattern instead of 5 constructors 2021-12-31 11:57:08 -06:00
MWHunter 88023852b3 Add default block states for 1.17/1.18 2021-12-30 16:08:47 -06:00
retrooper 5adb6378e2 Change in one wrapper 2021-12-30 20:35:57 +01:00
retrooper 619cc77823 Minor fixes 2021-12-30 20:25:19 +01:00
retrooper fab8cdde35 Implemented a utility method NettyManager#asByteArray 2021-12-30 20:21:34 +01:00
retrooper 730eda864f Trying to fix game-profile failing to cache. 2021-12-30 20:14:02 +01:00
retrooper 1309c77f3c Minor changes 2021-12-30 13:17:21 +01:00
retrooper 35e503a2ae We can now build all the components officially with the API. 2021-12-30 12:41:59 +01:00
retrooper a82951f85e Removed debug and debug listener 2021-12-30 12:26:43 +01:00
retrooper 5ef782a04b Minor bug fix in translatable component, need to look into hover event 2021-12-30 12:11:00 +01:00
retrooper 78d1bf814f Lots of bug fixes in the chat component API 2021-12-30 12:03:09 +01:00
retrooper 4dcc33f7b7 Removed debug listener 2021-12-29 23:39:22 +01:00
retrooper 79514e0a51 Lots of code repetition fixed, working on fixing translatable components 2021-12-29 23:38:31 +01:00
retrooper f2c78c794a More progress on component serializer 2021-12-29 23:09:05 +01:00
retrooper 435e27d02c Addition to NBT components 2021-12-29 22:56:43 +01:00
retrooper b4640aecb0 Addition to NBT components 2021-12-29 22:47:21 +01:00
retrooper 6915c97a51 More progress on chat component api, working on nbt components 2021-12-29 22:45:26 +01:00
retrooper 7e6996813a Attempted getEnchantments in ItemStack;
Relocated EnchantmentType/s;

MappedEntity#getIdentifier -> MappedEntity#getName(For ItemType, PotionType, EnchantmentType)
2021-12-27 22:42:56 +01:00
MWHunter fd787fd3fb Migrate to ViaVersion block mappings 2021-12-26 19:59:18 -06:00
MWHunter 17aadda1c5 Initial ItemTags implementation 2021-12-26 16:49:18 -06:00
MWHunter 68335024ea Utility methods to WrapperPlayServerBlockAction.java 2021-12-25 17:12:48 -06:00
MWHunter c5cf140961 Add sword, shovel, axe, pickaxe, and hoe to ItemAttributes 2021-12-25 17:04:53 -06:00
retrooper 6764c39bfb Despawn NPC correctly 2021-12-25 18:51:05 +01:00
retrooper 59c6f58e77 Bukkit module -> Spigot module;
Read only listener bug fixes
2021-12-25 17:51:26 +01:00
retrooper 6a6a9f5a9e BukkitPacketEventsBuilder -> SpigotPacketEventsBuilder 2021-12-25 17:25:49 +01:00
retrooper 697f65c07e Merge remote-tracking branch 'origin/2.0' into 2.0 2021-12-25 17:23:13 +01:00
retrooper f59a2e5144 Packet listeners can now be readable only(which means the wrappers won't modify the packet being listened to, this can help optimize your usage of wrappers. 2021-12-25 17:23:02 +01:00
MWHunter f161ba5718 Utility methods to BlockFace 2021-12-24 21:21:21 -06:00
retrooper 467d5e596d Minor bug fix with getNPCManager() method 2021-12-24 22:43:00 +01:00
retrooper b66cf34975 Attempted to fix NPC head rotation 2021-12-24 22:33:09 +01:00
retrooper 528a7ec7e5 Renamed MinecraftReflectionUtil in bukkit module to SpigotReflectionUtil (considering renaming module to "spigot") 2021-12-24 22:20:16 +01:00
retrooper 3cee15aef0 Minor changes 2021-12-24 21:58:47 +01:00
MWHunter 677e2739a6 Finish missed boolean getX() and fix a statetype 2021-12-24 14:30:06 -06:00
MWHunter 79bf0f674c boolean getX() -> boolean isX() 2021-12-24 14:25:40 -06:00
MWHunter 8376abcfaa Add Attachment to wrapped block state 2021-12-24 14:18:37 -06:00
MWHunter 14201f8747 Add WrapperPlayServerDeclareRecipes 2021-12-24 14:08:49 -06:00
MWHunter c34d26670f Replace Facing enum with BlockFace enum 2021-12-23 21:53:56 -06:00
MWHunter 3c669c6e93 Add East state to WrappedBlockState 2021-12-23 21:49:41 -06:00
MWHunter e7896f9ec2 Make StateType in WrappedBlockState accessible
A bit of an oversight
2021-12-23 21:22:04 -06:00
MWHunter 1a17587d3a Working MultiBlockChange wrapper for 1.17+ 2021-12-23 20:39:46 -06:00
retrooper c23e066d63 WrapperPlayServerEntityRelativeMove had wrong packet type 2021-12-23 22:44:35 +01:00
retrooper aee4bfd240 Merge pull request #178 from Izibane/patch-1
すごい
2021-12-23 22:18:40 +01:00
retrooper 2ca0a14dfd despawn NPC bug fix 2021-12-23 22:17:09 +01:00
retrooper c9afbbc573 Location#clone added 2021-12-23 22:14:51 +01:00
retrooper 6967092a39 Minor bug fixes in NPCManager, now IT SHOULD BE WORKING 2021-12-23 22:03:09 +01:00
Izibane 2fc17edfd1 すごい
Super Idol的笑容 都没你的甜 八月正午的阳光 都没你耀眼 热爱 105 °C的你 滴滴清纯的蒸馏水
2021-12-23 21:00:45 +00:00
retrooper e5f04b9dd8 Another bug fix in NPCManager#updateNPCLocation 2021-12-23 21:59:35 +01:00
retrooper 72cea36b4c Another bug fix in NPCManager#updateNPCLocation 2021-12-23 21:58:29 +01:00
retrooper cb3dc07da4 Bug fix with NPCManager#updateNPCRotation 2021-12-23 21:46:00 +01:00
retrooper 7a6adba398 Optimization to NPCManager#updateNPCRotation 2021-12-23 21:28:01 +01:00
retrooper 52ac010d6f Redundant import removed 2021-12-23 20:23:29 +01:00
retrooper 285085ab14 Renaming in entity relative move PacketType EntityLook -> EntityRotation (like on wiki.vg) and in Wrapper names;
WrapperPlayServerSpawnPlayer final touches;
Location created and applied in a few wrappers.
2021-12-23 20:18:32 +01:00
MWHunter ed088c2d8e Working chunk data wrapper for 1.17 2021-12-22 21:39:53 -06:00
MWHunter 4e33c323df Working chunk data wrapper for 1.18! 2021-12-22 19:45:32 -06:00
MWHunter e4f1492744 Clean up multi-version chunk wrappers 2021-12-22 17:44:07 -06:00
MWHunter 922d234c45 Convert (untested) chunks to using the WrappedBlockState 2021-12-21 17:50:03 -06:00
MWHunter 05edb94249 Add extra utilities for block tags 2021-12-21 16:32:41 -06:00
retrooper f6de2e066e Some renaming of wrappers. 2021-12-21 21:06:40 +01:00
MWHunter 8204c5d631 Add shapeExceedsCube to StateType 2021-12-20 19:45:54 -06:00
MWHunter 4d9ce8419d Fix Java 8 support 2021-12-20 18:12:07 -06:00
MWHunter f47ddb5330 Expose item type attributes 2021-12-20 17:57:27 -06:00
MWHunter 1fab6e5396 Add Fuel to ItemType attributes 2021-12-20 17:51:03 -06:00
MWHunter f77b370ee9 More ItemStack utilities 2021-12-20 17:20:57 -06:00
MWHunter 30e46ef672 Add some utility methods to ItemStack 2021-12-20 16:02:10 -06:00
retrooper bdeab22d57 Compilation error fixed in EntityDataTypes 2021-12-19 21:41:05 +01:00
retrooper 982ad348a4 Hopefully fixed WrapperPlayServerEntityMetadata,
And created EntityData and EntityDataType/s,
all metadata stuff should be working, just need to test;

Refactored some item categorized mappings;
WrapperPlayServerBlockChange bug fix;
2021-12-19 21:26:40 +01:00
retrooper 296d3a8330 Fixed some more bugs in WatchableObject 2021-12-19 11:08:29 +01:00
retrooper 1ad13506f8 Merge remote-tracking branch 'origin/2.0' into 2.0 2021-12-19 10:44:20 +01:00
retrooper 8887fdf227 Fixed some bugs in WatchableObject 2021-12-19 10:43:54 +01:00
DefineOutside 8ac94578cb Add BlockTags class 2021-12-18 14:22:46 -06:00
DefineOutside adcf8f9b0d Add speed to state types 2021-12-18 13:54:28 -06:00
DefineOutside 6b7f08d27b Initial working WrappedBlockState for 1.18 with WrappedPlayServerBlockChange 2021-12-18 12:09:11 -06:00
DefineOutside 14fa2a7e5f Fix some wrapped block state enums 2021-12-18 11:49:13 -06:00
DefineOutside f9d1f8ad39 Add globalID to wrapped block state to allow reversion with bad modifications 2021-12-18 10:56:07 -06:00
DefineOutside 86fb8f57da Efficiency improvements for packet block states 2021-12-17 20:41:09 -06:00
DefineOutside 84d87ba5bc Prototype for packet based representations of 1.7 through 1.18 blocks 2021-12-17 19:06:30 -06:00
DefineOutside 922b1e783b Prototype for turning strings into enums and stuff 2021-12-17 18:28:29 -06:00
DefineOutside a1e68ea71f Merge remote-tracking branch 'origin/2.0' into 2.0 2021-12-17 15:29:27 -06:00
DefineOutside af025bb76b Prototype for universal state types 2021-12-17 15:29:17 -06:00
retrooper 16f2d66b82 Merge remote-tracking branch 'origin/2.0' into 2.0 2021-12-17 21:37:08 +01:00
retrooper b5205e10aa Client-bound keep alive packet created 2021-12-17 21:36:44 +01:00
DefineOutside c53ca172ef Add push reaction to state types 2021-12-17 13:27:07 -06:00
DefineOutside 4cdf42a6d8 don't commit debug 2021-12-17 13:01:28 -06:00
DefineOutside bdae6431b7 Add WrapperPlayServerTags 2021-12-17 13:00:54 -06:00
retrooper a8e1e7c09f Minor change/fix component 2021-12-17 19:29:20 +01:00
retrooper 1e4bbaa979 Merge remote-tracking branch 'origin/2.0' into 2.0 2021-12-17 18:53:33 +01:00
retrooper b00f28399b WrapperPlayServerPlayerInfo bug fixes attempt.
PacketWrapper#readComponent created
2021-12-17 18:53:17 +01:00
retrooper 232c668a45 Merge pull request #176 from AlessioGr/2.0
PLS NO SYSTEM.OUT.PRINTLN
2021-12-17 18:09:20 +01:00
Alessio Gravili 242435a0af Merge pull request #2 from AlessioGr/retrooper-2.0
Retrooper 2.0
2021-12-17 17:42:07 +01:00
AlessioGr 5e093dbac8 Merge branch '2.0' of https://github.com/retrooper/packetevents into retrooper-2.0
Signed-off-by: AlessioGr <alessio@gravili.de>

# Conflicts:
#	bukkit/src/main/java/io/github/retrooper/packetevents/handlers/modern/PacketDecoderModern.java
2021-12-17 17:41:24 +01:00
retrooper e84c299d77 Removed a few debugs;
WrapperPlayServerDifficulty added
2021-12-17 17:26:42 +01:00
AlessioGr 680511621c PLS NO SYSTEM.OUT.PRINTLN
Signed-off-by: AlessioGr <alessio@gravili.de>
2021-12-17 17:25:40 +01:00
AlessioGr a4a44f735f PLS NO SYSTEM.OUT.PRINTLN
Signed-off-by: AlessioGr <alessio@gravili.de>
2021-12-17 17:24:24 +01:00
DefineOutside bbfc4f2e20 In-progress block state types 2021-12-16 22:55:22 -06:00
DefineOutside 6498ef9d25 Add durability and tool tiers to ItemType 2021-12-16 15:58:12 -06:00
DefineOutside c833196faa Fix compilation 2021-12-16 14:55:34 -06:00
DefineOutside 0f84b1fd9f Add CraftRemainder to item type 2021-12-16 14:38:51 -06:00
DefineOutside ad39ca31b2 Add ItemAttribute.FIRE_RESISTANT 2021-12-16 14:21:50 -06:00
retrooper 9bccd08531 Merge remote-tracking branch 'origin/2.0' into 2.0 2021-12-16 21:20:08 +01:00
retrooper db1ca78fbb Strip away colors from log manager if we are not on Bukkit. Colors must be handled by the implementation and cannot be cross-platform. Everything remains white on other platforms or unknown implementations, unless they implement it correctly. 2021-12-16 21:19:55 +01:00
DefineOutside 70e2484d99 Corrections to max stack size 2021-12-16 14:18:11 -06:00
DefineOutside 4f81138bde Add edible to item types 2021-12-16 14:12:20 -06:00
retrooper a16cc34f8d Attempted some bug fixes in decoder for legacy versions such as 1.8 2021-12-16 20:58:38 +01:00
retrooper 69cffe5b3d Updated position and look constructor 2021-12-16 17:50:25 +01:00
retrooper 4c53c6fe56 We now use GameProfile in LoginSuccess packet. 2021-12-16 16:35:03 +01:00
retrooper 87748980ea Minor fix in HumanoidArm 2021-12-16 16:14:07 +01:00
retrooper 9bc6a15581 Minor documentation fix 2021-12-16 16:11:37 +01:00
retrooper 3e4eb458d3 Merge remote-tracking branch 'origin/2.0' into 2.0 2021-12-16 16:07:31 +01:00
retrooper 8d643fddcf EntityType should work for all supported server versions now.
ItemTypes#getById can never be null, it returns AIR if not found in the map.
2021-12-16 16:07:18 +01:00
DefineOutside 67da1c6184 Air stacks to 64 not 1 2021-12-15 23:18:05 -06:00
DefineOutside 1957fc0b77 Add CARTESIAN_VALUES to BlockFace 2021-12-15 19:27:06 -06:00
DefineOutside baebf06dc0 Add utility methods to BlockFace 2021-12-15 19:19:42 -06:00
DefineOutside 078aa4ab88 Add WrapperPlayClientSteerVehicle 2021-12-15 17:30:32 -06:00
DefineOutside 97d82994cc Fix compilation error due to PacketEventsPlugin.java 2021-12-15 16:59:45 -06:00
DefineOutside 0f2d7c05a9 Separate main hand vs interaction hand 2021-12-15 16:54:38 -06:00
DefineOutside 2ad01ba158 Make clientbound/serverbound window confirmations consistent 2021-12-15 16:43:55 -06:00
DefineOutside 4c454f3793 Add constructors to WrapperPlayServerOpenWindow 2021-12-15 16:40:38 -06:00
retrooper 987fb97fad Merge remote-tracking branch 'origin/2.0' into 2.0 2021-12-15 23:08:21 +01:00
retrooper 104bdf0e37 Added entity type mappings for 1.14 till 1.18 2021-12-15 23:08:11 +01:00
DefineOutside 9846133f97 Initial WrapperPlayServerOpenWindow 2021-12-15 14:44:30 -06:00
retrooper fa087ca733 Merge remote-tracking branch 'origin/2.0' into 2.0 2021-12-15 16:40:30 +01:00
retrooper 9cb661df86 Improvements to ClientVersion and ServerVersion, we added the getReleaseName to both;
InternalPacketListener should be cross-platform, and is no longer in the bukkit module, implementations must register it;
We now cache the game profiles with channels instead of player usernames.
2021-12-15 16:40:05 +01:00
DefineOutside 6a20277b7e Add the parent type to EntityType 2021-12-14 22:19:45 -06:00
DefineOutside 46e54fb8db Force GeyserUtil safety 2021-12-14 20:28:47 -06:00
DefineOutside b0fc8aa0a3 WrapperPlayServerWindowItems 2021-12-14 19:59:12 -06:00
retrooper 6caa434cd0 Merge pull request #175 from AlessioGr/fixlogs
Fix missing color in Bukkit log manager implementation
2021-12-14 21:12:16 +01:00
AlessioGr c85cffbed1 Fix missing color in bukkit log manager implementation
Signed-off-by: AlessioGr <alessio@gravili.de>
2021-12-14 15:39:34 +01:00
retrooper 2377ca8e02 Minor improvements to cross-platform log manager. 2021-12-13 07:21:12 +01:00
retrooper 5a90d2fd19 Some changes to GameProfile and some cleanups. 2021-12-12 22:27:23 +01:00
retrooper 9ca4606cf5 Progress on EntityTypes;
Some refactoring of some protocol data types;
2021-12-12 22:06:47 +01:00
retrooper 4b648ac0d0 Improvements to WrapperPlayServerEntityEffect 2021-12-12 21:11:07 +01:00
retrooper d3ae9e5c35 Cleanup to logger manager. 2021-12-12 20:55:28 +01:00
retrooper 584452adc9 Merge pull request #173 from AlessioGr/2.0
Add LogManager
2021-12-12 18:10:40 +01:00
retrooper 8303a6f8a5 Some corrections to WrapperLoginClientEncryptionResponse and minor changes to MinecraftEncryptionUtil 2021-12-12 15:34:18 +01:00
retrooper a107493942 Minor fixes to MinecraftEncryptionUtil 2021-12-12 15:20:35 +01:00
retrooper 0c79206e62 Merge pull request #174 from TRGReal/patch-1
Add vanilla MinecraftEncryptionUtil.
2021-12-12 14:40:14 +01:00
TRGReal 6fbd8843e8 Add vanilla MinecraftEncryptionUtil.
Allows you to easily encrypt/decrypt using Minecraft-like RSA/AES in PE util.
2021-12-12 21:39:22 +08:00
retrooper f6ac6d8c60 Removed decrypt and encrypt methods 2021-12-12 14:37:50 +01:00
retrooper 03768c587c Merge remote-tracking branch 'origin/2.0' into 2.0 2021-12-12 13:56:04 +01:00
retrooper 04be4cad57 Minor corrections to WrapperLoginClientEncryptionResponse 2021-12-12 13:55:51 +01:00
AlessioGr 5ad0284c92 Finalize logmanager
Signed-off-by: AlessioGr <alessio@gravili.de>
2021-12-11 23:19:28 +01:00
AlessioGr 8471ae512b Disable plugin.yml.dis
Signed-off-by: AlessioGr <alessio@gravili.de>
2021-12-11 23:18:56 +01:00
AlessioGr 388fd05e90 Improvements
Signed-off-by: AlessioGr <alessio@gravili.de>
2021-12-11 23:13:34 +01:00
AlessioGr 7aac404238 Add LogManager
Signed-off-by: AlessioGr <alessio@gravili.de>
2021-12-11 22:58:02 +01:00
retrooper faf6bff61b Merge pull request #172 from AlessioGr/2.0
Update gradle shadow & add github actions to 2.0
2021-12-11 22:38:19 +01:00
retrooper b644f8d4aa Comments added 2021-12-11 21:57:40 +01:00
retrooper d091f169ad Minor correction in comment 2021-12-11 21:26:42 +01:00
retrooper a1e9aef5dc Attempted to add Geyser/Floodgate support 2021-12-11 21:02:29 +01:00
retrooper 94bd45a1f9 Fixed WrapperPlayClientUpdateSign,
Added 1.18.1 support,
Fixed mappings when being parsed.
2021-12-10 22:47:21 +01:00
retrooper aa00273a97 Updated to support 1.18.1 2021-12-10 20:58:06 +01:00
retrooper 077db29072 Item mappings should work for 1.17 and below 2021-12-10 16:06:48 +01:00
retrooper 266702d3ff We have switched to ViaVersion's mappings, these are much easier to use, especially in our case, still need to complete the mappings for server versions older than 1.18. 2021-12-09 22:58:46 +01:00
retrooper bdfcfed7fe Pre mappings fix/switch 2021-12-09 21:41:13 +01:00
retrooper 0513511b4b Updated build.gradle to use Spigot 1.18 API 2021-12-09 20:13:34 +01:00
retrooper 6dba94e69d Lots of cleanup in PlayerManager and ServerManager. You don't need to implement as many methods anymore. 2021-12-08 22:55:30 +01:00
retrooper c088dfbf64 Minor changes to GameMode 2021-12-08 17:20:39 +01:00
retrooper 8a95ba99ac Removed PlayerManager#sendMessage 2021-12-08 14:41:20 +01:00
retrooper 9abaa18ba0 Add GameMode;
Add PlayerManager#sendMessage (will be removed next commit)
2021-12-08 14:39:47 +01:00
retrooper 16d57cead7 Minor changes 2021-12-05 11:21:52 +01:00
retrooper bccad0fe6e Minor bug fixes in chunk data(progress) 2021-12-05 11:03:08 +01:00
retrooper 31bbd66497 Merge remote-tracking branch 'origin/2.0' into 2.0 2021-12-05 10:50:02 +01:00
retrooper 2d38f37be7 Working on decoding/encoding watchable objects. 2021-12-05 10:49:51 +01:00
DefineOutside ebb48c5a6d In-progress chunk wrappers 2021-12-04 16:56:55 -06:00
DefineOutside 5de377d535 Merge remote-tracking branch 'origin/2.0' into 2.0 2021-12-04 16:09:03 -06:00
DefineOutside 719dedeebf In-progress chunk wrappers 2021-12-04 16:08:54 -06:00
retrooper 9567ab2aab ItemTypes mapping correction attempt,
WrapperPlayServerEntityEffect new constructor added
2021-12-04 20:06:30 +01:00
retrooper b9077e5112 Many corrections to wrappers. 2021-12-04 19:48:15 +01:00
retrooper b9fac2d6c9 Some bug fixes on more wrappers. 2021-12-04 19:25:55 +01:00
retrooper 5fa664b59f Fixed WrapperPlayServerAttachEntity and WrapperPlayServerSetCooldown 2021-12-04 19:21:31 +01:00
retrooper 307cc62a6a Merge remote-tracking branch 'origin/2.0' into 2.0 2021-12-04 19:19:41 +01:00
retrooper ab3bfa3018 Trying to fix ItemTypes mappings, what went wrong? 2021-12-04 19:19:15 +01:00
DefineOutside 480cee7fec Player teleport wrapper 2021-12-04 11:40:44 -06:00
DefineOutside 924b0c2b24 WrapperPlayServerSetCooldown 2021-12-04 11:09:43 -06:00
DefineOutside 5db3c59ff0 Merge remote-tracking branch 'origin/2.0' into 2.0 2021-12-04 10:58:33 -06:00
DefineOutside ff8b593438 Attach entity wrapper 2021-12-04 10:58:28 -06:00
retrooper 0f9197a1f0 Merge remote-tracking branch 'origin/2.0' into 2.0 2021-12-04 17:44:50 +01:00
retrooper ac6bda02de Updated item type mappings to 1.18 2021-12-04 17:43:39 +01:00
DefineOutside eef49aa7c3 Entity effect, remove entity effect, set passengers wrappers 2021-12-04 10:23:04 -06:00
retrooper 2b84919759 Temporarily disabled debugs. 2021-12-03 22:38:00 +01:00
retrooper 7b56fbd453 Created WrapperPlayServerUpdateSimulationDistance 2021-12-03 22:16:26 +01:00
retrooper b62ac638f8 Updated debugs. 2021-12-03 22:13:52 +01:00
retrooper 074004d57f Re-added debugs in a rather smarter way. 2021-12-03 22:01:27 +01:00
retrooper d36a93b050 Added support for 1.18 regarding packet types.
Working on fixing injector issues.
2021-12-03 21:41:53 +01:00
retrooper 4abffd87f8 Some optimizations by removing redundant packet processing in my internal listener 2021-12-02 18:26:02 +01:00
Alessio Gravili a6b83d7e58 Merge branch 'retrooper:2.0' into 2.0 2021-12-02 18:20:22 +01:00
retrooper 679dda68ea Last debug removed! 2021-12-02 18:09:28 +01:00
retrooper 4952487937 Removed chat message debugs. 2021-12-02 17:33:33 +01:00
Alessio Gravili d7a52e797e Merge branch 'retrooper:2.0' into 2.0 2021-12-02 17:21:41 +01:00
retrooper 23e5282b0f Minor fix 2021-12-02 17:19:36 +01:00
Alessio Gravili 978f0382b9 Merge branch 'retrooper:2.0' into 2.0 2021-12-02 17:19:32 +01:00
retrooper b598384f22 Fixed WrapperPlayServerPluginMessage and WrapperPlayClientPluginMessage;
Removed one more debug
2021-12-02 17:17:00 +01:00
AlessioGr fb9d69e191 JDK 8
Signed-off-by: AlessioGr <alessio@gravili.de>
2021-12-02 17:03:39 +01:00
AlessioGr 2125d3cd49 Update gradle wrapper from 7.3 to 7.3.1
Signed-off-by: AlessioGr <alessio@gravili.de>
2021-12-02 11:49:14 +01:00
Alessio Gravili 348e400be3 Create gradle-publish.yml 2021-12-02 10:28:17 +01:00
AlessioGr a236e24b25 Update shadow version
Signed-off-by: AlessioGr <alessio@gravili.de>
2021-12-02 10:15:49 +01:00
retrooper 4eae63c898 Removed debugs 2021-12-01 23:07:52 +01:00
retrooper 9cd931225d Small comments added 2021-12-01 23:05:44 +01:00
retrooper 65232f6c47 Chat components reworked and mostly working, just need to work on Hover event show item and show entity, cause their values are strings and NOT json objects. 2021-12-01 23:04:59 +01:00
retrooper c82895612b Working on ScoreComponent 2021-12-01 19:27:08 +01:00
retrooper e50feeb9cd Some more adjustments to gradle. 2021-12-01 18:12:59 +01:00
retrooper d10f91538f Added some info to maven publishing. 2021-12-01 18:11:54 +01:00
retrooper 2327997910 Updated to latest gradle version, to add support for later java versions. 2021-12-01 18:02:28 +01:00
retrooper 469e610c15 Some bug fixes in client settings. 2021-12-01 17:21:38 +01:00
retrooper 7ab59f3cbe Officially supporting 1.18. 2021-11-30 18:09:45 +01:00
retrooper 8eb8a7ea2d ClientVersion#getLatest added;
ClientVersion#getOldest added;
PlayerManager#getClientVersion(ChannelAbstract) bukkit impl improved
2021-11-29 19:55:37 +01:00
retrooper 1d014a5848 Updated WrapperPlayClientSettings to support 1.18 2021-11-28 23:03:31 +01:00
retrooper a29a0f9e20 Working on 1.18 support 2021-11-28 22:27:31 +01:00
retrooper 4b866d2d72 Yes 2021-11-28 18:09:03 +01:00
retrooper 76024f5ddd Fixed issues in WrapperLoginClientEncryptionResponse, WrapperLoginServerEncryptionRequest,
WrapperPlayClientPluginMessage,
WrapperPlayServerPluginMessage
2021-11-28 17:30:47 +01:00
retrooper d20673cc3e PacketTypeCommon optimized; 2021-11-28 17:01:50 +01:00
retrooper e68f960928 Minor changes to WrapperPlayClientInteractEntity 2021-11-28 16:52:23 +01:00
retrooper 68586850f4 Minor change 2021-11-28 14:24:49 +01:00
retrooper 7c8845e425 Minor remapping optimizations/cleanups 2021-11-28 12:06:01 +01:00
retrooper 66ad7be601 You can now dynamically change a wrapper's version, basically allowing you to transform it to a format of a different version. 2021-11-28 11:30:18 +01:00
retrooper ecfd39825f ItemTypes is fully functioning for all versions. 2021-11-28 11:27:37 +01:00
retrooper 3028b0c0ba Small API changes 2021-11-26 22:24:29 +01:00
retrooper dad68786ce Minor injector bug fixes 2021-11-26 18:24:10 +01:00
retrooper feb94a3982 Fixed issues when you left the server on legacy versions such as 1.8 2021-11-26 17:55:18 +01:00
retrooper 13e0c45b03 Minor fix to injector, still need to work on users leaving while server is running. 2021-11-25 22:33:31 +01:00
retrooper 6078046efa WrapperPlayClientInteractEntity fixed for 1.8.8 servers;
Progress on fixing the ItemType mappings to get it cross version, still working on getting a few items such as MUTTON working
2021-11-25 22:27:18 +01:00
retrooper 0c27a8e793 We fixed ItemStack bugs on older versions 2021-11-25 20:09:12 +01:00
retrooper 27d71dc05d I think we managed to fix item types for versions older than 1.13 2021-11-25 19:47:57 +01:00
retrooper b078b66db9 Removed a few debugs 2021-11-23 21:36:34 +01:00
retrooper bb20f92af8 PacketWrapper#readIdentifier and writeIdentifier created 2021-11-22 20:12:55 +01:00
retrooper 616a4142d2 ComponentSerializer should work on 1.8 2021-11-22 15:38:38 +01:00
retrooper 6e47bbbff6 Trying to have the mapped IDs equivalent to the server version, and not always the IDs of latest server version(1.17.1) 2021-11-21 14:03:03 +01:00
retrooper 01fab2b75e Working on fixing reload issues. 2021-11-20 21:08:10 +01:00
retrooper 09182267c9 We changed some naming conventions, setEntityID -> setEntityId for example;
We now successfully shade and relocate GSON.
2021-11-20 18:51:29 +01:00
retrooper 6b88c08796 Working on supporting transforming item types IDs. Currently not as efficient. 2021-11-19 22:37:28 +01:00
retrooper 485bfbc093 Small bug fixes for hoverEvent 2021-11-19 20:43:26 +01:00
retrooper 82367dd6d6 Fixed HoverEvent and BaseComponent API 2021-11-19 19:09:13 +01:00
retrooper 5bc3597c70 PotionTypes created 2021-11-18 23:01:03 +01:00
retrooper 06113b1cee EntityTypes & EntityType created 2021-11-18 22:15:53 +01:00
retrooper 93c2e4fcd0 Fixed issues when you sent the same wrapper twice. 2021-11-18 19:49:16 +01:00
retrooper c2129f98bb Fixed Plugin message wrappers for 1.12.2 and below 2021-11-18 18:15:10 +01:00
retrooper 896d760236 Small doc changes 2021-11-18 07:10:15 +01:00
retrooper d5adae6be2 Corrected ClientVersion referencing documentation. 2021-11-17 22:10:34 +01:00
retrooper be681c7005 Switched over to GSON JSON API, but still running into some issues 2021-11-15 22:52:44 +01:00
retrooper c9aa7223f0 Corrected max counts of the music disc ItemTypes, added ItemType#isMusicDisc 2021-11-15 12:05:11 +01:00
retrooper 6520e39814 ClientVersion and ServerVersion enum constants now follow java enum conventions and are capitalized. 2021-11-15 00:29:01 +01:00
retrooper 5944174c24 Trying to fix component serialization errors. 2021-11-15 00:18:40 +01:00
retrooper c6202f2a4c Cross version PacketWrapper#readItemStack and PacketWrapper#writeItemStack 2021-11-14 23:50:05 +01:00
retrooper 6c4331a97f All ItemTypes should have the correct maxCount 2021-11-14 23:29:55 +01:00
retrooper 710ace21e4 Updated more maxCounts of ItemTypes, reached ACACIA_SLAB 2021-11-14 23:04:46 +01:00
retrooper dd8119105c Updated more maxCounts of ItemTypes, reached BIRCH_LEAVES 2021-11-14 15:07:53 +01:00
retrooper ecfd5d46f9 Updated more maxCounts of ItemTypes, reached BIRCH_LEAVES 2021-11-14 08:22:21 +01:00
retrooper f88455c011 Updated maxCounts in many ItemTypes, currently at SMOOTH_SANDSTONE_SLAB 2021-11-12 23:17:38 +01:00
retrooper 8250a06d90 Removed debugs 2021-11-12 00:13:49 +01:00
retrooper 710d23dece All ItemTypes added, just need to correct all max amounts!
WrapperPlayServerSetSlot created, but NOT working!
2021-11-12 00:07:42 +01:00
retrooper d23cf6ac1b Commit modified mappings from ProtocolSupport 2021-11-11 18:26:57 +01:00
retrooper 0f1798c7ce We work to support more than just arrays in hover event action values. 2021-11-11 17:07:38 +01:00
retrooper 1e2362aa56 We've got more progress on hover event and click event, many bug fixes, and works better. 2021-11-10 23:04:45 +01:00
retrooper 0a054b88a7 We can successfully send the chat message packet. 2021-11-10 07:17:53 +01:00
retrooper ee8af858b2 Merge remote-tracking branch 'origin/2.0' into 2.0
# Conflicts:
#	bukkit/src/main/java/io/github/retrooper/packetevents/processor/InternalPacketListener.java
2021-11-09 06:57:54 +01:00
retrooper 86f8a440f3 Reverted our wrapper on json.simple;
Testing components
2021-11-09 06:57:34 +01:00
retrooper 4b3069bed9 Fixed JSON stuff 2021-11-08 20:06:26 +01:00
retrooper 4953a7f855 UpdateChecker cleaned up;
Added mapping files
2021-11-08 17:01:00 +01:00
retrooper 2471baf5af NPE bug fix for PacketWrapper#readItemStack usage 2021-11-07 23:43:19 +01:00
retrooper 2f59c0523a Some progress on ItemStack, ItemType and ItemTypes;
Some API refactoring, lots of getIDs converted to getIds
2021-11-07 23:10:51 +01:00
retrooper 88b81b7d51 WrapperPlayServerSpawnPlayer,
WrapperPlayServerVehicleMove created
2021-11-07 21:50:06 +01:00
retrooper 05e445a934 WrapperPlayServerEntityRelativeMove,
WrapperPlayServerEntityLook created
2021-11-07 20:45:54 +01:00
retrooper fa66721f81 WrapperPlayServerEntityRelativeMoveAndLook created 2021-11-07 18:14:35 +01:00
retrooper cfd63c2c1d WrapperPlayServerEntityTeleport,
WrapperPlayServerUpdateViewDistance created
2021-11-07 16:29:36 +01:00
retrooper 4e1b960a06 Removed debugs 2021-11-06 20:36:26 +01:00
retrooper de8ebbdfd0 WrapperPlayServerTabComplete created;
Player attribute system created;
2021-11-06 20:26:31 +01:00
retrooper a4ddf8e3e9 Progress on tab complete 2021-11-05 22:19:07 +01:00
retrooper b47286f947 Working on WrapperPlayServerTabComplete 2021-11-04 22:39:13 +01:00
retrooper af4a9ea590 WrapperPlayServerRespawn optimized; 2021-11-04 07:00:08 +01:00
retrooper c7f25d0c9d WrapperPlayServerRespawn completed, hasn't been tested yet. 2021-11-03 22:50:46 +01:00
retrooper 50aa821110 WrapperPlayServerRespawn almost done 2021-11-02 11:52:56 +01:00
retrooper a35139fddb Progress with WrapperPlayServerRespawn 2021-11-01 15:57:16 +01:00
retrooper be7715fe42 WrapperPlayServerRespawn progress 2021-10-31 23:09:52 +01:00
retrooper 3d9df2118b WrapperPlayServerRespawn created, but no support for older versions than 1.17.1 yet 2021-10-31 22:56:53 +01:00
retrooper 3e3ac32159 WrapperPlayServerPlayerListHeaderAndFooter created 2021-10-31 20:07:15 +01:00
retrooper d089e9dbb0 Some refactoring of a lot of protocol related classes;
WrapperPlayServerSoundEffect created
2021-10-31 19:16:16 +01:00
retrooper e20578b4b7 WrapperPlayServerDisconnect now parses the json message reason! 2021-10-31 10:34:31 +01:00
retrooper 779427702d PacketEvents#build -> PacketEvents#setAPI 2021-10-31 10:18:10 +01:00
retrooper 0a523a93ba WrapperPlayServerEntityHeadLook created;
Color#getByName improved
2021-10-31 10:13:47 +01:00
retrooper 5f3ededf9a Should have fixed all issues in WrapperPlayServerChatMessage;
Color naming issues fixed
2021-10-30 23:06:53 +02:00
retrooper fee52d8931 WrapperPlayServerChatMessage some optimizations 2021-10-30 22:02:50 +02:00
retrooper 3f98b5dc15 We have completed WrapperPlayServerChatMessage and TextComponent and BaseComponent, we might need to look out for errors. 2021-10-30 20:06:04 +02:00
retrooper 5dad71b935 Corrected chat message packet from using a base component to a text component 2021-10-30 18:07:02 +02:00
retrooper e235fe1f46 Fixed a class cast exception when parsing json messages 2021-10-30 17:51:00 +02:00
retrooper c1f99063dd Finished click events. 2021-10-30 17:44:10 +02:00
retrooper 2bb0677cef Color#toString works, ClickEvents progress 2021-10-30 08:25:01 +02:00
retrooper caa004756d ClickEvent class created, not used yet 2021-10-30 07:25:03 +02:00
retrooper 6653fba315 More progress to parsing chat message packet 2021-10-29 22:37:55 +02:00
retrooper 67f64b406c Added missing constructor arguments for some wrappers 2021-10-27 14:42:13 +02:00
retrooper 56f46a1e9e WrapperPlayClientQueryBlockNBT created;
WrapperPlayClientQueryEntityNBT created;
2021-10-27 11:54:39 +02:00
retrooper 348acdedcc Progress on processing chunks on most versions, still need to test lower than 1.16.3 and 1.17+;
Flying packet mappings corrected;
2021-10-27 10:54:47 +02:00
retrooper c6442cdab8 Corrected many incorrect license notices 2021-10-26 22:51:47 +02:00
retrooper 0568ea0c72 Forgot to add license notice to some moroe files. 2021-10-26 22:46:23 +02:00
retrooper 5ba2440a70 Forgot to add license notice to some files. 2021-10-26 22:41:09 +02:00
retrooper 4564ce65e8 Small modification to WrapperPlayClientFlying 2021-10-26 20:26:06 +02:00
retrooper 21585033d9 Flying packets published 2021-10-20 23:06:38 +02:00
retrooper 3cb55fe3ef Flying packets created, some naming and mapping changes of the flying packets; 2021-10-20 23:01:03 +02:00
retrooper d459403bb5 WrapperPlayServerDisplayScoreboard, WrapperPlayServerUpdateScore created 2021-10-17 12:16:38 +02:00
retrooper 47b4b7caa2 Some small cleanup 2021-10-16 23:31:10 +02:00
retrooper 53717ae948 WrapperPlayClientUseItem created;
Direction -> BlockFace
2021-10-15 23:10:58 +02:00
retrooper 8b555c0dbe Fixed NPE with getConnectionState 2021-10-12 16:58:55 +02:00
retrooper 81c1280c20 Fixed getDecoder in early injector with multiple packetevents instances 2021-10-12 16:03:34 +02:00
retrooper 93bb3a6040 We now don't duplicate packetevents APIs 2021-10-12 15:54:38 +02:00
retrooper 67aeae5717 Attempt on supporting multiple packetevents instances 2021-10-12 15:38:06 +02:00
retrooper a1eb97dbe7 Removed all debugs! ViaVersion support added! 2021-10-11 22:34:47 +02:00
retrooper f9ee1e1f87 Got a working encoder with via 2021-10-11 22:28:21 +02:00
retrooper 47580f01a7 Decoder working, we need to call the mc decoder via reflection when Via is present, now time to work on Encoder 2021-10-11 22:08:02 +02:00
retrooper 105e52d5ac Added Via support for decoder, still need to fix encoder. 2021-10-11 19:18:10 +02:00
retrooper d60e7d9e0b Remove redundant method 2021-10-10 21:23:50 +02:00
retrooper 9b9af06f53 Attempt to get a working CustomBukkitEncodeHandlerModern, but we can't ;c, viaversion, why do you have to be so CURSED!!!!111 2021-10-10 21:20:08 +02:00
retrooper 1abf538ecd Publish api module, to allow jitpack to detect it as a sub-module 2021-10-10 18:48:10 +02:00
retrooper 473bb3a1c3 WrapperPlayServerEntityVelocity created 2021-10-10 18:32:41 +02:00
retrooper 49b9b139f2 Maybe fixed build scripts pt.2 2021-10-10 17:58:47 +02:00
retrooper e34e806cad Maybe fixed build scripts? 2021-10-10 17:25:28 +02:00
retrooper 565220fc99 Small changes to build scripts 2021-10-10 17:05:42 +02:00
retrooper b5aaf2fddb Test 2021-10-10 12:30:12 +02:00
retrooper 9df5da312e Removed redundant info in the buildscripts of all subprojects 2021-10-10 11:40:40 +02:00
retrooper 3c3cc88042 Properly generated gradle wrapper 2021-10-10 11:30:28 +02:00
retrooper 397f133751 Wrapper task specified? 2021-10-10 11:21:31 +02:00
retrooper e110acd59c Removed most debug code;
PEVersion#clone fixed
2021-10-10 08:35:46 +02:00
retrooper 4ed541d65d Some project cleanup 2021-10-09 23:12:08 +02:00
retrooper baf1466ee2 Sadly can't use generics to assume Player type at compile time in listeners. 2021-10-09 23:01:18 +02:00
retrooper abf447f5da Updated some links 2021-10-09 20:43:37 +02:00
retrooper c68ae24807 Small correction 2021-10-09 20:35:21 +02:00
retrooper 7b121172fe Tested bukkit implementation, and it works! 2021-10-08 22:18:05 +02:00
retrooper c9eff0f745 Added to gitignore 2021-10-08 21:44:27 +02:00
retrooper 0ae72246c3 More progress on implementing the API in bukkit module 2021-10-08 21:38:57 +02:00
retrooper c1401f0eac Fixed all known errors. Bukkit module fully implemented the api module, now time to test. 2021-10-08 21:21:19 +02:00
retrooper 8ea0c75081 PacketEventsBuilder progress 2021-10-08 18:11:45 +02:00
retrooper e0a101c8db More progress on multi-module project, made bukkit packetevents api builder 2021-10-08 15:36:54 +02:00
retrooper 3162ec6864 Some progress on the multi-module project, bukkit module doesn't compile yet though 2021-10-07 22:08:38 +02:00
retrooper b7a1bfb072 Merge pull request #168 from Conclure/2.0
Fix :D
2021-10-07 20:57:20 +02:00
Conclure c6d8af9024 Fix :D 2021-10-07 20:54:40 +02:00
retrooper 6157ca9e3b Push forgotten files 2021-10-07 20:28:26 +02:00
retrooper 1cde4e16cb Attempting to split project up into modules 2021-10-07 20:25:47 +02:00
retrooper 4bc2d08017 WrapperPlayServerSpawnEntity created;
Redundant comments removed;
2021-10-04 21:53:54 +02:00
retrooper 2511b7f850 WrapperPlayServerEntityStatus created 2021-10-04 18:11:50 +02:00
retrooper 8e283e6a1c Much more WrapperPlayServerEntityMetadata progress 2021-10-03 22:21:09 +02:00
retrooper c29146ee25 Progress on WrapperPlayServerEntityMetadata 2021-10-03 17:22:43 +02:00
retrooper 2840cf3146 WrapperPlayServerEntityProperties created;
WrapperPlayServerPlayerInfo.java bug fix
2021-10-03 15:45:13 +02:00
retrooper 98440415c4 Renamed BlockPosition.java to Vector3i.java 2021-10-03 15:05:13 +02:00
retrooper 44622140af WrapperPlayServerExplosion created 2021-10-03 14:30:59 +02:00
retrooper 463c0920db WrapperPlayServerBlockAction bug fixes and small changes;
WrapperPlayServerBlockBreakAnimation created
2021-10-03 12:57:12 +02:00
retrooper 272f27625e Small corrections for WrapperPlayServerBlockAction;
WrapperPlayServerPlayerInfo finished, but untested;
2021-10-03 12:45:31 +02:00
retrooper 962cb6cd82 More progress on game profile utilities 2021-10-02 20:05:06 +02:00
retrooper 62f60ec815 Merge remote-tracking branch 'origin/2.0' into 2.0 2021-10-02 19:52:18 +02:00
retrooper eaf0a7226f GameProfile utilities completed? 2021-10-02 19:52:00 +02:00
DefineOutside 7585420593 Fix cloning vectors 2021-09-29 13:49:39 -05:00
retrooper 68fe3e214a Still figuring out how to fix our via decoder 2021-09-28 18:35:46 +02:00
retrooper fa43163386 ProtocolSupport works again 2021-09-28 18:03:15 +02:00
retrooper 96625be5b1 Debugs removed 2021-09-27 21:58:46 +02:00
retrooper df3eb01bc6 WrapperPlayClientSettings created;
Hand enum improved
2021-09-27 21:33:05 +02:00
retrooper 7a4092db32 WrapperPlayServerChangeGameState created;
WrapperPlayServerUpdateHealth created
2021-09-27 20:24:52 +02:00
retrooper edda3adead WrapperPlayServerDestroyEntities created;
WrapperPlayServerSetExperience created
2021-09-26 22:17:25 +02:00
retrooper cf6321de5c WrapperPlayServerEntityAnimation created;
Small wrapper API change;
2021-09-26 21:08:53 +02:00
retrooper 2a44f3c0e2 WrapperPlayClientPlayerDigging created 2021-09-26 20:59:57 +02:00
retrooper 500eb55aa7 Some API refactoring;
PacketTypeCommon#getID created;
2021-09-26 19:28:40 +02:00
retrooper e10d5a17c4 Trying to add 1.16.5 support with chunk data packet :c 2021-09-26 15:48:27 +02:00
retrooper f36d1f32b1 Almost finished WrapperPlayServerChunkData 2021-09-26 13:03:29 +02:00
retrooper 0256dc416c Progress with WrapperPlayServerChunkData 2021-09-26 09:11:47 +02:00
retrooper e77e428ba3 Project cleanup with IDE 2021-09-26 00:26:08 +02:00
retrooper 3ad9a75284 Progress for WrapperPlayServerChunkData 2021-09-26 00:24:37 +02:00
retrooper 3355b1c5ab Clientbound packet type mappings for 1.16.2 fixed;
Progress on WrapperPlayServerChunkData;

API refactoring/cleanup
2021-09-25 23:14:34 +02:00
retrooper 9ad33aac0f Progress on via encoder support 2021-09-23 21:25:10 +02:00
retrooper d9ad6bc684 About to start working on supporting ViaVersion with a custom encoder. 2021-09-23 20:58:00 +02:00
retrooper 043dfb5a8b Some API refactoring 2021-09-23 19:55:37 +02:00
retrooper c2a218f067 WrapperPlayServerChunkData is being recoded;
1.17 PacketType server-sided mappings corrected
2021-09-23 18:46:35 +02:00
retrooper 2aefd88e5e WrapperPlayServerChunkData is being recoded;
1.17 PacketType server-sided mappings corrected
2021-09-23 18:33:38 +02:00
retrooper 87223f8df1 Many methods in ServerManager now static 2021-09-22 21:19:49 +02:00
retrooper 794ad6b042 Progress on WrapperPlayServerChunkData 2021-09-22 20:40:24 +02:00
retrooper 0105d466bb PacketWrapper#writeTag created 2021-09-22 18:39:11 +02:00
retrooper 9e28502620 More progress on WrapperPlayServerChunkData 2021-09-22 18:20:17 +02:00
DefineOutside c958999476 Make ServerManager.getVersion() static 2021-09-21 17:29:23 -05:00
DefineOutside 903e0bdc3d Replace PacketWrapperUtil 2021-09-21 17:23:35 -05:00
DefineOutside 408d35b25b Fix block action ID 2021-09-21 16:31:42 -05:00
DefineOutside 01cf822f67 Block action wrapper 2021-09-21 16:18:46 -05:00
DefineOutside 055750e49e Unload chunk wrapper 2021-09-21 15:57:41 -05:00
DefineOutside 088aa9b81b Remove duplicate serverbound window confirmation packet 2021-09-21 15:52:58 -05:00
DefineOutside 1008f88f23 Merge remote-tracking branch 'origin/2.0' into 2.0
# Conflicts:
#	src/main/java/io/github/retrooper/packetevents/wrapper/play/client/WrappedGameClientWindowConfirmation.java
#	src/main/java/io/github/retrooper/packetevents/wrapper/play/server/WrappedGameServerWindowConfirmation.java
2021-09-21 15:43:23 -05:00
DefineOutside 0e4ca3554e Add the window confirmation packet 2021-09-21 15:43:06 -05:00
DefineOutside 221b901a81 Optimize ServerVersion 2021-09-21 15:09:44 -05:00
retrooper 3b3e0ad377 Progress on WrapperPlayServerChunkData, but not near done 2021-09-21 19:53:03 +02:00
retrooper 2b3145f497 WrapperPlayClientAdvancementTab created 2021-09-20 23:02:50 +02:00
retrooper 32bc08b986 WrapperPlayClientPickItem created 2021-09-20 22:47:06 +02:00
retrooper 834adb48eb WrapperPlayClientWindowConfirmation created 2021-09-20 22:36:05 +02:00
retrooper 5403ce9d44 WrapperPlayClientTabComplete, WrapperPlayClientPlayerAbilities created 2021-09-20 22:24:23 +02:00
retrooper 80910efb00 WrapperPlayClientTeleportConfirm, WrapperPlayClientLockDifficulty created 2021-09-19 22:27:41 +02:00
retrooper 5cadf1224f WrapperPlayClientNameItem created 2021-09-19 22:09:36 +02:00
retrooper fa804557ed ClientVersion#isResolved typo fixed 2021-09-19 22:03:35 +02:00
retrooper dbd6efc987 ClientVersion never resolving issue fixed 2021-09-19 21:59:25 +02:00
retrooper 03f02079d8 WrapperPlayClientEntityAction created 2021-09-19 21:57:50 +02:00
retrooper 54ef96eaa1 Got some progress on our legacy handlers. 2021-09-19 19:53:08 +02:00
retrooper 7343cf757b Now supporting legacy ViaVersion releases 2021-09-19 19:33:53 +02:00
retrooper fb69f34821 Removed debugs 2021-09-19 18:33:29 +02:00
retrooper f50464956b WrapperPlayClientCloseWindow, WrapperPlayClientSelectTrade, WrapperPlayClientSetDifficulty created 2021-09-19 18:33:05 +02:00
retrooper 71886b503e WrapperPlayClientSteerBoat and WrapperPlayClientVehicleMove created 2021-09-19 16:14:42 +02:00
retrooper 7606445e1e WrapperPlayClientClickWindow created 2021-09-19 16:03:13 +02:00
retrooper 774a48103b Stopped following vanilla mapping namings and started following wiki.vg's packet namings. 2021-09-19 13:36:15 +02:00
retrooper a9469fed78 WrapperGameClientClientStatus created 2021-09-18 22:13:58 +02:00
retrooper 6e5787a9e1 Removed debugs 2021-09-18 21:45:36 +02:00
retrooper 0654796f82 Removed ProtocolLib redundant dependency in build.gradle 2021-09-18 21:43:33 +02:00
retrooper 63ddd56507 ProtocolSupport support added 2021-09-18 21:10:12 +02:00
retrooper ac12d94448 Paper injector removed. 2021-09-18 20:56:15 +02:00
retrooper 9f845173de ProtocolLib support added!!!!! 2021-09-18 20:49:29 +02:00
retrooper 1aa9bde676 Second attempt at ProtocolLib hook, but we get spammed with errors 2021-09-18 20:42:48 +02:00
retrooper 8c06f24cf4 Attempt at ProtocolLib hook, but we get an illegal access error :O 2021-09-18 18:54:47 +02:00
retrooper a6625b0325 Got stuff working, but we face a ProtocolLib incompatibility 2021-09-18 14:00:18 +02:00
retrooper 106b74d901 Removed ProtocolLib stuff 2021-09-18 13:32:33 +02:00
retrooper 7b7d51dcee PacketReceiveEvent and PacketSendEvent support constructors with ConnectionState specified to optimize always looking them up in the map 2021-09-18 13:29:26 +02:00
retrooper 53012ee386 Third attempt to support Via, need to figure out why CustomBukkitDecodeHandler isn't receiving any bytebufs? 2021-09-18 13:23:09 +02:00
retrooper dcf1b7a6d8 Revert "Attempt to support ViaVersion, obviously not complete, working on fixing issues."
This reverts commit b2294d405e.
2021-09-18 13:05:23 +02:00
retrooper 49cdc7bf79 Revert "Second attempt to support Via, packets still end up being larger than the server expects?"
This reverts commit 8abf92420a.
2021-09-18 13:05:15 +02:00
retrooper 8abf92420a Second attempt to support Via, packets still end up being larger than the server expects? 2021-09-17 22:04:06 +02:00
retrooper b2294d405e Attempt to support ViaVersion, obviously not complete, working on fixing issues. 2021-09-17 19:27:23 +02:00
retrooper 5d708e3195 Add NBT abstraction (not used yet) 2021-09-14 21:49:16 +02:00
retrooper dde3a49925 We came this far, when leaving the server an exception is thrown, ProtocolLib just floods us with errors, this caused more issues than before, we might have to go with the Via like approach if via is available. 2021-09-14 21:45:47 +02:00
retrooper 639abb53ff Cleanup 2021-09-14 21:02:12 +02:00
retrooper 7a511eec7c Fixed issues with all wrappers. 2021-09-14 20:16:06 +02:00
retrooper 05e7b33376 ProtocolLib incompatibilities partially fixed, we still need to handle disconnection index out of bounds errors and ViaVersion's attempt at PLIB support 2021-09-14 17:51:18 +02:00
retrooper 2d8b10888d Our decoder is finally behind ViaVersion, just facing ProtocolLib incompatibilities 2021-09-14 17:23:29 +02:00
retrooper 4fdaece1df PacketWrapper#readItemStack progress, but not done, it only supports clients that have same protocol version as the server 2021-09-10 23:00:52 +02:00
retrooper 6bce3cc847 Some changes (lazy to document) 2021-09-07 17:44:57 +02:00
retrooper b8c9760275 Lots of refactoring;
Documented some wrappers;
Working on PacketWrapper#readItemStack;
Import optimization;
Code cleanup
2021-09-06 13:34:21 +02:00
retrooper 7c0c845a3d WrapperGameClientResourcePackStatus created 2021-09-04 01:19:47 +02:00
retrooper 678adda106 WrapperGameClientHeldItemChange created 2021-09-04 01:01:39 +02:00
retrooper 180a7cd505 WrapperGameServerDisconnect created 2021-09-04 00:54:57 +02:00
retrooper 68f0053b9b WrapperGameServerSpawnLivingEntity created, but incomplete, We need to make our own EntityType enum. (and map all ids per version);
Small fixing in PacketTypes, cleaned up some duplicate types.
2021-09-04 00:39:38 +02:00
retrooper 5139f8a38f Removed debugs. 2021-09-03 19:16:33 +02:00
retrooper 68ff049691 ServerManager#receivePacket works better now. 2021-09-03 19:13:55 +02:00
retrooper 30836c6714 ServerManager#receivePacket works, but has a performance cost. 2021-09-03 18:53:56 +02:00
retrooper 1ce86f7e63 Realized the build issue was jitpack's fault 2021-09-03 17:23:31 +02:00
retrooper ec4f44f215 Trying to fix build issues for jitpack pt. 4 2021-09-03 17:19:29 +02:00
retrooper 3b48c18e9a Trying to fix build issues for jitpack pt. 3 2021-09-03 17:17:02 +02:00
retrooper db3a6e3076 Trying to fix build issues for jitpack pt. 3 2021-09-03 17:16:48 +02:00
retrooper 4848a4c078 Trying to fix build issues for jitpack pt. 2 2021-09-03 17:15:13 +02:00
retrooper 8f550a67d6 Trying to fix build issues for jitpack 2021-09-03 17:12:45 +02:00
retrooper fb01545c1b All wrappers from now on must be sendable.
Still need to work on sending client-sided packets.
2021-09-03 15:49:12 +02:00
retrooper 2f572dc3ac Made the client-side wrappers sendable. 2021-09-03 15:19:31 +02:00
retrooper da8126d62e Small cleanup 2021-09-03 14:33:40 +02:00
retrooper c3993c3e6e PacketEventsSettings#lock removed; 2021-09-03 14:30:49 +02:00
retrooper 587fb09f4d All wrappers can now modify data. Created setters for all current wrappers. 2021-09-03 14:18:10 +02:00
retrooper dc6b457e2d PacketSendEvent#getPostTask created 2021-09-01 15:07:47 +02:00
retrooper 64606f5cb8 Worked on 1.7.10 handlers. Still need to test them. 2021-08-31 22:53:05 +02:00
retrooper eca616f9a9 Added required license notices for each file. 2021-08-31 22:41:07 +02:00
retrooper 4f25bfcde3 PacketSendEvent actually gets cancelled in our modern encoder. 2021-08-31 22:07:02 +02:00
retrooper 03a437fb7f Corrected the credit. We give credit to all projects that help build up our cross-version injector. 2021-08-31 20:40:47 +02:00
retrooper 9e4a56e936 Optimize all imports. 2021-08-31 20:26:41 +02:00
retrooper b39f3daf97 PlayerManager#sendPacket now works with ProtocolSupport;
PacketListener and PacketListenerReflect exist;
2021-08-31 20:23:51 +02:00
retrooper 158d2a9ea9 WrapperGameClientChatMessage#setMessage created, not efficient, but works for now;
WrapperGameServerChatMessage bug fix;
2021-08-31 10:55:38 +02:00
retrooper 96c53be358 Injector fixed for 1.11.2 server versions and lower. 2021-08-29 14:20:35 +02:00
retrooper 56459dcf5a We are having issues on 1.9 with our injector. About to do changes.
WrapperGameClientSetBeaconEffect created;
2021-08-29 13:30:40 +02:00
retrooper 5c370d13ae Small cleanup; 2021-08-29 11:34:07 +02:00
retrooper ed61e4f968 PacketWrapper#readString cleanups 2021-08-29 11:02:37 +02:00
retrooper e23fdc09b9 Wrappers support a constructor taking in an event. 2021-08-29 10:57:17 +02:00
retrooper f6ca0e0ec4 WrapperGameServerChatMessage created; 2021-08-28 23:04:53 +02:00
retrooper bec616d924 Worked on sendable wrapper abstraction;
ByteBufAbstract#writeBytes(byte[]) created;

WrapperGameServerHeldItemChange created;

All other clientbound wrappers are now sendable.
2021-08-28 20:38:52 +02:00
retrooper 1b03192d09 We now support processing packets while ProtocolSupport is present. Sending packets while ProtocolSupport is present doesn't seem to work. 2021-08-28 18:18:00 +02:00
retrooper 9b455654c7 Reverted to a working commit. 2021-08-27 09:40:33 +02:00
retrooper 1af9dde7bb Working on supporting sending packets. We currently get a decoderexception. 2021-08-27 09:34:07 +02:00
retrooper fcb607399d Revert "ProtocolSupport support added, but we are still behind protocolsupport until we receive the handshake packet unfortunately, would be great if we could always be before them."
This reverts commit dae2419cef.
2021-08-27 09:25:07 +02:00
retrooper d181269171 Revert "Working on supporting sending packets. We currently get a decoderexception."
This reverts commit 130d711640.
2021-08-26 23:08:39 +02:00
retrooper cb6d7d96b3 Revert "Added some debugs to our injector, considering changing our injection approach."
This reverts commit 3ffdc6aa79.
2021-08-26 23:08:12 +02:00
retrooper 3ffdc6aa79 Added some debugs to our injector, considering changing our injection approach. 2021-08-26 10:46:36 +02:00
retrooper 130d711640 Working on supporting sending packets. We currently get a decoderexception. 2021-08-25 22:36:29 +02:00
retrooper dae2419cef ProtocolSupport support added, but we are still behind protocolsupport until we receive the handshake packet unfortunately, would be great if we could always be before them. 2021-08-25 21:06:34 +02:00
retrooper b4e2eb76b5 Encoder bug fix. 2021-08-25 17:09:56 +02:00
retrooper e4768096b2 Project code cleanup with IDE (Optimize imports, etc);
Added legacy netty import (1.7.10 spigots) support to our decoders and encoders.
2021-08-25 17:01:52 +02:00
retrooper 505531f8e5 Created lots of netty abstraction. 2021-08-25 16:04:09 +02:00
retrooper 47f5768474 EventManager cleanup;
GlobalChannelInjector fixed;
2021-08-25 10:40:38 +02:00
retrooper 898c4a1a40 WrapperGameClientInteractEntity created;
Some debugs removed;
compatInjector setting removed;
2021-08-25 10:22:35 +02:00
retrooper 57e6beb904 Our encoder and decoder are officially working. 2021-08-25 09:07:37 +02:00
retrooper e09080436b Working on some stuff. 2021-08-24 22:13:30 +02:00
retrooper 6862cda387 Some progress on supporting the decompressor with our decoder. 2021-08-24 19:58:24 +02:00
retrooper 5c4ac0a0fa Small cleanup 2021-08-24 16:40:54 +02:00
retrooper 8e577eedf0 Sort of reverted the encoder and decoder to their initial form. 2021-08-24 15:42:19 +02:00
retrooper 442d171cfc Encoder pretty empty 2021-08-24 15:16:45 +02:00
retrooper df85c00175 Did some testing, did not manage to complete encoder, reverting some stuff. 2021-08-24 13:39:26 +02:00
retrooper 3af610bb73 Progress on encoder, we can finally successfully switch to the game state, now we need to work on processing game packets, some are compressed, some aren't. 2021-08-24 12:38:26 +02:00
retrooper 2708f00556 Working on our decoder and encoder, many changes, this is not stable. Just a progress/safety commit. 2021-08-23 22:25:59 +02:00
retrooper 510a5a8d09 Corrections 2021-08-23 21:14:47 +02:00
retrooper 2b184e6ce7 Small change. 2021-08-23 14:39:43 +02:00
retrooper a68df54ffe Some bug fixing. 2021-08-23 14:33:09 +02:00
retrooper a8233b492a Worked on fixing our decoder, still working on fixing our encoder. 2021-08-22 22:22:22 +02:00
retrooper 20cbdef83c PacketType.Game.Server optimized 2021-08-22 13:46:52 +02:00
retrooper 13a1ae1069 Small build.gradle cleanup 2021-08-22 10:22:16 +02:00
retrooper 7fd63d30c9 PacketListenerPriority renamed to Priority 2021-08-22 09:18:43 +02:00
retrooper 6396545364 PacketType abstraction reverted and modified. This is the better approach. 2021-08-22 09:16:29 +02:00
retrooper d7b03dd947 Revert "PacketType abstraction improved, still need to test."
This reverts commit a1d20a7b7c.
2021-08-22 09:14:56 +02:00
retrooper a1d20a7b7c PacketType abstraction improved, still need to test. 2021-08-22 00:12:10 +02:00
retrooper 433c49e6be Some small cleanup 2021-08-22 00:02:01 +02:00
retrooper 3eea564cba Hopefully got rid of the IDE specific files and gradle build files. 2021-08-21 23:49:31 +02:00
retrooper a6b6ade573 MinecraftReflection cleanup 2021-08-21 22:35:41 +02:00
retrooper 70658b952c PacketType.Handshaking.Client.LEGACY_SERVER_LIST_PING created 2021-08-21 22:33:15 +02:00
retrooper 2b8130d2e7 Event abstraction cleanup;
PacketListenerPriority refactored;
2021-08-21 21:51:34 +02:00
retrooper 969d218519 Documented more wrappers. 2021-08-21 20:47:31 +02:00
retrooper af7f7baa57 Started documenting some server-bound game wrappers. 2021-08-20 22:15:41 +02:00
retrooper 387e521019 Cleaned up MinecraftReflection; Deleted some unneeded classes 2021-08-20 21:55:12 +02:00
retrooper 0da5ddbe6c Progress on encoder, only status packets can be listened to, made some samples and some corrections to our code. 2021-08-20 16:56:52 +02:00
retrooper cfa1c4c076 All wrapper's constructors are now consistent;
PacketType#Play -> PacketType#Game;
PacketState#PLAY -> PacketState#GAME
2021-08-17 08:13:44 +02:00
retrooper 9460812be5 WrapperGameClientAnimation corrected; 2021-08-16 22:53:34 +02:00
retrooper a2c4ffc1a9 WrapperGameClientAnimation created;
WrapperGameClientClickWindowButton created;
WrapperGameClientGenerateStructure created;

WrapperLoginClientEncryptionResponse fixed;
WrapperLoginClientPluginResponse fixed;
2021-08-16 22:45:34 +02:00
retrooper 260c67ba8d Merge remote-tracking branch 'origin/2.0' into 2.0 2021-08-16 21:55:17 +02:00
retrooper 8c41a24bb7 Added missing ClientboundPacketType_1_12 2021-08-16 21:54:19 +02:00
retrooper 60399cfb01 Corrected credit in README 2021-08-16 08:47:45 +00:00
retrooper 3294495bda Merge branch '2.0' of https://github.com/retrooper/packetevents into 2.0 2021-08-14 20:53:08 +02:00
retrooper 1583b1e0a3 New attempt at encoder. 2021-08-14 20:51:44 +02:00
retrooper 7f635d46e1 Update README.md 2021-08-14 14:14:06 +02:00
retrooper 55b38b499a Finished client-bound packet types. Still need to test. 2021-08-13 21:18:50 +02:00
retrooper 8b13cd2dad Calling via's decoder doesn't work? 2021-08-12 12:18:57 +02:00
retrooper fa824c9ebd Attempt at encoder, does not work, trying something else. 2021-08-12 11:38:44 +02:00
retrooper c418ddfd1c Lots of project cleanup. 2021-08-11 20:26:30 +02:00
retrooper c753839df7 Progress to server-bound packet types. 2021-08-11 19:23:17 +02:00
retrooper ae1df7e2a1 Fixed some PacketType confusion. 2021-08-11 14:33:11 +02:00
retrooper b341df4098 Small cleanup, still some confusion with 1.16.5 and 1.16.4 having some different packet ids? 2021-08-11 13:56:49 +02:00
retrooper 9339bdb428 More cleanup to PacketTypes 2021-08-11 13:40:22 +02:00
retrooper 8d79248c0b All serverbound packet types finished. Need to work on clientbound PLAY ones. 2021-08-11 13:34:13 +02:00
retrooper 140b432364 PacketType abstraction and cleanup, still need to test 2021-08-11 12:12:53 +02:00
retrooper 75e45dbc52 Removed some gradle files hopefully 2021-08-11 11:48:26 +02:00
retrooper 63c6207d71 PacketType bug fix;
Add .gradle to gitignore
2021-08-11 11:46:58 +02:00
retrooper b6dd3e0e82 Remove .idea files 2021-08-11 11:04:09 +02:00
retrooper dca5fc6a4b Custom decoder should now work on 1.7.10 too. 2021-08-11 11:02:57 +02:00
retrooper a0765b7169 Merge remote-tracking branch 'abhi289/dev' into 2.0
# Conflicts:
#	.gradle/7.0/executionHistory/executionHistory.bin
#	.gradle/7.0/executionHistory/executionHistory.lock
#	.gradle/7.0/fileHashes/fileHashes.bin
#	.gradle/7.0/fileHashes/fileHashes.lock
#	.gradle/7.0/javaCompile/classAnalysis.bin
#	.gradle/buildOutputCleanup/buildOutputCleanup.lock
#	.gradle/checksums/checksums.lock
#	src/main/java/io/github/retrooper/packetevents/packetwrappers/play/out/setslot/WrappedPacketOutSetSlot.java
#	src/main/java/io/github/retrooper/packetevents/packetwrappers/play/out/spawnentityliving/WrappedPacketOutSpawnEntityLiving.java
2021-08-11 10:36:33 +02:00
retrooper ea7b9b432a Serverbound packet types finished. 2021-08-11 10:28:11 +02:00
retrooper 4c57e37807 "Bad packet xyz" issue, still need to fix, check via discord 2021-08-10 23:16:11 +02:00
retrooper fc526ae232 ViaVersion now works with packetevents on paper! Need to test on spigot and need to test older via versions and add protocolsupport support. 2021-08-10 22:29:06 +02:00
retrooper dc46c8b5ea Back to old replacing injector, we need to try initialize our channelinitializer BEFORE viaversion. 2021-08-10 21:05:22 +02:00
retrooper 5f78d2d059 PacketSplitter replacing attempt when making a decoder did NOT WORK :c 2021-08-10 20:45:20 +02:00
retrooper 341f6632f5 Merge pull request #157 from LIWKK/patch-29
Update ViaVersionLookupUtils.java
2021-08-10 11:01:42 +02:00
retrooper 0cf894567f Removed debug 2021-08-10 10:58:01 +02:00
Johannes 2cf93d6e17 Update ViaVersionLookupUtils.java 2021-08-09 20:17:24 +03:00
retrooper 651c4a9955 Small adjustments to the decoder, we realized we are receiving invalid packets and passing invalid packets onto the next handlers. We need to figure out why we are getting invalid packets. 2021-08-09 17:52:16 +02:00
retrooper 9bfab5d899 Small cleanup 2021-08-09 10:04:15 +02:00
retrooper 99b24b7ad1 Working on injector with ViaVersion support. We get a ViaVersion exception 2021-08-08 13:44:40 +02:00
retrooper db9025dcea Progress working on injector. 2021-08-08 12:08:58 +02:00
retrooper 4bbf43e83e Build issue fixed 2021-08-08 08:10:19 +02:00
retrooper bcd60977f5 WrappedPacketOutSetSlot now works on 1.17.1 2021-08-08 08:00:11 +02:00
retrooper b3729ad078 WrapperLoginServerLoginSuccess corrected;
WrapperGameClientKeepAlive completed;
WrapperGameClientPong completed;
WrapperGameClientSpectate completed;
2021-08-06 14:48:32 +02:00
retrooper 709812d307 WrapperGameClientChatMessage complete 2021-08-05 23:22:02 +02:00
retrooper fd7f0282a5 WrapperGameClientUpdateSign finished 2021-08-05 23:03:29 +02:00
retrooper 39be921ae8 Fixed issues with PluginMessage wrappers 2021-08-05 13:37:28 +02:00
retrooper d1c9d55158 Some exception refactoring 2021-08-05 12:09:20 +02:00
retrooper 0f887d3e7e Some refactoring and cleaning up, some recoding. 2021-08-05 12:08:24 +02:00
retrooper 67a89e2578 Few renamings 2021-08-05 11:55:12 +02:00
retrooper 038933e978 All login and status wrappers created 2021-08-05 11:34:51 +02:00
retrooper ca2003b644 Some changes 2021-08-05 08:41:58 +02:00
retrooper d68e69ffdf Improved some wrappers. 2021-08-05 07:21:21 +02:00
abhiram555 db1b73ca6e Wrote few wrappers for client login 2021-08-05 01:15:08 +05:30
abhiram555 e69739be72 Added Client Ping Packet Wrapper 2021-08-05 00:39:36 +05:30
abhiram555 c33681e3be Fix PacketDecodeEvent cancelling 2021-08-05 00:07:04 +05:30
retrooper 7c04d9ea7c WrapperLoginClientLoginStart finished 2021-08-04 20:33:47 +02:00
retrooper b97454dbde Merge branch 'dev' of https://github.com/abhiram555/packetevents into abhi-dev 2021-08-04 19:52:24 +02:00
abhiram555 1ba5442d0c Fixed Lagacy decoder too 2021-08-04 23:21:58 +05:30
abhiram555 7e59b91723 Added a packet wrapper for CustomPayload 2021-08-04 23:18:23 +05:30
abhiram555 9b88efec36 Properly fix the decoder 2021-08-04 22:59:32 +05:30
abhiram555 9678ef523a Fix the decoder 2021-08-04 22:06:30 +05:30
retrooper fe3664e8fa Attempt to create some bytebuf wrappers, they don't really work. Did some API cleanup, removed deprecations. 2021-08-04 11:13:10 +02:00
retrooper 3ed2656935 Deleted many classes, looking to recode most of them or just remove them. They aren't needed anymore. Working with new bytebuf system. 2021-08-03 22:52:40 +02:00
retrooper dc354330fb Build changes 2021-08-03 21:45:01 +02:00
retrooper 24cefaeeff Small cleanup, trying to find issue with weird values from bytebufs (when you haven't reloaded) 2021-08-03 18:49:56 +02:00
retrooper 897d7d035d Duplicate the bytebuf for PacketDecodeEvent so the next handler doesn't end up with an empty bytebuf 2021-08-03 18:05:00 +02:00
retrooper b4132946c9 Build issues? 2021-08-03 16:57:16 +02:00
retrooper 7e3a2a2875 Early injector duplicate decoder issue fixed 2021-08-03 16:55:15 +02:00
retrooper c28e8cd732 Small changes 2021-08-03 15:35:59 +02:00
retrooper e39e86966c Added getPlayer to PacketDecodeEvent, applied ByteBufAbstract, Still need to test 2021-08-03 13:40:42 +02:00
retrooper 90b2f6444d ByteBuf abstraction finished, now time to apply it. 2021-08-03 13:03:47 +02:00
retrooper 8a754af137 Progress on ByteBuf abstraction so we can support both 1.7.10 and newer versions. 2021-08-03 11:17:07 +02:00
retrooper 3c899e41b5 Adding some build files 2021-08-03 10:59:48 +02:00
retrooper 3653c9b07a Merge pull request #154 from MWHunter/viaversionclientversion
Fix getting player version for the first time with ViaVersion
2021-08-03 10:48:27 +02:00
abhiram555 340e10ff6d Remove .gradle 2021-08-02 20:58:06 +05:30
DefineOutside c667980997 Fix getting player version for the first time with ViaVersion 2021-08-02 10:22:29 -05:00
abhiram555 37517af695 Project Cleanup 2021-08-02 20:32:21 +05:30
abhiram555 33fcf6105a Project Cleanup 2021-08-02 20:17:50 +05:30
abhiram555 8cf9af3024 Project files cleanup 2021-08-02 20:15:49 +05:30
abhiram555 eed8409e4b Added PacketDecoder on lagacy minecraft 2021-08-02 20:12:29 +05:30
abhiram555 bd193e4be2 Removed IJ files 2021-08-02 16:19:40 +05:30
abhiram555 87c73392eb Added PacketDecodeEvent for modern minecraft version's 2021-08-02 16:18:51 +05:30
retrooper df29b947a6 ViaVersion linkage error hopefully fixed 2021-08-02 10:48:10 +02:00
retrooper 55c3b9a446 Removed debugs when ViaVersion is present 2021-07-28 20:27:07 +02:00
retrooper 76ad95c63a PlayerUtils#writePacket and PlayerUtils#flushPackets created 2021-07-23 12:21:32 +02:00
retrooper e7235f1ef7 Fixed WrappedPacketInCustomPayload#getChannelName always returning "minecraft:brand" on 1.13+ server versions. 2021-07-21 22:16:02 +02:00
retrooper 1e26293c51 Extra NMS class added 2021-07-20 19:49:37 +02:00
retrooper 84f9bbf207 Removed invalid enum constants in ServerVersion 2021-07-20 13:59:32 +02:00
retrooper 40e13755ff NPC#teleport 2021-07-15 13:00:54 +02:00
retrooper 093c45609c Removed license notice from build files 2021-07-14 23:21:05 +02:00
retrooper 06d4333524 Copied Bukkit's BoundingBox util;
Fixed getEntityBoundingBox bugs on some newer server versions;
Corrected license notice in some files;
2021-07-14 23:15:37 +02:00
retrooper 78773c3a7b WrappedPacketOutSpawnEntity created;
Fixed incompatibilities with future ViaVersion versions(stopped using legacy API);
2021-07-14 21:58:24 +02:00
retrooper bd36cae8d0 ServerUtils#getEntityBoundingBox created 2021-07-14 21:08:26 +02:00
retrooper 2babb1ac44 Merge remote-tracking branch 'origin/dev' into dev 2021-07-14 12:13:30 +02:00
retrooper e29a15db7e Fixed sending WrappedPacketOutPosition for 1.9 -> 1.16.5 2021-07-14 12:13:22 +02:00
retrooper bb87ce9e77 Merge pull request #146 from MWHunter/fixserverversion
Fix ServerVersion#isNewerThan
2021-07-14 01:28:54 +02:00
DefineOutside b2b7687b33 Fix ServerVersion comparison 2021-07-13 18:13:16 -05:00
retrooper d182f9bd5b WrappedPacketInCustomPayload#getTag -> WrappedPacketInCustomPayload#getChannelName;
WrappedPacketOutCustomPayload#getTag -> WrappedPacketOutCustomPayload#getChannelName;
WrappedPacketLoginOutCustomPayload#getTag -> WrappedPacketLoginOutCustomPayload#getChannelName;

The channel name now also contains the namespace on newer server versions, it can be "minecraft:brand" on newer server versions instead of just "brand". Older versions such as 1.8 always had the namespace. I just made the names consistent. This is a sort of breaking change, thats why I didn't end up deprecating getTag, i want you guys to be aware of the breaking change.
2021-07-13 22:53:41 +02:00
retrooper ab4dba254d Code cleanup 2021-07-13 14:03:11 +02:00
retrooper 380b1e9a73 Merge pull request #143 from MWHunter/destroyattempttwo
Fix reading destroy packet on 1.17
2021-07-13 13:47:41 +02:00
retrooper 395cb6a6b7 WrappedPacketOutEntityDestroy now has 1.17.1 and has been cleaned up. 2021-07-13 13:47:27 +02:00
retrooper e3a6bec0ae Merge pull request #145 from MWHunter/useItem
Add WrappedPacketInUseItem
2021-07-13 13:17:01 +02:00
retrooper 8cd52c4f4d WrappedPacketInUseItem completed;
WrappedPacketInBlockPlace_1_9 optimized;
2021-07-13 13:16:31 +02:00
retrooper ef758b4ee3 Merge remote-tracking branch 'origin/dev' into dev 2021-07-13 12:57:51 +02:00
retrooper a75ad0e58e Small change 2021-07-13 12:57:34 +02:00
DefineOutside 2d282bee8e Add WrappedPacketInUseItem 2021-07-11 18:14:35 -05:00
DefineOutside 4b30678d6b Fix reading entity destroy on 1.17.1 2021-07-10 14:22:15 -05:00
retrooper 70ae66df17 Merge pull request #142 from MWHunter/flying
Fix FLYING packet on 1.17
2021-07-10 21:21:05 +02:00
retrooper 0a98140a1c Merge pull request #141 from MWHunter/dev
Fix WrappedPacketOutMapChunk for 1.17 void chunks
2021-07-10 21:18:55 +02:00
DefineOutside 2ce25c24ee Fix FLYING packet on 1.17 2021-07-10 13:57:23 -05:00
DefineOutside f27688c89f Fix WrappedPacketOutMapChunk for 1.17 void chunks 2021-07-10 12:07:39 -05:00
retrooper e287e63c58 WrappedPacketOutCollect fixed when attempting to send on 1.11+ 2021-07-09 11:35:25 +02:00
retrooper 6a44c3edbf Merge branch 'dev' of https://github.com/retrooper/packetevents into dev
 Conflicts:
	.gradle/7.0/executionHistory/executionHistory.bin
	.gradle/7.0/executionHistory/executionHistory.lock
	.gradle/7.0/fileHashes/fileHashes.bin
	.gradle/7.0/fileHashes/fileHashes.lock
	.gradle/buildOutputCleanup/buildOutputCleanup.lock
	.gradle/checksums/checksums.lock
2021-07-09 07:34:48 +02:00
retrooper cd28ced0c7 Merge pull request #138 from Tecnio/dev
Added WrappedPacketOutCollect
2021-07-09 07:32:41 +02:00
retrooper b05496db09 Fixed WrappedPacketOutCollect bugs and improved. 2021-07-09 07:31:14 +02:00
Tecnio c914ccbb90 Added WrappedPacketOutCollect 2021-07-09 04:49:00 +03:00
retrooper a236fb5523 packetevents 1.8-pre-17 2021-07-08 15:24:32 +02:00
retrooper 1768ea518e Official packetevents 1.8-pre-17 2021-07-08 13:42:17 +02:00
retrooper 0c7f185174 WrappedPacketOutMapChunk#getPrimaryBitMap deprecated, it was a typo 2021-07-08 13:40:30 +02:00
retrooper 2d8cf55985 WrappedPacketOutMapChunk#getPrimaryBitMaskBitSet created for 1.17, WrappedPacketOutMapChunk#getPrimaryBitMask won't say empty on 1.17 XD 2021-07-08 13:35:49 +02:00
retrooper 15e746687a packetevents 1.8-pre-17 2021-07-08 13:13:33 +02:00
retrooper ee9a870144 New Packet IDs for packets added in 1.17 2021-07-08 13:10:10 +02:00
retrooper 932ef480b5 Build issues fixed 2021-07-07 05:47:45 +02:00
retrooper 41125cee92 ServerVersion#v_1_17_1 created;
ClientVersion#v_1_17_1 created;
ConcurrentModificationException when calling getEntityById method fixed;
2021-07-07 05:08:42 +02:00
retrooper a9585a1117 Wrapper bug fixes for 1.17. 2021-07-06 20:06:40 +02:00
retrooper 5aaee6fb63 Much more efficient entity ID caching. 2021-07-02 12:57:09 +02:00
retrooper 8722dd0c34 WrappedPacketInUseEntity fixed for Paper;
WrappedPacketOutRemoveEntityEffect fixed for 1.17;
2021-07-01 23:00:19 +02:00
retrooper 267468f731 StackOverflow when calling getEntityById fixed; 2021-07-01 12:24:07 +02:00
retrooper 610975b957 Fixed duplicate-handler exception on server reloads. 2021-06-30 22:11:58 +02:00
retrooper f09617b2c2 PacketEvents.get().getServerUtils().getEntityById(@Nullable World world, int entityID) created;
WrappedPacketEntityAbstraction#getEntity Asynchronous Chunk getEntities call exception on 1.17 fixed;

WrappedPacketOutMapChunk#getChunkX and WrappedPacketOutMapChunk#getChunkZ fixed on 1.17
2021-06-30 21:53:57 +02:00
retrooper 96a3de9744 Caching the entity id of players when they join the server 2021-06-29 19:15:01 +02:00
retrooper 78f88fcede Fixed WrappedPacketOutEntity and WrappedPacketOutNamedEntitySpawn;
NPC API inconsistencies fixed;
2021-06-28 23:15:17 +02:00
retrooper 612a9c318f WrappedPacket#readGameMode, WrappedPacket#writeGameMode fixed 2021-06-26 12:58:26 +02:00
retrooper d1bf9a09ae Debugs removed. 2021-06-22 20:34:36 +02:00
retrooper 6e01c76e24 Fixed PacketType.Play.Client.POSITION, POSITION_LOOK and LOOK on 1.7.10 2021-06-21 20:34:59 +02:00
retrooper ccf401ff6d Potential memory leaks fixed. 2021-06-20 21:28:19 +02:00
retrooper 6b86d7fdc6 Fixed WrappedPacketEntityAbstraction#getEntity, we cache entity ID ourself. We need to do some performance tests. (looking at main-threa d load and TPS);
WrappedPacketOutMapChunk bug fix on 1.8.x
2021-06-20 20:15:09 +02:00
retrooper de3988ca29 Progress to fixing WrappedPacketEntityAbstraction#getEntity 2021-06-18 22:41:59 +02:00
retrooper 0b35e5ae5f Build issue fix. 2021-06-18 17:49:49 +02:00
retrooper 007f1030a9 All accessible packet-wrappers should be usable on 1.17. 2021-06-18 17:07:06 +02:00
retrooper 938f9184b2 1.17 support for some more client-bound packet-wrappers. 2021-06-17 21:09:13 +02:00
retrooper 4c0c57ace6 WrappedPacketInBlockPlace bug fix 2021-06-17 15:19:47 +02:00
retrooper af4906396b Build issues fixed. 2021-06-16 21:26:49 +02:00
retrooper 3a68338da4 1.17 support to more client-bound packet-wrappers 2021-06-16 20:34:52 +02:00
retrooper bb195f28ec NPC.java bug fixes and cleaned up 2021-06-16 19:18:44 +02:00
retrooper bd0d9cc528 PacketType corrections 2021-06-16 17:57:25 +02:00
retrooper 39756e4490 1.17 support for some more client-bound packet-wrappers;
WrappedPacketInJigsawGenerate package corrected;
2021-06-16 07:30:16 +02:00
retrooper d406506189 1.17 support for some more client-bound packet-wrappers;
WrappedPacketOutAnimation optimized and bug fixes (especially fake entity support)
2021-06-15 22:25:36 +02:00
retrooper 9de94b79be Fixed some PacketTypes; 2021-06-13 19:30:55 +02:00
retrooper 5cded7923a Some client-bound packet-wrappers now support 1.17! 2021-06-13 14:47:52 +02:00
retrooper 8c6adafebc Most functionality in server-bound packet-wrappers should work on 1.17, WrappedPacketInUseEntity might still need some completing. 2021-06-13 09:33:53 +02:00
retrooper 39cd41a2d3 Added 1.17 support to some more server-bound packet-wrappers;
License/Copyright holder notice in some injector classes corrected;
2021-06-12 22:27:59 +02:00
retrooper 37feadb421 Many server-bound play wrappers now support 1.17. 2021-06-11 21:48:45 +02:00
retrooper 34c079d757 All status, handshake and login packets support 1.17. Play packets remaining. 2021-06-11 20:37:20 +02:00
retrooper bd52d59801 PacketType.Play.Client.PONG, PacketType.Server.PING added (last commit actually);
Player#getNMSPing 1.17 support (last commit actually);
WrappedPacketInPong created;
WrappedPacketOutPing created;
WrappedPacketInFlying#hasPositionChanged deprecated, use isMoving;
WrappedPacketInFlying#hasRotationChanged deprecated, use isRotating;
2021-06-11 19:27:42 +02:00
retrooper 015038c9b6 Added support for the critical 1.17 NMS breaking changes. 2021-06-11 18:17:27 +02:00
retrooper 18a5656991 official pre-16 2021-06-10 21:47:51 +02:00
retrooper bedecfd575 Some TODO comments removed. 2021-06-10 21:40:36 +02:00
retrooper 7aca5a9f13 WrappedPacketInFlying#getX, getY, getZ, setX, setY, setZ added, but deprecated (for compatibility with old API) 2021-06-10 21:30:40 +02:00
retrooper 344bb27fbf PacketPlaySendEvent#setPostTask created;
PacketLoginSendEvent#setPostTask created;
PacketStatusSendEvent#setPostTask created;

PlayerUtils#changeSkinProperty created;

Updated to PacketEvents-pre-16
2021-06-10 20:59:07 +02:00
retrooper 74dd8b74b5 PacketListenerPriority package relocated; 2021-06-10 19:11:24 +02:00
retrooper 1e113a0938 ServerVersion#v_1_17 created;
ClientVersion#v_1_17 created
2021-06-09 18:31:14 +02:00
retrooper a0a010e842 WrappedPacketOutWindowItems created, but untested; 2021-06-08 20:36:41 +02:00
retrooper 8be91a0dc3 PlayerUtils#isGeyserPlayer(Player) created;
PlayerUtils#isGeyserPlayer(UUID) created;
ServerUtils#isGeyserAvailable created;

PlayerUtils#getNMSPing(Player) deprecated;
PlayerUtils#getSmoothedPing(Player) deprecated;
PlayerUtils#getSmoothedPing(UUID) deprecated;
PlayerUtils#getPing(UUID) deprecated;
Use PlayerUtils#getPing(Player) for ping;
2021-06-07 21:33:25 +02:00
retrooper 14405dfb7f WrappedPacketInFlying#getPosition and setPosition created;
WrappedPacketInFlying#isPosition -> #hasPositionChanged;
WrappedPacketInFlying#isLook -> #hasRotationChanged;
WrappedPacketInVehicleMove#getPosition, setPosition created;
WrappedPacketOutNamedEntitySpawn additional constructors added;
2021-06-06 18:49:32 +02:00
retrooper ddd427ef91 WrappedPacketOutSpawnEntity progress, but still incomplete;
WrappedPacketOutEntityVelocity#getVelocity and setVelocity created, the other velocity accessors deprecated;
WrappedPacketOutExplosion#getPosition and setPosition created, the other position accessors are deprecated;
WrappedPacketOutExplosion#getPlayerVelocity and setPlayerVelocity created, the getPlayerMotion... methods are deprecated;
2021-06-06 08:27:08 +02:00
retrooper 026c0aae23 Corrected copyright holder and license notice on files taken from ViaVersion. 2021-06-05 20:23:48 +02:00
retrooper cc9153940e Merge remote-tracking branch 'origin/dev' into dev 2021-06-05 16:49:58 +02:00
retrooper cb31a355be PacketListenerPriority better documented;
PacketListenerPriority#getById and PacketListenerPriority#getId created
2021-06-05 16:49:49 +02:00
retrooper 5c9b6fa4b4 ViaVersion credit in README 2021-06-05 01:34:40 +02:00
retrooper d38176c5d3 Merge pull request #126 from Camotoy/noduplicatehandler
Don't allow the handler to be added twice
2021-06-05 01:30:43 +02:00
Camotoy 92f14105f7 Don't allow the handler to be added twice 2021-06-04 18:34:01 -04:00
retrooper d141674bd7 Merge remote-tracking branch 'origin/dev' into dev 2021-06-04 23:23:41 +02:00
retrooper 1576639567 PacketEventPriority deprecated, PacketListenerPriority should be used. 2021-06-04 23:23:27 +02:00
retrooper e9cd689f71 Merge pull request #124 from Camotoy/removesocketchannelassumption
Remove assumption of SocketChannel
2021-06-03 09:19:40 +02:00
Camotoy eee2628166 Remove assumption of SocketChannel
Hello, Geyser person here. We're working on some changes to inject Geyser players in the server so they don't create a TCP connection. However, the channels they use aren't socket channels, meaning this library would break with the changes. This PR rectifies that by setting all mentions of SocketChannel to Channel. Tested with Paper 1.16.5 and CraftBukkit 1.7.10 using the Attack Detector example plugin.

Without these changes, https://github.com/PaperMC/Paper/pull/5611 will also break. I would recommend that you remove assumptions that the channel remote address is an INetSocketAddress, such as here: https://github.com/retrooper/packetevents/blob/dev/src/main/java/io/github/retrooper/packetevents/utils/netty/channel/ChannelUtils8.java which will break if anyone uses the setting present in that PR.
2021-06-02 20:09:44 -04:00
retrooper 84710d4161 PacketEventsSettings#fallbackServerVersion might be corrected on some odd server software;
Import optimizations;
2021-06-01 19:38:11 +02:00
retrooper 1d46ad9622 Merge pull request #123 from Tecnio/dev
Made 2 login packets sendable
2021-05-29 22:05:00 +02:00
retrooper 4424b1b0f3 Merge branch 'dev' into Tecnio_dev
# Conflicts:
#	.gradle/7.0/javaCompile/classAnalysis.bin
2021-05-29 22:04:06 +02:00
retrooper 739471e562 Fixed potential bug with WrappedPacketLoginOutDisconnect and WrappedPacketLoginOutSuccess when sending. 2021-05-29 22:01:27 +02:00
retrooper a74eb55c71 PlayerUtils#changeSkin created which updates the player's gameprofile. 2021-05-29 21:56:15 +02:00
retrooper 09ccb8d7b4 WrappedPacketOutGameStateChange bug fix;Changing skin in PlayerUtils progress, but inaccessible and incomplete 2021-05-26 22:49:12 +02:00
Tecnio 88e9453b73 Made 2 login packets sendable 2021-05-26 00:26:49 +03:00
retrooper 29f8a3204f Gradle build files 2021-05-25 22:40:10 +02:00
retrooper 5324aab746 Merge remote-tracking branch 'origin/dev' into dev
# Conflicts:
#	.gradle/7.0/executionHistory/executionHistory.bin
#	.gradle/7.0/executionHistory/executionHistory.lock
#	.gradle/7.0/fileHashes/fileHashes.bin
#	.gradle/7.0/fileHashes/fileHashes.lock
#	.gradle/7.0/javaCompile/classAnalysis.bin
#	.gradle/buildOutputCleanup/buildOutputCleanup.lock
#	.gradle/checksums/checksums.lock
2021-05-25 22:39:16 +02:00
retrooper 46d5b150f6 PacketEventsPlugin todo comments added 2021-05-25 22:38:53 +02:00
retrooper f0b81ac532 Merge pull request #122 from Tecnio/dev
Added 2 wrappers.
2021-05-25 22:36:33 +02:00
Tecnio faa5f3b4de Changed how hands are handled 2021-05-25 23:33:40 +03:00
Tecnio f63c1b2aa6 Added setters and changed getHand handling 2021-05-25 23:29:46 +03:00
Tecnio 1f324f9307 Removed debugs 2021-05-25 17:56:25 +03:00
Tecnio b958dac7ae Added 2 wrappers. 2021-05-25 17:50:59 +03:00
retrooper f95314cd37 WrappedPacketOutBlockBreakAnimation#getBlockPosition always {0, 0, 0} fixed;
Many wrappers cleaned up(lots of code-duplication);
PlayerUtils#injectPlayer and PlayerUtils#ejectPlayer removed
2021-05-24 21:46:04 +02:00
retrooper 43eaa0869c Merge pull request #121 from Tecnio/dev
Created WrappedPacketOutBlockAction
2021-05-24 20:27:50 +02:00
Tecnio 7e430a1eac Improved the code 2021-05-24 21:25:39 +03:00
retrooper 39acdf9235 Small import optimization 2021-05-24 20:16:30 +02:00
Tecnio e38944e39f Improved the code 2021-05-24 20:54:35 +03:00
Tecnio 5c3051f297 Removed debugs 2021-05-24 20:41:00 +03:00
Tecnio c1b8bf17b8 Removed debugs 2021-05-24 20:29:01 +03:00
Tecnio b1f64155dc Made BlockAction sendable. 2021-05-24 20:26:51 +03:00
Tecnio 32a5a34fd8 Added WrappedPacketOutBlockAction 2021-05-24 19:13:43 +03:00
retrooper 40c8c11125 WrappedPacketOutSpawnEntity created, but incomplete 2021-05-23 11:21:58 +02:00
retrooper 0c2e8dd128 Merge remote-tracking branch 'origin/dev' into dev 2021-05-22 22:44:53 +02:00
retrooper 189185e8e1 WrappedPacketOutSpawnEntityLiving completed, but untested. 2021-05-22 22:44:44 +02:00
retrooper 4e4c0fc343 Added bStats notice to README 2021-05-22 21:18:12 +02:00
threadexception 06a2b5af53 Small fixes and cleanups 2021-05-22 20:56:37 +02:00
threadexception 632d87d940 Merge branch 'dev' of https://github.com/retrooper/packetevents
 Conflicts:
	README.md
2021-05-22 20:02:05 +02:00
retrooper 41cd5fde29 WrappedPacketOutSpawnEntityLiving progress 2021-05-22 19:36:26 +02:00
retrooper eef6347f2c Update license attachment in README 2021-05-22 16:11:50 +02:00
retrooper 68dae87d2e Paper injector uses handler name again, but lowercases it to avoid exceptions. 2021-05-21 17:25:08 +02:00
retrooper 901e45c490 Paper injector now uses plugin name and not handler name 2021-05-21 17:14:26 +02:00
retrooper be7d66d14c Corrected GPL license notice. 2021-05-21 16:25:18 +02:00
retrooper 8b798f5ea0 Paper injector added,
license notice in all files shortened
2021-05-21 16:22:04 +02:00
retrooper 926252b8ca UpdateChecker cleaned up 2021-05-15 18:57:47 +02:00
retrooper 31469898d9 WrappedPacketOutMapChunk created, but incomplete. 2021-05-15 17:38:00 +02:00
retrooper cf4913ff0a SendableWrapper#asNMSPacket implementations cleanup 2021-05-15 16:18:31 +02:00
retrooper 915b9152d4 WrappedPacketOutTitle created 2021-05-15 15:51:14 +02:00
retrooper 9e0f190264 WrappedPacketOutSetCooldown is now accessible 2021-05-13 16:09:59 +02:00
retrooper 5c4d40e09b PacketEvents 1.8-pre-15 update 2021-05-13 12:44:59 +02:00
retrooper b8bf1038e7 TODO Comment removed. 2021-05-13 12:43:50 +02:00
retrooper 1f8f900d91 Early injector now supports late-bind on older server versions. 2021-05-13 12:39:17 +02:00
retrooper 531e2af0cf bStats support added 2021-05-12 21:01:27 +02:00
retrooper 448415458c WrappedPacketOutMount created,
WrappedPacketOutSetCooldown created,
WrappedPacketOutEntityEquipment created,
Missing ServerVersion enum constants added
2021-05-06 14:08:41 +02:00
retrooper bd191ec914 WrappedPacketOutMount created 2021-05-05 19:54:06 +02:00
retrooper dc1d3dd3fc PacketEvents 1.8-pre-14 2021-04-30 11:03:37 +02:00
retrooper 15fcc9f11a WrappedPacketOutWorldParticles removed as it doesn't work on latest version. 2021-04-30 10:52:07 +02:00
retrooper ca7b5758b7 WrappedPacketOutTabComplete created, but incomplete. 2021-04-30 10:17:33 +02:00
retrooper c4376d582f WrappedPacketOutEntityMetadata working, but incomplete. 2021-04-30 09:32:54 +02:00
retrooper b3e7ef2792 Lots of cleanup, minor bug fixes, wrappedpacketoutentitymetadata being re-created. 2021-04-29 20:20:51 +02:00
retrooper 542864cac1 1.7.10 direct access no longer used. 2021-04-29 18:37:40 +02:00
retrooper 6169947284 Some cleanup and documentation correction 2021-04-29 18:27:27 +02:00
retrooper bdff7436a5 Gradle javadocs attempt 2021-04-29 15:32:21 +02:00
retrooper a8f8bbaa53 WrappedPacketOutUpdateAttributes bug fix on newer versions 2021-04-26 10:24:14 +02:00
retrooper 80034ed4b8 WrappedPacketOutGameStateChange bug fix on 1.16+ 2021-04-26 09:54:25 +02:00
retrooper caa8cfb40b WrappedPacketOutGameStateChange bug fix on 1.16+ 2021-04-26 09:54:10 +02:00
retrooper 41d45a562e forgot some gradle files 2021-04-24 21:50:07 +02:00
retrooper 0d284e674a Support for Spigot 1.16.5 when it comes to IChatBaseComponents 2021-04-24 21:27:45 +02:00
retrooper 677d30ef55 Some incompatible plugins modifying player connection fix attempt. 2021-04-24 20:49:12 +02:00
retrooper 76d60f0d7a Successfully migrated to Gradle, all is working! 2021-04-21 23:20:44 +02:00
retrooper b93950074d Linking against 1.16.5 spigot api 2021-04-21 23:16:52 +02:00
retrooper 319737a20a Added gradle-wrapper.jar 2021-04-21 23:08:54 +02:00
retrooper 1e0090e82a Successfully migrated from MIT to GPLv3. 2021-04-21 23:01:43 +02:00
retrooper 2a4c08bb3f Process of migrating from MIT to GPL3 2021-04-21 22:56:21 +02:00
retrooper 0e72a1e944 All source files now have MIT license notice. This is the commit before the GPL3 change. 2021-04-21 22:55:01 +02:00
retrooper d998f388f7 Switched from Maven to Gradle. 2021-04-21 22:35:05 +02:00
retrooper 6ff830f245 WrappedPacketOutLogin incomplete but created,
Many other wrappers cleaned up
2021-04-21 22:05:11 +02:00
retrooper f44a5b3599 Updated packetevents version to 1.8-pre-13 2021-04-21 19:59:38 +02:00
retrooper 8ae21853c9 Minor optimizations and internal cleanups. 2021-04-21 19:44:10 +02:00
retrooper bd5e8b8ed5 All wrappers that used to throw UnsupportedOperationExceptions when an unsupported field was accessed on the local server version now return an Optional. It should be much more clear for developers using the PacketEvents API when a field is not supported on every server version.
Vector3i#x/y/z are public
Vector3f#x/y/z are public
Vector3d#x/y/z are public
2021-04-18 17:22:21 +02:00
retrooper a0dc82aba4 WrappedPacketInArmAnimation created 2021-04-17 21:24:17 +02:00
retrooper 3e8d255ac7 Update README on master branch. 2021-04-17 16:12:56 +02:00
retrooper bb0f70cb44 Client version incompatibilities with suspecious NPC plugins fixed. 2021-04-15 21:35:39 +02:00
retrooper e680d2b8f7 WrappedPacketOutEntityEffect created,
WrappedPacketOutRemoveEntityEffect created,
All wrappers that contain entity IDs have been cleaned up. Using the wrappers should be the same as before, additional constructors added to some wrappers. Internal refactoring.
2021-04-13 14:53:40 +02:00
retrooper 9dacbe2f36 Vector3d, Vector3f, Vector3i x, y, z fields are no longer accessible, use the setters. Internal usages of them updated. NPC despawning fixed. 2021-04-10 14:17:54 +02:00
retrooper 74dde71db1 Merge remote-tracking branch 'origin/dev' into dev 2021-04-09 12:53:10 +02:00
retrooper f1bc3d6f4a Internal class EventManagerDynamic renamed to EventManagerModern 2021-04-09 12:53:03 +02:00
retrooper 0fa893f949 Update README.md 2021-04-09 12:24:22 +02:00
retrooper 2699a1e8f9 Update README.md 2021-04-09 12:24:09 +02:00
retrooper 78b2eb07f5 NPC compilation error fix. 2021-04-09 09:45:47 +02:00
retrooper 49c1287664 1.8-pre-12 2021-04-09 09:43:37 +02:00
retrooper 83b3a10069 Late-bind support added. 2021-04-09 09:26:50 +02:00
retrooper 8aed1fda53 Late injector fixed. 2021-04-08 22:15:04 +02:00
retrooper 5f40eec0d3 PacketEvents 1.8-pre-11 released. 2021-04-07 19:15:30 +02:00
retrooper 104b894f50 Merge remote-tracking branch 'origin/dev' into dev 2021-04-07 18:23:28 +02:00
retrooper bcba33a7cb PacketListenerDynamic constructor re-added for backwards compatibility. 2021-04-07 18:23:20 +02:00
terrarier2111 4275c39d8a Using wrapped buffers now 2021-04-06 17:57:34 +02:00
retrooper ae3adefd82 WrappedPacket...CustomPayload wrappers can be retained, then read on another thread and later released. 2021-04-06 16:32:13 +02:00
terrarier2111 6e28602b73 Fixed CustomPayLoad ByteBuf stuff 2021-04-06 13:23:34 +02:00
retrooper 584d3edb13 byteBufClass inside NMSUtils 2021-04-06 12:44:38 +02:00
retrooper 978ce4629a PacketDataSerializer class inside NMSUtils 2021-04-06 12:32:31 +02:00
retrooper 33cfa93f84 PacketListenerDynamic deprecated,
PacketListenerAbstract should be used.
2021-04-06 10:24:43 +02:00
retrooper d5a29365b4 Merge remote-tracking branch 'origin/dev' into dev 2021-04-06 09:41:11 +02:00
retrooper e12870b542 Potentially support for custom plugins with custom player connection overrides. 2021-04-06 09:40:56 +02:00
retrooper 75301b188a Update README.md 2021-04-06 09:05:29 +02:00
retrooper be91a955dc Additional info on the LICENSE removed in README
Promise this is last change to README XD
2021-04-06 09:05:15 +02:00
retrooper 8eb6ae03eb Removed redundant "\" in README 2021-04-06 09:04:27 +02:00
retrooper 7bf4c081b3 Small change to README 2021-04-06 09:00:59 +02:00
retrooper 55b6f2cbce README is now ready. 2021-04-06 09:00:45 +02:00
retrooper e97dcf2ae3 Cleaned up README 2021-04-06 08:59:59 +02:00
retrooper 3affffb42e Update README.md 2021-04-06 08:52:16 +02:00
retrooper ddcb92d04c Update README.md 2021-04-06 08:52:03 +02:00
retrooper 4413aca711 PlayerConnection reading support for some custom plugins. 2021-04-06 08:49:05 +02:00
retrooper c4307fa777 Java 16+ support! 2021-04-05 20:32:10 +02:00
retrooper f4ada314ba Example removed 2021-04-05 19:54:51 +02:00
retrooper dbbc40879a ByteBufUtil issues fixed -> CustomPayload wrappers reading byte content issues FIXED 2021-04-05 19:54:21 +02:00
retrooper 8d3f86722c 1.8-pre-10 2021-04-04 16:17:37 +02:00
retrooper 09466af902 Finished WrappedPacketOutEntityDestroy 2021-04-04 16:16:12 +02:00
retrooper 851d19f57d Merge pull request #110 from yanjulang/wrapper-destroyentity
Added wrapper for PacketPlayOutEntityDestroy
2021-04-04 16:10:18 +02:00
retrooper a4ede8dfcf Reflection final field modifications cleanup,
WrappedGameProfile#getProperties added,
Internal cleanups
2021-04-04 16:05:25 +02:00
retrooper 1c48790a03 Merge remote-tracking branch 'origin/dev' into dev
# Conflicts:
#	src/main/java/io/github/retrooper/packetevents/PacketEvents.java
#	src/main/java/io/github/retrooper/packetevents/utils/reflection/Reflection.java
2021-04-04 16:04:12 +02:00
retrooper 26bc3274fe Reflection final field modifications cleanup,
WrappedGameProfile#getProperties added,
Internal cleanups
2021-04-04 16:03:54 +02:00
yanjulang 805e2ad335 Added wrapper for PacketPlayOutEntityDestroy 2021-04-03 23:13:56 +02:00
terrarier2111 8b6c6d7b35 Improved Reflection perf by caching and some magic 2021-04-03 12:41:11 +02:00
retrooper 7bec3ae062 NPC cleanup, but NPC abstraction is not finished. 2021-03-31 20:32:25 +02:00
retrooper defddefb48 Give a warning when late-bind is enabled in the spigot config on older minecraft versions,
give a proper custom exception whena field is not found with some additional data to help fix issues.
2021-03-31 20:27:26 +02:00
retrooper 5201b18fe7 WrappedPacketOutBlockChange bug fix on 1.7.10, 2021-03-31 10:34:54 +02:00
retrooper c449e8ced1 Stackoverflow fix :/ 2021-03-30 18:52:23 +02:00
retrooper f22d593173 NPE fix 2021-03-30 18:45:29 +02:00
retrooper 5a3ce13d93 PacketType#packetIDMap is no longer initialized with reflection, but manually hopefully reducing issues with obfuscators. 2021-03-30 18:28:32 +02:00
retrooper ecd0d63dc2 IncompatibleClassChangeError on some versions bug fix. 2021-03-30 16:52:59 +02:00
retrooper 066791b283 error fix 2021-03-30 15:00:16 +02:00
retrooper f05bf26293 1.7.10 potential bug fixes 2021-03-30 10:09:57 +02:00
retrooper 75391bebde PacketType#load cleanup (potentially fixed bugs),
NMSPacketEvent#packetID now cached
2021-03-30 10:08:10 +02:00
retrooper d413f9e41b Example code removed 2021-03-26 21:44:19 +01:00
retrooper efdc66739f WrappedPacketOutBlockChange bug fix attempt, WrappedPacketOutTabComplete WIP 2021-03-26 21:43:42 +01:00
retrooper adf652978f Removed ERROR from supported versions in an UnsupportedOperationException thrown by a wrapper when a field is unsupported on the current server version. WrappedPacketOutNamedSoundEffect finished. 2021-03-21 16:06:19 +01:00
retrooper 29e8e9020d Less visible stacktrace when handling an incoming/outgoing packet 2021-03-21 15:17:36 +01:00
retrooper 64da1a54fa WrappedPacketOutNamedSoundEffect progress, but not sendable YET! 2021-03-21 15:16:52 +01:00
retrooper 37740d072f Removed debugs 2021-03-21 13:00:23 +01:00
retrooper 6496f1402a Unnecessary player ejecting removed. (FIXED BUGS WITH PLAYERS BYPASSING THE INJECTION) 2021-03-21 12:59:36 +01:00
retrooper e661ee75d7 WrappedPacket concurrent modification exceptions fixed 2021-03-19 08:25:22 +01:00
retrooper dbd9df8c71 ClassUtil concurrent modification exception fix 2021-03-18 20:44:28 +01:00
retrooper bb8027bcaf NPCManager (BETA) created,
WrappedPacketOutEntityHeadRotation created,
WrappedPacketOutEntityTeleport now uses Vector3d instead of many double getters.
Minor injector issues for some people.
2021-03-18 19:45:50 +01:00
retrooper c7096d8b35 1.8-pre-9, (generate uuid like nms) 2021-03-11 09:58:34 +01:00
retrooper 36b80763e3 WrappedPacketOutNamedEntitySpawn bug fixes,
1.8-pre-9
2021-03-11 09:42:27 +01:00
retrooper bc861089b0 WrappedPacketOutNamedEntitySpawn created,
WrappedEntityPlayer created,
WrappedPacketOutEntity.WrappedPacketOutEntityLook created,
WrappedPacketOutEntity.WrappedPacketOutEntityMove created,
WrappedPacketOutEntity.WrappedPacketOutRelEntityMoveLook created

This commit focussed on supporting NPC spawning and movement.
2021-03-10 20:54:56 +01:00
retrooper e5a43a8826 WrappedPacketOutPlayerInfo created and sendable,
WrappedPacketOutViewDistance created and sendable,
PacketEvents.get().getPlayerUtils().getGameProfile(Player) created
2021-03-09 22:09:58 +01:00
retrooper 1e1b609eb7 WrappedPacketOutRespawn WIP 2021-03-08 20:27:26 +01:00
retrooper 957c8876cc Improved injection failure reverting. 2021-03-07 22:09:09 +01:00
retrooper 2902ef8ba4 Automatically revert to compatibility injector if early injector fails. 2021-03-07 22:05:10 +01:00
retrooper de07adb46a WrappedPacketInEntityAction issues on spigot 1.8.0 fixed 2021-03-07 21:32:05 +01:00
retrooper f3dbb6dd4c PacketEvents#init function without Plugin instance as it is redundant. Old function still exists, but is deprecated. 2021-03-07 12:47:45 +01:00
retrooper b954e68f29 Ejecting players exception when already ejected fix? 2021-03-07 11:52:54 +01:00
retrooper 8e09c54143 Early injector Java 12 support! 2021-03-06 20:55:08 +01:00
retrooper 5e88678c52 PacketTypes are now constants and can be used in switch statements. packetevents-pre-8 update! 2021-03-06 13:32:07 +01:00
retrooper 60ad9f476d packetevents-pre-7 pre-release 2021-03-05 21:52:06 +01:00
retrooper 5b4579c67c packetevents-pre-7 2021-03-05 21:48:40 +01:00
retrooper d502de76dd PacketType IDs of other states no longer have duplicate values!
All IDs are initialized as you load PacketEvents using reflection, the IDs may change across java versions as the Java documentation clearly states that fields(in reflection) are not given in any particular order.
2021-03-05 21:32:43 +01:00
retrooper eb5e21eb1b Just to be safe 2021-03-05 19:31:38 +01:00
retrooper d747974950 Wrappers with #getEntity methods now also have a #getEntity(World) method, which can lead to faster entity look up time. People have rarely encountered concurrent modification exceptions when calling getEntity, I just return null in such cases. It is extremely rare, but the entity can be null! 2021-03-05 19:30:00 +01:00
retrooper ef8fe9161f PacketEvents async loading added 2021-03-01 12:13:51 +01:00
retrooper 50ede8bf24 WrappedPacketOutBlockBreakAnimation UNTESTED wrapper created,
WrappedPacketOutUpdateAttributes UNTESTED wrapper created
2021-02-28 17:50:52 +01:00
retrooper 81f90a955c 1.8-pre-6 2021-02-27 23:40:57 +01:00
retrooper 0252dbf1b8 * Project code cleanup
* Minor bug fixes
* Few setters renamed to be more logical
2021-02-27 23:34:54 +01:00
retrooper cd230ca35d Small changes to wrapper contributions. 2021-02-27 16:23:07 +01:00
retrooper 4852e4bfca ProtocolSupport support added 2021-02-27 16:17:10 +01:00
retrooper 0ed112b6fc Working on ProtocolSupport support... 2021-02-26 22:12:16 +01:00
retrooper 3db6390efb Merge pull request #106 from Tecnio/dev
Many wrappers added.
2021-02-26 22:08:31 +01:00
Tecnio 57aa65cb76 Many wrappers added. 2021-02-27 03:04:20 +03:00
retrooper 746be8a0cf WrappedPacketOutBlockChange now accepts Materials, WrappedPacketOutBlockChange#getMaterial, WrappedPacketOutBlockChange#setMaterial 2021-02-26 16:36:51 +01:00
retrooper 0ea484bdb1 PacketListenerDynamic#onPacketHandshakeReceiveEvent -> PacketListenerDynamic#onPacketHandshakeReceive 2021-02-26 12:38:05 +01:00
retrooper 072dbfbbb4 1.8-pre-5 2021-02-26 11:26:43 +01:00
retrooper 58faab9f54 WrappedPacketOutBlockChange finished,
WrappedPacketOutOpenWindow finished
2021-02-26 11:25:25 +01:00
retrooper 16d9a0c6a6 EarlyInjector finally finished, no longer those old "Failed to inject" problems,
Network manager not found issues on 1.7.10 fixed,

mSpigot support ;O(discouraged to use mSpigot though),
PacketType.Handshaking state created,

PacketType.Handshaking.Client.SET_PROTOCOL created (used to be PacketType.Login.Client.HANDSHAKE),
setData setters finished on custom payload wrappers
2021-02-25 22:55:41 +01:00
terrarier2111 c2f55aa048 Implemented ByteBufUtil#setBytes 2021-02-25 09:43:35 +01:00
retrooper bcb8d0e785 WrappedPacketInSettings & WrappedPacketOutPosition fixed with new setters 2021-02-25 07:53:55 +01:00
retrooper a881496e2b WrappedPacketInSettings#isChatColors -> WrappedPacketInSettings#isChatColored 2021-02-24 22:22:02 +01:00
retrooper e4913cb841 Made setters for almost all fields in all wrappers, some stuff are still marked as TODO. Some wrappers are incomplete. 2021-02-24 22:06:58 +01:00
retrooper 781278a2c5 Made setters for like half the client-bound play wrappers, half to do 2021-02-24 15:37:07 +01:00
retrooper f1bbcd61ed Fixed SupportedVersions annotation,
WrappedPacketHandshakingInHandshake renamed,
PacketType.Handshaking is now its own state
2021-02-24 11:37:35 +01:00
retrooper 42bdc1f1ca Setters created for all server-bound play wrappers 2021-02-24 09:36:09 +01:00
retrooper 710508ae1e Revert "Merge pull request #105 from LIWKK/patch-25"
This reverts commit 7d048c21b3, reversing
changes made to b59f0c5613.
2021-02-23 23:33:52 +01:00
retrooper f826363d01 Many wrappers now have setter methods, not all finished though. Read all TODOs. 2021-02-23 22:49:34 +01:00
retrooper 7d048c21b3 Merge pull request #105 from LIWKK/patch-25
Method to check if player is inject in handlers.
2021-02-23 17:28:51 +01:00
retrooper 0710f214c5 Merge pull request #104 from LIWKK/patch-24
Added player kick, when channel is null.
2021-02-23 17:28:04 +01:00
Johannes 3c4298dcea Update EarlyChannelInjector.java 2021-02-23 18:18:29 +02:00
Johannes efbfb7e29c Method to check if player is inject in handlers. 2021-02-23 18:06:37 +02:00
Johannes 0aeff7cab8 Added player kick, when channel is null. 2021-02-23 18:02:22 +02:00
terrarier2111 be340a9812 Fixed ByteBufUtil#getBytes 2021-02-23 08:14:21 +01:00
retrooper 7122f1194c Created setters for a few login wrappers, TODO Make setters for all wrappers and document every wrapper 2021-02-22 22:14:11 +01:00
retrooper e8df865b3c Completed WrappedPacketOutSetSlot wrapper, TODO: document all wrappers nicely including this one. 2021-02-22 21:51:27 +01:00
retrooper 9e38883dcd Merge pull request #103 from AoElite/setslotbranch
Add WrappedPacketOutSetSlot
2021-02-22 21:38:58 +01:00
retrooper 1d955cac6e Fixed getNetworkManagers method in NMSUtils 2021-02-22 21:38:39 +01:00
terrarier2111 106b7c6d75 Improved OS lookup 2021-02-22 11:49:43 +01:00
retrooper e70609bbc2 Working on early channel injector, still has a bug... 2021-02-21 09:46:59 +01:00
AoElite e1e0735688 fix field names 2021-02-21 02:18:57 -05:00
AoElite 51a417cebd Add WrappedPacketOutSetSlot 2021-02-21 02:11:17 -05:00
retrooper c98c4e7d38 Forgot to replace server channel list with our list wrapper. Weird it isn't working still... 2021-02-20 23:12:18 +01:00
retrooper 042b55af62 Merge pull request #102 from LIWKK/patch-23
Remove NotNull annotation, player can be null in send event.
2021-02-20 23:09:48 +01:00
retrooper ab8885eb6e Merge pull request #101 from LIWKK/patch-22
Remove NotNull annotation, player can be null.
2021-02-20 23:09:43 +01:00
Johannes 069980d567 Remove NotNull annotation, player can be null in send event. 2021-02-20 23:59:52 +02:00
Johannes e6e3835846 Remove NotNull annotation, player can be null. 2021-02-20 23:59:15 +02:00
retrooper bdb83dfd86 Merge remote-tracking branch 'origin/dev' into dev 2021-02-20 22:56:57 +01:00
retrooper 628730d484 EarlyChannelInjector WIP, more progress, still has a few issues. 2021-02-20 22:56:43 +01:00
retrooper 7aefa35623 Merge pull request #100 from LIWKK/patch-21
Fix 1.7.10 loadup error
2021-02-20 20:05:01 +01:00
Johannes 8964a0ac5d Fix 1.7.10 loadup error 2021-02-20 14:05:03 +02:00
retrooper 128ff6c60b Entity metadata wrapper modified, but untested 2021-02-19 09:33:19 +01:00
retrooper 1bc2bbc905 Merge pull request #99 from DragonHunt3r/dev
Initial PacketPlayOutEntityMetaData support
2021-02-19 09:15:02 +01:00
DragonHunt3r 3f9977fd1c Merge branch 'dev' into dev 2021-02-19 09:14:45 +01:00
retrooper 6f5bc43179 BlockDig wrapper SWAP_HELD_ITEMS deprecated,
BlockPlace Hand enum fixed
2021-02-19 09:05:23 +01:00
retrooper 89cba54262 Attempt to fix bug in block place wrapper, removed protocollib from pom.xml 2021-02-17 21:22:56 +01:00
retrooper 081c2fece1 Cleanup done, this commit still has debugs, still working on fixing issues when joining too early SOMETIMES 2021-02-17 20:54:50 +01:00
retrooper 0b9f646650 Unfinished clean ups, 1.7.10 support attempted 2021-02-17 15:39:54 +01:00
retrooper 07ca8ac282 TODO: Tons of cleaning up, this commit is rushed lol 2021-02-17 08:16:30 +01:00
retrooper cb798d6fd0 New EarlyChannelInjector8, invomplete, many debugs, TODO cleanup, and re-add 1.7 support :) we now dont havevthat injection failure problem 2021-02-16 22:33:47 +01:00
DragonHunt3r 5b06f2005c Initial PacketPlayOutEntityMetaData support
Added WrappedPacketOutEntityMetadata and required classes
Current implementation is missing some features marked with `// TODO:`
2021-02-16 19:08:44 +01:00
retrooper c07960814c Merge remote-tracking branch 'origin/dev' into dev 2021-02-14 23:27:06 +01:00
retrooper a1b75243f3 player ping NPE fixed 2021-02-14 23:26:56 +01:00
retrooper 9f9ca79f90 attempt to fix concurrent modification exception 2021-02-13 22:18:31 +01:00
retrooper 241f5ed707 Merge pull request #98 from LIWKK/patch-20
[DEV] Fix EntityAction 1.7.10 bug
2021-02-13 22:14:59 +01:00
Johannes 276653975d [DEV] Fix EntityAction 1.7.10 bug 2021-02-13 11:12:48 +02:00
retrooper ff985e4eee Fixed a NPE when killing server in the event manager. 2021-02-13 07:57:36 +01:00
retrooper 65c28b4c90 1.8-pre-4! 2021-02-12 22:45:15 +01:00
retrooper e994c34689 Merge remote-tracking branch 'origin/dev' into dev 2021-02-12 21:44:37 +01:00
retrooper 0eed580e72 * Cleaner exceptions, exceptions thrown by PacketEvents should now be easier to read and will explain more about the problem. Can help you identify the issue much easier.
* WrapperUnsupportedUsageException created, called whenever you use a wrapper that isn't supported on the local server version.
2021-02-12 21:44:29 +01:00
retrooper 88ccbdbbe7 [Dev] Fixed method shenanigans by @True-cc
[Dev] Fixed method shenanigans
2021-02-12 19:39:06 +01:00
true-cc 4604981e7d Removed random load method 2021-02-12 10:36:26 -08:00
true-cc bf990c0a20 Fixed method shenanigans
constantly getting method -> storing method to var then using it later
2021-02-12 10:27:53 -08:00
retrooper cfebc47853 PacketListenerDynamic#filterXYZ added for each protocol state.
WrappedPacketOutChat fixed for different java versions than 8 HOPEFULLY
2021-02-12 13:39:35 +01:00
retrooper 4a72e70506 [Dev] [BugFix] Fixed a bug where java is idiotic in getDelcaredMethods not returning in any order by @True-cc
[Dev] [BugFix] Fixed a bug where java is idiotic in  getDelcaredMethods  not returning in any order by @True-cc
2021-02-11 08:53:23 +01:00
true-cc edc07a38ae Made all instances of getMethod store the method for later use. 2021-02-10 13:46:36 -08:00
true-cc a4daa60a7f Removed the WChat shit and added Reflection.getDeclaredMethodsInOrder 2021-02-10 13:16:44 -08:00
true-cc e3f7b6888c Added a todo x2 2021-02-10 10:32:15 -08:00
true-cc 62bb1a501b Added a todo 2021-02-10 10:31:35 -08:00
true-cc 92fab840c5 Started adding wrappers for chat stuff 2021-02-10 10:25:26 -08:00
retrooper 515a4a4f8c 1.8-pre-4 2021-02-09 21:13:45 +01:00
retrooper 7518b9335e PacketEventsSettings#injectionRescheduling toggleable,
dynamic event manager registering concurrent mod exceptions fixed, registering event listeners thread safe, unregister event listeners method removed,
2021-02-09 19:02:11 +01:00
retrooper 6221ff0b8b 1.8-PRE-3 pre-release 2021-02-07 21:02:17 +01:00
retrooper bacc1cd878 1.8-PRE-3 2021-02-07 20:41:37 +01:00
retrooper 5144bd6199 * Packet filtering in PacketListenerDynamic support (Good usage of this can improve performance of your plugin)
* PacketListenerDynamic#onPacketEventExternal added, onPacketEvent deleted(for performance improvements), onPacketEventExternal is meant for events that are not inbuilt in the PacketEvents API. PacketEvents lets you create your own custom events and call them.
2021-02-07 20:24:58 +01:00
retrooper a80770b8f7 * Support injecting multiple threads at the same on the same thread in the inject and eject executor service.(No thread switching for all players)
* WrappedPacketOutPosition#isRelative.... methods added
2021-02-07 14:55:40 +01:00
retrooper 1caca9fd96 Direction enum fixed 2021-02-06 13:56:23 +01:00
retrooper 59aa347e4e Updated BLOCK_PLACE wrapper by @Tecnio 2021-02-05 15:00:29 +01:00
Tecnio a22ce57287 Updated BLOCK_PLACE wrapper. 2021-02-05 16:51:21 +03:00
retrooper bac63c57e7 * Direction is now an enum again, cleaned up too...
* PacketHandlerInternal -> PacketProcessorInternal
2021-02-04 19:18:09 +01:00
retrooper 78171c583d Merge remote-tracking branch 'origin/dev' into dev 2021-02-04 13:21:29 +01:00
retrooper 3821c6e98a Untested WrappedPacketOutNamedSoundEffect added 2021-02-04 13:21:12 +01:00
terrarier2111 e0c71e7c86 Fixed ClientVersion#isPreRelease and improved its performance 2021-02-03 13:30:41 +01:00
terrarier2111 d9d054c0cd Cleaned up some stuff 2021-02-02 18:43:31 +01:00
retrooper 82304e4f45 * WrappedPacketInEntityAction cleanup and optimized to use much less memory with faster load times
* WrappedPacketOutChat(BaseComponent, UUID) added
* WrappedPacketOutChat support for some weird 1.7 spigots removing constructors

* Direction documentation corrected
2021-01-29 22:06:12 +01:00
retrooper cbc510f5a4 1.8-pre-2 2021-01-29 17:43:05 +01:00
retrooper 58040a338b world particles wrapper unfinished and not a public class 2021-01-29 17:28:56 +01:00
retrooper 9e5cba423d Fixed ServerVersion#isNewerThan and ServerVersion#isOlderThan comparison bug when comparing the same server version 2021-01-28 17:52:33 +01:00
retrooper 19cdd85b65 WrappedPacketOutNamedSoundEffect progress, cleanup and optimizations to a few wrappers 2021-01-28 12:34:04 +01:00
retrooper a6872ffc3c ClientVersion#isNewerThan, ClientVersion#isNewerThanOrEquals, ClientVersion#isOlderThan, ClientVersion#isOlderThanOrEquals added.
Vector3i#toString, Vector3d#toString added.

WrappedPacketOutBlockChange wrapper finished and supports sending.

Errors are now much more clear and easier to spot if they are on PacketEvents's end or yours.
2021-01-28 11:41:59 +01:00
retrooper 92ad799276 ServerVersion#isNewerThan, ServerVersion#isNewerThanOrEquals, ServerVersion#isOlderThan, ServerVersion#isOlderThanOrEquals created, other comparison methods DEPRECATED, fixed comparison issues when two versions are different but have same protocol version....., internal usages of these methods UPDATED.
Still need to do the same for client version....
2021-01-27 22:28:21 +01:00
retrooper 28770edcdd Direction usage changed 2021-01-27 09:40:18 +01:00
retrooper 0f5180ad07 pom.xml changed 2021-01-26 21:36:15 +01:00
retrooper b2c126ecf9 * redundant single threaded executor service removed ("general executor service")
* update checking now uses the GitHub API checking for Updates on the GitHub repository releases. This is a more reliable option, instead of using the spiget API(yes, spiget, not spigot, unofficial API).
* UpdateChecker.UpdateCheckerStatus created
* If you wish you can now easily check for updates on your own using our API, you could do it every x minutes for example
2021-01-26 21:24:51 +01:00
retrooper aab7266bcb Merge remote-tracking branch 'origin/dev' into dev 2021-01-26 20:04:39 +01:00
retrooper dc5eab1980 Fixed PacketEvents ping being 0 when no keep alive has been received yet. (especially noticable on 1.9+ where keep alives are sent by the server at a 30second rate) 2021-01-26 20:02:41 +01:00
terrarier2111 ddfc803603 Cleaned up some stuff 2021-01-26 10:15:41 +01:00
retrooper 5de43429a3 1.16.3 & 1.16.4 added to ClientVersion 2021-01-26 08:13:17 +01:00
retrooper 513421f3d0 PostPlayerInjectEvent#getClientVersion is NOT supposed to be annotated with @Nullable 2021-01-25 13:35:04 +01:00
retrooper 04ca446d44 real official commit for 1.8 pre 1 XD, javadoc attached 2021-01-25 13:01:19 +01:00
retrooper d8cfd826c0 official commit for 1.8 pre 1 2021-01-25 13:00:33 +01:00
retrooper 30689a74bd 1.8 pre 1 (removed WrappedPacketOutBlockChange) 2021-01-25 12:29:50 +01:00
retrooper 957adbb3a2 1.8 pre 1 2021-01-25 10:56:57 +01:00
retrooper e59ff04f2b * client version cleanup and enum constants with 2/more protocol versions renamed 2021-01-25 10:34:39 +01:00
retrooper 3511099f78 NMSUtils netty location issues fix attempt,
Direction#equals method implemented
2021-01-25 09:52:41 +01:00
retrooper 7dc6f89585 WrappedPacketOutAnimation cleanup, WrappedPacketOutNamedSoundEffect in the creation (unfinished), NMSUtils netty location issues with some weird obfuscation fix? Allegedly happens with zkm obfuscation, taking a different/better approach at finding the netty location. 2021-01-25 08:46:47 +01:00
retrooper e899b0cebb IllegalStateException thrown when calling a packet listener method causes an exception letting you know to help you find the error. 2021-01-23 13:18:59 +01:00
retrooper 40ba25d011 added PacketEvents#getAPI as a deprecated method for backwards compat 2021-01-23 09:38:01 +01:00
retrooper 43e5e0200a small packetevents cleanups 2021-01-19 18:50:48 +01:00
retrooper 7906ac7fa9 updated 2021-01-18 22:05:45 +01:00
terrarier2111 706f5331b6 Renamed field properly and improved other stuff 2021-01-18 12:34:44 +01:00
retrooper 3e13ea6aaa Merge remote-tracking branch 'origin/dev' into dev 2021-01-18 08:17:24 +01:00
retrooper fb13834048 HANDLER_NAME is now a static variable 2021-01-18 08:17:05 +01:00
retrooper 3e8bd7f649 Merge pull request #92 from LIWKK/patch-19
* Removed debugging mark
2021-01-17 15:55:19 +01:00
Johannes dfc898e0bf * Removed debugging mark 2021-01-17 16:50:15 +02:00
retrooper 38fc0cf4be Merge pull request #91 from LIWKK/patch-18
mSpigot support
2021-01-17 15:46:00 +01:00
Johannes 7204b85664 * Better try catch, it'll always be a or getEntity 2021-01-17 16:33:49 +02:00
retrooper c0642a69a1 Attempt to fix alleged 1.7.10 incompatibilities, possibly a redundant commit 2021-01-17 15:14:55 +01:00
retrooper 251e01f6e7 clientversion resolving caching 2021-01-16 14:10:19 +01:00
retrooper 612a7b50cf clientversion small optimization 2021-01-16 13:49:17 +01:00
retrooper c4d04d10d7 Moved Direction and Hand 2021-01-16 13:27:59 +01:00
retrooper e87bfe0ef9 Merge pull request #88 from Tecnio/dev
Added 3 wrappers
2021-01-16 10:39:30 +01:00
Tecnio 6d87a03412 Added Becaon wrapper 2021-01-16 12:20:37 +03:00
Tecnio 13bea01eac Added ItemName and PickItem wrappers 2021-01-16 12:00:53 +03:00
retrooper 9a8126cc1e WrappedPacketInTeleportAccept wrapper created by Tecnio
Added the WrappedPacketInTeleportAccept wrapper to the API
2021-01-16 09:07:13 +01:00
retrooper 45f705e351 stop shading plib 2021-01-16 09:04:49 +01:00
Tecnio 1c3577a5e7 Added the WrappedPacketInTeleportAccept wrapper to the API 2021-01-16 09:30:28 +03:00
retrooper a2aedf680a Direction util issues fixed 2021-01-15 22:54:48 +01:00
retrooper 14cfb6b8c5 clientversion small improvement 2021-01-15 20:42:25 +01:00
retrooper 5e98e8a192 fixed pom,xml 2021-01-15 18:00:37 +01:00
retrooper bb65610e74 PacketEventsSettings javadoc updated,
Direction is now a class
2021-01-15 16:32:10 +01:00
retrooper 19ccfb87e3 Merge remote-tracking branch 'origin/dev' into dev 2021-01-15 09:15:58 +01:00
retrooper 514298b942 * Use ProtocolLib if it is available (ONLY IF THE INJECTION IS A LATE INJECTION) 2021-01-15 09:15:46 +01:00
retrooper b59f0c5613 GitBook: [master] 2 pages modified 2021-01-14 22:17:48 +00:00
retrooper 267480b563 Redundant as we have a wiki page for this 2021-01-14 18:16:35 +01:00
retrooper a50a5f8f89 unwanted 2021-01-14 18:16:19 +01:00
retrooper f06cd69b27 * Project code cleanup
* Concurrent modification exceptions when accessing entities in some wrappers FIXED
2021-01-13 20:01:36 +01:00
retrooper c0bf7f7069 * WrappedPacketOutChat(BaseComponent,ChatPosition,UUID) created, WrappedPacketOutChat.Util removed 2021-01-12 22:12:48 +01:00
retrooper d884c5324d * WrappedPacketOutWorldParticles attempt
* ClientVErsion#isResolved
2021-01-12 21:27:06 +01:00
retrooper 16caeeee89 UpdateChecker code duplication removed 2021-01-12 12:19:02 +01:00
retrooper 17e5d84907 Events cleaned up a bit, using OOP and PostPlayerInjectEvent#isAsync added 2021-01-11 18:12:50 +01:00
retrooper fe4037b850 Cleaned up PacketTypeClasses 2021-01-10 09:22:25 +01:00
retrooper 564f65d2d2 Reinject a tick later if we fail,
and log the error if the second injection fails
2021-01-10 09:18:41 +01:00
retrooper 2a944d9376 back to official tiny attempt 2021-01-09 20:06:20 +01:00
retrooper 3dc1bbc671 back to official tiny attempt 2021-01-09 20:05:50 +01:00
retrooper 1a141b114e Even quicker channel caching 2021-01-09 19:24:26 +01:00
retrooper f9e7589d87 PlayerInjectEvent no longer requires channel as an argument 2021-01-09 19:08:21 +01:00
retrooper f77ab58b3b Channel cache a bit earlier in the early injector 2021-01-09 19:02:51 +01:00
retrooper a3e744d883 Injectors cleanup 2021-01-09 18:57:16 +01:00
retrooper 8680f0f43b Update NMSUtils.java 2021-01-09 16:49:13 +01:00
retrooper a981caa386 EventManagerDynamic fix attempt 2021-01-08 21:13:58 +01:00
retrooper 06644f5fe6 EventManagerDynamic#registerListener bug fix 2021-01-08 20:57:24 +01:00
retrooper bcb79a0ac5 Fixed clientversion in PostPlayerInjectEvent 2021-01-08 16:34:58 +01:00
retrooper b6c48d95db * Tiny optimizations to EventManagerLegacy 2021-01-08 16:25:54 +01:00
retrooper f28092bccb * EventManagerDynamic optimizations (WARNING, registering listeners is not thread safe)
* TurboSpigotUtils (I am developing a paper fork, thinking of optimizaitons I can give packetevents users using the spigot :D )
2021-01-08 16:16:11 +01:00
retrooper a566b6f8cb Cleaned up the injection systems.
Now using interfaces to help cleanup the injectors.
2021-01-07 22:40:25 +01:00
terrarier2111 ba7e178cb1 Cleaned up WrappedPacket 2021-01-07 08:03:48 +01:00
retrooper b88ac0191e Fixed/prevented concurrent modifications when a wrapper loads (on first usage) or when wrapper reads a field(looking into this later) 2021-01-06 22:06:17 +01:00
retrooper f864eeb646 * WrappedPacketOutChat.Util.createHoverMessagePacket(UUID, BaseComponent) :) 2021-01-05 21:44:17 +01:00
retrooper cc2f810be3 * Before last attempt to fix small bug fix for WrappedPacketOutChat.Util 2021-01-05 21:25:17 +01:00
retrooper d41da16c56 * Small bug fix to WrappedPacketOutChat.Util 2021-01-05 21:14:10 +01:00
retrooper 9d3390b1bb WrappedPacketOutChat.Util.createHoverMessagePacket method created for simpler hovering message usage without dealing with JSON 2021-01-05 21:05:16 +01:00
retrooper 3fe96333e1 * WrappedPacketOutChat.Util created 2021-01-05 19:51:08 +01:00
retrooper a17c782c2e * WrappedPacketInSetCreativeSlot#setItemStack(ItemStack) created
* PostPlayerInjectEvent now called async again, but similar approach to last commit (EXPERIMENTAL)
2021-01-05 18:33:18 +01:00
retrooper 2f9a2ce435 Fix WrappedPacketInSetCreativeSlot (UNTESTED WRAPPER) 2021-01-05 10:05:46 +01:00
retrooper d78776be6f * Attempt to fix keepalives and transactions sending 2021-01-05 10:00:21 +01:00
retrooper e23d1a87f6 Merge branch 'dev' of https://github.com/retrooper/packetevents 2021-01-05 09:56:49 +01:00
retrooper b27f86c073 * Now loading status server-bound packet type IDs and login client-bound packet type IDs 2021-01-05 09:56:14 +01:00
retrooper 2a5f5448a4 Merge pull request #86 from NikV2/master
Added wrapper for set creative slot
2021-01-05 01:50:41 +01:00
Nik c84472270e Added wrapper for set creative slot 2021-01-05 02:41:50 +02:00
retrooper e3b667d5b2 WrappedPacketInUseEntity hopefully fixing bugs for 1.7.10 trash modified spigot users xd 2021-01-03 21:13:59 +01:00
retrooper 7079c50deb WrappedPacketOutBlockChange#WrappedPacketOutBlockChange(int, int, int, World) constructor now works 2021-01-03 16:25:04 +01:00
retrooper b3e07b9188 * WrappedPacketInSpectate created 2021-01-03 13:16:40 +01:00
retrooper 41427d8698 * WrappedPacketInEnchantItem wrapper created 2021-01-03 11:53:05 +01:00
retrooper 6e2177e27c * NMSUtils bug fix 2021-01-02 21:59:04 +01:00
retrooper 25bba6e306 Early and Late channel injector issues fix attempt 2021-01-02 21:52:29 +01:00
retrooper 64c0c79edd * Cleaned up all files
* WrappedPacketOutBlockChange sendable FINISHED(UNTESTED, EXPERIMENTAL)
2021-01-02 18:50:24 +01:00
terrarier2111 9f6e79cb16 Improved performance of ClientVersion#isPreRelease 2021-01-02 18:34:57 +01:00
retrooper 917959743e * PostPlayerInjectEvent small bug fixes
* ClientVersion#isPreRelease added
2021-01-02 15:54:28 +01:00
retrooper 577660b58c * small temp fix for the shaders 2021-01-01 22:26:07 +01:00
retrooper 4377d85a05 * WrappedPacketOutBlockChange progress (UNFINISHED)
* WrappedPacketOutEntityMetadata progress (UNFINISHED)
* PostPlayerInjectEvent not being called fix ATTEMPT
2021-01-01 22:20:53 +01:00
terrarier2111 fb8fcf7d50 Cleaned up EventManagerDynamic 2021-01-01 21:19:14 +01:00
retrooper faf8e4664c * EventManagerDynamic using HashSets for the listeners in the map 2021-01-01 21:16:11 +01:00
retrooper 7e52b8e979 Merge remote-tracking branch 'origin/dev'
# Conflicts:
#	src/main/java/io/github/retrooper/packetevents/PacketEventsPlugin.java
#	src/main/java/io/github/retrooper/packetevents/packetwrappers/play/out/custompayload/WrappedPacketOutCustomPayload.java
2021-01-01 21:13:22 +01:00
retrooper 55ab2fa043 * WrappedPacketOutBlockChange wrapper created 2021-01-01 21:13:10 +01:00
terrarier2111 560a1b5e2f Fixed my stupidity 2021-01-01 20:46:54 +01:00
terrarier2111 db61b202c0 Merge branch 'dev' of https://github.com/retrooper/packetevents
 Conflicts:
	src/main/java/io/github/retrooper/packetevents/PacketEventsPlugin.java
2021-01-01 20:43:58 +01:00
terrarier2111 ebc697dd89 Cleaned up ByteBufUtil 2021-01-01 20:42:11 +01:00
retrooper 784d99c03d * ClientVersion resolving issues fix attempt 2020-12-31 19:24:30 +01:00
terrarier2111 d48ab480c9 Fixed a bug in ByteBufUtil 2020-12-31 18:35:58 +01:00
terrarier2111 052f1108c3 Took executor service type into account when naming threads 2020-12-31 16:35:25 +01:00
retrooper b42f5b68ca * PacketEvents executing listeners(when enabled in the settings and in the listener) on its own threads REMOVED due to event order processing incompatibilities, event cancelling incompatibilities, packet modification incompatibilities
* Attempted to fix the client version not being resolved
2020-12-24 13:01:09 +01:00
retrooper 3926c48114 * PacketEventsSettings#injectAndEjectThreadCount(int) and PacketEventsSettings#packetProcessingThreadCount(int) should now affect 2020-12-24 12:12:33 +01:00
terrarier2111 0a5f2d2b8e Added custom ThreadFactories to internal thread pools 2020-12-24 01:15:01 +01:00
retrooper 57f80b5196 minor change to readme 2020-12-21 23:50:55 +01:00
retrooper 7ac3b7e65b minor change 2020-12-21 23:49:24 +01:00
retrooper 4ce2f88d4a minor correction 2020-12-21 23:47:54 +01:00
retrooper 374025f5bf small changes 2020-12-21 23:47:10 +01:00
retrooper 450da1ce3f few corrections 2020-12-21 23:44:55 +01:00
retrooper 4a5cfd141a small correction 2020-12-21 23:40:23 +01:00
retrooper 56ea329b5c small corrections 2020-12-21 23:39:34 +01:00
retrooper 3104cda55e readme is a bit more professional now 2020-12-21 23:35:19 +01:00
retrooper 111b28ba7e Update README.md 2020-12-21 22:24:03 +01:00
retrooper 7754a6e183 Update README.md 2020-12-21 22:23:02 +01:00
retrooper 2d2063cac2 small bug fix 2020-12-21 20:07:09 +01:00
retrooper 494edfa095 fixed wrapper loading issues for sent wrappers 2020-12-21 19:40:46 +01:00
retrooper e3a9d4e6de * SubclassUtil#getSubClass potential NPEs prevented
* WrappedPacketInResourcePackStatus wrapper created
* WrappedPacketInTrSel (Trade Select) wrapper created
* WrappedPacketOutCamera wrapper created (and sendable)
* WrappedPacketOutUpdateTime wrapper created (and sendable)
2020-12-21 18:49:26 +01:00
retrooper c8f766735a * Player injection failures bug fix(early injector)
* Player disconnected bug fix

* PacketListenerDynamic#getThreadMode added, and added PacketListenerThreadMode to the PacketListenerDynamic constructor to decide what threads PE should use to process your listener
* PacketType ID resolving on all events bug fixed
2020-12-21 16:33:10 +01:00
terrarier2111 83899c8fac Removed redundant clone call in ServerVersion$reverse 2020-12-20 20:00:26 +01:00
retrooper 99d56a520e * Redundant imports removed 2020-12-20 15:31:09 +01:00
retrooper c1b2caad8b * Debugs removed 2020-12-20 15:30:48 +01:00
retrooper 53cd0feba3 * Documented all the early injectors, some internal utils, all non internal utils
TODO: document all internal utils, late injectors, packettype and packettypeclasses.

* public WrappedPacket(Object packet) -> public WrappedPacket(NMSPacket packet)

Only will affect dynamic wrapper system users.
WrappedPacket myWrapper = new WrappedPacket(object); -> WrappedPacket myWrapper = new WrappedPacket(new NMSPacket(object));
2020-12-20 15:28:51 +01:00
retrooper e83945d875 Update README.md 2020-12-20 06:45:38 +01:00
retrooper 31def9a711 fix to sending wrappedpacketoutkeepalive 2020-12-19 13:03:02 +01:00
retrooper b4514dca63 * Debug code removed 2020-12-18 19:00:46 +01:00
retrooper add5f9853d * WrappedPacketOutOpenWindow NOT SENDABLE YET, attempt
* MainExample.java -> PacketEventsPlugin
* EarlyChannelInjector documented
2020-12-18 19:00:14 +01:00
retrooper 419c08780f * PacketEvents.get().getPlayerUtils().getClientVersion(Player) won't return the server version(if viaversion, protocolsupport or other similar plugins are present), to be sure we return null until we get a response from their APIs 2020-12-17 20:55:33 +01:00
retrooper d39b50b02c Merge pull request #85 from LIWKK/patch-17
Added NamedEntitySpawn
2020-12-17 16:27:22 +01:00
Johannes 2d8b2ae523 Added NamedEntitySpawn 2020-12-17 17:09:19 +02:00
terrarier2111 3e5366f374 Improved caching in EventManagerDynamic 2020-12-16 23:37:08 +01:00
retrooper 2b10325f7f wrappedpacketoutresourcepacksend now working on 1.7.10 2020-12-16 23:00:43 +01:00
retrooper 4c5fdf6dce Update WrappedPacketOutResourcePackSend.java 2020-12-16 22:51:37 +01:00
retrooper 8a8616c124 wrappedpacketoutresourcepacksend syntax error fix 2020-12-16 22:42:50 +01:00
retrooper 8095e506e4 bug fix attempt for 1.7.10 on resourcepacksend wrapper 2020-12-16 22:37:41 +01:00
retrooper e067208755 Named Entity Spawn Packet ID by LIWKK 2020-12-16 18:26:46 +01:00
Johannes f9bf042178 Added Named entity spawn 2020-12-16 19:12:22 +02:00
retrooper 23db4a6506 * PacketEventPriority is now an enum
* WrappedPacketOutResourcePackSend wrapper(sendable) added
* WrappedPacketInCloseWindow wrapper added
* WrappedPacketOutCloseWindow wrapper(sendable) added
2020-12-15 17:33:39 +01:00
retrooper 2e0468ed74 * Should fix issues with multiple packetevents shades incompatibilities and they will all use ONE of the shaded ones.
The one that loaded as a plugin the first will be the selected one.

* Moved to maven-shade-plugin for shading, no longer using the outdated method
2020-12-15 16:40:15 +01:00
retrooper e932fb5707 * Lots and lots of documentation, all that is left is the injector classes, PacketType.java, All wrappers, PacketEventsSettings.java, UpdateChecker.java, all utilities and the PacketEvents.java class. 2020-12-13 16:19:41 +01:00
retrooper 337551119b * Fixed duplicate post player injection event calls 2020-12-13 11:50:52 +01:00
retrooper 7ec7336b9a Ton of refactoring
* PacketReceiveEvent.java -> PacketPlayReceiveEvent
* PacketSendEvent.java -> PacketPlaySendEvent

* PacketLoginEvent.java -> PacketLoginReceiveEvent & PacketLoginSendEvent

* PacketStatusEvent.java -> PacketStatusReceiveEvent & PacketStatusSendEvent

* PacketListenerDynamic#onPacketReceive -> PacketListenerDynamic#onPacketPlayReceive
* * PacketListenerDynamic#onPacketSend -> PacketListenerDynamic#onPacketPlaySend

* PacketListenerDynamic#onPacketLogin -> PacketListenerDynamic#onPacketLoginReceive & PacketListenerDynamic#onPacketLoginSend

* PacketListenerDynamic#onPacketStatus -> PacketListenerDynamic#onPacketStatusReceive & PacketListenerDynamic#onPacketStatusSend

* PacketListenerDynamic#onPostPacketReceive -> PacketListenerDynamic#onPostPacketPlayReceive
* PacketListenerDynamic#onPostPacketSend -> PacketListenerDynamic#onPostPacketPlaySend
2020-12-13 11:13:18 +01:00
retrooper a136729532 Merge remote-tracking branch 'origin/dev' into dev 2020-12-12 16:11:01 +01:00
retrooper 2da41d03ef * PostPlayerInjectEvent#getClientVersion now supports ViaBackwards and ViaRewind as they take longer to resolve client version, this results in the PostPlayerInjectEvent being called later 2020-12-12 16:10:40 +01:00
terrarier2111 3c65754fca Merge pull request #81 from retrooper/terrarier2111-patch-1
Create codeql-analysis.yml
2020-12-11 22:42:51 +01:00
terrarier2111 688931aa7e Create codeql-analysis.yml 2020-12-11 22:41:43 +01:00
terrarier2111 e5338caa29 Improved some stuff 2020-12-09 21:00:07 +01:00
retrooper b45bc73396 * Fixed bugs
* PacketReceiveEvent#getPlayer and PacketSendEvent#getPlayer are annotated with @NotNull now.
2020-12-09 20:28:04 +01:00
retrooper 918d5b89ef Merge remote-tracking branch 'origin/dev' into dev 2020-12-09 18:50:03 +01:00
retrooper 9f06d583ab * Test commit 2020-12-09 18:49:23 +01:00
retrooper 1c87cf7982 Created FUNDING.yml 2020-12-09 18:39:06 +01:00
retrooper 75f7eaf74f Created FUNDING.yml 2020-12-09 18:38:40 +01:00
retrooper a4f4163412 Created feature issue template 2020-12-09 15:19:50 +01:00
retrooper ef529b7949 Create feature issue template 2020-12-09 15:19:11 +01:00
retrooper 6e52acb677 Added Bug report template 2020-12-08 22:52:08 +01:00
retrooper 826695a677 Update bug template 2020-12-08 22:49:07 +01:00
retrooper e403469e52 Contributor Code of Conduct File added
Create CONTRIBUTOR_CODE_OF_CONDUCT.md
2020-12-08 22:32:04 +01:00
retrooper 084acb8894 Create CONTRIBUTOR_CODE_OF_CONDUCT.md 2020-12-08 22:31:29 +01:00
retrooper 948e260460 Merge remote-tracking branch 'origin/dev' into dev 2020-12-08 08:46:57 +01:00
retrooper f4efdea4b2 * WrappedPacketInAbilities now loads
* ClientVersion is removed when a client leaves.
2020-12-08 08:46:24 +01:00
terrarier2111 1cb7730c3c Improved some stuff 2020-12-07 19:59:21 +01:00
terrarier2111 5b558b50e2 Merge branch 'dev' of https://github.com/retrooper/packetevents
 Conflicts:
	src/main/java/io/github/retrooper/packetevents/utils/nms/NMSUtils.java
2020-12-07 19:48:06 +01:00
retrooper 00986f2341 * WrappedPacketInAbilities bug fix for 1.16 2020-12-07 18:18:35 +01:00
retrooper b83e8887ff * small bug fixes 2020-12-07 18:11:25 +01:00
retrooper 7bfadfa233 dev build 9 for 1.7.9
* pretty stable, all known bugs fixed
2020-12-07 17:58:35 +01:00
retrooper a3f75f1237 *nms util cache fix 2020-12-07 17:46:25 +01:00
retrooper 1e21d3f6ea * Bug fix with cached information not being deleted when a player quits
* All events having to do with a PACKET has the #getSocketAddress() method returning an InetSocketAddress.java
2020-12-07 17:44:35 +01:00
terrarier2111 73d0c6ea7d Readded caching for internal method 2020-12-07 16:04:58 +01:00
retrooper 278b27da6b * Bugs fixed on newer versions with the EarlyChannelInjector
* NMSUtils fixed some bugs
* PacketListenerDynamic new constructor, default priority is PacketEventPriority.NORMAL
* Reflection bugs fixed
2020-12-07 15:01:46 +01:00
retrooper fbb0692f80 Merge remote-tracking branch 'origin/dev' into dev 2020-12-06 09:59:46 +01:00
retrooper f4307ab524 * ProtocolLib support REMOVED
* PacketEventsSettings#useProtocolLibIfAvailable(boolean) removed
* Channel ejection fixed
2020-12-06 09:59:16 +01:00
terrarier2111 cafda14c89 Improved and cleaned up NMSUtils 2020-12-04 20:20:08 +01:00
terrarier2111 2e7e81be9f Improved NMSUtils 2020-12-04 20:01:05 +01:00
terrarier2111 83b5697d40 Renamed Direction method and optimized imports 2020-12-04 19:19:11 +01:00
terrarier2111 e0a1c39e54 Improved some stuff in Direction enum 2020-12-04 19:14:01 +01:00
retrooper 6608203ddc * Reflection#getMethod StackOverFlow fix 2020-12-04 18:08:58 +01:00
retrooper 1f811ba90e * Hotfix for ProtocolLib Support 2020-12-04 18:03:05 +01:00
retrooper 70f33f56e8 * Fix WrappedPacketInUseEntity 2020-12-04 17:59:30 +01:00
retrooper 39c2a157c4 * Quick fix to ProtocolLib support 2020-12-04 17:54:08 +01:00
retrooper 761352cbbc * PROTOCOLLIB LISTENER USAGE WHEN AVAILABLE SUPPORT ATTEMPT
This is untested.

* PacketLoginEvent#getChannel replaced with PacketLoginEvent#getSocketAddress
Same with PacketStatusEvent

* ClientVersion cached with a InetSocketAddress instead of netty channel
2020-12-04 17:39:46 +01:00
retrooper 44016e1a03 * Direction small changes
* Vector3i.INVALID created
* ClientVersion small changes
2020-12-04 11:12:24 +01:00
retrooper a2233c434a * Minor documentation change appended to NMSPacketEvent's documentation 2020-12-04 10:31:55 +01:00
retrooper fb4863cbe9 * Appended to NMSPacketEvent's documentation 2020-12-04 10:22:50 +01:00
retrooper e60d50a957 * Cleaned up all events to do with packets reducing documentation duplication 2020-12-04 10:19:42 +01:00
retrooper c53d69d03c * PacketType and PacketTypeClasses refactored issues fixed 2020-12-04 09:53:38 +01:00
retrooper 9e294d7185 * More documentation, a lot more to go :c 2020-12-04 09:33:13 +01:00
retrooper e9cd983131 * Nullable.java removed
* Direction minor optimization
* Documented a lot of files. More documentation to come.
2020-12-03 19:35:37 +01:00
terrarier2111 e6798d4901 Cleaned up some more reflect code 2020-12-03 18:38:58 +01:00
terrarier2111 1c0e8cdd91 Cleaned up some more reflect code 2020-12-03 18:02:23 +01:00
terrarier2111 a3f9fc9cb3 Fixed reflect read indexes 2020-12-03 15:57:32 +01:00
retrooper 808bbabff1 * Hand enum added to WrappedPacketInUseEntity
* Vector3d target vector added to WrappedPacketInUseEntity
* WrappedPacket has been cleaned up and optimized(basically all wrappers)
We no longer cache all fields, we only cache all fields that are accessed...
* WrappedPacketInTabComplete created only supporting the #getText() method as the text field is the only field that doesn't get removed across 1.7.10->1.16.4
2020-12-03 15:12:07 +01:00
terrarier2111 4a5e579256 Minor improvements 2020-12-03 14:01:05 +01:00
retrooper 7c74d22700 * PacketManager.java renamed to PacketHandlerInternal and moved. 2020-12-03 09:17:36 +01:00
retrooper cf11930f05 * Code optimizations(removal of redundant imports, ...) 2020-12-02 10:17:08 +01:00
retrooper f814d20cbb * Fixed bugs to do with the EarlyChannelInjector 2020-12-02 10:08:27 +01:00
retrooper 6313fca6fa NMSUtils compilation error fixed 2020-12-02 01:13:58 +01:00
retrooper f0bcfc62c8 NMSUtils Minecraft Server Instance bug fix
Only failed on newer minecraft versiobs
2020-12-02 01:02:10 +01:00
retrooper cf930c6013 * Fixed bugs 2020-12-01 16:55:48 +01:00
retrooper 052a65f6ef * PacketManager micro optimization with the channel caching
* Player ejected when they leave
2020-12-01 16:12:42 +01:00
retrooper 4078418376 * PostPlayerInjectEvent is now called BEFORE the first PacketReceive/Send event, will ALWAYS only be called on successful injections and is called async(due to me already being in an async context). 2020-12-01 15:32:14 +01:00
retrooper 68e8d4f788 Merge remote-tracking branch 'origin/dev' into dev
# Conflicts:
#	src/main/java/io/github/retrooper/packetevents/packetmanager/tinyprotocol/TinyProtocol7.java
#	src/main/java/io/github/retrooper/packetevents/packetmanager/tinyprotocol/TinyProtocol8.java
2020-12-01 12:07:58 +01:00
retrooper be6e0ce222 * TinyProtocol removed, wrote my own similar version of it
* All play wrappers refactored to io.github.retrooper.packetevents.packetwrappers.play.(in/out)
* Vector3d utility class created and added to many wrappers that have to do with a position or delta(doubles).
2020-12-01 12:05:15 +01:00
terrarier2111 67dd097a0f Renamed constants properly 2020-11-30 15:12:07 +01:00
terrarier2111 ed9007da44 Improved caching 2020-11-30 14:58:04 +01:00
terrarier2111 81632cdf6d Revert "Improved caching"
This reverts commit 79c07642
2020-11-30 14:46:04 +01:00
terrarier2111 727e02a235 Revert "Renamed constants properly"
This reverts commit 05a981de
2020-11-30 14:46:00 +01:00
terrarier2111 39e105c69c Revert "Other improvements"
This reverts commit 1a2145b4
2020-11-30 14:45:51 +01:00
terrarier2111 1a2145b413 Other improvements 2020-11-30 14:44:04 +01:00
terrarier2111 05a981de6e Renamed constants properly 2020-11-30 14:43:51 +01:00
terrarier2111 79c07642a2 Improved caching 2020-11-30 14:39:49 +01:00
retrooper e2352fe3bf *.github file deleted 2020-11-30 14:06:55 +01:00
retrooper 2d9ac56f2e * Project code cleanup (Unused imports removed, code reformatted...) 2020-11-30 14:03:32 +01:00
retrooper 8e1d70b6be * pom.xml added 2020-11-30 13:15:53 +01:00
retrooper 7c6a675173 * Reverted back to maven
* Optimized dynamic event manager event calls
* WrappedPacketInBlockPlace#getDirection bug fixes
* WrappedPacketInBlockDig#getDirection bug fixes
* PacketEvents static usages reduced, API cleaned up
2020-11-30 13:03:35 +01:00
terrarier2111 feeff01654 Minor improvement 2020-11-29 22:36:32 +01:00
retrooper 0e53005867 CONTRIBUTING information file 2020-11-28 11:34:11 +01:00
retrooper 98b4ee2bac Created CONTRIBUTING.md
Please read this file if you are planning on contributing.
2020-11-28 11:33:29 +01:00
retrooper efc2dc1c54 Update README.md 2020-11-26 10:58:25 +01:00
retrooper 827c974908 * added gradle-wrapper.jar 2020-11-26 10:26:31 +01:00
retrooper 05b9c8efca * added gradle-wrapper.properties 2020-11-26 10:25:04 +01:00
retrooper 42a9745196 * removed gitgnore 2020-11-26 10:11:31 +01:00
retrooper 5a283b7ffa * Moved from maven to gradle.
pom.xml has been removed.
2020-11-26 10:09:01 +01:00
retrooper 59d25df76b Update NMSUtils.java 2020-11-25 19:34:24 +01:00
retrooper c42a00ddcf * WrappedPacketLoginOutCustomPayload load issues fix attempt
* WrapperPacketWriter#writeObject created and implemented in WrappedPacket, WrappedPacket#writeObject
2020-11-25 18:09:50 +01:00
retrooper b3e06caf7c * PEVersion#compare(PEVersion) renamed to PEVersion#compareTo(PEVersion) 2020-11-25 17:55:23 +01:00
retrooper a0b84c0552 * PEVersion cleaned up and optimized and updated its usages 2020-11-25 17:49:31 +01:00
retrooper e8be5eb8ba * PacketEvents.getSettings().injectionFailureMessage(String) can be used to modify the injection failure kick message
* PacketType.Login and PacketType.Status now easier to use
PacketType.Status.Client are the client side status packets and PacketType.Status.Server are the server side status packets, same applies to the Login class.
* WrappedPacketLoginInCustomPayload & WrappedPacketLoginOutCustomPayload bugs fixed

* All login and status wrappers' package locations have been moved

* Small potential bug fix for TinyProtocol async player injection failures
2020-11-25 14:20:02 +01:00
retrooper 2531988a59 * WrappedPacketLoginOutSetCompression is now sendable
* WrappedPacketLoginInCustomPayload has been finished
* WrappedPacketLoginOutCustomPayload created and is sendable
* PacketType.Login.Client and PacketType.Login.Server created for easier usage
* PacketType.Login.Server.SET_COMPRESSION id newly created
2020-11-25 08:52:50 +01:00
retrooper 7204b06870 * PacketEvents.getAPI().getPlayerUtils().sendPacket(NETTY_CHANNEL, SENDABLE_WRAPPER); created
* PacketEvents.getAPI().getPlayerUtils().sendPacket(NETTY_CHANNEL, RAW_NMS_PACKET); created
2020-11-25 07:57:53 +01:00
retrooper 6289543ea5 * PostPlayerInjectEvent now supported in the new event system. 2020-11-24 15:16:09 +01:00
retrooper 6a1ce5e234 * Issues with ClientVersion, when one minecraft instance is on the server and another one on the server list, the one on the server list overwrites the online client's version
* ClientVersion class small cleanup and optimization
2020-11-24 10:04:04 +01:00
retrooper bd1e4e7e6d 1.7.9 release
Update!
2020-11-23 13:00:47 +01:00
retrooper feda5b96b6 * PostPlayerInjectEvent added, called after successful injection 2020-11-23 12:58:54 +01:00
retrooper 809396ff21 1.7.9 release 2020-11-23 12:36:11 +01:00
retrooper 2428487eb1 * UpdateChecker bugs fixed, PEVersion#equals(PEVersion) now works 2020-11-23 08:41:20 +01:00
retrooper df0c769111 * VersionLookupUtils prioritization changed up, 1. ViaVersion, 2. ProtocolLib, 3. ProtocolSupport 2020-11-23 07:45:22 +01:00
retrooper 5e0cd75bb0 attempt to fix protoclsupport/viaversion erroring when asked for protocolversion, but not successful 2020-11-22 17:57:55 +01:00
retrooper b21e6b4a67 * PacketEvents injecting is done with event priority on LOW for late injections, and ClientVersion resolving with HIGH event priority 2020-11-22 17:46:56 +01:00
retrooper bfc3aa7ad8 * PacketEvents.onJoin priority set to HIGHEST 2020-11-22 17:27:19 +01:00
retrooper 72458ddfd2 * PacketEvents failing to inject you and doesn't call any events for your player (RARE BUG) fixed. This bug could only happened if you had injectEarly set to true. 2020-11-22 17:07:21 +01:00
retrooper a8a04b137b * ClientVersion unresolvable on 1.16.3 and 1.16.4 bug FIXED 2020-11-22 16:40:39 +01:00
retrooper 4e11df1fc7 Update EventManagerDynamic.java 2020-11-21 21:19:48 +01:00
Retrooper c3ab35bd6b * reverted to old entity finder util 2020-11-21 13:11:20 +08:00
retrooper af1025da1f caching entity ID im wrappedpacketoutentityteleport now 2020-11-21 04:54:16 +01:00
retrooper f2ce9eacb1 WrappedPacketOutEntityTeleport Entity ID always 0 2020-11-21 04:50:20 +01:00
retrooper 27307e034b Merge branch 'dev' of https://github.com/retrooper/packetevents into dev 2020-11-20 11:00:16 +01:00
retrooper 808357735f * PacketEventsLoadFailureException now includes the cause exception.
* VersionLookupUtils now prioritizes ProtocolSupport over ViaVersion
2020-11-20 10:59:02 +01:00
retrooper ece8b6d395 WrappedPacketOutEntity Entity ID 0 Bug fix 2020-11-20 04:12:22 +01:00
retrooper 8643e14900 WrappedPacketOutEntity Entity ID 0 bug fix 2020-11-20 04:10:49 +01:00
retrooper cbfd52d926 * PacketEvents-Bungee utilities removed and bungee server startup error fix.
* PacketEventsMethodInvokeException now actually includes the cause of the error.
* PacketEventsNMSCachedEntityNotFoundException.java renamed to PacketEventsEntityByIDNotFoundException.java.
* Reflection methods to do with fields DEPRECATED, use the WrappedPacket utility class.
* ClassUtil.getClassSimpleName(Class<?> cls) potential bug fix, if a class was named "null" it would have not cached  do to a string null check.
2020-11-19 17:47:27 +01:00
retrooper e266e43d19 * WrappedPacketOutChat constructor
* pom.xml stopped compiling ProtocolSupport
* All event classes now cache packet ID
2020-11-19 10:00:07 +01:00
retrooper c9d58e08c9 1.7.8 release 2020-11-17 15:34:56 +01:00
retrooper 24eda2b3a5 1.7.8 release
* Official 1.16.4 support
ClientVersion.v_1_16_4, ServerVersion.v_1_16_4 created
* Unfortunately PacketEvents.getSettings().useProtocolLibIfAvailable(boolean) setting most likely won't be coming back
* Bungee client version resolving bug fixed
* Recommended to have ViaVersion, ProtocolSupport or ProtocolLib on your spigot server, as PacketEvents makes use of them to resolve client version ONLY if they are available.
They are required on the spigot server ONLY if you have a bungee network.
* Interruption of PacketEvents.stop() protected
2020-11-17 15:32:37 +01:00
retrooper 38c4f3234d Merge pull request #66 from retrooper/dev
1.7.7 release
2020-11-16 17:55:11 +01:00
retrooper e94b6f24dc 1.7.7 release
* Accessing Entity by ID on servers with more than one world ERROR FIX
* In the WrappedPacketOutChat(String, ChatPosition, UUID) constructor, the String(=message) shouldn't be passed in JSON string format, it can be passed in as an ordinary string message!
Example:
WrappedPacketOutChat packet = new WrappedPacketOutChat("Hello", ChatPosition.CHAT, uuid);
2020-11-16 17:52:37 +01:00
retrooper 85dab8eb7a 1.7.6 release
1.7.6 release
2020-11-15 12:48:42 +01:00
retrooper 5fb8634880 * PacketEventsNMSCachedEntityNotFoundException exception created and is thrown when the cached nms entity isn't found.
WrappedPacketOutBlockChange wrapper TODO
2020-11-15 12:08:42 +01:00
retrooper e551421867 Reverted to old legacy event manager code
* Lower event priorities aren't called before higher ones on the legacy event system.
* PacketEvents.getSettings().useProtocolLibIfAvailable temporarily removed, currently unsupported so has been removed.
It is recommended to slowly update to the new event system, the current might get cut off soon!
2020-11-15 11:27:19 +01:00
retrooper 3dfb1ce0b5 * EventManagerLegacy isn't working, about to revert to the old event manager code, keeping this just incase.
When joining the server I instantly get kicked for "Disconnected".
2020-11-15 11:08:25 +01:00
retrooper aca321c332 Small bug fix for event systems
* Using MONITOR event priority now works
2020-11-15 10:36:21 +01:00
retrooper e0f4891a72 * Legacy and Dynamic event system ATTEMPT
API wise working, contains debugs, but UNTESTED!!!
The legacy(last event listener system) has been deprecated!
2020-11-15 10:27:31 +01:00
retrooper 08b207d80a Cleaner errors with PacketEvents
* PacketEventsLoadFailureException exception thrown if PacketEvents fails to load.
* PacketEventsMethodAccessException exception thrown if PacketEvents fails to access a method of a PacketListener for invoking.
* PacketEventsMethodInvokeException exception thrown if an exception is thrown from the invoked method in the PacketListener.
2020-11-15 08:43:29 +01:00
Retrooper 6121349a6f bug fixes
* resolving clientversion on bungee servers issue fixed
* read me cleaned up
* Via and ProtocolSupport utils removed
2020-11-15 15:09:46 +08:00
Retrooper 2b58a9ad97 small bug fixes
* Bungee channel name changed from "packetevents" to "packetevents:channel"
* NPE when accessing player version with viaversion onJoin sometimes
2020-11-14 00:44:55 +08:00
Retrooper 8e922a7676 Merge branch 'dev' of https://github.com/retrooper/packetevents
 Conflicts:
	src/main/java/io/github/retrooper/packetevents/example/MainExample.java
2020-11-13 23:45:49 +08:00
Retrooper 7967b6851f a 2020-11-13 23:42:55 +08:00
retrooper 18b37abf5b Merge pull request #64 from LIWKK/patch-13
Return 0 instead of -1 in blockplace wrapper 1.9
2020-11-11 22:25:49 +01:00
retrooper 53b713f574 Merge pull request #63 from LIWKK/patch-12
Return 0 instead of -1 in blockplace wrapper 1.8
2020-11-11 22:24:58 +01:00
Johannes 655f162272 Return 0 instead of -1 to not fuckup (1.9) 2020-11-11 23:22:01 +02:00
Johannes 686c50a7bb Return 0 instead of -1 to not fuckup other things. 2020-11-11 23:21:14 +02:00
retrooper a88e95e116 Merge pull request #62 from retrooper/dev
1.7.5 release
2020-11-09 07:21:41 +01:00
retrooper 7c583bf8ec 1.7.5 release 2020-11-09 07:21:06 +01:00
retrooper c3911483a5 Fix of WrappedPacketInBlockPlace returning -1 on 1.8 servers (By @LIWKK) 2020-11-08 22:12:03 +01:00
Johannes f37d7f4040 Fixxxxx 2020-11-08 23:10:14 +02:00
retrooper c39c9691a8 * Attempt to fix a bug to do with block place on 1.9+ 2020-11-08 17:39:11 +01:00
retrooper a1c591a616 Merge pull request #60 from retrooper/dev
1.7.4 Release
2020-11-08 15:17:16 +01:00
retrooper 999e21bf77 1.7.4
* PacketEvents.getSettings().packetHandlingThreadCount(int) setting added, basically lets you decide how many threads packetevents should use when asynchronously injecting/ejecting players, processing packets(packetevents' end) and event calling(processing on your end).
PacketEvents' current default settings are the most recommended settings.
Having more than one thread doing all that processing might cause you (or packetevents, as that feature hasn't been tested that much) some concurrency issues where multiple threads are accessing/modifying the same data at the same time!
2020-11-08 15:15:19 +01:00
retrooper c8e5a37472 Bug fix
* paper(and it's forks) 1.16 bug fix(unsure if this bug also existed in spigot or lower versions)
2020-11-08 14:44:02 +01:00
retrooper c6fffca506 Bug fixes
* WrappedPacketInUpdateSign error when reading Text Lines fixed
* WrappedPacketOutHeldItemSlot wrapper created
2020-11-08 12:33:46 +01:00
retrooper f1206a1fc6 * Block dig wrapper fixed
* Update sign wrapper fixed
* NPEs in Packet Receive/Send event fixed
2020-11-05 20:52:44 +01:00
terrarier2111 29a4280b50 Improved MUCH 2020-11-04 18:29:00 +01:00
retrooper 552f63a27f Merge pull request #59 from retrooper/dev
1.7.3 release
2020-11-03 09:54:11 +01:00
retrooper 612608181d 1.7.3 release
* We no longer eject players when they exit
* Fixed error when you leave the server
* No reload support with inject early setting enabled
2020-11-03 09:51:57 +01:00
retrooper 8e652f0c44 Merge pull request #58 from retrooper/dev
1.7.2 Release
2020-11-02 16:27:54 +01:00
retrooper 4a3e89d713 1.7.2 release 2020-11-02 16:20:13 +01:00
retrooper 3dd6d1e0b9 Vehicle move wrapper created(fyi isn't present on 1.7.10 and 1.8, I'm unsure about 1.9 but 1.12+ has it) 2020-11-02 16:18:46 +01:00
retrooper f42e1ad71d PacketType.Status.SERVER_INFO supported, fixed a NPE for PacketSendEvent/PacketReceiveEvent, im unsure if its clientbound or serverbound, but no matter what, its fixed 2020-11-01 17:13:47 +01:00
retrooper b44f36185a PacketType.Status.SERVER_INFO supported, fixed a NPE for PacketSendEvent 2020-11-01 17:11:52 +01:00
retrooper 1621adad02 Cleanup 2020-11-01 15:56:50 +01:00
retrooper d2682242ae Merge pull request #57 from retrooper/dev
PacketEvents 1.7.1 Release
2020-11-01 08:06:38 +01:00
Retrooper 0b26fe3266 1.7.1 release 2020-11-01 15:03:50 +08:00
Retrooper 0354ddf765 Merge branch 'dev' of https://github.com/retrooper/packetevents 2020-11-01 14:58:49 +08:00
retrooper 82e0d01c29 MainExample empty space removed 2020-11-01 07:56:22 +01:00
retrooper 57b68f185c Early player login bug fix
- This bug occurs when a user joins while the minecraft server is still starting up and spams out errors and PacketEvents fails to inject the player.
2020-10-31 23:46:11 +01:00
retrooper 8f9b8c0433 * Early server login fix second attempt 2020-10-31 22:46:39 +01:00
retrooper 27ced0fc36 * Early server login fix attempt 2020-10-31 22:11:25 +01:00
retrooper 1d383a7d37 Merge pull request #56 from retrooper/dev
1.7 PacketEvents release
2020-10-30 13:58:47 +01:00
retrooper ae81019fd8 * JavaDoc errors fixed 2020-10-30 12:54:27 +01:00
retrooper d05019adac * Entity Status and Experience wrapper CREATED, both sendable 2020-10-30 12:00:49 +01:00
retrooper 1d45ec916c Merge remote-tracking branch 'origin/dev' into dev 2020-10-30 10:46:10 +01:00
retrooper 7328fc9381 * NPE and exception with WrappedPacketOutExplosion on 1.7.10 fixed
* PlayerInjectEvent and PlayerEjectEvent now fire
* PacketEventsSettings.injectEarly is enabled by default now
2020-10-30 10:42:57 +01:00
terrarier2111 89f21b927f Removed debug 2020-10-29 19:12:27 +01:00
terrarier2111 04c33929cd Update TinyProtocol7.java 2020-10-29 18:27:36 +01:00
terrarier2111 fa2aab5e74 Update TinyProtocol8.java 2020-10-29 18:26:08 +01:00
retrooper ebc81c0986 * Fixed all bugs in WrappedPacket
* Fixed TinyProtocol bugs, cleaned up all the packet managers.
* ClientVersion resolvable without ANY dependencies :)
We now use TinyProtocol fork of DeprecatedLuke, but I heavily modified it to fit for PacketEvents.
* WrappedPacketOutExplosion NPE fixed
* ClientVersion.UNRESOLVED constant created, UNKNOWN and UNKNOWN_BUNGEE_SERVER removed. If we can't resolve it, we just return UNRESOLVED
* PacketEvents auto resolve client version setting removed, it would default to the server version if one cannot resolve the client version, to avoid any falses we will return UNRESOLVED enum constant if we cannot resolve
* We prioritize accessing the protocol version from other dependencies rather than caching it ourselves. If none are available, we will cache it ourselves.
2020-10-29 18:15:05 +01:00
retrooper c6348e0dc9 * Syntax error in WrappedPacketOutAnimation fixed, 2020-10-29 14:47:54 +01:00
retrooper f84d3000f4 * Syntax erorr in WrappedPacketOutEntityVelocity fixed 2020-10-29 14:45:05 +01:00
retrooper 7ddfc681cc * Bug in WrappedPacket fixed ;/ 2020-10-29 14:40:13 +01:00
retrooper cdb67c80c0 Merge remote-tracking branch 'origin/dev' into dev 2020-10-29 14:36:55 +01:00
retrooper ed78c9d746 TinyProtocol update!
This is a dev build, still requires testing!
* PacketLoginEvent created
* PacketStatusEvent created
* WrappedGameProfile utility created
* ClassUtil now caches the class name and not the class itself
* We now have a setting to use my modified version of TinyProtocol:
PacketEvents.getSettings().injectEarly(boolean)
* PacketType.Login.x and PacketType.Status.x packet byte IDS created
* All new login wrappers created:
 WrappedPacketLoginDisconnect, WrappedPacketLoginHandshake, WrappedPacketLoginInCustomPayload(roughly since 1.13.2), WrappedPacketLoginInStart, WrappedPacketLoginOutEncryptionBegin, WrappedPacketLoginInEncryptionBegin, WrappedPacketLoginOutSetCompression(roughly since 1.8), WrappedPacketLoginOutSuccess
 * All new status wrappers created:
 * WrappedPacketStatusPing, WrappedPacketStatusPong
2020-10-29 14:36:03 +01:00
terrarier2111 b7128d5f33 Update BungeePluginMessageListener.java 2020-10-28 19:41:46 +01:00
terrarier2111 ba0b32ffdb Code cleanup 2020-10-28 17:43:51 +01:00
retrooper 3b420a4c28 * Util Vector3i class created
* WrappedPacketOutExplosion wrapper created
2020-10-28 16:41:35 +01:00
retrooper 5abc9c7154 * Issue with PlayerEvent.java not being imported in the PacketEvents fixed 2020-10-28 08:06:07 +01:00
retrooper c5f377476c * Bungee communication with packetevents-bungee should work, this build contains console logs only on bungee servers. 2020-10-28 08:02:53 +01:00
retrooper 105ea434da * Forgot to import Bukkit Player 2020-10-27 21:48:08 +01:00
retrooper f0196bdab9 Missing PlayerEvent added 2020-10-27 18:31:11 +01:00
retrooper 982d1ee9a0 Merge pull request #55 from retrooper/terrarier2111-patch-1
Added possibility to autoresolve protocolversion
2020-10-27 14:28:17 +01:00
terrarier2111 a7bbb20f60 Added possibility to autoresolve protocolversion
If you have any ideas/concerns about this commit, please let me know.
2020-10-27 14:18:16 +01:00
terrarier2111 2ca79017e2 Replaced explicit type argument 2020-10-27 14:08:29 +01:00
terrarier2111 c4a3d26d96 Removed redundant if statement 2020-10-21 10:01:15 +02:00
retrooper 93292fb2f2 Merge pull request #54 from HexedHero/dev
PaperSpigot > PaperMC & spigot > Spigot
2020-10-19 06:44:27 +02:00
HexedHero 3a9be091ea PaperSpigot > PaperMC & spigot > Spigot 2020-10-19 04:30:59 +01:00
retrooper 92f3944049 * PacketPlayOutEntity sendable to clients ATTEMPT, might not function, note this is a dev commit 2020-10-15 19:15:31 +02:00
retrooper 27f90655f1 Merge remote-tracking branch 'origin/dev' into dev
# Conflicts:
#	src/main/java/io/github/retrooper/packetevents/event/impl/PacketSendEvent.java
#	src/main/java/io/github/retrooper/packetevents/event/impl/PlayerEjectEvent.java
#	src/main/java/io/github/retrooper/packetevents/event/impl/PlayerInjectEvent.java
#	src/main/java/io/github/retrooper/packetevents/utils/player/PlayerUtils.java
2020-10-13 17:04:49 +02:00
retrooper 4b868392e6 * PlayerEvent.java interface, implemented on events that have to do with a player
* PostPacketReceiveEvent event created, it is called after all plugins processed the PacketReceiveEvent event and only if the priority system decides not to cancel the PacketReceiveEvent event.
This event is not cancellable.

* PostPacketSendEvent event created, it is only called after all plugins processed the PacketSendEvent and only if the priority system decides not to cancel the PacketSendEvent event and after the server sends the packet.
This event is not cancellable.

* A few small class package movements
* Sending packets low level API removed from NMSUtils as it has nothing to do with NMS or any reflection.
* Update checking now uses the same executor service used to process all incoming and outgoing packets and player-injections and player-ejections.
2020-10-13 17:02:46 +02:00
terrarier2111 ebb1ba990d Code cleanup 2020-10-11 21:44:19 +02:00
terrarier2111 b4bb72e236 Code cleanup 2020-10-11 21:43:36 +02:00
terrarier2111 e876ebe078 Code cleanup 2020-10-11 21:43:08 +02:00
terrarier2111 d6af873b9d Slightly improved performance 2020-10-11 21:38:48 +02:00
terrarier2111 c10d309180 Removed debug 2020-10-11 21:31:09 +02:00
terrarier2111 c33ab2c52c Code cleanup 2020-10-11 21:25:32 +02:00
terrarier2111 ec6cef3526 Slight performance improvement 2020-10-11 21:21:45 +02:00
terrarier2111 c61738bbab Code cleanup 2020-10-11 21:16:05 +02:00
retrooper 00990a49f9 * Fixed Players not being injected if asynchronous injection setting is on
* PacketEvents now calculates ping(makes getting player ping much cheaper resulting in no reflection calls)
* PacketEvents.getAPI().getPlayerUtils().getSmoothedPing(Player) and PacketEvents.getAPI().getPlayerUtils().getNMSPing(Player) are two new methods
* #getNMSPing is a replacement for the old #getPing method, and the current getPing method returns the CURRENT calculated ping, the getSmoothedPing method returns a smoothed value of the estimate ping, so the ping won't jump too often.
* Updates are checked for asynchronously
2020-10-11 15:24:53 +02:00
retrooper 72a199ce48 * most likely unstable but bungeecord clientversion syncing attempt 2020-10-10 08:02:44 +02:00
retrooper ac585f7c81 * Added support to check if a server is a bungee ServerUtils
* Removed a protocollib listener creation error
* CLientVersion.UNKNOWN_BUNGEE_SERVER added for bungee servers as we don't support them ATM
2020-10-08 15:38:34 +02:00
terrarier2111 a8b286c6fc Update PacketReceiveEvent.java 2020-10-05 17:42:39 +02:00
terrarier2111 364747986b Improved performance of NMSUtils 2020-10-05 16:12:03 +02:00
terrarier2111 b51c3ad20a Improved WrappedPacket performance by reusing already looked up map entrys 2020-10-04 19:33:39 +02:00
terrarier2111 df8c77291d Removed redundant assignments 2020-10-04 19:21:15 +02:00
terrarier2111 9dde0e54fe Improved version getting performance massively 2020-10-04 19:19:03 +02:00
terrarier2111 72f1b2bf02 Removed redundant assignment 2020-10-04 17:11:10 +02:00
terrarier2111 332782e99c Improved versioncheck 2020-10-04 17:06:31 +02:00
terrarier2111 9f7e49b453 Minimized the costs working with ServerVersion 2020-10-04 10:42:05 +02:00
Retrooper e17f53ca3c 1.7 2nd pre release(1.6.9.2) 2020-10-04 15:12:33 +08:00
Retrooper 5fc1abaff2 Merge branch 'dev' of https://github.com/retrooper/packetevents into master 2020-10-04 15:04:20 +08:00
retrooper a9ad25d3fc * WrappedPacketOutGameStateChange value returned the reason, BUG FIXED
* All server side WRAPPERS optimized
* Sending WrappedPacketOutAbilities optimized
2020-09-30 18:41:31 +02:00
retrooper bf3c0cda46 * NMSUtils.getNMSEntityById(int) created
* NMSUtils.getEntityById(int) optimized to use less reflection calls
* All #getEntityId() methods in wrappers, have been renamed to #getEntityID()
* WrappedPacketOutEntityMetadata UNFINISHED but created
* WrappedPacketOutEntityTeleport wrapper created, usage performance optimal on 1.7-1.8.x
* Possibility to write to fields with WrappedPacket
2020-09-30 17:59:36 +02:00
retrooper e9680c287d WrappedPacketInFlying and WrappedPacketOutEntity bug fixed when reading fields 2020-09-29 17:08:07 +02:00
retrooper e05dda9ea6 * Updated pom.xml version to 1.6.9.1 2020-09-27 18:04:25 +02:00
retrooper 7db442682e * Updated PacketEvents' local stored version variable in the PacketEvents class to 1.6.9.1(1st 1.6.7 pre release)
* Removed EventManager's redundant local runnable variable
* Removed ExamplePacketEventsSettings.java class
* PacketEventsSettings is no longer a final class
* Removed redundant imports in the MainExample class
2020-09-27 18:03:27 +02:00
retrooper 61911ac09a * WrappedPacket#readAnyObject(int) accidentally returned the field and not the value BUG FIX
* Every single serverbound(clientside) wrapper has been optimized, to only read fields you access from the getters, so if you don't access a field, packetevents won't try reading it(saving performance)
* WrappedPacketInArmAnimation.java removed as it was just an empty wrapper
2020-09-27 17:38:28 +02:00
retrooper 381dc28831 * WrappedPacketInWindowClick bug fix attempt!
* MainExample now uses new packetevents settings system (Thanks to a contributor, can't think of they're username atm)
2020-09-27 16:06:12 +02:00
terrarier2111 1686d38f0b Simplified the usage of PacketEventsSettings 2020-09-21 20:01:42 +02:00
retrooper 509b93968d Classes have been renamed, and moved.
Deprecated methods deleted off.
Deprecated classes deleted(my Vector3 util classes).
2020-09-20 15:24:18 +02:00
retrooper 1458331e3f Merge branch 'dev' of https://github.com/retrooper/packetevents into master 2020-09-20 15:03:53 +02:00
retrooper d5777a55f0 a few deprecations have been cut off, now possible to pass in your own settings class(godead helped in the settings thing) 2020-09-20 15:02:43 +02:00
terrarier2111 d7c4d2c425 Improved caching 2020-09-20 14:29:35 +02:00
retrooper a268687cea removed IDE config files 2020-09-20 14:23:15 +02:00
retrooper d679e43058 pull successs, but IDE files are included 2020-09-20 14:21:07 +02:00
terrarier2111 1f609f8732 Removed redundant assignment 2020-09-20 14:21:01 +02:00
retrooper 30e9d38bf2 pull successs, but IDE files are included 2020-09-20 14:19:47 +02:00
retrooper 922342345d Merge pull request #46 from GoDead/master
PacketEvents settings system change
2020-09-20 14:09:16 +02:00
jack 80c8c5453b You now have to provide a Settings class when starting PE 2020-09-20 13:57:33 +02:00
retrooper ba72ec37c6 Final 1.6.9 release 2020-09-20 10:40:35 +02:00
retrooper 9bfb696c9d 1.6.9 RELEASE 2020-09-20 10:37:06 +02:00
retrooper 4a9848f51d added java docs building to pom.xml 2020-09-20 10:22:49 +02:00
retrooper 383eacc814 PacketEvents 1.6.8.5 (1.6.9 5th pre release)
* Auto updater fully functioning
2020-09-20 10:18:01 +02:00
retrooper 860b80e2c2 PacketEvents 1.6.8.4(1.6.9 4th pre release)
* PacketEvents version reporting(if newer exists,you are on current latest, or a dev/pre released is what you are on)
2020-09-19 20:02:58 +02:00
retrooper 0259bc8d9d Progress on WrappedPacketOutPlayerInfo to add NPC support and make it possible with PacketEvents. 2020-09-19 12:04:42 +02:00
retrooper 37238e1226 WrappedPacketOutCustomPayload tested to work on 1.7.10, 1.8.8, and 1.16.3, it is assumed that the other versions work too.
* 1.8.8+ reflection issues fixed
2020-09-19 10:53:08 +02:00
retrooper c51880941b WrappedPacketOutCustomPayload bug when sending on 1.7.10 FIXED,
Sending the packet works just fine,

just about to test listening to it.
2020-09-18 17:24:38 +02:00
retrooper 451bbe7597 import error fix 2020-09-18 15:10:21 +02:00
retrooper d99e20d95e dev commit,
progress on WrappedPacketOutCustomPayload,sending should work on 1.7.10 and 1.8, unsure about 1.16, listening not supported yet

TODO: add javadoc thing in the maven thingy
2020-09-18 15:09:16 +02:00
retrooper 5eca22a9df 1.6.9 pre release 2
* Packet receive/send events not being called on second join FIX, caused by me not caching channel correctly in an optimization attempt
2020-09-18 10:37:44 +02:00
retrooper c4d6b26986 1.6.8 pre 1 (version 1.6.8.1)
* ClientVersion recoded, ClientVersion#isHigherThan(ClientVersion) and ClientVersion#isLowerThan(ClientVersion) comparisons should be much faster now
2020-09-17 15:42:09 +02:00
retrooper 197acc4d2f Merge pull request #44 from LIWKK/patch-9
Small fix
2020-09-17 14:51:42 +02:00
Johannes da5a5cf15a Small fix 2020-09-17 15:47:26 +03:00
retrooper 0797df24d2 Merge pull request #42 from LIWKK/patch-7
Fixed error i just made
2020-09-17 14:47:16 +02:00
retrooper 7fca4ac8d6 Merge pull request #41 from LIWKK/patch-6
Wrong protocolversion fix. Added 1.16.3
2020-09-17 14:46:55 +02:00
retrooper 0516513c67 Merge pull request #43 from LIWKK/patch-8
Added 1.16.3
2020-09-17 14:46:35 +02:00
Johannes 4603794436 Added 1.16.3 2020-09-17 15:44:38 +03:00
Johannes a5bbe4047b Fixed error i just made 2020-09-17 15:43:37 +03:00
Johannes 770a2d3287 Wrong protocolversion fix. Added 1.16.3 2020-09-17 15:42:23 +03:00
retrooper 3bd4b82d94 Merge pull request #40 from NikV2/master
Added update checker
2020-09-16 20:48:15 +02:00
retrooper 218b2d7782 Merge branch 'master' into master 2020-09-16 20:48:06 +02:00
Nik 76a08e6c12 Fix 2020-09-16 21:38:03 +03:00
Nik 4d28a58dcb Added update checker 2020-09-16 21:31:13 +03:00
retrooper 9347e7a133 1.6.8 STABLE release 2020-09-16 20:00:10 +02:00
retrooper 33ed5ff904 * WrappedPacketInUpdateSign issue fixed for versions > than 1.8.8
* WrappedPacket#readObjectArray() bug fix and for all other ones
2020-09-16 19:16:21 +02:00
retrooper 291994d388 * WrappedPacketInUpdateSign created, UNTESTED 2020-09-16 18:14:51 +02:00
retrooper f6ea9675bf * clearing the cached channel after the player is uninjected. 2020-09-16 17:51:17 +02:00
retrooper cc303f56a4 * a few API class movements.
* PacketEvents.getAPI().getPlayerUtils().sendPacket(Player, SendableWrapper) optimized, we no longer use reflection to send packets and we cache the channel.
2020-09-16 17:33:23 +02:00
retrooper 290bd0a8fe * nullpointer exception fixed for versions older than 1.16 in WrappedPacketOutGameStateChange 2020-09-16 16:58:40 +02:00
retrooper a8573cc8e1 * game state change nullpointer exception for 1.16 fixed 2020-09-16 16:10:53 +02:00
retrooper 814bd941c0 * outbound game state change wrapper should be working for 1.16 now, I'm about to test it 2020-09-16 15:18:32 +02:00
retrooper d3f6d32848 gamestate wrapper unfinished, need to get the value from the integer for 1.16
* todo: finish outbound game state change wrapper, outbound custompayload, outbound entitymetadata, fix alleged 1.16 performance issues
2020-09-15 23:14:24 +02:00
retrooper 5e1b82ea8a *game state wrapper attempt, UNTESTED 2020-09-15 18:00:58 +02:00
retrooper e49cae5d67 * added the setting to disable packetevents from using the ProtocolLib API if it is available,
(PacketEvents.getAPI().getSettings().setUseProtocolLibIfAvailable(boolean), default value = true)

* PacketEvents.getAPI().getSettings().isInjectAsync()
& PacketEvents.getAPI().getSettings().isUninjectAsync() are NOW set to true by default
2020-09-15 16:46:51 +02:00
retrooper 8168bb2085 Update README.md 2020-09-13 11:57:55 +02:00
retrooper 621a7c98b9 Merge pull request #38 from LIWKK/patch-5
Removed debugs
2020-09-13 11:09:22 +02:00
retrooper 28da2aafc4 Merge pull request #39 from LIWKK/patch-4
Remove debugs
2020-09-13 11:08:33 +02:00
Johannes e89e6fac28 Removed debugs 2020-09-13 12:06:50 +03:00
Johannes a5e067af9e Remove debugs 2020-09-13 12:05:56 +03:00
retrooper 04de7fd5ea Merge pull request #37 from funkemunky/feature/reflection-caching
Optimized reflection, fixed WrappedPacketInFlying error
2020-09-13 06:54:10 +02:00
Dawson Hessler 815428f35b reverting version change 2020-09-13 00:43:59 -04:00
Dawson Hessler 833f569150 Optimized reflection, fixed WrappedPacketInFlying error 2020-09-13 00:43:08 -04:00
retrooper 6b227d55aa Update WrappedPacket.java 2020-09-13 00:05:11 +02:00
retrooper 57a6c26c07 attempt to fix all errors when accessing fields 2020-09-12 23:53:14 +02:00
retrooper b2da168f6a attempt to fix fields not being found 2020-09-12 23:41:55 +02:00
retrooper 4c1e14af57 subclass util bug fixed omg 2020-09-12 23:28:56 +02:00
retrooper 5f9e82617f Update WrappedPacketInUseEntity.java 2020-09-12 23:24:50 +02:00
retrooper 9868facdde debug added cos idk why its failing 2020-09-12 22:51:24 +02:00
retrooper d45f8bddac packet class for use entity null fix attempt 2020-09-12 22:21:12 +02:00
retrooper e4b086e7e5 packet class null fix attempt 2020-09-12 22:20:07 +02:00
retrooper 7afe3c63cd fix packettype import for packetsendevent 2020-09-12 22:08:18 +02:00
retrooper 5103acf414 fix packettype import for packetreceiveevent 2020-09-12 22:07:52 +02:00
retrooper 70b763b5a3 Merge remote-tracking branch 'origin/master' into master 2020-09-12 20:53:39 +02:00
retrooper e1370b803f removed old packettype class 2020-09-12 20:53:15 +02:00
retrooper ac3ca0ddf7 Update WrappedPacketInUseEntity.java 2020-09-12 20:31:29 +02:00
retrooper 15bec5525a nms import removed 2020-09-12 18:21:03 +02:00
retrooper 0e8dcb6a40 nms import removed 2020-09-12 18:18:49 +02:00
retrooper 836efcfa03 forgot to load the updated PacketType class, and not only the deprecated one 2020-09-12 18:12:43 +02:00
retrooper 774e6decf3 debug added to see why it fails at line 94 2020-09-12 18:03:54 +02:00
retrooper 839265e0b9 removed unnecessary import of NMS 2020-09-12 17:45:28 +02:00
retrooper 32c94c85f1 attempting to debug, if the getter isn't found 2020-09-12 17:43:04 +02:00
retrooper a36df67f6f NPE in sent outbound wrapped packets FIXED 2020-09-12 17:29:27 +02:00
retrooper cdb46f476c fixed a compilation error
a fee fields weren’t initialized in the default constructor
2020-09-12 04:11:35 +02:00
retrooper 96e5e7393e Merge pull request #36 from LIWKK/patch-3
Fix error
2020-09-12 04:02:29 +02:00
Johannes 130001a44c Fix error 2020-09-11 22:47:34 +03:00
retrooper 1328ea81e8 1.6.8 might release tomorrow 2020-09-11 19:36:29 +02:00
retrooper a42153cff9 1.6.8 pre? 2020-09-11 19:13:17 +02:00
retrooper 79929f5700 temp data files to check if another pe instance exists, might not work 2020-09-11 16:16:45 +02:00
566 changed files with 157694 additions and 8931 deletions

No files matched your search

+5
View File
@@ -0,0 +1,5 @@
# These are supported funding model platforms
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: retrooper
custom: ['https://paypal.me/retrooperdev']
+38
View File
@@ -0,0 +1,38 @@
---
name: Bug report
about: Report bugs to help us improve our software.
title: ""
labels: bug
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**Software brand**
Please let us know what software you are using.
Eg. Spigot 1.18.2, Paper 1.18.2, Tuinity 1.18.2, Pufferfish 1.18.2, etc...
Make sure to mention the version of the software.
**Plugins**
Please give us a list of your plugins. Sometimes we run into incompatibilities. Having an overview of the plugins on your server can really help identify the problem quicker.
Eg. ViaVersion, ProtocolLib, HolographicDisplays
You may also provide a screenshot.
**How To Reproduce**
Steps to reproduce the behavior:
*Example:*
1. Join with the 1.18.2 vanilla minecraft client.
2. Spam
3. ....
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Additional context**
Add any other context about the problem here.
+21
View File
@@ -0,0 +1,21 @@
---
name: Feature request
about: Suggest an idea for this project
title: FEATURE REQUEST
labels: enhancement
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered to solve your solution without
us adding this as a feature?**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.
+67
View File
@@ -0,0 +1,67 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"
on:
push:
branches: [ master, dev ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ master, dev ]
schedule:
- cron: '39 0 * * 0'
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
language: [ 'java' ]
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
# Learn more:
# https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
steps:
- name: Checkout repository
uses: actions/checkout@v2
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v1
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# queries: ./path/to/local/query, your-org/your-repo/queries@main
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v1
# ℹ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
# and modify them (or add more) to build your code if your project
# uses a compiled language
#- run: |
# make bootstrap
# make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1
+54
View File
@@ -0,0 +1,54 @@
name: Gradle Package
on: [ push, pull_request ]
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v2
- name: Set up JDK 8
uses: actions/setup-java@v2
with:
java-version: '8'
distribution: 'adopt'
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
settings-path: ${{ github.workspace }} # location for the settings.xml file
- name: Build with Gradle
run: gradle shadowJar
- name: Upload build artifacts api
uses: actions/upload-artifact@v1
with:
name: api-build
path: api/build/libs
- name: Upload build artifacts spigot
uses: actions/upload-artifact@v1
with:
name: spigot-build
path: spigot/build/libs
- name: Upload build artifacts netty-common
uses: actions/upload-artifact@v1
with:
name: netty-common-build
path: netty-common/build/libs
- name: Upload build artifacts bungeecord
uses: actions/upload-artifact@v1
with:
name: bungeecord-build
path: bungeecord/build/libs
- name: Upload build artifacts velocity
uses: actions/upload-artifact@v1
with:
name: velocity-build
path: velocity/build/libs
-30
View File
@@ -1,30 +0,0 @@
name: Generate and deploy JavaDocs
on:
release:
types: [published]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Build with Maven
run: mvn install
- name: List target/apidocs
run: ls target/apidocs
- name: GitHub Pages
uses: crazy-max/ghaction-github-pages@v2.1.2
env:
GH_PAT: ${{ secrets.GH_PAT }}
with:
target_branch: javadocs
keep_history: true
build_dir: target/apidocs
commit_message: Update JavaDocs
+89 -82
View File
@@ -1,78 +1,18 @@
#
# JetBrains
#
# User-specific stuff
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/usage.statistics.xml
.idea/**/dictionaries
.idea/**/shelf
/.idea
# Generated files
.idea/**/contentModel.xml
# Sensitive or high-churn files
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/dbnavigator.xml
# Gradle
.idea/**/gradle.xml
.idea/**/libraries
# Gradle and Maven with auto-import
# When using Gradle or Maven with auto-import, you should exclude module files,
# since they will be recreated, and may cause churn. Uncomment if using
# auto-import.
# .idea/artifacts
# .idea/compiler.xml
# .idea/jarRepositories.xml
# .idea/modules.xml
# .idea/*.iml
# .idea/modules
# *.iml
# *.ipr
# CMake
cmake-build-*/
# Mongo Explorer plugin
.idea/**/mongoSettings.xml
# File-based project format
*.iml
*.ipr
*.iws
# IntelliJ
out/
# mpeltonen/sbt-idea plugin
.idea_modules/
# JIRA plugin
atlassian-ide-plugin.xml
# Cursive Clojure plugin
.idea/replstate.xml
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties
# Editor-based Rest Client
.idea/httpRequests
# Android studio 3.1+ serialized cache file
.idea/caches/build_file_checksums.ser
#
# Java
#
# Compiled class file
*.class
@@ -82,9 +22,6 @@ fabric.properties
# BlueJ files
*.ctxt
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
*.jar
*.war
@@ -97,17 +34,87 @@ fabric.properties
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
#
# Maven
#
target/
pom.xml.tag
pom.xml.releaseBackup
pom.xml.versionsBackup
pom.xml.next
release.properties
dependency-reduced-pom.xml
buildNumber.properties
.mvn/timing.properties
# https://github.com/takari/maven-wrapper#usage-without-binary-jar
.mvn/wrapper/maven-wrapper.jar
*~
# temporary files which can be created if a process still has a handle open of a deleted file
.fuse_hidden*
# KDE directory preferences
.directory
# Linux trash folder which might appear on any partition or disk
.Trash-*
# .nfs files are created when an open file is removed but is still being accessed
.nfs*
# General
.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
# Windows thumbnail cache files
Thumbs.db
Thumbs.db:encryptable
ehthumbs.db
ehthumbs_vista.db
# Dump file
*.stackdump
# Folder config file
[Dd]esktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
*.msix
*.msm
*.msp
# Windows shortcuts
*.lnk
.gradle
build/
# Ignore Gradle GUI config
gradle-app.setting
# Cache of project
.gradletasknamecache
**/build/
# Common working directory
run/
# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored)
!gradle-wrapper.jar
/src/main/resources/plugin.yml
/.idea/
+670 -17
View File
@@ -1,21 +1,674 @@
MIT License
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (c) 2020 retrooper
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
Preamble
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.
+29 -16
View File
@@ -1,20 +1,33 @@
# packetevents by retrooper
A lightweight spigot packetlistener & packetsender coded by retrooper.
## About
This packetlistener is **only** supported on spigot servers and has been tested to work on these spigot forks: PaperSpigot, Tuinity
* No dependencies
* Licensed under the MIT license
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
Our discord server: https://discord.me/packetevents
# packetevents
[![](https://img.shields.io/badge/License-GPLv3-yellow.svg)](https://github.com/retrooper/packetevents/blob/dev/LICENSE)
[![](https://jitpack.io/v/retrooper/packetevents.svg)](https://jitpack.io/#retrooper/packetevents)
[![](https://jitci.com/gh/retrooper/packetevents/svg)](https://jitci.com/gh/retrooper/packetevents)
PacketEvents is a powerful packet library. Our packet wrappers are efficient and easy to use. With our API, you can write code that runs on many platforms including Spigot, BungeeCord, Velocity, and even client-sided Fabric!
### Resources
* [SpigotMC](https://www.spigotmc.org/resources/packetevents-api.80279/)
* [JavaDocs](https://packetevents.github.io/javadocs)
* [Discord](https://discord.me/packetevents)
### Setup
[Learn more](https://github.com/retrooper/packetevents/wiki/Setup)
### Contributing
[Learn more](https://github.com/retrooper/packetevents/wiki/Contributing)
### Sponsorships
[![](https://www.ej-technologies.com/images/product_banners/jprofiler_small.png)](https://www.ej-technologies.com/products/jprofiler/overview.html)
### Statistics
PacketEvents optionally collects statistics using [bStats](https://bstats.org/)\
Check out our [bStats page](https://bstats.org/plugin/bukkit/packetevents/11327)
### Credit to
[wiki.vg/Protocol](https://wiki.vg/Protocol)
[adventure](https://github.com/KyoriPowered/adventure)
[gson](https://github.com/google/gson)
[ViaVersion](https://github.com/ViaVersion/ViaVersion)
[ProtocolSupport](https://github.com/ProtocolSupport/ProtocolSupport)
[MCProtocolLib](https://github.com/GeyserMC/MCProtocolLib/)
[netty](https://github.com/netty/netty)
+4
View File
@@ -0,0 +1,4 @@
# Table of contents
* [Initial page](README.md)
+3
View File
@@ -0,0 +1,3 @@
dependencies {
compileOnly(adventureDependencies)
}
@@ -0,0 +1,35 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents;
public final class PacketEvents {
private static PacketEventsAPI<?> API;
//Put these variable names anywhere else, they are really only for the injectors
public static String IDENTIFIER, ENCODER_NAME, DECODER_NAME, CONNECTION_HANDLER_NAME, SERVER_CHANNEL_HANDLER_NAME,
TIMEOUT_HANDLER_NAME;
public static PacketEventsAPI<?> getAPI() {
return API;
}
public static void setAPI(PacketEventsAPI<?> api) {
API = api;
}
}
@@ -0,0 +1,87 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents;
import com.github.retrooper.packetevents.event.EventManager;
import com.github.retrooper.packetevents.injector.ChannelInjector;
import com.github.retrooper.packetevents.manager.player.PlayerManager;
import com.github.retrooper.packetevents.manager.protocol.ProtocolManager;
import com.github.retrooper.packetevents.manager.server.ServerManager;
import com.github.retrooper.packetevents.netty.NettyManager;
import com.github.retrooper.packetevents.settings.PacketEventsSettings;
import com.github.retrooper.packetevents.util.LogManager;
import com.github.retrooper.packetevents.util.PEVersion;
import com.github.retrooper.packetevents.util.updatechecker.UpdateChecker;
import java.util.logging.Logger;
public abstract class PacketEventsAPI<T> {
private static final EventManager EVENT_MANAGER = new EventManager();
private static final PacketEventsSettings SETTINGS = new PacketEventsSettings();
private static final UpdateChecker UPDATE_CHECKER = new UpdateChecker();
private final Logger LOGGER = Logger.getLogger(PacketEventsAPI.class.getName());
private static final LogManager LOG_MANAGER = new LogManager();
private static final PEVersion VERSION = new PEVersion(2, 0, 0);
public EventManager getEventManager() {
return EVENT_MANAGER;
}
public PacketEventsSettings getSettings() {
return SETTINGS;
}
public UpdateChecker getUpdateChecker() {
return UPDATE_CHECKER;
}
public PEVersion getVersion() {
return VERSION;
}
public Logger getLogger() {
return LOGGER;
}
public LogManager getLogManager() {
return LOG_MANAGER;
}
public abstract void load();
public abstract boolean isLoaded();
public abstract void init();
public abstract boolean isInitialized();
public abstract void terminate();
public abstract T getPlugin();
public abstract ServerManager getServerManager();
public abstract ProtocolManager getProtocolManager();
public abstract PlayerManager getPlayerManager();
public abstract NettyManager getNettyManager();
public abstract ChannelInjector getInjector();
}
@@ -0,0 +1,38 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.event;
import com.github.retrooper.packetevents.event.PacketEvent;
import com.github.retrooper.packetevents.event.PacketListenerAbstract;
/**
* The {@link PacketEvent} implements this interface.
* Every inbuilt event should implement the {@link #call(PacketListenerCommon)} method.
* If you are making a custom event, don't implement this.
* The {@link PacketListenerCommon#onPacketEventExternal(PacketEvent)} method is called for every event that is not in-built.
* including custom events.
*
* @author retrooper
* @since 1.8
*/
public interface CallableEvent {
default void call(PacketListenerCommon listener) {
listener.onPacketEventExternal((PacketEvent) this);
}
}
@@ -0,0 +1,51 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.event;
import com.github.retrooper.packetevents.event.PacketReceiveEvent;
/**
* Every event that supports cancellation should implement this interface.
* PacketEvents' event system lets the highest priority listener be have the highest priority
* in deciding whether the event will cancel.
* This means an event with a lower priority than the higher priority one would not be able to decide.
* Cancelling the event means the action assosiated with the event will be cancelled.
* For example, cancelling the {@link PacketReceiveEvent}
* will prevent minecraft from processing the incoming packet.
*
* @author retrooper
* @see PacketReceiveEvent
* @since 1.7
*/
public interface CancellableEvent {
/**
* This method returns if the event will be cancelled.
*
* @return Will the event be cancelled.
*/
boolean isCancelled();
/**
* Cancel or proceed with the event.
*
* @param val Is the event cancelled
*/
void setCancelled(boolean val);
}
@@ -0,0 +1,119 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.event;
import com.github.retrooper.packetevents.PacketEvents;
import org.jetbrains.annotations.Nullable;
import java.util.HashSet;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Level;
public class EventManager {
private final Map<Byte, HashSet<PacketListenerCommon>> listenersMap = new ConcurrentHashMap<>();
/**
* Call the PacketEvent.
* This method processes the event on all the registered dynamic packet event listeners.
* The {@link PacketListenerPriority#LOWEST} prioritized listeners will be processing first,
* the {@link PacketListenerPriority#MONITOR} will be processing last and can
* be the final decider whether the event has been cancelled or not.
*
* @param event {@link PacketEvent}
*/
public void callEvent(PacketEvent event) {
callEvent(event, null);
}
public void callEvent(PacketEvent event, @Nullable Runnable postCallListenerAction) {
for (byte priority = PacketListenerPriority.LOWEST.getId(); priority <= PacketListenerPriority.MONITOR.getId(); priority++) {
HashSet<PacketListenerCommon> listeners = listenersMap.get(priority);
if (listeners != null) {
for (PacketListenerCommon listener : listeners) {
try {
event.call(listener);
} catch (Throwable t) {
PacketEvents.getAPI().getLogger().log(Level.WARNING, "PacketEvents caught an unhandled exception while calling your listener.", t);
}
if (postCallListenerAction != null) {
postCallListenerAction.run();
}
}
}
}
if (event instanceof ProtocolPacketEvent && PacketEvents.getAPI().getSettings().shouldListenersReadOnly()) {
((ProtocolPacketEvent<?>) event).setLastUsedWrapper(null);
}
}
public PacketListenerCommon registerListener(PacketListener listener, PacketListenerPriority priority) {
PacketListenerCommon packetListenerAbstract = listener.asAbstract(priority);
return registerListener(packetListenerAbstract);
}
/**
* Register the dynamic packet event listener.
*
* @param listener {@link PacketListenerCommon}
*/
public PacketListenerCommon registerListener(PacketListenerCommon listener) {
byte priority = listener.getPriority().getId();
HashSet<PacketListenerCommon> listenerSet = listenersMap.get(priority);
if (listenerSet == null) {
listenerSet = new HashSet<>();
}
listenerSet.add(listener);
listenersMap.put(priority, listenerSet);
return listener;
}
/**
* Register multiple dynamic packet event listeners with one method.
*
* @param listeners {@link PacketListenerCommon}
*/
public PacketListenerCommon[] registerListeners(PacketListenerCommon... listeners) {
for (PacketListenerCommon listener : listeners) {
registerListener(listener);
}
return listeners;
}
public void unregisterListener(PacketListenerCommon listener) {
HashSet<PacketListenerCommon> listenerSet = listenersMap.get(listener.getPriority().getId());
if (listenerSet == null) return;
listenerSet.remove(listener);
}
public void unregisterListeners(PacketListenerCommon... listeners) {
for (PacketListenerCommon listener : listeners) {
unregisterListener(listener);
}
}
/**
* Unregister all dynamic packet event listeners.
*/
public void unregisterAllListeners() {
listenersMap.clear();
}
}
@@ -0,0 +1,63 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.event;
import com.github.retrooper.packetevents.PacketEvents;
import com.github.retrooper.packetevents.util.TimeStampMode;
/**
* An event in both of PacketEvents' event systems.
*
* @author retrooper
* @since 1.2.6
*/
public abstract class PacketEvent implements CallableEvent {
private final long timestamp;
public PacketEvent() {
TimeStampMode timeStampMode = PacketEvents.getAPI().getSettings()
.getTimeStampMode();
switch (timeStampMode) {
case MILLIS:
timestamp = System.currentTimeMillis();
break;
case NANO:
timestamp = System.nanoTime();
break;
//AKA NONE:
default:
timestamp = 0L;
}
}
/**
* Timestamp of when the PacketEvent was created.
* Basically timestamp of the packet.
*
* @return Packet timestamp in milliseconds.
*/
public long getTimestamp() {
return timestamp;
}
public void callPacketEventExternal(PacketListenerCommon listener) {
listener.onPacketEventExternal(this);
}
}
@@ -0,0 +1,29 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.event;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface PacketHandler {
}
@@ -0,0 +1,73 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.event;
public interface PacketListener {
default PacketListenerAbstract asAbstract(PacketListenerPriority priority) {
return new PacketListenerAbstract(priority) {
@Override
public void onUserConnect(UserConnectEvent event) {
PacketListener.this.onUserConnect(event);
}
@Override
public void onUserLogin(UserLoginEvent event) {
PacketListener.this.onUserLogin(event);
}
@Override
public void onUserDisconnect(UserDisconnectEvent event) {
PacketListener.this.onUserDisconnect(event);
}
@Override
public void onPacketReceive(PacketReceiveEvent event) {
PacketListener.this.onPacketReceive(event);
}
@Override
public void onPacketSend(PacketSendEvent event) {
PacketListener.this.onPacketSend(event);
}
@Override
public void onPacketEventExternal(PacketEvent event) {
PacketListener.this.onPacketEventExternal(event);
}
};
}
default void onUserConnect(UserConnectEvent event) {
}
default void onUserLogin(UserLoginEvent event) {
}
default void onUserDisconnect(UserDisconnectEvent event) {
}
default void onPacketReceive(PacketReceiveEvent event) {
}
default void onPacketSend(PacketSendEvent event) {
}
default void onPacketEventExternal(PacketEvent event) {
}
}
@@ -0,0 +1,39 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.event;
public abstract class PacketListenerAbstract extends PacketListenerCommon {
public PacketListenerAbstract(PacketListenerPriority priority) {
super(priority);
}
public PacketListenerAbstract() {
super();
}
@Override
public void onPacketReceive(PacketReceiveEvent event) {
}
@Override
public void onPacketSend(PacketSendEvent event) {
}
}
@@ -0,0 +1,64 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.event;
import java.lang.reflect.Method;
import java.util.List;
import java.util.Map;
/**
* Abstract packet listener.
*
* @author retrooper
* @since 1.8
*/
public abstract class PacketListenerCommon {
private final PacketListenerPriority priority;
public PacketListenerCommon(PacketListenerPriority priority) {
this.priority = priority;
}
public PacketListenerCommon() {
this.priority = PacketListenerPriority.NORMAL;
}
public PacketListenerPriority getPriority() {
return priority;
}
public void onUserConnect(UserConnectEvent event) {
}
public void onUserLogin(UserLoginEvent event) {
}
public void onUserDisconnect(UserDisconnectEvent event) {
}
void onPacketReceive(PacketReceiveEvent event) {
}
void onPacketSend(PacketSendEvent event) {
}
public void onPacketEventExternal(PacketEvent event) {
}
}
@@ -0,0 +1,72 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.event;
/**
* The priority of packet listeners affect the order they will be invoked in.
* The lowest priority listeners are invoked first, the most high ones are invoked last.
* The most high priority listener has the final decider on an event being cancelled.
* This priority can be specified in the PacketListenerAbstract constructor.
* If you don't specify a priority in the constructor, it will use the {@link #NORMAL} priority.
*
* @author retrooper
* @since 1.8
*/
public enum PacketListenerPriority {
/**
* Listener is of very low importance.
* This listener will be ran first.
*/
LOWEST,
/**
* Listener is of low importance.
*/
LOW,
/**
* Default listener priority.
* Listener is neither important nor unimportant and may run normally.
*/
NORMAL,
/**
* Listener is of high importance.
*/
HIGH,
/**
* Listener is of critical importance and wants to decide the cancellation of an event.
*/
HIGHEST,
/**
* Listener is purely trying to decide the cancellation of an event.
* This listener should be ran last.
*/
MONITOR;
public static PacketListenerPriority getById(byte id) {
return values()[id];
}
public byte getId() {
return (byte) ordinal();
}
}
@@ -0,0 +1,66 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.event;
import com.github.retrooper.packetevents.event.simple.*;
import com.github.retrooper.packetevents.exception.PacketProcessException;
import com.github.retrooper.packetevents.manager.server.ServerVersion;
import com.github.retrooper.packetevents.netty.buffer.ByteBufHelper;
import com.github.retrooper.packetevents.protocol.PacketSide;
import com.github.retrooper.packetevents.protocol.packettype.PacketTypeCommon;
import com.github.retrooper.packetevents.protocol.player.User;
public class PacketReceiveEvent extends ProtocolPacketEvent<Object> {
protected PacketReceiveEvent(Object channel, User user, Object player, Object rawByteBuf,
boolean autoProtocolTranslation) throws PacketProcessException {
super(PacketSide.CLIENT, channel, user, player, rawByteBuf, autoProtocolTranslation);
}
protected PacketReceiveEvent(int packetID, PacketTypeCommon packetType,
ServerVersion serverVersion,
Object channel, User user, Object player,
Object byteBuf) throws PacketProcessException {
super(packetID, packetType, serverVersion,
channel, user, player, byteBuf);
}
@Override
public void call(PacketListenerCommon listener) {
listener.onPacketReceive(this);
}
@Override
public PacketReceiveEvent clone() {
if (this instanceof PacketHandshakeReceiveEvent) {
return ((PacketHandshakeReceiveEvent)this).clone();
}
else if (this instanceof PacketStatusReceiveEvent) {
return ((PacketStatusReceiveEvent)this).clone();
}
else if (this instanceof PacketLoginReceiveEvent) {
return ((PacketLoginReceiveEvent)this).clone();
}
else if (this instanceof PacketPlayReceiveEvent) {
return ((PacketPlayReceiveEvent)this).clone();
}
else {
return null;
}
}
}
@@ -0,0 +1,66 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.event;
import com.github.retrooper.packetevents.event.simple.PacketLoginSendEvent;
import com.github.retrooper.packetevents.event.simple.PacketPlaySendEvent;
import com.github.retrooper.packetevents.event.simple.PacketStatusSendEvent;
import com.github.retrooper.packetevents.exception.PacketProcessException;
import com.github.retrooper.packetevents.manager.server.ServerVersion;
import com.github.retrooper.packetevents.netty.buffer.ByteBufHelper;
import com.github.retrooper.packetevents.protocol.PacketSide;
import com.github.retrooper.packetevents.protocol.packettype.PacketTypeCommon;
import com.github.retrooper.packetevents.protocol.player.User;
public class PacketSendEvent extends ProtocolPacketEvent<Object> {
protected PacketSendEvent(Object channel, User user, Object player, Object rawByteBuf,
boolean autoProtocolTranslation) throws PacketProcessException {
super(PacketSide.SERVER, channel, user, player, rawByteBuf, autoProtocolTranslation);
}
protected PacketSendEvent(int packetID, PacketTypeCommon packetType,
ServerVersion serverVersion,
Object channel, User user,
Object player, Object byteBuf) throws PacketProcessException {
super(packetID, packetType,
serverVersion,
channel, user, player, byteBuf);
}
@Override
public void call(PacketListenerCommon listener) {
listener.onPacketSend(this);
}
@Override
public PacketSendEvent clone() {
if (this instanceof PacketStatusSendEvent) {
return ((PacketStatusSendEvent)this).clone();
}
else if (this instanceof PacketLoginSendEvent) {
return ((PacketLoginSendEvent)this).clone();
}
else if (this instanceof PacketPlaySendEvent) {
return ((PacketPlaySendEvent)this).clone();
}
else {
return null;
}
}
}
@@ -0,0 +1,34 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.event;
/**
* Every event that has an associated player is recommended to implement this interface.
*
* @author retrooper
* @since 1.6.9
*/
public interface PlayerEvent<T> {
/**
* Associated player.
*
* @return Player.
*/
T getPlayer();
}
@@ -0,0 +1,209 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.event;
import com.github.retrooper.packetevents.PacketEvents;
import com.github.retrooper.packetevents.exception.PacketProcessException;
import com.github.retrooper.packetevents.manager.server.ServerVersion;
import com.github.retrooper.packetevents.netty.buffer.ByteBufHelper;
import com.github.retrooper.packetevents.netty.channel.ChannelHelper;
import com.github.retrooper.packetevents.protocol.ConnectionState;
import com.github.retrooper.packetevents.protocol.PacketSide;
import com.github.retrooper.packetevents.protocol.packettype.PacketType;
import com.github.retrooper.packetevents.protocol.packettype.PacketTypeCommon;
import com.github.retrooper.packetevents.protocol.player.ClientVersion;
import com.github.retrooper.packetevents.protocol.player.User;
import com.github.retrooper.packetevents.wrapper.PacketWrapper;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.net.InetSocketAddress;
import java.util.ArrayList;
import java.util.List;
public abstract class ProtocolPacketEvent<T> extends PacketEvent implements PlayerEvent<T>, CancellableEvent, UserEvent {
private final Object channel;
private final ConnectionState connectionState;
private final User user;
private final T player;
private Object byteBuf;
private final int packetID;
private final PacketTypeCommon packetType;
private ServerVersion serverVersion;
private boolean cancel;
private PacketWrapper<?> lastUsedWrapper;
private List<Runnable> postTasks = null;
private boolean cloned;
public ProtocolPacketEvent(PacketSide packetSide, Object channel,
User user, T player, Object byteBuf,
boolean autoProtocolTranslation) throws PacketProcessException {
this.channel = channel;
this.user = user;
this.player = player;
if (autoProtocolTranslation || user.getClientVersion() == null) {
this.serverVersion = PacketEvents.getAPI().getServerManager().getVersion();
}
else {
//TODO Optimize
this.serverVersion = user.getClientVersion().toServerVersion();
}
this.byteBuf = byteBuf;
int size = ByteBufHelper.readableBytes(byteBuf);
if (size == 0) {
throw new PacketProcessException("Trying to process a packet, but it has no content. (Size=0)");
}
try {
this.packetID = ByteBufHelper.readVarInt(byteBuf);
} catch (Exception e) {
throw new PacketProcessException("Failed to read the Packet ID of a packet. (Size: " + size + ")");
}
ClientVersion version = serverVersion.toClientVersion();
this.packetType = PacketType.getById(packetSide, user.getConnectionState(),
version, packetID);
if (this.packetType == null) {
throw new PacketProcessException("Failed to map the Packet ID " + packetID + " to a PacketType constant. Bound: " + packetSide.getOpposite() + ", Connection state: " + user.getConnectionState() + ", Server version: " + serverVersion.getReleaseName());
}
this.connectionState = user.getConnectionState();
}
public ProtocolPacketEvent(int packetID, PacketTypeCommon packetType, ServerVersion serverVersion, Object channel,
User user, T player, Object byteBuf) {
this.channel = channel;
this.user = user;
this.player = player;
this.serverVersion = serverVersion;
this.byteBuf = byteBuf;
this.packetID = packetID;
this.packetType = packetType;
this.connectionState = user.getConnectionState();
cloned = true;
}
public boolean isClone() {
return cloned;
}
public Object getChannel() {
return channel;
}
public InetSocketAddress getSocketAddress() {
return (InetSocketAddress) ChannelHelper.remoteAddress(channel);
}
@Override
public User getUser() {
return user;
}
@Override
public T getPlayer() {
return player;
}
public ConnectionState getConnectionState() {
return connectionState;
}
//TODO Possibly put clientversion inside User class and remove here
@Deprecated
public ClientVersion getClientVersion() {
return user.getClientVersion();
}
@Deprecated
public void setClientVersion(@NotNull ClientVersion clientVersion) {
PacketEvents.getAPI().getLogManager().debug("Setting client version with deprecated method " + clientVersion.getReleaseName());
user.setClientVersion(clientVersion);
}
public ServerVersion getServerVersion() {
return serverVersion;
}
public void setServerVersion(@NotNull ServerVersion serverVersion) {
this.serverVersion = serverVersion;
}
public Object getByteBuf() {
return byteBuf;
}
public void setByteBuf(Object byteBuf) {
this.byteBuf = byteBuf;
}
@Deprecated
public int getPacketId() {
return packetID;
}
public PacketTypeCommon getPacketType() {
return packetType;
}
@Deprecated
public String getPacketName() {
return ((Enum<?>) packetType).name();
}
@Override
public boolean isCancelled() {
return this.cancel;
}
@Override
public void setCancelled(boolean val) {
this.cancel = val;
}
@Nullable
public PacketWrapper<?> getLastUsedWrapper() {
return lastUsedWrapper;
}
public void setLastUsedWrapper(@Nullable PacketWrapper<?> lastUsedWrapper) {
this.lastUsedWrapper = lastUsedWrapper;
}
public List<Runnable> getPostTasks() {
if (postTasks == null) {
postTasks = new ArrayList<>();
}
return postTasks;
}
public boolean hasPostTasks() {
return postTasks != null && !postTasks.isEmpty();
}
@Override
public ProtocolPacketEvent<?> clone() {
return this instanceof PacketReceiveEvent ? ((PacketReceiveEvent) this).clone()
: ((PacketSendEvent) this).clone();
}
public void cleanUp() {
if (isClone()) {
ByteBufHelper.release(byteBuf);
}
}
}
@@ -0,0 +1,80 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.event;
import com.github.retrooper.packetevents.event.simple.*;
import java.lang.reflect.Method;
import java.util.List;
import java.util.Map;
public abstract class SimplePacketListenerAbstract extends PacketListenerCommon {
public SimplePacketListenerAbstract(PacketListenerPriority priority) {
super(priority);
}
public SimplePacketListenerAbstract() {
super();
}
@Override
void onPacketReceive(PacketReceiveEvent event) {
if (event instanceof PacketHandshakeReceiveEvent) {
onPacketHandshakeReceive((PacketHandshakeReceiveEvent) event);
} else if (event instanceof PacketStatusReceiveEvent) {
onPacketStatusReceive((PacketStatusReceiveEvent) event);
} else if (event instanceof PacketLoginReceiveEvent) {
onPacketLoginReceive((PacketLoginReceiveEvent) event);
} else if (event instanceof PacketPlayReceiveEvent) {
onPacketPlayReceive((PacketPlayReceiveEvent) event);
}
}
@Override
void onPacketSend(PacketSendEvent event) {
if (event instanceof PacketStatusSendEvent) {
onPacketStatusSend((PacketStatusSendEvent) event);
} else if (event instanceof PacketLoginSendEvent) {
onPacketLoginSend((PacketLoginSendEvent) event);
} else if (event instanceof PacketPlaySendEvent) {
onPacketPlaySend((PacketPlaySendEvent) event);
}
}
public void onPacketHandshakeReceive(PacketHandshakeReceiveEvent event) {
}
public void onPacketStatusReceive(PacketStatusReceiveEvent event) {
}
public void onPacketStatusSend(PacketStatusSendEvent event) {
}
public void onPacketLoginReceive(PacketLoginReceiveEvent event) {
}
public void onPacketLoginSend(PacketLoginSendEvent event) {
}
public void onPacketPlayReceive(PacketPlayReceiveEvent event) {
}
public void onPacketPlaySend(PacketPlaySendEvent event) {
}
}
@@ -0,0 +1,50 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.event;
import com.github.retrooper.packetevents.protocol.player.User;
public class UserConnectEvent extends PacketEvent implements CancellableEvent, UserEvent{
private final User user;
private boolean cancelled;
public UserConnectEvent(User user) {
this.user = user;
}
@Override
public User getUser() {
return user;
}
@Override
public boolean isCancelled() {
return cancelled;
}
@Override
public void setCancelled(boolean cancelled) {
this.cancelled = cancelled;
}
@Override
public void call(PacketListenerCommon listener) {
listener.onUserConnect(this);
}
}
@@ -0,0 +1,39 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.event;
import com.github.retrooper.packetevents.protocol.player.User;
public class UserDisconnectEvent extends PacketEvent implements UserEvent {
private final User user;
public UserDisconnectEvent(User user) {
this.user = user;
}
@Override
public User getUser() {
return user;
}
@Override
public void call(PacketListenerCommon listener) {
listener.onUserDisconnect(this);
}
}
@@ -0,0 +1,31 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.event;
import com.github.retrooper.packetevents.protocol.player.User;
/**
* Event that involves users.
*
* @author retrooper
* @since 2.0.0
*/
public interface UserEvent {
User getUser();
}
@@ -0,0 +1,46 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.event;
import com.github.retrooper.packetevents.protocol.player.User;
public class UserLoginEvent extends PacketEvent implements CallableEvent, UserEvent, PlayerEvent<Object> {
private final User user;
private final Object player;
public UserLoginEvent(User user, Object player) {
this.user = user;
this.player = player;
}
@Override
public User getUser() {
return user;
}
@Override
public Object getPlayer() {
return player;
}
@Override
public void call(PacketListenerCommon listener) {
listener.onUserLogin(this);
}
}
@@ -0,0 +1,58 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.event.simple;
import com.github.retrooper.packetevents.event.PacketReceiveEvent;
import com.github.retrooper.packetevents.exception.PacketProcessException;
import com.github.retrooper.packetevents.manager.server.ServerVersion;
import com.github.retrooper.packetevents.netty.buffer.ByteBufHelper;
import com.github.retrooper.packetevents.protocol.packettype.PacketType;
import com.github.retrooper.packetevents.protocol.packettype.PacketTypeCommon;
import com.github.retrooper.packetevents.protocol.player.User;
public class PacketHandshakeReceiveEvent extends PacketReceiveEvent {
public PacketHandshakeReceiveEvent(Object channel, User user,
Object player, Object rawByteBuf,
boolean autoProtocolTranslation) throws PacketProcessException {
super(channel, user, player, rawByteBuf, autoProtocolTranslation);
}
protected PacketHandshakeReceiveEvent(int packetId, PacketTypeCommon packetType,
ServerVersion serverVersion,
Object channel,
User user, Object player, Object byteBuf) throws PacketProcessException {
super(packetId, packetType, serverVersion, channel, user, player, byteBuf);
}
@Override
public PacketHandshakeReceiveEvent clone() {
try {
Object clonedBuffer = ByteBufHelper.retainedDuplicate(getByteBuf());
return new PacketHandshakeReceiveEvent(getPacketId(), getPacketType(), getServerVersion(),
getChannel(), getUser(), getPlayer(), clonedBuffer);
} catch (PacketProcessException e) {
e.printStackTrace();
}
return null;
}
public PacketType.Handshaking.Client getPacketType() {
return (PacketType.Handshaking.Client) super.getPacketType();
}
}
@@ -0,0 +1,59 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.event.simple;
import com.github.retrooper.packetevents.event.PacketReceiveEvent;
import com.github.retrooper.packetevents.exception.PacketProcessException;
import com.github.retrooper.packetevents.manager.server.ServerVersion;
import com.github.retrooper.packetevents.netty.buffer.ByteBufHelper;
import com.github.retrooper.packetevents.protocol.packettype.PacketType;
import com.github.retrooper.packetevents.protocol.packettype.PacketTypeCommon;
import com.github.retrooper.packetevents.protocol.player.User;
public class PacketLoginReceiveEvent extends PacketReceiveEvent {
public PacketLoginReceiveEvent(Object channel, User user, Object player,
Object rawByteBuf,
boolean autoProtocolTranslation) throws PacketProcessException {
super(channel, user, player, rawByteBuf, autoProtocolTranslation);
}
protected PacketLoginReceiveEvent(int packetId, PacketTypeCommon packetType,
ServerVersion serverVersion,
Object channel,
User user, Object player, Object byteBuf) throws PacketProcessException {
super(packetId, packetType, serverVersion, channel, user, player, byteBuf);
}
@Override
public PacketLoginReceiveEvent clone() {
try {
Object clonedBuffer = ByteBufHelper.retainedDuplicate(getByteBuf());
return new PacketLoginReceiveEvent(getPacketId(), getPacketType(), getServerVersion(),
getChannel(), getUser(), getPlayer(), clonedBuffer);
} catch (PacketProcessException e) {
e.printStackTrace();
}
return null;
}
public PacketType.Login.Client getPacketType() {
return (PacketType.Login.Client) super.getPacketType();
}
}
@@ -0,0 +1,57 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.event.simple;
import com.github.retrooper.packetevents.event.PacketSendEvent;
import com.github.retrooper.packetevents.exception.PacketProcessException;
import com.github.retrooper.packetevents.manager.server.ServerVersion;
import com.github.retrooper.packetevents.netty.buffer.ByteBufHelper;
import com.github.retrooper.packetevents.protocol.packettype.PacketType;
import com.github.retrooper.packetevents.protocol.packettype.PacketTypeCommon;
import com.github.retrooper.packetevents.protocol.player.User;
public class PacketLoginSendEvent extends PacketSendEvent {
public PacketLoginSendEvent(Object channel, User user, Object player, Object rawByteBuf,
boolean autoProtocolTranslation) throws PacketProcessException {
super(channel, user, player, rawByteBuf, autoProtocolTranslation);
}
protected PacketLoginSendEvent(int packetId, PacketTypeCommon packetType,
ServerVersion serverVersion,
Object channel,
User user, Object player, Object byteBuf) throws PacketProcessException {
super(packetId, packetType, serverVersion, channel, user, player, byteBuf);
}
@Override
public PacketLoginSendEvent clone() {
try {
Object clonedBuffer = ByteBufHelper.retainedDuplicate(getByteBuf());
return new PacketLoginSendEvent(getPacketId(), getPacketType(), getServerVersion(),
getChannel(), getUser(), getPlayer(), clonedBuffer);
} catch (PacketProcessException e) {
e.printStackTrace();
}
return null;
}
public PacketType.Login.Server getPacketType() {
return (PacketType.Login.Server) super.getPacketType();
}
}
@@ -0,0 +1,58 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.event.simple;
import com.github.retrooper.packetevents.event.PacketReceiveEvent;
import com.github.retrooper.packetevents.exception.PacketProcessException;
import com.github.retrooper.packetevents.manager.server.ServerVersion;
import com.github.retrooper.packetevents.netty.buffer.ByteBufHelper;
import com.github.retrooper.packetevents.protocol.packettype.PacketType;
import com.github.retrooper.packetevents.protocol.packettype.PacketTypeCommon;
import com.github.retrooper.packetevents.protocol.player.User;
public class PacketPlayReceiveEvent extends PacketReceiveEvent {
public PacketPlayReceiveEvent(Object channel, User user,
Object player, Object rawByteBuf,
boolean autoProtocolTranslation) throws PacketProcessException {
super(channel, user, player, rawByteBuf, autoProtocolTranslation);
}
protected PacketPlayReceiveEvent(int packetId, PacketTypeCommon packetType,
ServerVersion serverVersion,
Object channel,
User user, Object player, Object byteBuf) throws PacketProcessException {
super(packetId, packetType, serverVersion, channel, user, player, byteBuf);
}
@Override
public PacketPlayReceiveEvent clone() {
try {
Object clonedBuffer = ByteBufHelper.retainedDuplicate(getByteBuf());
return new PacketPlayReceiveEvent(getPacketId(), getPacketType(), getServerVersion(),
getChannel(), getUser(), getPlayer(), clonedBuffer);
} catch (PacketProcessException e) {
e.printStackTrace();
}
return null;
}
public PacketType.Play.Client getPacketType() {
return (PacketType.Play.Client) super.getPacketType();
}
}
@@ -0,0 +1,58 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.event.simple;
import com.github.retrooper.packetevents.event.PacketSendEvent;
import com.github.retrooper.packetevents.exception.PacketProcessException;
import com.github.retrooper.packetevents.manager.server.ServerVersion;
import com.github.retrooper.packetevents.netty.buffer.ByteBufHelper;
import com.github.retrooper.packetevents.protocol.packettype.PacketType;
import com.github.retrooper.packetevents.protocol.packettype.PacketTypeCommon;
import com.github.retrooper.packetevents.protocol.player.User;
public class PacketPlaySendEvent extends PacketSendEvent {
public PacketPlaySendEvent(Object channel, User user,
Object player, Object rawByteBuf,
boolean autoProtocolTranslation) throws PacketProcessException {
super(channel, user, player, rawByteBuf, autoProtocolTranslation);
}
protected PacketPlaySendEvent(int packetId, PacketTypeCommon packetType,
ServerVersion serverVersion,
Object channel,
User user, Object player, Object byteBuf) throws PacketProcessException {
super(packetId, packetType, serverVersion, channel, user, player, byteBuf);
}
@Override
public PacketPlaySendEvent clone() {
try {
Object clonedBuffer = ByteBufHelper.retainedDuplicate(getByteBuf());
return new PacketPlaySendEvent(getPacketId(), getPacketType(), getServerVersion(),
getChannel(), getUser(), getPlayer(), clonedBuffer);
} catch (PacketProcessException e) {
e.printStackTrace();
}
return null;
}
public PacketType.Play.Server getPacketType() {
return (PacketType.Play.Server) super.getPacketType();
}
}
@@ -0,0 +1,58 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.event.simple;
import com.github.retrooper.packetevents.event.PacketReceiveEvent;
import com.github.retrooper.packetevents.exception.PacketProcessException;
import com.github.retrooper.packetevents.manager.server.ServerVersion;
import com.github.retrooper.packetevents.netty.buffer.ByteBufHelper;
import com.github.retrooper.packetevents.protocol.packettype.PacketType;
import com.github.retrooper.packetevents.protocol.packettype.PacketTypeCommon;
import com.github.retrooper.packetevents.protocol.player.User;
public class PacketStatusReceiveEvent extends PacketReceiveEvent {
public PacketStatusReceiveEvent(Object channel, User user,
Object player, Object rawByteBuf,
boolean autoProtocolTranslation) throws PacketProcessException {
super(channel, user, player, rawByteBuf, autoProtocolTranslation);
}
protected PacketStatusReceiveEvent(int packetId, PacketTypeCommon packetType,
ServerVersion serverVersion,
Object channel,
User user, Object player, Object byteBuf) throws PacketProcessException {
super(packetId, packetType, serverVersion, channel, user, player, byteBuf);
}
@Override
public PacketStatusReceiveEvent clone() {
try {
Object clonedBuffer = ByteBufHelper.retainedDuplicate(getByteBuf());
return new PacketStatusReceiveEvent(getPacketId(), getPacketType(), getServerVersion(),
getChannel(), getUser(), getPlayer(), clonedBuffer);
} catch (PacketProcessException e) {
e.printStackTrace();
}
return null;
}
public PacketType.Status.Client getPacketType() {
return (PacketType.Status.Client) super.getPacketType();
}
}
@@ -0,0 +1,58 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.event.simple;
import com.github.retrooper.packetevents.event.PacketSendEvent;
import com.github.retrooper.packetevents.exception.PacketProcessException;
import com.github.retrooper.packetevents.manager.server.ServerVersion;
import com.github.retrooper.packetevents.netty.buffer.ByteBufHelper;
import com.github.retrooper.packetevents.protocol.packettype.PacketType;
import com.github.retrooper.packetevents.protocol.packettype.PacketTypeCommon;
import com.github.retrooper.packetevents.protocol.player.User;
public class PacketStatusSendEvent extends PacketSendEvent {
public PacketStatusSendEvent(Object channel, User user, Object player, Object rawByteBuf,
boolean autoProtocolTranslation) throws PacketProcessException {
super(channel, user, player, rawByteBuf, autoProtocolTranslation);
}
protected PacketStatusSendEvent(int packetId, PacketTypeCommon packetType,
ServerVersion serverVersion,
Object channel,
User user, Object player, Object byteBuf) throws PacketProcessException {
super(packetId, packetType, serverVersion, channel, user, player, byteBuf);
}
@Override
public PacketStatusSendEvent clone() {
try {
Object clonedBuffer = ByteBufHelper.retainedDuplicate(getByteBuf());
return new PacketStatusSendEvent(getPacketId(), getPacketType(), getServerVersion(),
getChannel(), getUser(), getPlayer(), clonedBuffer);
} catch (PacketProcessException e) {
e.printStackTrace();
}
return null;
}
public PacketType.Status.Server getPacketType() {
return (PacketType.Status.Server) super.getPacketType();
}
}
@@ -0,0 +1,33 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.exception;
public class PacketProcessException extends Exception {
public PacketProcessException(String msg, Throwable cause) {
super(msg, cause);
}
public PacketProcessException(Throwable cause) {
super(cause);
}
public PacketProcessException(String msg) {
super(msg);
}
}
@@ -0,0 +1,43 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.injector;
import com.github.retrooper.packetevents.protocol.ConnectionState;
import com.github.retrooper.packetevents.protocol.player.User;
import org.jetbrains.annotations.Nullable;
public interface ChannelInjector {
default boolean isServerBound() {
return true;
}
void inject();
void uninject();
User getUser(Object channel);
void changeConnectionState(Object channel, @Nullable ConnectionState connectionState);
void updateUser(Object channel, User user);
void setPlayer(Object channel, Object player);
boolean hasPlayer(Object player);
}
@@ -0,0 +1,137 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.manager;
import com.github.retrooper.packetevents.PacketEvents;
import com.github.retrooper.packetevents.event.PacketListenerAbstract;
import com.github.retrooper.packetevents.event.PacketListenerPriority;
import com.github.retrooper.packetevents.event.PacketReceiveEvent;
import com.github.retrooper.packetevents.event.PacketSendEvent;
import com.github.retrooper.packetevents.manager.protocol.ProtocolManager;
import com.github.retrooper.packetevents.manager.server.ServerVersion;
import com.github.retrooper.packetevents.protocol.ConnectionState;
import com.github.retrooper.packetevents.protocol.nbt.NBTCompound;
import com.github.retrooper.packetevents.protocol.nbt.NBTList;
import com.github.retrooper.packetevents.protocol.packettype.PacketType;
import com.github.retrooper.packetevents.protocol.player.ClientVersion;
import com.github.retrooper.packetevents.protocol.player.User;
import com.github.retrooper.packetevents.protocol.player.UserProfile;
import com.github.retrooper.packetevents.wrapper.handshaking.client.WrapperHandshakingClientHandshake;
import com.github.retrooper.packetevents.wrapper.login.server.WrapperLoginServerLoginSuccess;
import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerJoinGame;
import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerRespawn;
import java.net.InetSocketAddress;
public class InternalPacketListener extends PacketListenerAbstract {
public InternalPacketListener() {
this(PacketListenerPriority.LOWEST);
}
public InternalPacketListener(PacketListenerPriority priority) {
super(priority);
}
@Override
public void onPacketSend(PacketSendEvent event) {
User user = event.getUser();
if (event.getPacketType() == PacketType.Login.Server.LOGIN_SUCCESS) {
Object channel = event.getChannel();
//Process outgoing login success packet
WrapperLoginServerLoginSuccess loginSuccess = new WrapperLoginServerLoginSuccess(event);
UserProfile profile = loginSuccess.getUserProfile();
//Update user profile
user.getProfile().setUUID(profile.getUUID());
user.getProfile().setName(profile.getName());
//Map username with channel
ProtocolManager.CHANNELS.put(profile.getName(), channel);
PacketEvents.getAPI().getLogManager().debug("Mapped player username with their channel.");
//Update connection state(injectors might do some adjustments when we transition into PLAY state)
//This also updates it for the user instance
event.getPostTasks().add(() -> {
PacketEvents.getAPI().getInjector().changeConnectionState(channel, ConnectionState.PLAY);
PacketEvents.getAPI().getLogManager().debug("Transitioned " + profile.getName() + " into the PLAY state!");
});
}
// Join game can be used to update world height, and sets dimension data
if (event.getPacketType() == PacketType.Play.Server.JOIN_GAME) {
WrapperPlayServerJoinGame joinGame = new WrapperPlayServerJoinGame(event);
user.setEntityId(joinGame.getEntityId());
if (event.getServerVersion().isOlderThanOrEquals(ServerVersion.V_1_16_5)) {
return; // Fixed world height, no tags are sent to the client
}
// Store world height
NBTList<NBTCompound> list = joinGame.getDimensionCodec()
.getCompoundTagOrNull("minecraft:dimension_type").getCompoundListTagOrNull("value");
user.setWorldNBT(list);
// Update world height
NBTCompound worldNBT = user.getWorldNBT(joinGame.getDimension().getType().getName()).getCompoundTagOrNull("element");
user.setMinWorldHeight(worldNBT.getNumberTagOrNull("min_y").getAsInt());
user.setTotalWorldHeight(worldNBT.getNumberTagOrNull("height").getAsInt());
}
// Respawn is used to switch dimensions
if (event.getPacketType() == PacketType.Play.Server.RESPAWN) {
if (event.getServerVersion()
.isOlderThanOrEquals(ServerVersion.V_1_16_5)) {
return; // Fixed world height, no tags are sent to the client
}
WrapperPlayServerRespawn respawn = new WrapperPlayServerRespawn(event);
NBTCompound worldNBT = user.getWorldNBT(respawn.getDimension().getType().getName()).getCompoundTagOrNull("element"); // This is 1.17+, it always sends the world name
user.setMinWorldHeight(worldNBT.getNumberTagOrNull("min_y").getAsInt());
user.setTotalWorldHeight(worldNBT.getNumberTagOrNull("height").getAsInt());
}
}
@Override
public void onPacketReceive(PacketReceiveEvent event) {
User user = event.getUser();
if (event.getPacketType() == PacketType.Handshaking.Client.HANDSHAKE) {
Object channel = event.getChannel();
InetSocketAddress address = event.getSocketAddress();
WrapperHandshakingClientHandshake handshake;
try {
handshake = new WrapperHandshakingClientHandshake(event);
} catch (ArrayIndexOutOfBoundsException exception) {
user.closeConnection();
PacketEvents.getAPI().getLogManager().debug("Disconnected " + address.getHostString() + ":" + address.getPort() + " for sending an invalid handshaking packet. They might be on an outdated client.");
return;
}
ConnectionState nextState = handshake.getNextConnectionState();
ClientVersion clientVersion = handshake.getClientVersion();
//Update client version for this event call(and user)
user.setClientVersion(clientVersion);
PacketEvents.getAPI().getLogManager().debug("Processed " + address.getHostString() + ":" + address.getPort() + "'s client version. Client Version: " + clientVersion.getReleaseName());
event.getPostTasks().add(() -> {
//Transition into the LOGIN OR STATUS connection state
PacketEvents.getAPI().getInjector().changeConnectionState(channel, nextState);
PacketEvents.getAPI().getLogManager().debug("Transitioned " + address.getHostString() + ":" + address.getPort() + " into the " + nextState + " state!");
});
}
}
}
@@ -0,0 +1,136 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.manager.player;
import com.github.retrooper.packetevents.PacketEvents;
import com.github.retrooper.packetevents.protocol.ConnectionState;
import com.github.retrooper.packetevents.protocol.player.ClientVersion;
import com.github.retrooper.packetevents.protocol.player.User;
import com.github.retrooper.packetevents.wrapper.PacketWrapper;
import org.jetbrains.annotations.NotNull;
public interface PlayerManager {
int getPing(@NotNull Object player);
@NotNull ClientVersion getClientVersion(@NotNull Object player);
Object getChannel(@NotNull Object player);
@NotNull User getUser(@NotNull Object player);
default ConnectionState getConnectionState(@NotNull Object player) {
return getUser(player).getConnectionState();
}
default void sendPacket(@NotNull Object player, @NotNull Object byteBuf) {
PacketEvents.getAPI().getProtocolManager().sendPacket(getChannel(player), byteBuf);
}
default void sendPacketAsync(@NotNull Object player, @NotNull Object byteBuf) {
PacketEvents.getAPI().getProtocolManager().sendPacketAsync(getChannel(player), byteBuf);
}
default void sendPacket(@NotNull Object player, @NotNull PacketWrapper<?> wrapper) {
PacketEvents.getAPI().getProtocolManager().sendPacket(getChannel(player), wrapper);
}
default void sendPacketAsync(@NotNull Object player, @NotNull PacketWrapper<?> wrapper) {
PacketEvents.getAPI().getProtocolManager().sendPacketAsync(getChannel(player), wrapper);
}
default void sendPacketSilently(@NotNull Object player, @NotNull Object byteBuf) {
PacketEvents.getAPI().getProtocolManager().sendPacketSilently(getChannel(player), byteBuf);
}
default void sendPacketSilentlyAsync(@NotNull Object player, @NotNull Object byteBuf) {
PacketEvents.getAPI().getProtocolManager().sendPacketSilentlyAsync(getChannel(player), byteBuf);
}
default void sendPacketSilently(@NotNull Object player, @NotNull PacketWrapper<?> wrapper) {
PacketEvents.getAPI().getProtocolManager().sendPacketSilently(getChannel(player), wrapper);
}
default void sendPacketSilentlyAsync(@NotNull Object player, @NotNull PacketWrapper<?> wrapper) {
PacketEvents.getAPI().getProtocolManager().sendPacketSilentlyAsync(getChannel(player), wrapper);
}
default void writePacket(@NotNull Object player, @NotNull Object byteBuf) {
PacketEvents.getAPI().getProtocolManager().writePacket(getChannel(player), byteBuf);
}
default void writePacketAsync(@NotNull Object player, @NotNull Object byteBuf) {
PacketEvents.getAPI().getProtocolManager().writePacketAsync(getChannel(player), byteBuf);
}
default void writePacket(@NotNull Object player, @NotNull PacketWrapper<?> wrapper) {
PacketEvents.getAPI().getProtocolManager().writePacket(getChannel(player), wrapper);
}
default void writePacketAsync(@NotNull Object player, @NotNull PacketWrapper<?> wrapper) {
PacketEvents.getAPI().getProtocolManager().writePacketAsync(getChannel(player), wrapper);
}
default void writePacketSilently(@NotNull Object player, @NotNull Object byteBuf) {
PacketEvents.getAPI().getProtocolManager().writePacketSilently(getChannel(player), byteBuf);
}
default void writePacketSilentlyAsync(@NotNull Object player, @NotNull Object byteBuf) {
PacketEvents.getAPI().getProtocolManager().writePacketSilentlyAsync(getChannel(player), byteBuf);
}
default void writePacketSilently(@NotNull Object player, @NotNull PacketWrapper<?> wrapper) {
PacketEvents.getAPI().getProtocolManager().writePacketSilently(getChannel(player), wrapper);
}
default void writePacketSilentlyAsync(@NotNull Object player, @NotNull PacketWrapper<?> wrapper) {
PacketEvents.getAPI().getProtocolManager().writePacketSilentlyAsync(getChannel(player), wrapper);
}
default void receivePacket(Object player, Object byteBuf) {
PacketEvents.getAPI().getProtocolManager().receivePacket(getChannel(player), byteBuf);
}
default void receivePacketAsync(Object player, Object byteBuf) {
PacketEvents.getAPI().getProtocolManager().receivePacketAsync(getChannel(player), byteBuf);
}
default void receivePacket(Object player, PacketWrapper<?> wrapper) {
PacketEvents.getAPI().getProtocolManager().receivePacket(getChannel(player), wrapper);
}
default void receivePacketAsync(Object player, PacketWrapper<?> wrapper) {
PacketEvents.getAPI().getProtocolManager().receivePacketAsync(getChannel(player), wrapper);
}
default void receivePacketSilently(Object player, Object byteBuf) {
PacketEvents.getAPI().getProtocolManager().receivePacketSilently(getChannel(player), byteBuf);
}
default void receivePacketSilentlyAsync(Object player, Object byteBuf) {
PacketEvents.getAPI().getProtocolManager().receivePacketSilentlyAsync(getChannel(player), byteBuf);
}
default void receivePacketSilently(Object player, PacketWrapper<?> wrapper) {
PacketEvents.getAPI().getProtocolManager().receivePacketSilently(getChannel(player), wrapper);
}
default void receivePacketSilentlyAsync(Object player, PacketWrapper<?> wrapper) {
PacketEvents.getAPI().getProtocolManager().receivePacketSilentlyAsync(getChannel(player), wrapper);
}
}
@@ -0,0 +1,209 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.manager.protocol;
import com.github.retrooper.packetevents.PacketEvents;
import com.github.retrooper.packetevents.netty.channel.ChannelHelper;
import com.github.retrooper.packetevents.protocol.ConnectionState;
import com.github.retrooper.packetevents.protocol.ProtocolVersion;
import com.github.retrooper.packetevents.protocol.player.ClientVersion;
import com.github.retrooper.packetevents.protocol.player.User;
import com.github.retrooper.packetevents.util.PacketTransformationUtil;
import com.github.retrooper.packetevents.wrapper.PacketWrapper;
import org.jetbrains.annotations.Nullable;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public interface ProtocolManager {
Map<String, Object> CHANNELS = new ConcurrentHashMap<>();
Map<Object, User> USERS = new ConcurrentHashMap<>();
default Collection<User> getUsers() {
return USERS.values();
}
default Collection<Object> getChannels() {
return CHANNELS.values();
}
//Methods to implement
ProtocolVersion getPlatformVersion();
void sendPacket(Object channel, Object packet);
void sendPacketSilently(Object channel, Object packet);
void writePacket(Object channel, Object packet);
void writePacketSilently(Object channel, Object packet);
void receivePacket(Object channel, Object packet);
void receivePacketSilently(Object channel, Object packet);
ClientVersion getClientVersion(Object channel);
default void sendPacketAsync(Object channel, Object byteBuf) {
ChannelHelper.runInEventLoop(channel, () -> {
sendPacket(channel, byteBuf);
});
}
default void sendPacketSilentlyAsync(Object channel, Object byteBuf) {
ChannelHelper.runInEventLoop(channel, () -> {
sendPacketSilently(channel, byteBuf);
});
}
default void writePacketAsync(Object channel, Object byteBuf) {
ChannelHelper.runInEventLoop(channel, () -> {
writePacket(channel, byteBuf);
});
}
default void writePacketSilentlyAsync(Object channel, Object byteBuf) {
ChannelHelper.runInEventLoop(channel, () -> {
writePacketSilently(channel, byteBuf);
});
}
default void receivePacketAsync(Object channel, Object byteBuf) {
ChannelHelper.runInEventLoop(channel, () -> {
receivePacket(channel, byteBuf);
});
}
default void receivePacketSilentlyAsync(Object channel, Object byteBuf) {
ChannelHelper.runInEventLoop(channel, () -> {
receivePacketSilently(channel, byteBuf);
});
}
//TODO Make it clear that this only updates the connection state in our user.
//Sometimes you should use getInjector().changeConnectionState because that can allow the injector to make adjustments.
//This is very important, especially on Spigot.
//As soon as we switch to the play state on spigot, our injector makes some adjustments.
default void changeConnectionState(Object channel, ConnectionState connectionState) {
getUser(channel).setConnectionState(connectionState);
}
default void setClientVersion(Object channel, ClientVersion version) {
getUser(channel).setClientVersion(version);
}
default void sendPacket(Object channel, PacketWrapper<?> wrapper) {
PacketWrapper<?>[] wrappers = PacketTransformationUtil.transform(wrapper);
for (PacketWrapper<?> packet : wrappers) {
packet.prepareForSend();
sendPacket(channel, packet.buffer);
}
}
default void sendPacketAsync(Object channel, PacketWrapper<?> wrapper) {
ChannelHelper.runInEventLoop(channel, () -> {
sendPacket(channel, wrapper);
});
}
default void sendPacketSilently(Object channel, PacketWrapper<?> wrapper) {
PacketWrapper<?>[] wrappers = PacketTransformationUtil.transform(wrapper);
for (PacketWrapper<?> packet : wrappers) {
packet.prepareForSend();
sendPacketSilently(channel, packet.buffer);
}
}
default void sendPacketSilentlyAsync(Object channel, PacketWrapper<?> wrapper) {
ChannelHelper.runInEventLoop(channel, () -> {
sendPacketSilently(channel, wrapper);
});
}
default void writePacket(Object channel, PacketWrapper<?> wrapper) {
PacketWrapper<?>[] wrappers = PacketTransformationUtil.transform(wrapper);
for (PacketWrapper<?> packet : wrappers) {
packet.prepareForSend();
writePacket(channel, packet.buffer);
}
}
default void writePacketAsync(Object channel, PacketWrapper<?> wrapper) {
ChannelHelper.runInEventLoop(channel, () -> {
writePacket(channel, wrapper);
});
}
default void writePacketSilently(Object channel, PacketWrapper<?> wrapper) {
PacketWrapper<?>[] wrappers = PacketTransformationUtil.transform(wrapper);
for (PacketWrapper<?> packet : wrappers) {
packet.prepareForSend();
writePacketSilently(channel, packet.buffer);
}
}
default void writePacketSilentlyAsync(Object channel, PacketWrapper<?> wrapper) {
ChannelHelper.runInEventLoop(channel, () -> {
writePacketSilently(channel, wrapper);
});
}
default void receivePacket(Object channel, PacketWrapper<?> wrapper) {
PacketWrapper<?>[] wrappers = PacketTransformationUtil.transform(wrapper);
for (PacketWrapper<?> packet : wrappers) {
packet.prepareForSend();
receivePacket(channel, packet.buffer);
}
}
default void receivePacketAsync(Object channel, PacketWrapper<?> wrapper) {
ChannelHelper.runInEventLoop(channel, () -> {
receivePacket(channel, wrapper);
});
}
default void receivePacketSilently(Object channel, PacketWrapper<?> wrapper) {
PacketWrapper<?>[] wrappers = PacketTransformationUtil.transform(wrapper);
for (PacketWrapper<?> packet : wrappers) {
packet.prepareForSend();
receivePacketSilently(channel, packet.buffer);
}
}
default void receivePacketSilentlyAsync(Object channel, PacketWrapper<?> wrapper) {
ChannelHelper.runInEventLoop(channel, () -> {
receivePacketSilently(channel, wrapper);
});
}
default User getUser(Object channel) {
return USERS.get(channel);
}
default void setUser(Object channel, User user) {
USERS.put(channel, user);
PacketEvents.getAPI().getInjector().updateUser(channel, user);
}
default Object getChannel(String username) {
return CHANNELS.get(username);
}
}
@@ -0,0 +1,37 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.manager.server;
public interface ServerManager {
/**
* Get the server version.
*
* @return Get Server Version
*/
ServerVersion getVersion();
/**
* Get the operating system of the local machine
*
* @return Get Operating System
*/
default SystemOS getOS() {
return SystemOS.getOS();
}
}
@@ -0,0 +1,219 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.manager.server;
import com.github.retrooper.packetevents.protocol.player.ClientVersion;
/**
* Server Version.
* This is a nice wrapper over minecraft's protocol versions.
* You won't have to memorize the protocol version, just memorize the server version you see in the launcher.
*
* @author retrooper
* @see <a href="https://wiki.vg/Protocol_version_numbers">https://wiki.vg/Protocol_version_numbers</a>
* @since 1.6.9
*/
public enum ServerVersion {
//TODO Rename to PlatformVersion or LocalVersion or Version?
V_1_7_10(5),
V_1_8(47), V_1_8_3(47), V_1_8_8(47),
V_1_9(107), V_1_9_2(109), V_1_9_4(110),
//1.10 and 1.10.1 are redundant
V_1_10(210), V_1_10_1(210), V_1_10_2(210),
V_1_11(315), V_1_11_2(316),
V_1_12(335), V_1_12_1(338), V_1_12_2(340),
V_1_13(393), V_1_13_1(401), V_1_13_2(404),
V_1_14(477), V_1_14_1(480), V_1_14_2(485), V_1_14_3(490), V_1_14_4(498),
V_1_15(573), V_1_15_1(575), V_1_15_2(578),
V_1_16(735), V_1_16_1(736), V_1_16_2(751), V_1_16_3(753), V_1_16_4(754), V_1_16_5(754),
V_1_17(755), V_1_17_1(756),
V_1_18(757), V_1_18_1(757), V_1_18_2(758),
//TODO UPDATE Add server version constant
ERROR(-1, true);
private static final ServerVersion[] VALUES = values();
private static final ServerVersion[] REVERSED_VALUES;
static {
REVERSED_VALUES = values();
int i = 0;
int j = REVERSED_VALUES.length - 1;
ServerVersion tmp;
while (j > i) {
tmp = REVERSED_VALUES[j];
REVERSED_VALUES[j--] = REVERSED_VALUES[i];
REVERSED_VALUES[i++] = tmp;
}
}
private final int protocolVersion;
private final String name;
ServerVersion(int protocolVersion) {
this.protocolVersion = protocolVersion;
this.name = name().substring(2).replace("_", ".");
}
ServerVersion(int protocolVersion, boolean isNotRelease) {
this.protocolVersion = protocolVersion;
if (isNotRelease) {
this.name = name();
} else {
this.name = name().substring(2).replace("_", ".");
}
}
public static ServerVersion[] reversedValues() {
return REVERSED_VALUES;
}
public static ServerVersion getLatest() {
return reversedValues()[1];
}
public static ServerVersion getOldest() {
return values()[0];
}
//TODO Optimize
@Deprecated
public static ServerVersion getById(int protocolVersion) {
for (ServerVersion version : values()) {
if (version.protocolVersion == protocolVersion) {
return version;
}
}
return null;
}
public ClientVersion toClientVersion() {
return ClientVersion.getById(this.protocolVersion);
}
/**
* Get the release name of this server version.
* For example, for the V_1_18 enum constant, it would return "1.18".
* @return Release name
*/
public String getReleaseName() {
return name;
}
/**
* Get this server version's protocol version.
*
* @return Protocol version.
*/
public int getProtocolVersion() {
return protocolVersion;
}
/**
* Is this server version newer than the compared server version?
* This method simply checks if this server version's protocol version is greater than
* the compared server version's protocol version.
*
* @param target Compared server version.
* @return Is this server version newer than the compared server version.
*/
public boolean isNewerThan(ServerVersion target) {
/*
* Some server versions have the same protocol version in the minecraft protocol.
* We still need this method to work in such cases.
* We first check if this is the case, if the protocol versions aren't the same, we can just use the protocol versions
* to compare the server versions.
*/
if (target.protocolVersion != protocolVersion || this == target) {
return protocolVersion > target.protocolVersion;
}
/*
* The server versions unfortunately have the same protocol version.
* We need to look at this "reversedValues" variable.
* The reversed values variable is an array containing all enum constants in this enum but in a reversed order.
* I already made this variable a while ago for a different usage, you can check that out.
* The first one we find in the array is the newer version.
*/
for (ServerVersion version : reversedValues()) {
if (version == target) {
return false;
}
if (version == this) return true;
}
return false;
}
/**
* Is this server version older than the compared server version?
* This method simply checks if this server version's protocol version is less than
* the compared server version's protocol version.
*
* @param target Compared server version.
* @return Is this server version older than the compared server version.
*/
public boolean isOlderThan(ServerVersion target) {
/*
* Some server versions have the same protocol version in the minecraft protocol.
* We still need this method to work in such cases.
* We first check if this is the case, if the protocol versions aren't the same, we can just use the protocol versions
* to compare the server versions.
*/
if (target.protocolVersion != protocolVersion || this == target) {
return protocolVersion < target.protocolVersion;
}
/*
* The server versions unfortunately have the same protocol version.
* We look at all enum constants in the ServerVersion enum in the order they have been defined in.
* The first one we find in the array is the newer version.
*/
for (ServerVersion version : VALUES) {
if (version == this) {
return true;
} else if (version == target) {
return false;
}
}
return false;
}
/**
* Is this server version newer than or equal to the compared server version?
* This method simply checks if this server version's protocol version is greater than or equal to
* the compared server version's protocol version.
*
* @param target Compared server version.
* @return Is this server version newer than or equal to the compared server version.
*/
public boolean isNewerThanOrEquals(ServerVersion target) {
return this == target || isNewerThan(target);
}
/**
* Is this server version older than or equal to the compared server version?
* This method simply checks if this server version's protocol version is older than or equal to
* the compared server version's protocol version.
*
* @param target Compared server version.
* @return Is this server version older than or equal to the compared server version.
*/
public boolean isOlderThanOrEquals(ServerVersion target) {
return this == target || isOlderThan(target);
}
}
@@ -0,0 +1,61 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.manager.server;
/**
* System Operating system.
*
* @author retrooper
* @since 1.7
*/
public enum SystemOS {
WINDOWS, MACOS, LINUX, OTHER;
private static SystemOS CACHE;
/**
* Get the server's operating system.
* This method will NOT cache.
*
* @return Operating System.
*/
public static SystemOS getOSNoCache() {
final String os = System.getProperty("os.name").toLowerCase();
for (SystemOS sysos : values()) {
if (os.contains(sysos.name().toLowerCase())) {
return sysos;
}
}
return OTHER;
}
/**
* Get the server's operating system.
* This method will CACHE for you.
*
* @return Operating System.
*/
public static SystemOS getOS() {
if (CACHE == null) {
CACHE = getOSNoCache();
}
return CACHE;
}
}
@@ -0,0 +1,31 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.netty;
import com.github.retrooper.packetevents.netty.buffer.ByteBufAllocationOperator;
import com.github.retrooper.packetevents.netty.buffer.ByteBufOperator;
import com.github.retrooper.packetevents.netty.channel.ChannelOperator;
public interface NettyManager {
ChannelOperator getChannelOperator();
ByteBufOperator getByteBufOperator();
ByteBufAllocationOperator getByteBufAllocationOperator();
}
@@ -0,0 +1,31 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.netty.buffer;
public interface ByteBufAllocationOperator {
Object wrappedBuffer(byte[] bytes);
Object copiedBuffer(byte[] bytes);
Object buffer();
Object directBuffer();
Object compositeBuffer();
}
@@ -0,0 +1,257 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.netty.buffer;
import com.github.retrooper.packetevents.PacketEvents;
import java.nio.charset.Charset;
public class ByteBufHelper {
public static int readerIndex(Object buffer) {
return PacketEvents.getAPI().getNettyManager().getByteBufOperator().readerIndex(buffer);
}
public static Object readerIndex(Object buffer, int readerIndex) {
return PacketEvents.getAPI().getNettyManager().getByteBufOperator().readerIndex(buffer, readerIndex);
}
public static int writerIndex(Object buffer) {
return PacketEvents.getAPI().getNettyManager().getByteBufOperator().writerIndex(buffer);
}
public static Object writerIndex(Object buffer, int writerIndex) {
return PacketEvents.getAPI().getNettyManager().getByteBufOperator().writerIndex(buffer, writerIndex);
}
public static int readableBytes(Object buffer) {
return PacketEvents.getAPI().getNettyManager().getByteBufOperator().readableBytes(buffer);
}
public static int writableBytes(Object buffer) {
return PacketEvents.getAPI().getNettyManager().getByteBufOperator().writableBytes(buffer);
}
public static Object clear(Object buffer) {
return PacketEvents.getAPI().getNettyManager().getByteBufOperator().clear(buffer);
}
public static String toString(Object buffer, int index, int length, Charset charset) {
return PacketEvents.getAPI().getNettyManager().getByteBufOperator().toString(buffer, index, length, charset);
}
public static byte readByte(Object buffer) {
return PacketEvents.getAPI().getNettyManager().getByteBufOperator().readByte(buffer);
}
public static void writeByte(Object buffer, int value) {
PacketEvents.getAPI().getNettyManager().getByteBufOperator().writeByte(buffer, value);
}
public static boolean readBoolean(Object buffer) {
return PacketEvents.getAPI().getNettyManager().getByteBufOperator().readBoolean(buffer);
}
public static void writeBoolean(Object buffer, boolean value) {
PacketEvents.getAPI().getNettyManager().getByteBufOperator().writeBoolean(buffer, value);
}
public static short readUnsignedByte(Object buffer) {
return PacketEvents.getAPI().getNettyManager().getByteBufOperator().readUnsignedByte(buffer);
}
public static char readChar(Object buffer) {
return PacketEvents.getAPI().getNettyManager().getByteBufOperator().readChar(buffer);
}
public static void writeChar(Object buffer, int value) {
PacketEvents.getAPI().getNettyManager().getByteBufOperator().writeChar(buffer, value);
}
public static short readShort(Object buffer) {
return PacketEvents.getAPI().getNettyManager().getByteBufOperator().readShort(buffer);
}
public static int readUnsignedShort(Object buffer) {
return PacketEvents.getAPI().getNettyManager().getByteBufOperator().readUnsignedShort(buffer);
}
public static void writeShort(Object buffer, int value) {
PacketEvents.getAPI().getNettyManager().getByteBufOperator().writeShort(buffer, value);
}
public static int readInt(Object buffer) {
return PacketEvents.getAPI().getNettyManager().getByteBufOperator().readInt(buffer);
}
public static void writeInt(Object buffer, int value) {
PacketEvents.getAPI().getNettyManager().getByteBufOperator().writeInt(buffer, value);
}
public static long readUnsignedInt(Object buffer) {
return PacketEvents.getAPI().getNettyManager().getByteBufOperator().readUnsignedInt(buffer);
}
public static long readLong(Object buffer) {
return PacketEvents.getAPI().getNettyManager().getByteBufOperator().readLong(buffer);
}
public static void writeLong(Object buffer, long value) {
PacketEvents.getAPI().getNettyManager().getByteBufOperator().writeLong(buffer, value);
}
public static float readFloat(Object buffer) {
return PacketEvents.getAPI().getNettyManager().getByteBufOperator().readFloat(buffer);
}
public static void writeFloat(Object buffer, float value) {
PacketEvents.getAPI().getNettyManager().getByteBufOperator().writeFloat(buffer, value);
}
public static double readDouble(Object buffer) {
return PacketEvents.getAPI().getNettyManager().getByteBufOperator().readDouble(buffer);
}
public static void writeDouble(Object buffer, double value) {
PacketEvents.getAPI().getNettyManager().getByteBufOperator().writeDouble(buffer, value);
}
public static Object getBytes(Object buffer, int index, byte[] destination) {
return PacketEvents.getAPI().getNettyManager().getByteBufOperator().getBytes(buffer, index, destination);
}
public static short getUnsignedByte(Object buffer, int index) {
return PacketEvents.getAPI().getNettyManager().getByteBufOperator().getUnsignedByte(buffer, index);
}
public static boolean isReadable(Object buffer) {
return PacketEvents.getAPI().getNettyManager().getByteBufOperator().isReadable(buffer);
}
public static Object copy(Object buffer) {
return PacketEvents.getAPI().getNettyManager().getByteBufOperator().copy(buffer);
}
public static Object duplicate(Object buffer) {
return PacketEvents.getAPI().getNettyManager().getByteBufOperator().duplicate(buffer);
}
public static boolean hasArray(Object buffer) {
return PacketEvents.getAPI().getNettyManager().getByteBufOperator().hasArray(buffer);
}
public static byte[] array(Object buffer) {
return PacketEvents.getAPI().getNettyManager().getByteBufOperator().array(buffer);
}
public static Object retain(Object buffer) {
return PacketEvents.getAPI().getNettyManager().getByteBufOperator().retain(buffer);
}
public static Object retainedDuplicate(Object buffer) {
return PacketEvents.getAPI().getNettyManager().getByteBufOperator().retainedDuplicate(buffer);
}
public static Object readSlice(Object buffer, int length) {
return PacketEvents.getAPI().getNettyManager().getByteBufOperator().readSlice(buffer, length);
}
public static Object readBytes(Object buffer, byte[] destination, int destinationIndex, int length) {
return PacketEvents.getAPI().getNettyManager().getByteBufOperator().readBytes(buffer, destination, destinationIndex, length);
}
public static Object readBytes(Object buffer, int length) {
return PacketEvents.getAPI().getNettyManager().getByteBufOperator().readBytes(buffer, length);
}
public static Object writeBytes(Object buffer, Object src) {
return PacketEvents.getAPI().getNettyManager().getByteBufOperator().writeBytes(buffer, src);
}
public static void readBytes(Object buffer, byte[] bytes) {
PacketEvents.getAPI().getNettyManager().getByteBufOperator().readBytes(buffer, bytes);
}
public static void writeBytes(Object buffer, byte[] bytes) {
PacketEvents.getAPI().getNettyManager().getByteBufOperator().writeBytes(buffer, bytes);
}
public static void writeBytes(Object buffer, byte[] bytes, int offset, int length) {
PacketEvents.getAPI().getNettyManager().getByteBufOperator().writeBytes(buffer, bytes, offset, length);
}
public static boolean release(Object buffer) {
return PacketEvents.getAPI().getNettyManager().getByteBufOperator().release(buffer);
}
public static int refCnt(Object buffer) {
return PacketEvents.getAPI().getNettyManager().getByteBufOperator().refCnt(buffer);
}
public static Object skipBytes(Object buffer, int length) {
return PacketEvents.getAPI().getNettyManager().getByteBufOperator().skipBytes(buffer, length);
}
public static Object markReaderIndex(Object buffer) {
return PacketEvents.getAPI().getNettyManager().getByteBufOperator().markReaderIndex(buffer);
}
public static Object resetReaderIndex(Object buffer) {
return PacketEvents.getAPI().getNettyManager().getByteBufOperator().resetReaderIndex(buffer);
}
public static Object markWriterIndex(Object buffer) {
return PacketEvents.getAPI().getNettyManager().getByteBufOperator().markWriterIndex(buffer);
}
public static Object resetWriterIndex(Object buffer) {
return PacketEvents.getAPI().getNettyManager().getByteBufOperator().resetWriterIndex(buffer);
}
public static int readVarInt(Object buffer) {
int value = 0;
int length = 0;
byte currentByte;
do {
currentByte = readByte(buffer);
value |= (currentByte & 0x7F) << (length * 7);
length++;
if (length > 5) {
throw new RuntimeException("VarInt is too large. Must be smaller than 5 bytes.");
}
} while ((currentByte & 0x80) == 0x80);
return value;
}
public static void writeVarInt(Object buffer, int value) {
while (true) {
if ((value & ~0x7F) == 0) {
writeByte(buffer, value);
return;
}
writeByte(buffer, (value & 0x7F) | 0x80);
value >>>= 7;
}
}
public static byte[] copyBytes(Object buffer) {
byte[] bytes = new byte[readableBytes(buffer)];
getBytes(buffer, readerIndex(buffer), bytes);
return bytes;
}
}
@@ -0,0 +1,232 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.netty.buffer;
import java.io.*;
//TODO give netty credit
public class ByteBufInputStream extends InputStream implements DataInput {
private final Object buffer;
private final int startIndex;
private final int endIndex;
private final boolean releaseOnClose;
private final StringBuilder lineBuf;
private boolean closed;
public ByteBufInputStream(Object buffer) {
this(buffer, ByteBufHelper.readableBytes(buffer));
}
public ByteBufInputStream(Object buffer, int length) {
this(buffer, length, false);
}
public ByteBufInputStream(Object buffer, boolean releaseOnClose) {
this(buffer, ByteBufHelper.readableBytes(buffer), releaseOnClose);
}
public ByteBufInputStream(Object buffer, int length, boolean releaseOnClose) {
this.lineBuf = new StringBuilder();
if (buffer == null) {
throw new NullPointerException("buffer");
} else if (length < 0) {
if (releaseOnClose) {
ByteBufHelper.release(buffer);
}
throw new IllegalArgumentException("length: " + length);
} else if (length > ByteBufHelper.readableBytes(buffer)) {
if (releaseOnClose) {
ByteBufHelper.release(buffer);
}
throw new IndexOutOfBoundsException("Too many bytes to be read - Needs " + length + ", maximum is " + ByteBufHelper.readableBytes(buffer));
} else {
this.releaseOnClose = releaseOnClose;
this.buffer = buffer;
this.startIndex = ByteBufHelper.readerIndex(buffer);
this.endIndex = this.startIndex + length;
ByteBufHelper.markReaderIndex(buffer);
}
}
public int readBytes() {
return ByteBufHelper.readerIndex(buffer) - this.startIndex;
}
public void close() throws IOException {
try {
super.close();
} finally {
if (this.releaseOnClose && !this.closed) {
this.closed = true;
ByteBufHelper.release(buffer);
}
}
}
public int available() throws IOException {
return this.endIndex - ByteBufHelper.readerIndex(buffer);
}
public void mark(int readlimit) {
ByteBufHelper.markReaderIndex(buffer);
}
public boolean markSupported() {
return true;
}
public int read() throws IOException {
return !(ByteBufHelper.isReadable(buffer)) ? -1 : ByteBufHelper.readByte(buffer) & 255;
}
public int read(byte[] b, int off, int len) throws IOException {
int available = this.available();
if (available == 0) {
return -1;
} else {
len = Math.min(available, len);
ByteBufHelper.readBytes(buffer, b, off, len);
return len;
}
}
public void reset() throws IOException {
ByteBufHelper.resetReaderIndex(buffer);
}
public long skip(long n) throws IOException {
return n > 2147483647L ? (long) this.skipBytes(2147483647) : (long) this.skipBytes((int) n);
}
public boolean readBoolean() throws IOException {
this.checkAvailable(1);
return this.read() != 0;
}
public byte[] readBytes(int len) {
byte[] bytes = new byte[len];
ByteBufHelper.readBytes(buffer, bytes);
return bytes;
}
public byte readByte() throws IOException {
if (!(ByteBufHelper.isReadable(buffer))) {
throw new EOFException();
} else {
return ByteBufHelper.readByte(buffer);
}
}
public char readChar() throws IOException {
return (char) this.readShort();
}
public double readDouble() throws IOException {
return Double.longBitsToDouble(this.readLong());
}
public float readFloat() throws IOException {
return Float.intBitsToFloat(this.readInt());
}
public void readFully(byte[] b) throws IOException {
this.readFully(b, 0, b.length);
}
public void readFully(byte[] b, int off, int len) throws IOException {
this.checkAvailable(len);
ByteBufHelper.readBytes(buffer, b, off, len);
}
public int readInt() throws IOException {
this.checkAvailable(4);
return ByteBufHelper.readInt(buffer);
}
public String readLine() throws IOException {
this.lineBuf.setLength(0);
while (ByteBufHelper.isReadable(buffer)) {
int c = ByteBufHelper.readUnsignedByte(buffer);
switch (c) {
case 13:
if (ByteBufHelper.isReadable(buffer)
&& (char) ByteBufHelper.getUnsignedByte(buffer, ByteBufHelper.readerIndex(buffer)) == '\n') {
ByteBufHelper.skipBytes(buffer, 1);
}
case 10:
return this.lineBuf.toString();
default:
this.lineBuf.append((char) c);
}
}
return this.lineBuf.length() > 0 ? this.lineBuf.toString() : null;
}
public long readLong() throws IOException {
this.checkAvailable(8);
return ByteBufHelper.readLong(buffer);
}
public long[] readLongs(int size) throws IOException {
long[] array = new long[size];
for (int i = 0; i < array.length; i++) {
array[i] = readLong();
}
return array;
}
public short readShort() throws IOException {
this.checkAvailable(2);
return ByteBufHelper.readShort(buffer);
}
public String readUTF() throws IOException {
return DataInputStream.readUTF(this);
}
public int readUnsignedByte() throws IOException {
return this.readByte() & 255;
}
public int readUnsignedShort() throws IOException {
return this.readShort() & '\uffff';
}
public int skipBytes(int n) throws IOException {
int nBytes = Math.min(this.available(), n);
ByteBufHelper.skipBytes(buffer, nBytes);
return nBytes;
}
private void checkAvailable(int fieldSize) throws IOException {
if (fieldSize < 0) {
throw new IndexOutOfBoundsException("fieldSize cannot be a negative number");
} else if (fieldSize > this.available()) {
throw new EOFException("fieldSize is too long! Length is " + fieldSize + ", but maximum is " + this.available());
}
}
}
@@ -0,0 +1,114 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.netty.buffer;
import java.nio.charset.Charset;
public interface ByteBufOperator {
int readerIndex(Object buffer);
Object readerIndex(Object buffer, int readerIndex);
int writerIndex(Object buffer);
Object writerIndex(Object buffer, int writerIndex);
int readableBytes(Object buffer);
int writableBytes(Object buffer);
Object clear(Object buffer);
byte readByte(Object buffer);
short readShort(Object buffer);
int readInt(Object buffer);
long readUnsignedInt(Object buffer);
long readLong(Object buffer);
void writeByte(Object buffer, int value);
void writeShort(Object buffer, int value);
void writeInt(Object buffer, int value);
void writeLong(Object buffer, long value);
Object getBytes(Object buffer, int index, byte[] destination);
short getUnsignedByte(Object buffer, int index);
boolean isReadable(Object buffer);
Object copy(Object buffer);
Object duplicate(Object buffer);
boolean hasArray(Object buffer);
byte[] array(Object buffer);
Object retain(Object buffer);
Object retainedDuplicate(Object buffer);
Object readSlice(Object buffer, int length);
Object readBytes(Object buffer, byte[] destination, int destinationIndex, int length);
Object readBytes(Object buffer, int length);
void readBytes(Object buffer, byte[] bytes);
Object writeBytes(Object buffer, Object src);
Object writeBytes(Object buffer, byte[] bytes);
Object writeBytes(Object buffer, byte[] bytes, int offset, int length);
boolean release(Object buffer);
int refCnt(Object buffer);
Object skipBytes(Object buffer, int length);
String toString(Object buffer, int index, int length, Charset charset);
Object markReaderIndex(Object buffer);
Object resetReaderIndex(Object buffer);
Object markWriterIndex(Object buffer);
Object resetWriterIndex(Object buffer);
default float readFloat(Object buffer) {
return Float.intBitsToFloat(readInt(buffer));
}
default void writeFloat(Object buffer, float value) {
writeInt(buffer, Float.floatToIntBits(value));
}
default double readDouble(Object buffer) {
return Double.longBitsToDouble(readLong(buffer));
}
default void writeDouble(Object buffer, double value) {
writeLong(buffer, Double.doubleToLongBits(value));
}
default char readChar(Object buffer) {
return (char) readShort(buffer);
}
default void writeChar(Object buffer, int value) {
writeShort(buffer, value);
}
//Use writeShort to write
default int readUnsignedShort(Object buffer) {
return readShort(buffer) & '\uffff';
}
//Use writeByte to write
default short readUnsignedByte(Object buffer) {
return (short) (this.readByte(buffer) & 255);
}
default boolean readBoolean(Object buffer) {
return readByte(buffer) != 0;
}
default void writeBoolean(Object buffer, boolean value) {
writeByte(buffer, value ? 1 : 0);
}
}
@@ -0,0 +1,114 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
//TODO Give netty credit
package com.github.retrooper.packetevents.netty.buffer;
import java.io.DataOutput;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class ByteBufOutputStream extends OutputStream implements DataOutput {
private final Object buffer;
private final int startIndex;
private final DataOutputStream utf8out = new DataOutputStream(this);
public ByteBufOutputStream(Object buffer) {
if (buffer == null) {
throw new NullPointerException("buffer");
} else {
this.buffer = buffer;
this.startIndex = ByteBufHelper.writerIndex(buffer);
}
}
public int writtenBytes() {
return ByteBufHelper.writerIndex(buffer) - this.startIndex;
}
public void write(byte[] b, int off, int len) throws IOException {
if (len != 0) {
ByteBufHelper.writeBytes(buffer, b, off, len);
}
}
public void write(byte[] b) throws IOException {
ByteBufHelper.writeBytes(buffer, b);
}
public void write(int b) throws IOException {
ByteBufHelper.writeByte(buffer, b);
}
public void writeBoolean(boolean v) throws IOException {
ByteBufHelper.writeBoolean(buffer, v);
}
public void writeByte(int v) throws IOException {
ByteBufHelper.writeByte(buffer, v);
}
@Deprecated
public void writeBytes(String s) throws IOException {
throw new IllegalStateException("This operation is not supported!");
}
public void writeChar(int v) throws IOException {
ByteBufHelper.writeChar(buffer, v);
}
public void writeChars(String s) throws IOException {
int len = s.length();
for (int i = 0; i < len; ++i) {
ByteBufHelper.writeChar(buffer, s.charAt(i));
}
}
public void writeDouble(double v) throws IOException {
ByteBufHelper.writeDouble(buffer, v);
}
public void writeFloat(float v) throws IOException {
ByteBufHelper.writeFloat(buffer, v);
}
public void writeInt(int v) throws IOException {
ByteBufHelper.writeInt(buffer, v);
}
public void writeLong(long v) throws IOException {
ByteBufHelper.writeLong(buffer, v);
}
public void writeShort(int v) throws IOException {
ByteBufHelper.writeShort(buffer, v);
}
public void writeUTF(String s) throws IOException {
this.utf8out.writeUTF(s);
}
public Object buffer() {
return this.buffer;
}
}
@@ -0,0 +1,43 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.netty.buffer;
import com.github.retrooper.packetevents.PacketEvents;
public class UnpooledByteBufAllocationHelper {
public static Object wrappedBuffer(byte[] bytes) {
return PacketEvents.getAPI().getNettyManager().getByteBufAllocationOperator().wrappedBuffer(bytes);
}
public static Object copiedBuffer(byte[] bytes) {
return PacketEvents.getAPI().getNettyManager().getByteBufAllocationOperator().copiedBuffer(bytes);
}
public static Object buffer() {
return PacketEvents.getAPI().getNettyManager().getByteBufAllocationOperator().buffer();
}
public static Object directBuffer() {
return PacketEvents.getAPI().getNettyManager().getByteBufAllocationOperator().directBuffer();
}
public static Object compositeBuffer() {
return PacketEvents.getAPI().getNettyManager().getByteBufAllocationOperator().compositeBuffer();
}
}
@@ -0,0 +1,95 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.netty.channel;
import com.github.retrooper.packetevents.PacketEvents;
import java.net.SocketAddress;
import java.util.Arrays;
import java.util.List;
public class ChannelHelper {
public static SocketAddress remoteAddress(Object channel) {
return PacketEvents.getAPI().getNettyManager().getChannelOperator().remoteAddress(channel);
}
public static SocketAddress localAddress(Object channel) {
return PacketEvents.getAPI().getNettyManager().getChannelOperator().localAddress(channel);
}
public static boolean isOpen(Object channel) {
return PacketEvents.getAPI().getNettyManager().getChannelOperator().isOpen(channel);
}
public static Object close(Object channel) {
return PacketEvents.getAPI().getNettyManager().getChannelOperator().close(channel);
}
public static Object write(Object channel, Object buffer) {
return PacketEvents.getAPI().getNettyManager().getChannelOperator().write(channel, buffer);
}
public static Object flush(Object channel) {
return PacketEvents.getAPI().getNettyManager().getChannelOperator().flush(channel);
}
public static Object writeAndFlush(Object channel, Object buffer) {
return PacketEvents.getAPI().getNettyManager().getChannelOperator().writeAndFlush(channel, buffer);
}
public static Object fireChannelRead(Object channel, Object buffer) {
return PacketEvents.getAPI().getNettyManager().getChannelOperator().fireChannelRead(channel, buffer);
}
public static Object writeInContext(Object channel, String ctx, Object buffer) {
return PacketEvents.getAPI().getNettyManager().getChannelOperator().writeInContext(channel, ctx, buffer);
}
public static Object flushInContext(Object channel, String ctx) {
return PacketEvents.getAPI().getNettyManager().getChannelOperator().flushInContext(channel, ctx);
}
public static Object writeAndFlushInContext(Object channel, String ctx, Object buffer) {
return PacketEvents.getAPI().getNettyManager().getChannelOperator().writeAndFlushInContext(channel, ctx, buffer);
}
public static Object fireChannelReadInContext(Object channel, String ctx, Object buffer) {
return PacketEvents.getAPI().getNettyManager().getChannelOperator().fireChannelReadInContext(channel, ctx, buffer);
}
public static List<String> pipelineHandlerNames(Object channel) {
return PacketEvents.getAPI().getNettyManager().getChannelOperator().pipelineHandlerNames(channel);
}
public static String pipelineHandlerNamesAsString(Object channel) {
return Arrays.toString(pipelineHandlerNames(channel).toArray(new String[0]));
}
public static Object getPipelineHandler(Object channel, String name) {
return PacketEvents.getAPI().getNettyManager().getChannelOperator().getPipelineHandler(channel, name);
}
public static Object getPipelineContext(Object channel, String handlerName) {
return PacketEvents.getAPI().getNettyManager().getChannelOperator().getPipelineContext(channel, handlerName);
}
public static void runInEventLoop(Object channel, Runnable runnable) {
PacketEvents.getAPI().getNettyManager().getChannelOperator().runInEventLoop(channel, runnable);
}
}
@@ -0,0 +1,45 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.netty.channel;
import java.net.SocketAddress;
import java.util.List;
import java.util.Set;
public interface ChannelOperator {
Set<Class<? extends Throwable>> getIgnoredHandlerExceptions();
SocketAddress remoteAddress(Object channel);
SocketAddress localAddress(Object channel);
boolean isOpen(Object channel);
Object close(Object channel);
Object write(Object channel, Object buffer);
Object flush(Object channel);
Object writeAndFlush(Object channel, Object buffer);
Object fireChannelRead(Object channel, Object buffer);
Object writeInContext(Object channel, String ctx, Object buffer);
Object flushInContext(Object channel, String ctx);
Object writeAndFlushInContext(Object channel, String ctx, Object buffer);
Object fireChannelReadInContext(Object channel, String ctx, Object buffer);
List<String> pipelineHandlerNames(Object channel);
Object getPipelineHandler(Object channel, String name);
Object getPipelineContext(Object channel, String name);
void runInEventLoop(Object channel, Runnable runnable);
}
@@ -0,0 +1,31 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.protocol;
/**
* @author retrooper
* @since 1.8
*/
public enum ConnectionState {
HANDSHAKING, STATUS, LOGIN, PLAY;
public static ConnectionState getById(int id) {
return values()[id];
}
}
@@ -0,0 +1,32 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.protocol;
public enum PacketSide {
CLIENT, SERVER;
public PacketSide getOpposite() {
if (this == CLIENT) {
return SERVER;
}
else {
return CLIENT;
}
}
}
@@ -0,0 +1,24 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.protocol;
//TODO
public enum ProtocolVersion {
UNKNOWN
}
@@ -0,0 +1,33 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.protocol.chat;
public enum ChatPosition {
CHAT,
SYSTEM,
GAME_INFO;
public int getId() {
return ordinal();
}
public static ChatPosition getById(int id) {
return values()[id];
}
}
@@ -0,0 +1,55 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.protocol.entity.data;
public class EntityData {
private int index;
private EntityDataType<?> type;
private Object value;
public EntityData(int index, EntityDataType<?> type, Object value) {
this.index = index;
this.type = type;
this.value = value;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
public EntityDataType<?> getType() {
return type;
}
public void setType(EntityDataType<?> type) {
this.type = type;
}
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
}
@@ -0,0 +1,56 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.protocol.entity.data;
import com.github.retrooper.packetevents.protocol.player.ClientVersion;
import com.github.retrooper.packetevents.wrapper.PacketWrapper;
import java.util.function.BiConsumer;
import java.util.function.Function;
public class EntityDataType<T> {
private final String name;
private final int[] ids;
private final Function<PacketWrapper<?>, T> dataDeserializer;
private final BiConsumer<PacketWrapper<?>, Object> dataSerializer;
public EntityDataType(String name, int[] ids, Function<PacketWrapper<?>, T> dataDeserializer, BiConsumer<PacketWrapper<?>, Object> dataSerializer) {
this.name = name;
this.ids = ids;
this.dataDeserializer = dataDeserializer;
this.dataSerializer = dataSerializer;
}
public String getName() {
return name;
}
public int getId(ClientVersion version) {
int index = EntityDataTypes.TYPES_BUILDER.getDataIndex(version);
return ids[index];
}
public Function<PacketWrapper<?>, T> getDataDeserializer() {
return dataDeserializer;
}
public BiConsumer<PacketWrapper<?>, Object> getDataSerializer() {
return dataSerializer;
}
}
@@ -0,0 +1,276 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.protocol.entity.data;
import com.github.retrooper.packetevents.PacketEvents;
import com.github.retrooper.packetevents.manager.server.ServerVersion;
import com.github.retrooper.packetevents.protocol.entity.pose.EntityPose;
import com.github.retrooper.packetevents.protocol.entity.villager.VillagerData;
import com.github.retrooper.packetevents.protocol.item.ItemStack;
import com.github.retrooper.packetevents.protocol.item.enchantment.type.EnchantmentType;
import com.github.retrooper.packetevents.protocol.nbt.NBTCompound;
import com.github.retrooper.packetevents.protocol.player.ClientVersion;
import com.github.retrooper.packetevents.protocol.world.BlockFace;
import com.github.retrooper.packetevents.util.*;
import com.github.retrooper.packetevents.wrapper.PacketWrapper;
import com.google.gson.JsonObject;
import net.kyori.adventure.text.Component;
import java.util.*;
import java.util.function.BiConsumer;
import java.util.function.Function;
public class EntityDataTypes {
//1.7 -> 1.18 block_position is just 3 ints, not serialized with a long
//short was removed in 1.9+
//boolean was added in 1.9
//nbt was added in 1.12
private static final Map<String, EntityDataType<?>> ENTITY_DATA_TYPE_MAP = new HashMap<>();
private static final Map<Byte, Map<Integer, EntityDataType<?>>> ENTITY_DATA_TYPE_ID_MAP = new HashMap<>();
protected static final TypesBuilder TYPES_BUILDER = new TypesBuilder("entity/entity_data_type_mappings",
ClientVersion.V_1_8,
ClientVersion.V_1_9,
ClientVersion.V_1_11,
ClientVersion.V_1_13, //Fix? Why did we not acknoledge 1.13
ClientVersion.V_1_16);
public static final EntityDataType<Byte> BYTE = define("byte", PacketWrapper::readByte, PacketWrapper::writeByte);
public static final EntityDataType<Integer> INT = define("int", readIntDeserializer(), writeIntSerializer());
public static final EntityDataType<Float> FLOAT = define("float", PacketWrapper::readFloat, PacketWrapper::writeFloat);
public static final EntityDataType<String> STRING = define("string", PacketWrapper::readString, PacketWrapper::writeString);
public static final EntityDataType<Component> COMPONENT = define("component", PacketWrapper::readComponent, PacketWrapper::writeComponent);
public static final EntityDataType<Optional<Component>> OPTIONAL_COMPONENT = define("optional_component", readOptionalComponentDeserializer(), writeOptionalComponentSerializer());
public static final EntityDataType<ItemStack> ITEMSTACK = define("itemstack", PacketWrapper::readItemStack, PacketWrapper::writeItemStack);
public static final EntityDataType<Optional<Object>> OPTIONAL_BLOCK_STATE = define("optional_block_state", readIntDeserializer(), writeIntSerializer());
public static final EntityDataType<Boolean> BOOLEAN = define("boolean", PacketWrapper::readBoolean, PacketWrapper::writeBoolean);
public static final EntityDataType<Integer> PARTICLE = define("particle", PacketWrapper::readVarInt, PacketWrapper::writeVarInt);
public static final EntityDataType<Vector3f> ROTATION = define("rotation",
(PacketWrapper<?> wrapper) -> new Vector3f(wrapper.readFloat(), wrapper.readFloat(), wrapper.readFloat()),
(PacketWrapper<?> wrapper, Vector3f value) -> {
wrapper.writeFloat(value.x);
wrapper.writeFloat(value.y);
wrapper.writeFloat(value.z);
});
public static final EntityDataType<Vector3i> BLOCK_POSITION = define("block_position", readBlockPositionDeserializer(), writeBlockPositionSerializer());
public static final EntityDataType<Optional<Vector3i>> OPTIONAL_BLOCK_POSITION = define("optional_block_position", readOptionalBlockPositionDeserializer(), writeOptionalBlockPositionSerializer());
public static final EntityDataType<BlockFace> BLOCK_FACE = define("block_face", (PacketWrapper<?> wrapper) -> {
int id = wrapper.readVarInt();
return BlockFace.getBlockFaceByValue(id);
},
(PacketWrapper<?> wrapper, BlockFace value) -> wrapper.writeVarInt(value.getFaceValue()));
public static final EntityDataType<Optional<UUID>> OPTIONAL_UUID = define("optional_uuid", (PacketWrapper<?> wrapper) -> {
if (wrapper.readBoolean()) {
return Optional.of(wrapper.readUUID());
} else {
return Optional.empty();
}
},
(PacketWrapper<?> wrapper, Optional<UUID> value) -> {
if (value.isPresent()) {
wrapper.writeBoolean(true);
wrapper.writeUUID(value.get());
} else {
wrapper.writeBoolean(false);
}
});
public static final EntityDataType<NBTCompound> NBT = define("nbt", PacketWrapper::readNBT, PacketWrapper::writeNBT);
public static final EntityDataType<VillagerData> VILLAGER_DATA = define("villager_data", PacketWrapper::readVillagerData, PacketWrapper::writeVillagerData);
public static final EntityDataType<Optional<Integer>> OPTIONAL_INT = define("optional_int", (PacketWrapper<?> wrapper) -> {
int i = wrapper.readVarInt();
return i == 0 ? Optional.empty() : Optional.of(i - 1);
}, (PacketWrapper<?> wrapper, Optional<Integer> value) -> {
wrapper.writeVarInt(value.orElse(-1) + 1);
});
public static final EntityDataType<EntityPose> ENTITY_POSE = define("entity_pose", (PacketWrapper<?> wrapper) -> {
int id = wrapper.readVarInt();
return EntityPose.getById(wrapper.getServerVersion().toClientVersion(), id);
}, (PacketWrapper<?> wrapper, EntityPose value) -> wrapper.writeVarInt(value.getId(wrapper.getServerVersion().toClientVersion())));
@Deprecated
public static final EntityDataType<Short> SHORT = define("short", PacketWrapper::readShort, PacketWrapper::writeShort);
public static EntityDataType<?> getById(ClientVersion version, int id) {
int index = TYPES_BUILDER.getDataIndex(version);
Map<Integer, EntityDataType<?>> typeIdMap = ENTITY_DATA_TYPE_ID_MAP.get((byte)index);
return typeIdMap.get(id);
}
public static EntityDataType<?> getByName(String name) {
return ENTITY_DATA_TYPE_MAP.get(name);
}
public static <T> EntityDataType<T> define(String name, Function<PacketWrapper<?>, T> deserializer, BiConsumer<PacketWrapper<?>, T> serializer) {
TypesBuilderData data = TYPES_BUILDER.define(name);
EntityDataType<T> type = new EntityDataType<>(name, data.getData(), deserializer,
(BiConsumer<PacketWrapper<?>, Object>) serializer);
ENTITY_DATA_TYPE_MAP.put(type.getName(), type);
for (ClientVersion version : TYPES_BUILDER.getVersions()) {
int index = TYPES_BUILDER.getDataIndex(version);
if (index == -1) continue;
Map<Integer, EntityDataType<?>> typeIdMap = ENTITY_DATA_TYPE_ID_MAP
.computeIfAbsent((byte) index, k -> new HashMap<>());
typeIdMap.put(type.getId(version), type);
}
return type;
}
private static <T> Function<PacketWrapper<?>, T> readIntDeserializer() {
if (PacketEvents.getAPI().getServerManager().getVersion().isNewerThanOrEquals(ServerVersion.V_1_9)) {
return (PacketWrapper<?> wrapper) -> (T) ((Object) wrapper.readVarInt());
} else {
return (PacketWrapper<?> wrapper) -> (T) ((Object) wrapper.readInt());
}
}
private static <T> BiConsumer<PacketWrapper<?>, T> writeIntSerializer() {
return (PacketWrapper<?> wrapper, T value) -> {
int output = 0;
if (value instanceof Byte) {
output = ((Byte) value).intValue();
} else if (value instanceof Short) {
output = ((Short) value).intValue();
} else if (value instanceof Integer) {
output = (Integer) value;
} else if (value instanceof Long) {
output = ((Long) value).intValue();
}
if (PacketEvents.getAPI().getServerManager().getVersion().isNewerThanOrEquals(ServerVersion.V_1_9)) {
wrapper.writeVarInt(output);
} else {
wrapper.writeInt(output);
}
};
}
private static <T> Function<PacketWrapper<?>, T> readOptionalComponentDeserializer() {
return (PacketWrapper<?> wrapper) -> {
if (wrapper.readBoolean()) {
return (T) Optional.of(wrapper.readComponent());
} else {
return (T) Optional.empty();
}
};
}
private static <T> BiConsumer<PacketWrapper<?>, T> writeOptionalComponentSerializer() {
return (PacketWrapper<?> wrapper, T value) -> {
if (value instanceof Optional) {
Optional<Component> optional = (Optional<Component>) value;
if (optional.isPresent()) {
wrapper.writeBoolean(true);
wrapper.writeComponent(optional.get());
} else {
wrapper.writeBoolean(false);
}
} else {
wrapper.writeBoolean(false);
}
};
}
private static <T> Function<PacketWrapper<?>, T> readBlockPositionDeserializer() {
if (PacketEvents.getAPI().getServerManager().getVersion().isNewerThanOrEquals(ServerVersion.V_1_9)) {
return (PacketWrapper<?> wrapper) -> (T) wrapper.readBlockPosition();
} else {
return (PacketWrapper<?> wrapper) -> {
int x = wrapper.readInt();
int y = wrapper.readInt();
int z = wrapper.readInt();
return (T) new Vector3i(x, y, z);
};
}
}
private static <T> BiConsumer<PacketWrapper<?>, T> writeBlockPositionSerializer() {
if (PacketEvents.getAPI().getServerManager().getVersion().isNewerThanOrEquals(ServerVersion.V_1_9)) {
return (PacketWrapper<?> wrapper, T value) -> {
wrapper.writeBlockPosition((Vector3i) value);
};
} else {
return (PacketWrapper<?> wrapper, T value) -> {
Vector3i position = (Vector3i) value;
wrapper.writeInt(position.getX());
wrapper.writeInt(position.getY());
wrapper.writeInt(position.getZ());
};
}
}
private static <T> Function<PacketWrapper<?>, T> readOptionalBlockPositionDeserializer() {
if (PacketEvents.getAPI().getServerManager().getVersion().isNewerThanOrEquals(ServerVersion.V_1_9)) {
return (PacketWrapper<?> wrapper) -> {
if (wrapper.readBoolean()) {
return (T) Optional.of(wrapper.readBlockPosition());
} else {
return (T) Optional.empty();
}
};
} else {
return (PacketWrapper<?> wrapper) -> {
if (wrapper.readBoolean()) {
int x = wrapper.readInt();
int y = wrapper.readInt();
int z = wrapper.readInt();
return (T) Optional.of(new Vector3i(x, y, z));
} else {
return (T) Optional.empty();
}
};
}
}
private static <T> BiConsumer<PacketWrapper<?>, T> writeOptionalBlockPositionSerializer() {
if (PacketEvents.getAPI().getServerManager().getVersion().isNewerThanOrEquals(ServerVersion.V_1_9)) {
return (PacketWrapper<?> wrapper, T value) -> {
if (value instanceof Optional) {
Optional<?> optional = (Optional<?>) value;
if (optional.isPresent()) {
wrapper.writeBoolean(true);
wrapper.writeBlockPosition((Vector3i) optional.get());
} else {
wrapper.writeBoolean(false);
}
} else {
wrapper.writeBoolean(false);
}
};
} else {
return (PacketWrapper<?> wrapper, T value) -> {
if (value instanceof Optional) {
Optional<?> optional = (Optional<?>) value;
if (optional.isPresent()) {
wrapper.writeBoolean(true);
Vector3i position = (Vector3i) optional.get();
wrapper.writeInt(position.getX());
wrapper.writeInt(position.getY());
wrapper.writeInt(position.getZ());
} else {
wrapper.writeBoolean(false);
}
} else {
wrapper.writeBoolean(false);
}
};
}
}
}
@@ -0,0 +1,28 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.protocol.entity.data.provider;
import com.github.retrooper.packetevents.protocol.entity.data.EntityData;
import java.util.List;
public interface DataProvider {
List<EntityData> encode();
void decode(List<EntityData> data);
}
@@ -0,0 +1,343 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.protocol.entity.data.provider;
import com.github.retrooper.packetevents.protocol.entity.data.EntityData;
import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes;
import com.github.retrooper.packetevents.protocol.entity.pose.EntityPose;
import net.kyori.adventure.text.Component;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
public class EntityDataProvider implements DataProvider {
@Nullable
private Component customName;
private boolean customNameVisible;
private EntityPose pose = EntityPose.STANDING;
private int airTicks;
private int ticksFrozenInPowderedSnow = 0;
private boolean onFire;
private boolean crouching;
//Now unused
private boolean riding;
private boolean sprinting;
private boolean swimming;
private boolean invisible;
private boolean glowing;
private boolean flyingWithElytra;
private boolean silent;
private boolean hasGravity = true;
@Nullable
public Component getCustomName() {
return customName;
}
public void setCustomName(@Nullable Component customName) {
this.customName = customName;
}
public boolean isCustomNameVisible() {
return customNameVisible;
}
public void setCustomNameVisible(boolean customNameVisible) {
this.customNameVisible = customNameVisible;
}
public EntityPose getPose() {
return pose;
}
public void setPose(EntityPose pose) {
this.pose = pose;
}
public int getAirTicks() {
return airTicks;
}
public void setAirTicks(int airTicks) {
this.airTicks = airTicks;
}
public int getTicksFrozenInPowderedSnow() {
return ticksFrozenInPowderedSnow;
}
public void setTicksFrozenInPowderedSnow(int ticksFrozenInPowderedSnow) {
this.ticksFrozenInPowderedSnow = ticksFrozenInPowderedSnow;
}
public boolean isOnFire() {
return onFire;
}
public void setOnFire(boolean onFire) {
this.onFire = onFire;
}
public boolean isCrouching() {
return crouching;
}
public void setCrouching(boolean crouching) {
this.crouching = crouching;
}
public boolean isRiding() {
return riding;
}
public void setRiding(boolean riding) {
this.riding = riding;
}
public boolean isSprinting() {
return sprinting;
}
public void setSprinting(boolean sprinting) {
this.sprinting = sprinting;
}
public boolean isSwimming() {
return swimming;
}
public void setSwimming(boolean swimming) {
this.swimming = swimming;
}
public boolean isInvisible() {
return invisible;
}
public void setInvisible(boolean invisible) {
this.invisible = invisible;
}
public boolean isGlowing() {
return glowing;
}
public void setGlowing(boolean glowing) {
this.glowing = glowing;
}
public boolean isFlyingWithElytra() {
return flyingWithElytra;
}
public void setFlyingWithElytra(boolean flyingWithElytra) {
this.flyingWithElytra = flyingWithElytra;
}
public boolean isSilent() {
return silent;
}
public void setSilent(boolean silent) {
this.silent = silent;
}
public boolean isHasGravity() {
return hasGravity;
}
public void setHasGravity(boolean hasGravity) {
this.hasGravity = hasGravity;
}
@Override
public List<EntityData> encode() {
byte mask = 0x00;
if (onFire) {
mask |= 0x01;
}
if (crouching) {
mask |= 0x02;
}
//TODO Rethink, should we add this?
if (riding) {
mask |= 0x04;
}
if (sprinting) {
mask |= 0x08;
}
if (swimming) {
mask |= 0x10;
}
if (invisible) {
mask |= 0x20;
}
if (glowing) {
mask |= 0x40;
}
if (flyingWithElytra) {
mask |= 0x80;
}
List<EntityData> metadata = new ArrayList<>(8);
metadata.add(new EntityData(0, EntityDataTypes.BYTE, mask));
metadata.add(new EntityData(1, EntityDataTypes.INT, airTicks));
metadata.add(new EntityData(2, EntityDataTypes.OPTIONAL_COMPONENT, Optional.ofNullable(customName)));
metadata.add(new EntityData(3, EntityDataTypes.BOOLEAN, customNameVisible));
metadata.add(new EntityData(4, EntityDataTypes.BOOLEAN, silent));
metadata.add(new EntityData(5, EntityDataTypes.BOOLEAN, !hasGravity));
metadata.add(new EntityData(6, EntityDataTypes.ENTITY_POSE, pose));
metadata.add(new EntityData(7, EntityDataTypes.INT, ticksFrozenInPowderedSnow));
return metadata;
}
@Override
public void decode(List<EntityData> data) {
for (EntityData entityData : data) {
switch (entityData.getIndex()) {
case 0:
byte mask = (byte) entityData.getValue();
onFire = (mask & 0x01) != 0;
crouching = (mask & 0x02) != 0;
riding = (mask & 0x04) != 0;
sprinting = (mask & 0x08) != 0;
swimming = (mask & 0x10) != 0;
invisible = (mask & 0x20) != 0;
glowing = (mask & 0x40) != 0;
flyingWithElytra = (mask & 0x80) != 0;
break;
case 1:
airTicks = (int) entityData.getValue();
break;
case 2:
customName = ((Optional<Component>) entityData.getValue()).orElse(null);
break;
case 3:
customNameVisible = (boolean) entityData.getValue();
break;
case 4:
silent = (boolean) entityData.getValue();
break;
case 5:
hasGravity = !(boolean) entityData.getValue();
break;
case 6:
pose = (EntityPose) entityData.getValue();
break;
case 7:
ticksFrozenInPowderedSnow = (int) entityData.getValue();
break;
}
}
}
public static EntityBuilder<EntityBuilder> builderEntity() {
return new EntityBuilder<>(new EntityDataProvider());
}
public static class EntityBuilder<T extends EntityBuilder> {
protected EntityDataProvider provider;
public EntityBuilder(EntityDataProvider provider) {
this.provider = provider;
}
public T customName(@Nullable Component customName) {
((EntityDataProvider) provider).setCustomName(customName);
return (T) this;
}
public T customNameVisible(boolean customNameVisible) {
((EntityDataProvider) provider).setCustomNameVisible(customNameVisible);
return (T) this;
}
public T pose(EntityPose pose) {
((EntityDataProvider) provider).setPose(pose);
return (T) this;
}
public T onFire(boolean onFire) {
((EntityDataProvider) provider).setOnFire(onFire);
return (T) this;
}
public T crouching(boolean crouching) {
((EntityDataProvider) provider).setCrouching(crouching);
return (T) this;
}
public T riding(boolean riding) {
((EntityDataProvider) provider).setRiding(riding);
return (T) this;
}
public T sprinting(boolean sprinting) {
((EntityDataProvider) provider).setSprinting(sprinting);
return (T) this;
}
public T swimming(boolean swimming) {
((EntityDataProvider) provider).setSwimming(swimming);
return (T) this;
}
public T invisible(boolean invisible) {
((EntityDataProvider) provider).setInvisible(invisible);
return (T) this;
}
public T glowing(boolean glowing) {
((EntityDataProvider) provider).setGlowing(glowing);
return (T) this;
}
public T flyingWithElytra(boolean flyingWithElytra) {
((EntityDataProvider) provider).setFlyingWithElytra(flyingWithElytra);
return (T) this;
}
public T silent(boolean silent) {
((EntityDataProvider) provider).setSilent(silent);
return (T) this;
}
public T hasGravity(boolean hasGravity) {
((EntityDataProvider) provider).setHasGravity(hasGravity);
return (T) this;
}
public T airTicks(int airTicks) {
((EntityDataProvider) provider).setAirTicks(airTicks);
return (T) this;
}
public T ticksFrozenInPowderedSnow(int ticksFrozenInPowderedSnow) {
((EntityDataProvider) provider).setTicksFrozenInPowderedSnow(ticksFrozenInPowderedSnow);
return (T) this;
}
public <K extends EntityDataProvider> K build() {
return (K) provider;
}
}
}
@@ -0,0 +1,232 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.protocol.entity.data.provider;
import com.github.retrooper.packetevents.protocol.entity.data.EntityData;
import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes;
import com.github.retrooper.packetevents.protocol.player.InteractionHand;
import com.github.retrooper.packetevents.util.Vector3i;
import org.jetbrains.annotations.Nullable;
import java.util.List;
import java.util.Optional;
public class LivingEntityDataProvider extends EntityDataProvider {
private boolean handActive;
private InteractionHand hand = InteractionHand.MAIN_HAND;
private boolean isInRiptideSpinAttack;
private float health = 1.0f;
private int potionEffectColor;
private boolean potionEffectAmbient;
private int arrowInBodyCount;
private int beeStingsInBodyCount;
@Nullable
private Vector3i sleepingPosition;
public boolean isHandActive() {
return handActive;
}
public void setHandActive(boolean handActive) {
this.handActive = handActive;
}
public InteractionHand getHand() {
return hand;
}
public void setHand(InteractionHand hand) {
this.hand = hand;
}
public boolean isInRiptideSpinAttack() {
return isInRiptideSpinAttack;
}
public void setInRiptideSpinAttack(boolean inRiptideSpinAttack) {
isInRiptideSpinAttack = inRiptideSpinAttack;
}
public float getHealth() {
return health;
}
public void setHealth(float health) {
this.health = health;
}
public int getPotionEffectColor() {
return potionEffectColor;
}
public void setPotionEffectColor(int potionEffectColor) {
this.potionEffectColor = potionEffectColor;
}
public boolean isPotionEffectAmbient() {
return potionEffectAmbient;
}
public void setPotionEffectAmbient(boolean potionEffectAmbient) {
this.potionEffectAmbient = potionEffectAmbient;
}
public int getArrowInBodyCount() {
return arrowInBodyCount;
}
public void setArrowInBodyCount(int arrowInBodyCount) {
this.arrowInBodyCount = arrowInBodyCount;
}
public int getBeeStingsInBodyCount() {
return beeStingsInBodyCount;
}
public void setBeeStingsInBodyCount(int beeStingsInBodyCount) {
this.beeStingsInBodyCount = beeStingsInBodyCount;
}
@Nullable
public Vector3i getSleepingPosition() {
return sleepingPosition;
}
public void setSleepingPosition(@Nullable Vector3i sleepingPosition) {
this.sleepingPosition = sleepingPosition;
}
public static LivingEntityBuilder<LivingEntityBuilder> builderLivingEntity() {
return new LivingEntityBuilder<>(new LivingEntityDataProvider());
}
@Override
public List<EntityData> encode() {
List<EntityData> metadata = super.encode();
byte mask = 0x00;
if (handActive) {
mask |= 0x01;
}
//TODO Confirm
if (hand == InteractionHand.OFF_HAND) {
mask |= 0x02;
}
if (isInRiptideSpinAttack) {
mask |= 0x04;
}
metadata.add(new EntityData(8, EntityDataTypes.BYTE, mask));
metadata.add(new EntityData(9, EntityDataTypes.FLOAT, health));
metadata.add(new EntityData(10, EntityDataTypes.INT, potionEffectColor));
metadata.add(new EntityData(11, EntityDataTypes.BOOLEAN, potionEffectAmbient));
metadata.add(new EntityData(12, EntityDataTypes.INT, arrowInBodyCount));
metadata.add(new EntityData(13, EntityDataTypes.INT, beeStingsInBodyCount));
metadata.add(new EntityData(14, EntityDataTypes.OPTIONAL_BLOCK_POSITION, Optional.ofNullable(sleepingPosition)));
return metadata;
}
@Override
public void decode(List<EntityData> data) {
super.decode(data);
for (EntityData entityData : data) {
switch (entityData.getIndex()) {
case 8:
byte mask = (byte) entityData.getValue();
handActive = (mask & 0x01) != 0;
//TODO Test, look into
hand = (mask & 0x02) != 0 ? InteractionHand.OFF_HAND : InteractionHand.MAIN_HAND;
isInRiptideSpinAttack = (mask & 0x04) != 0;
break;
case 9:
health = (float) entityData.getValue();
break;
case 10:
potionEffectColor = (int) entityData.getValue();
break;
case 11:
potionEffectAmbient = (boolean) entityData.getValue();
break;
case 12:
arrowInBodyCount = (int) entityData.getValue();
break;
case 13:
beeStingsInBodyCount = (int) entityData.getValue();
break;
case 14:
sleepingPosition = ((Optional<Vector3i>) entityData.getValue()).orElse(null);
break;
}
}
}
public static class LivingEntityBuilder<T extends LivingEntityBuilder> extends EntityDataProvider.EntityBuilder<T> {
public LivingEntityBuilder(LivingEntityDataProvider livingEntityDataProvider) {
super(livingEntityDataProvider);
}
public T handActive(boolean handActive) {
((LivingEntityDataProvider) provider).setHandActive(handActive);
return (T) this;
}
public T hand(InteractionHand hand) {
((LivingEntityDataProvider) provider).setHand(hand);
return (T) this;
}
public T isInRiptideSpinAttack(boolean isInRiptideSpinAttack) {
((LivingEntityDataProvider) provider).setInRiptideSpinAttack(isInRiptideSpinAttack);
return (T) this;
}
public T health(float health) {
((LivingEntityDataProvider) provider).setHealth(health);
return (T) this;
}
public T potionEffectColor(int potionEffectColor) {
((LivingEntityDataProvider) provider).setPotionEffectColor(potionEffectColor);
return (T) this;
}
public T potionEffectAmbient(boolean potionEffectAmbient) {
((LivingEntityDataProvider) provider).setPotionEffectAmbient(potionEffectAmbient);
return (T) this;
}
public T arrowInBodyCount(int arrowInBodyCount) {
((LivingEntityDataProvider) provider).setArrowInBodyCount(arrowInBodyCount);
return (T) this;
}
public T beeStingsInBodyCount(int beeStingsInBodyCount) {
((LivingEntityDataProvider) provider).setBeeStingsInBodyCount(beeStingsInBodyCount);
return (T) this;
}
public T sleepingPosition(@Nullable Vector3i sleepingPosition) {
((LivingEntityDataProvider) provider).setSleepingPosition(sleepingPosition);
return (T) this;
}
}
}
@@ -0,0 +1,169 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.protocol.entity.data.provider;
import com.github.retrooper.packetevents.protocol.entity.data.EntityData;
import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes;
import com.github.retrooper.packetevents.protocol.nbt.NBTCompound;
import com.github.retrooper.packetevents.protocol.player.HumanoidArm;
import com.github.retrooper.packetevents.protocol.player.SkinSection;
import java.util.List;
import java.util.Set;
public class PlayerDataProvider extends LivingEntityDataProvider {
private float additionalHealth;
private int score;
private byte skinPartsMask = SkinSection.getMaskBySections(SkinSection.getAllSections());
private HumanoidArm mainArm = HumanoidArm.RIGHT;
private NBTCompound leftShoulderNBT = new NBTCompound();
private NBTCompound rightShoulderNBT = new NBTCompound();
public float getAdditionalHealth() {
return additionalHealth;
}
public void setAdditionalHealth(float additionalHealth) {
this.additionalHealth = additionalHealth;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
public byte getSkinPartsMask() {
return skinPartsMask;
}
public void setSkinPartsMask(byte skinPartsMask) {
this.skinPartsMask = skinPartsMask;
}
public HumanoidArm getMainArm() {
return mainArm;
}
public void setMainArm(HumanoidArm mainArm) {
this.mainArm = mainArm;
}
public NBTCompound getLeftShoulderNBT() {
return leftShoulderNBT;
}
public void setLeftShoulderNBT(NBTCompound leftShoulderNBT) {
this.leftShoulderNBT = leftShoulderNBT;
}
public NBTCompound getRightShoulderNBT() {
return rightShoulderNBT;
}
public void setRightShoulderNBT(NBTCompound rightShoulderNBT) {
this.rightShoulderNBT = rightShoulderNBT;
}
public static PlayerBuilder<PlayerBuilder> builderPlayer() {
return new PlayerBuilder<>(new PlayerDataProvider());
}
@Override
public List<EntityData> encode() {
List<EntityData> metadata = super.encode();
metadata.add(new EntityData(15, EntityDataTypes.FLOAT, additionalHealth));
metadata.add(new EntityData(16, EntityDataTypes.INT, score));
metadata.add(new EntityData(17, EntityDataTypes.BYTE, skinPartsMask));
metadata.add(new EntityData(18, EntityDataTypes.BYTE, (byte) mainArm.ordinal()));
metadata.add(new EntityData(19, EntityDataTypes.NBT, leftShoulderNBT));
metadata.add(new EntityData(20, EntityDataTypes.NBT, rightShoulderNBT));
return metadata;
}
@Override
public void decode(List<EntityData> data) {
super.decode(data);
for (EntityData entityData : data) {
switch (entityData.getIndex()) {
case 15:
additionalHealth = (float) entityData.getValue();
break;
case 16:
score = (int) entityData.getValue();
break;
case 17:
skinPartsMask = (byte) entityData.getValue();
break;
case 18:
mainArm = HumanoidArm.values()[(byte) entityData.getValue()];
break;
case 19:
leftShoulderNBT = (NBTCompound) entityData.getValue();
break;
case 20:
rightShoulderNBT = (NBTCompound) entityData.getValue();
break;
}
}
}
public static class PlayerBuilder<T extends PlayerBuilder> extends LivingEntityDataProvider.LivingEntityBuilder<T> {
public PlayerBuilder(PlayerDataProvider entityDataProvider) {
super(entityDataProvider);
}
public T additionalHealth(float additionalHealth) {
((PlayerDataProvider)provider).setAdditionalHealth(additionalHealth);
return (T) this;
}
public T score(int score) {
((PlayerDataProvider)provider).setScore(score);
return (T) this;
}
public T skinPartsMask(byte skinPartsMask) {
((PlayerDataProvider)provider).setSkinPartsMask(skinPartsMask);
return (T)this;
}
public T skinParts(Set<SkinSection> skinSections) {
((PlayerDataProvider)provider).setSkinPartsMask(SkinSection.getMaskBySections(skinSections));
return (T)this;
}
public T mainArm(HumanoidArm mainArm) {
((PlayerDataProvider)provider).setMainArm(mainArm);
return (T)this;
}
public T leftShoulderNBT(NBTCompound leftShoulderNBT) {
((PlayerDataProvider)provider).setLeftShoulderNBT(leftShoulderNBT);
return (T)this;
}
public T rightShoulderNBT(NBTCompound rightShoulderNBT) {
((PlayerDataProvider)provider).setRightShoulderNBT(rightShoulderNBT);
return (T)this;
}
}
}
@@ -0,0 +1,47 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.protocol.entity.pose;
import com.github.retrooper.packetevents.protocol.player.ClientVersion;
public enum EntityPose {
STANDING,
FALL_FLYING,
SLEEPING,
SWIMMING,
SPIN_ATTACK,
CROUCHING,
LONG_JUMPING,
DYING;
public int getId(ClientVersion version) {
if (this == DYING && version.isOlderThan(ClientVersion.V_1_17)) {
return 6;
}
return ordinal();
}
public static EntityPose getById(ClientVersion version, int id) {
// The LONG_JUMPING pose was added in 1.17, shifting things by 1
if (id == 6 && version.isOlderThan(ClientVersion.V_1_17)) {
return DYING;
}
return values()[id];
}
}
@@ -0,0 +1,28 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.protocol.entity.type;
import com.github.retrooper.packetevents.protocol.mapper.LegacyMappedEntity;
import com.github.retrooper.packetevents.protocol.mapper.MappedEntity;
import java.util.Optional;
public interface EntityType extends MappedEntity, LegacyMappedEntity {
Optional<EntityType> getParent();
}
@@ -0,0 +1,289 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.protocol.entity.type;
import com.github.retrooper.packetevents.protocol.player.ClientVersion;
import com.github.retrooper.packetevents.resources.ResourceLocation;
import com.github.retrooper.packetevents.util.TypesBuilder;
import com.github.retrooper.packetevents.util.TypesBuilderData;
import org.jetbrains.annotations.Nullable;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
public class EntityTypes {
private static final Map<String, EntityType> ENTITY_TYPE_MAP = new HashMap<>();
//Key - mappings version, value - map with entity type ids and entity types
private static final Map<Byte, Map<Integer, EntityType>> ENTITY_TYPE_ID_MAP = new HashMap<>();
private static final Map<Byte, Map<Integer, EntityType>> LEGACY_ENTITY_TYPE_ID_MAP = new HashMap<>();
private static final TypesBuilder TYPES_BUILDER = new TypesBuilder("entity/entity_type_mappings",
ClientVersion.V_1_10,
ClientVersion.V_1_11,
ClientVersion.V_1_12,
ClientVersion.V_1_13,
ClientVersion.V_1_14,
ClientVersion.V_1_15,
ClientVersion.V_1_16,
ClientVersion.V_1_16_2,
ClientVersion.V_1_17);
private static final TypesBuilder LEGACY_TYPES_BUILDER = new TypesBuilder("entity/legacy_entity_type_mappings",
ClientVersion.V_1_8,
ClientVersion.V_1_9,
ClientVersion.V_1_10,
ClientVersion.V_1_11,
ClientVersion.V_1_12,
ClientVersion.V_1_13);
public static EntityType define(String key, @Nullable EntityType parent) {
TypesBuilderData data = TYPES_BUILDER.define(key);
TypesBuilderData legacyData = LEGACY_TYPES_BUILDER.define(key);
Optional<EntityType> optParent = Optional.ofNullable(parent);
EntityType entityType = new EntityType() {
private final int[] ids = data.getData();
private final int[] legacyIds = legacyData.getData();
@Override
public Optional<EntityType> getParent() {
return optParent;
}
@Override
public int getLegacyId(ClientVersion version) {
if (version.isNewerThanOrEquals(ClientVersion.V_1_14)) {
return -1;
}
int index = LEGACY_TYPES_BUILDER.getDataIndex(version);
return legacyIds[index];
}
@Override
public ResourceLocation getName() {
return data.getName();
}
@Override
public int getId(ClientVersion version) {
int index = TYPES_BUILDER.getDataIndex(version);
return ids[index];
}
};
ENTITY_TYPE_MAP.put(entityType.getName().toString(), entityType);
for (ClientVersion version : TYPES_BUILDER.getVersions()) {
int index = TYPES_BUILDER.getDataIndex(version);
Map<Integer, EntityType> typeIdMap = ENTITY_TYPE_ID_MAP.computeIfAbsent((byte) index, k -> new HashMap<>());
typeIdMap.put(entityType.getId(version), entityType);
}
for (ClientVersion version : LEGACY_TYPES_BUILDER.getVersions()) {
int index = LEGACY_TYPES_BUILDER.getDataIndex(version);
Map<Integer, EntityType> legacyTypeIdMap = LEGACY_ENTITY_TYPE_ID_MAP.computeIfAbsent((byte) index, k -> new HashMap<>());
legacyTypeIdMap.put(entityType.getLegacyId(version), entityType);
}
return entityType;
}
public static boolean isTypeInstanceOf(EntityType type, EntityType parent) {
while (type != null) {
if (type == parent) {
return true;
}
if (type.getParent().isPresent()) {
type = type.getParent().get();
} else {
return false;
}
}
return false;
}
//with minecraft:key
public static EntityType getByName(String name) {
return ENTITY_TYPE_MAP.get(name);
}
public static EntityType getById(ClientVersion version, int id) {
int index = TYPES_BUILDER.getDataIndex(version);
return ENTITY_TYPE_ID_MAP.get((byte) index).get(id);
}
public static EntityType getByLegacyId(ClientVersion version, int id) {
if (version.isNewerThanOrEquals(ClientVersion.V_1_14)) {
return null;
}
int index = LEGACY_TYPES_BUILDER.getDataIndex(version);
return LEGACY_ENTITY_TYPE_ID_MAP.get((byte) index).get(id);
}
// Credit to ViaVersion for these categories
public static final EntityType ENTITY = define("entity", null);
public static final EntityType LIVINGENTITY = define("livingentity", ENTITY);
public static final EntityType ABSTRACT_INSENTIENT = define("abstract_insentient", LIVINGENTITY);
public static final EntityType ABSTRACT_CREATURE = define("abstract_creature", ABSTRACT_INSENTIENT);
public static final EntityType ABSTRACT_AGEABLE = define("abstract_ageable", ABSTRACT_CREATURE);
public static final EntityType ABSTRACT_ANIMAL = define("abstract_animal", ABSTRACT_AGEABLE);
public static final EntityType ABSTRACT_TAMEABLE_ANIMAL = define("abstract_tameable_animal", ABSTRACT_ANIMAL);
public static final EntityType ABSTRACT_PARROT = define("abstract_parrot", ABSTRACT_TAMEABLE_ANIMAL);
public static final EntityType ABSTRACT_HORSE = define("abstract_horse", ABSTRACT_ANIMAL);
public static final EntityType CHESTED_HORSE = define("chested_horse", ABSTRACT_HORSE);
public static final EntityType ABSTRACT_GOLEM = define("abstract_golem", ABSTRACT_CREATURE);
public static final EntityType ABSTRACT_FISHES = define("abstract_fishes", ABSTRACT_CREATURE);
public static final EntityType ABSTRACT_MONSTER = define("abstract_monster", ABSTRACT_CREATURE);
public static final EntityType ABSTRACT_PIGLIN = define("abstract_piglin", ABSTRACT_MONSTER);
public static final EntityType ABSTRACT_ILLAGER_BASE = define("abstract_illager_base", ABSTRACT_MONSTER);
public static final EntityType ABSTRACT_EVO_ILLU_ILLAGER = define("abstract_evo_illu_illager", ABSTRACT_ILLAGER_BASE);
public static final EntityType ABSTRACT_SKELETON = define("abstract_skeleton", ABSTRACT_MONSTER);
public static final EntityType ABSTRACT_FLYING = define("abstract_flying", ABSTRACT_INSENTIENT);
public static final EntityType ABSTRACT_AMBIENT = define("abstract_ambient", ABSTRACT_INSENTIENT);
public static final EntityType ABSTRACT_WATERMOB = define("abstract_watermob", ABSTRACT_INSENTIENT);
public static final EntityType ABSTRACT_HANGING = define("abstract_hanging", ENTITY);
public static final EntityType ABSTRACT_LIGHTNING = define("abstract_lightning", ENTITY);
public static final EntityType ABSTRACT_ARROW = define("abstract_arrow", ENTITY);
public static final EntityType ABSTRACT_FIREBALL = define("abstract_fireball", ENTITY);
public static final EntityType PROJECTILE_ABSTRACT = define("projectile_abstract", ENTITY);
public static final EntityType MINECART_ABSTRACT = define("minecart_abstract", ENTITY);
public static final EntityType CHESTED_MINECART_ABSTRACT = define("chested_minecart_abstract", MINECART_ABSTRACT);
public static final EntityType AREA_EFFECT_CLOUD = define("area_effect_cloud", ENTITY);
public static final EntityType ARMOR_STAND = define("armor_stand", LIVINGENTITY);
public static final EntityType ARROW = define("arrow", ABSTRACT_ARROW);
public static final EntityType AXOLOTL = define("axolotl", ABSTRACT_ANIMAL);
public static final EntityType BAT = define("bat", ABSTRACT_AMBIENT);
public static final EntityType BEE = define("bee", ABSTRACT_INSENTIENT);
public static final EntityType BLAZE = define("blaze", ABSTRACT_MONSTER);
public static final EntityType BOAT = define("boat", ENTITY);
public static final EntityType CAT = define("cat", ABSTRACT_TAMEABLE_ANIMAL);
public static final EntityType SPIDER = define("spider", ABSTRACT_MONSTER);
public static final EntityType CAVE_SPIDER = define("cave_spider", SPIDER);
public static final EntityType CHICKEN = define("chicken", ABSTRACT_ANIMAL);
public static final EntityType COD = define("cod", ABSTRACT_FISHES);
public static final EntityType COW = define("cow", ABSTRACT_ANIMAL);
public static final EntityType CREEPER = define("creeper", ABSTRACT_MONSTER);
public static final EntityType DOLPHIN = define("dolphin", ABSTRACT_INSENTIENT);
public static final EntityType DONKEY = define("donkey", CHESTED_HORSE);
public static final EntityType DRAGON_FIREBALL = define("dragon_fireball", ABSTRACT_FIREBALL);
public static final EntityType ZOMBIE = define("zombie", ABSTRACT_MONSTER);
public static final EntityType DROWNED = define("drowned", ZOMBIE);
public static final EntityType GUARDIAN = define("guardian", ABSTRACT_MONSTER);
public static final EntityType ELDER_GUARDIAN = define("elder_guardian", GUARDIAN);
public static final EntityType END_CRYSTAL = define("end_crystal", ENTITY);
public static final EntityType ENDER_DRAGON = define("ender_dragon", ABSTRACT_INSENTIENT);
public static final EntityType ENDERMAN = define("enderman", ABSTRACT_MONSTER);
public static final EntityType ENDERMITE = define("endermite", ABSTRACT_MONSTER);
public static final EntityType EVOKER = define("evoker", ABSTRACT_EVO_ILLU_ILLAGER);
public static final EntityType EVOKER_FANGS = define("evoker_fangs", ENTITY);
public static final EntityType EXPERIENCE_ORB = define("experience_orb", ENTITY);
public static final EntityType EYE_OF_ENDER = define("eye_of_ender", ENTITY);
public static final EntityType FALLING_BLOCK = define("falling_block", ENTITY);
public static final EntityType FIREWORK_ROCKET = define("firework_rocket", ENTITY);
public static final EntityType FOX = define("fox", ABSTRACT_ANIMAL);
public static final EntityType GHAST = define("ghast", ABSTRACT_FLYING);
public static final EntityType GIANT = define("giant", ABSTRACT_MONSTER);
public static final EntityType ITEM_FRAME = define("item_frame", ABSTRACT_HANGING);
public static final EntityType GLOW_ITEM_FRAME = define("glow_item_frame", ITEM_FRAME);
public static final EntityType SQUID = define("squid", ABSTRACT_WATERMOB);
public static final EntityType GLOW_SQUID = define("glow_squid", SQUID);
public static final EntityType GOAT = define("goat", ABSTRACT_ANIMAL);
public static final EntityType HOGLIN = define("hoglin", ABSTRACT_ANIMAL);
public static final EntityType HORSE = define("horse", ABSTRACT_HORSE);
public static final EntityType HUSK = define("husk", ZOMBIE);
public static final EntityType ILLUSIONER = define("illusioner", ABSTRACT_EVO_ILLU_ILLAGER);
public static final EntityType IRON_GOLEM = define("iron_golem", ABSTRACT_GOLEM);
public static final EntityType ITEM = define("item", ENTITY);
public static final EntityType FIREBALL = define("fireball", ABSTRACT_FIREBALL);
public static final EntityType LEASH_KNOT = define("leash_knot", ABSTRACT_HANGING);
public static final EntityType LIGHTNING_BOLT = define("lightning_bolt", ABSTRACT_LIGHTNING);
public static final EntityType LLAMA = define("llama", CHESTED_HORSE);
public static final EntityType LLAMA_SPIT = define("llama_spit", ENTITY);
public static final EntityType SLIME = define("slime", ABSTRACT_INSENTIENT);
public static final EntityType MAGMA_CUBE = define("magma_cube", SLIME);
public static final EntityType MARKER = define("marker", ENTITY);
public static final EntityType MINECART = define("minecart", MINECART_ABSTRACT);
public static final EntityType CHEST_MINECART = define("chest_minecart", CHESTED_MINECART_ABSTRACT);
public static final EntityType COMMAND_BLOCK_MINECART = define("command_block_minecart", MINECART_ABSTRACT);
public static final EntityType FURNACE_MINECART = define("furnace_minecart", MINECART_ABSTRACT);
public static final EntityType HOPPER_MINECART = define("hopper_minecart", CHESTED_MINECART_ABSTRACT);
public static final EntityType SPAWNER_MINECART = define("spawner_minecart", MINECART_ABSTRACT);
public static final EntityType TNT_MINECART = define("tnt_minecart", MINECART_ABSTRACT);
public static final EntityType MULE = define("mule", CHESTED_HORSE);
public static final EntityType MOOSHROOM = define("mooshroom", COW);
public static final EntityType OCELOT = define("ocelot", ABSTRACT_TAMEABLE_ANIMAL);
public static final EntityType PAINTING = define("painting", ABSTRACT_HANGING);
public static final EntityType PANDA = define("panda", ABSTRACT_INSENTIENT);
public static final EntityType PARROT = define("parrot", ABSTRACT_PARROT);
public static final EntityType PHANTOM = define("phantom", ABSTRACT_FLYING);
public static final EntityType PIG = define("pig", ABSTRACT_ANIMAL);
public static final EntityType PIGLIN = define("piglin", ABSTRACT_PIGLIN);
public static final EntityType PIGLIN_BRUTE = define("piglin_brute", ABSTRACT_PIGLIN);
public static final EntityType PILLAGER = define("pillager", ABSTRACT_ILLAGER_BASE);
public static final EntityType POLAR_BEAR = define("polar_bear", ABSTRACT_ANIMAL);
public static final EntityType TNT = define("tnt", ENTITY);
public static final EntityType PUFFERFISH = define("pufferfish", ABSTRACT_FISHES);
public static final EntityType RABBIT = define("rabbit", ABSTRACT_ANIMAL);
public static final EntityType RAVAGER = define("ravager", ABSTRACT_MONSTER);
public static final EntityType SALMON = define("salmon", ABSTRACT_FISHES);
public static final EntityType SHEEP = define("sheep", ABSTRACT_ANIMAL);
public static final EntityType SHULKER = define("shulker", ABSTRACT_GOLEM); // yes this is correct
public static final EntityType SHULKER_BULLET = define("shulker_bullet", ENTITY);
public static final EntityType SILVERFISH = define("silverfish", ABSTRACT_MONSTER);
public static final EntityType SKELETON = define("skeleton", ABSTRACT_SKELETON);
public static final EntityType SKELETON_HORSE = define("skeleton_horse", ABSTRACT_HORSE);
public static final EntityType SMALL_FIREBALL = define("small_fireball", ABSTRACT_FIREBALL);
public static final EntityType SNOW_GOLEM = define("snow_golem", ABSTRACT_GOLEM);
public static final EntityType SNOWBALL = define("snowball", PROJECTILE_ABSTRACT);
public static final EntityType SPECTRAL_ARROW = define("spectral_arrow", ABSTRACT_ARROW);
public static final EntityType STRAY = define("stray", ABSTRACT_SKELETON);
public static final EntityType STRIDER = define("strider", ABSTRACT_ANIMAL);
public static final EntityType EGG = define("egg", PROJECTILE_ABSTRACT);
public static final EntityType ENDER_PEARL = define("ender_pearl", PROJECTILE_ABSTRACT);
public static final EntityType EXPERIENCE_BOTTLE = define("experience_bottle", PROJECTILE_ABSTRACT);
public static final EntityType POTION = define("potion", PROJECTILE_ABSTRACT);
@Deprecated // Exists only in 1.9 and 1.10
public static final EntityType TIPPED_ARROW = define("tipped_arrow", ARROW);
public static final EntityType TRIDENT = define("trident", ABSTRACT_ARROW);
public static final EntityType TRADER_LLAMA = define("trader_llama", CHESTED_HORSE);
public static final EntityType TROPICAL_FISH = define("tropical_fish", ABSTRACT_FISHES);
public static final EntityType TURTLE = define("turtle", ABSTRACT_ANIMAL);
public static final EntityType VEX = define("vex", ABSTRACT_MONSTER);
public static final EntityType VILLAGER = define("villager", ABSTRACT_AGEABLE);
public static final EntityType VINDICATOR = define("vindicator", ABSTRACT_ILLAGER_BASE);
public static final EntityType WANDERING_TRADER = define("wandering_trader", ABSTRACT_AGEABLE);
public static final EntityType WITCH = define("witch", ABSTRACT_MONSTER);
public static final EntityType WITHER = define("wither", ABSTRACT_MONSTER);
public static final EntityType WITHER_SKELETON = define("wither_skeleton", ABSTRACT_SKELETON);
public static final EntityType WITHER_SKULL = define("wither_skull", ABSTRACT_FIREBALL);
public static final EntityType WOLF = define("wolf", ABSTRACT_TAMEABLE_ANIMAL);
public static final EntityType ZOGLIN = define("zoglin", ABSTRACT_MONSTER);
public static final EntityType ZOMBIE_HORSE = define("zombie_horse", ABSTRACT_HORSE);
public static final EntityType ZOMBIE_VILLAGER = define("zombie_villager", ZOMBIE);
public static final EntityType ZOMBIFIED_PIGLIN = define("zombified_piglin", ZOMBIE);
public static final EntityType PLAYER = define("player", LIVINGENTITY);
public static final EntityType FISHING_BOBBER = define("fishing_bobber", ENTITY);
public static final EntityType ENDER_SIGNAL = define("ender_signal", ENTITY);
public static final EntityType THROWN_EXP_BOTTLE = define("thrown_exp_bottle", PROJECTILE_ABSTRACT);
public static final EntityType PRIMED_TNT = define("primed_tnt", ENTITY);
public static final EntityType FIREWORK = define("firework", ENTITY);
public static final EntityType MINECART_COMMAND = define("minecart_command", MINECART_ABSTRACT);
public static final EntityType MINECART_RIDEABLE = define("minecart_rideable", MINECART_ABSTRACT);
public static final EntityType MINECART_CHEST = define("minecart_chest", MINECART_ABSTRACT);
public static final EntityType MINECART_FURNACE = define("minecart_furnace", MINECART_ABSTRACT);
public static final EntityType MINECART_TNT = define("minecart_tnt", MINECART_ABSTRACT);
public static final EntityType MINECART_HOPPER = define("minecart_hopper", MINECART_ABSTRACT);
public static final EntityType MINECART_MOB_SPAWNER = define("minecart_mob_spawner", MINECART_ABSTRACT);
}
@@ -0,0 +1,64 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.protocol.entity.villager;
import com.github.retrooper.packetevents.protocol.entity.villager.profession.VillagerProfession;
import com.github.retrooper.packetevents.protocol.entity.villager.profession.VillagerProfessions;
import com.github.retrooper.packetevents.protocol.entity.villager.type.VillagerType;
import com.github.retrooper.packetevents.protocol.entity.villager.type.VillagerTypes;
public class VillagerData {
private VillagerType type;
private VillagerProfession profession;
private int level;
public VillagerData(VillagerType type, VillagerProfession profession, int level) {
this.type = type;
this.profession = profession;
this.level = level;
}
public VillagerData(int typeId, int professionId, int level) {
this(VillagerTypes.getById(typeId), VillagerProfessions.getById(professionId), level);
}
public VillagerType getType() {
return type;
}
public void setType(VillagerType type) {
this.type = type;
}
public VillagerProfession getProfession() {
return profession;
}
public void setProfession(VillagerProfession profession) {
this.profession = profession;
}
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
}
@@ -0,0 +1,25 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.protocol.entity.villager.profession;
import com.github.retrooper.packetevents.protocol.mapper.StaticMappedEntity;
public interface VillagerProfession extends StaticMappedEntity {
}
@@ -0,0 +1,73 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.protocol.entity.villager.profession;
import com.github.retrooper.packetevents.resources.ResourceLocation;
import com.github.retrooper.packetevents.util.TypesBuilder;
import java.util.HashMap;
import java.util.Map;
public class VillagerProfessions {
private static final Map<String, VillagerProfession> VILLAGER_PROFESSION_MAP = new HashMap<>();
private static final Map<Byte, VillagerProfession> VILLAGER_PROFESSION_ID_MAP = new HashMap<>();
public static VillagerProfession define(int id, String name) {
ResourceLocation location = new ResourceLocation(name);
VillagerProfession type = new VillagerProfession() {
@Override
public ResourceLocation getName() {
return location;
}
@Override
public int getId() {
return id;
}
};
VILLAGER_PROFESSION_MAP.put(type.getName().toString(), type);
VILLAGER_PROFESSION_ID_MAP.put((byte) type.getId(), type);
return type;
}
public static VillagerProfession getById(int id) {
return VILLAGER_PROFESSION_ID_MAP.get((byte)id);
}
public static VillagerProfession getByName(String name) {
return VILLAGER_PROFESSION_MAP.get(name);
}
public static final VillagerProfession NONE = define(0, "minecraft:none");
public static final VillagerProfession ARMORER = define(1, "minecraft:armorer");
public static final VillagerProfession BUTCHER = define(2, "minecraft:butcher");
public static final VillagerProfession CARTOGRAPHER = define(3, "minecraft:cartographer");
public static final VillagerProfession CLERIC = define(4, "minecraft:cleric");
public static final VillagerProfession FARMER = define(5, "minecraft:farmer");
public static final VillagerProfession FISHERMAN = define(6, "minecraft:fisherman");
public static final VillagerProfession FLETCHER = define(7, "minecraft:fletcher");
public static final VillagerProfession LEATHERWORKER = define(8, "minecraft:leatherworker");
public static final VillagerProfession LIBRARIAN = define(9, "minecraft:librarian");
public static final VillagerProfession MASON = define(10, "minecraft:mason");
public static final VillagerProfession NITWIT = define(11, "minecraft:nitwit");
public static final VillagerProfession SHEPHERD = define(12, "minecraft:shepherd");
public static final VillagerProfession TOOLSMITH = define(13, "minecraft:toolsmith");
public static final VillagerProfession WEAPONSMITH = define(14, "minecraft:weaponsmith");
}
@@ -0,0 +1,25 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.protocol.entity.villager.type;
import com.github.retrooper.packetevents.protocol.mapper.StaticMappedEntity;
public interface VillagerType extends StaticMappedEntity {
}
@@ -0,0 +1,65 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.protocol.entity.villager.type;
import com.github.retrooper.packetevents.resources.ResourceLocation;
import java.util.HashMap;
import java.util.Map;
public class VillagerTypes {
private static final Map<String, VillagerType> VILLAGER_TYPE_MAP = new HashMap<>();
private static final Map<Byte, VillagerType> VILLAGER_TYPE_ID_MAP = new HashMap<>();
public static VillagerType define(int id, String name) {
ResourceLocation location = new ResourceLocation(name);
VillagerType type = new VillagerType() {
@Override
public ResourceLocation getName() {
return location;
}
@Override
public int getId() {
return id;
}
};
VILLAGER_TYPE_MAP.put(type.getName().toString(), type);
VILLAGER_TYPE_ID_MAP.put((byte)type.getId(), type);
return type;
}
public static VillagerType getById(int id) {
return VILLAGER_TYPE_ID_MAP.get((byte)id);
}
public static VillagerType getByName(String name) {
return VILLAGER_TYPE_MAP.get(name);
}
public static final VillagerType DESERT = define(0, "minecraft:desert");
public static final VillagerType JUNGLE = define(1, "minecraft:jungle");
public static final VillagerType PLAINS = define(2, "minecraft:plains");
public static final VillagerType SAVANNA = define(3, "minecraft:savanna");
public static final VillagerType SNOW = define(4, "minecraft:snow");
public static final VillagerType SWAMP = define(5, "minecraft:swamp");
public static final VillagerType TAIGA = define(6, "minecraft:taiga");
}
@@ -0,0 +1,335 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.protocol.item;
import com.github.retrooper.packetevents.protocol.item.enchantment.Enchantment;
import com.github.retrooper.packetevents.protocol.item.enchantment.type.EnchantmentType;
import com.github.retrooper.packetevents.protocol.item.enchantment.type.EnchantmentTypes;
import com.github.retrooper.packetevents.protocol.item.type.ItemType;
import com.github.retrooper.packetevents.protocol.item.type.ItemTypes;
import com.github.retrooper.packetevents.protocol.nbt.*;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
public class ItemStack {
public static final ItemStack EMPTY = new ItemStack(ItemTypes.AIR, 0, new NBTCompound(), 0);
private final ItemType type;
private int amount;
@Nullable
private NBTCompound nbt;
private int legacyData = -1;
private boolean cachedIsEmpty = false;
private ItemStack(ItemType type, int amount, @Nullable NBTCompound nbt, int legacyData) {
this.type = type;
this.amount = amount;
this.nbt = nbt;
this.legacyData = legacyData;
updateCachedEmptyStatus();
}
public int getMaxStackSize() {
return getType().getMaxAmount();
}
public boolean isStackable() {
return this.getMaxStackSize() > 1 && (!this.isDamageableItem() || !this.isDamaged());
}
public boolean isDamageableItem() {
if (!this.cachedIsEmpty && this.getType().getMaxDurability() > 0) {
NBTCompound tag = this.getNBT();
return tag == null || !tag.getBoolean("Unbreakable");
} else {
return false;
}
}
public boolean isDamaged() {
return this.isDamageableItem() && this.getDamageValue() > 0;
}
public int getDamageValue() {
if (nbt == null) return 0;
NBTInt damage = this.nbt.getTagOfTypeOrNull("Damage", NBTInt.class);
return damage == null ? 0 : damage.getAsInt();
}
public void setDamageValue(int damage) {
this.getOrCreateTag().setTag("Damage", new NBTInt(Math.max(0, damage)));
}
public int getMaxDamage() {
return this.getType().getMaxDurability();
}
public NBTCompound getOrCreateTag() {
if (this.nbt == null) {
this.nbt = new NBTCompound();
}
return this.nbt;
}
private void updateCachedEmptyStatus() {
cachedIsEmpty = isEmpty();
}
public ItemType getType() {
return cachedIsEmpty ? ItemTypes.AIR : type;
}
public int getAmount() {
return cachedIsEmpty ? 0 : amount;
}
public void shrink(int amount) {
this.setAmount(this.getAmount() - amount);
}
public void grow(int amount) {
this.setAmount(this.getAmount() + amount);
}
public void setAmount(int amount) {
this.amount = amount;
updateCachedEmptyStatus();
}
public ItemStack split(int toTake) {
int i = Math.min(toTake, getAmount());
ItemStack itemstack = this.copy();
itemstack.setAmount(i);
this.shrink(i);
return itemstack;
}
public ItemStack copy() {
return cachedIsEmpty ? EMPTY : new ItemStack(type, amount, nbt == null ? new NBTCompound() : nbt.copy(), legacyData);
}
@Nullable
public NBTCompound getNBT() {
return nbt;
}
public void setNBT(NBTCompound nbt) {
this.nbt = nbt;
}
public int getLegacyData() {
return legacyData;
}
public void setLegacyData(int legacyData) {
this.legacyData = legacyData;
}
public boolean isEnchantable() {
if (getType() == ItemTypes.BOOK) return getAmount() == 1;
if (getType() == ItemTypes.ENCHANTED_BOOK) return false;
return getMaxStackSize() == 1 && canBeDepleted() && !isEnchanted();
}
public boolean isEnchanted() {
if (!isEmpty() && this.nbt != null && this.nbt.getCompoundListTagOrNull("Enchantments") != null) {
return !this.nbt.getCompoundListTagOrNull("Enchantments").isEmpty();
} else {
return false;
}
}
private static List<Enchantment> getEnchantments(@Nullable NBTCompound nbt) {
if (nbt == null || nbt.getCompoundListTagOrNull("Enchantments") == null)
return new ArrayList<>(0);
NBTList<NBTCompound> nbtList = nbt.getCompoundListTagOrNull("Enchantments");
List<NBTCompound> compounds = nbtList.getTags();
List<Enchantment> enchantments = new ArrayList<>(compounds.size());
for (NBTCompound compound : compounds) {
String id = compound.getStringTagValueOrNull("id");
EnchantmentType type = EnchantmentTypes.getByName(id);
if (type != null) {
NBTShort levelTag = compound.getTagOfTypeOrNull("lvl", NBTShort.class);
int level = levelTag.getAsInt();
Enchantment enchantment = Enchantment.builder().type(type).level(level).build();
enchantments.add(enchantment);
}
}
return enchantments;
}
public List<Enchantment> getEnchantments() {
return getEnchantments(this.nbt);
}
// TODO: Test on outdated versions
public int getEnchantmentLevel(EnchantmentType enchantment) {
if (isEnchanted()) {
// isEnchanted() is true, so we can assume that nbt is not null
assert nbt != null;
for (NBTCompound base : nbt.getCompoundListTagOrNull("Enchantments").getTags()) {
NBTString string = base.getTagOfTypeOrNull("id", NBTString.class);
if (string != null && enchantment == EnchantmentTypes.getByName(string.getValue())) {
return base.getTagOfTypeOrNull("lvl", NBTShort.class).getAsInt();
}
}
}
return 0;
}
public void setEnchantments(List<Enchantment> enchantments) {
nbt = getOrCreateTag(); // Create tag if null
if (enchantments.isEmpty()) {
//Let us clear the enchantments
if (nbt.getTagOrNull("Enchantments") != null) {
nbt.removeTag("Enchantments");
}
}
else {
List<NBTCompound> list = new ArrayList<>();
for (Enchantment enchantment : enchantments) {
NBTCompound compound = new NBTCompound();
compound.setTag("id", new NBTString(enchantment.getType().getName().toString()));
compound.setTag("lvl", new NBTShort((short) enchantment.getLevel()));
list.add(compound);
}
assert nbt != null; // NBT was created in getOrCreateTag()
nbt.setTag("Enchantments", new NBTList<>(NBTType.COMPOUND, list));
}
}
public boolean canBeDepleted() {
return this.getType().getMaxDurability() > 0;
}
public boolean is(ItemType type) {
return this.getType() == type;
}
public static boolean isSameItemSameTags(ItemStack stack, ItemStack otherStack) {
return stack.is(otherStack.getType()) && ItemStack.tagMatches(stack, otherStack);
}
public static boolean tagMatches(ItemStack left, ItemStack right) {
return left.isEmpty() && right.isEmpty() || (!left.isEmpty() && !right.isEmpty() && ((left.nbt != null || right.nbt == null) && (left.nbt == null || left.nbt.equals(right.nbt))));
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj instanceof ItemStack) {
ItemStack itemStack = (ItemStack) obj;
return getType().equals(itemStack.getType())
&& amount == itemStack.amount
&& Objects.equals(nbt, itemStack.nbt)
&& legacyData == itemStack.legacyData;
}
return false;
}
@Override
public String toString() {
if (cachedIsEmpty) {
return "ItemStack[null]";
} else {
String identifier = type == null ? "null" : type.getName().toString();
int maxAmount = getType().getMaxAmount();
return "ItemStack[type=" + identifier + ", amount=" + amount + "/" + maxAmount
+ ", nbt tag names: " + (nbt != null ? nbt.getTagNames() : "[null]") + ", legacyData=" + legacyData + "]";
}
}
public boolean isEmpty() {
return type == null || type == ItemTypes.AIR || amount <= 0;
}
public static Builder builder() {
return new Builder();
}
public static class Builder {
private ItemType type;
private int amount = 1;
private NBTCompound nbt = null;
private int legacyData = -1;
private List<Enchantment> enchantments = null;
public Builder type(ItemType type) {
this.type = type;
return this;
}
public Builder amount(int amount) {
this.amount = amount;
return this;
}
public Builder nbt(NBTCompound nbt) {
this.nbt = nbt;
List<Enchantment> nbtEnchantments = getEnchantments(nbt);
// This assumes logically, if already set enchants before NBT, then they would still want the enchants
if (!nbtEnchantments.isEmpty()) {
this.enchantments = nbtEnchantments;
}
return this;
}
public Builder legacyData(int legacyData) {
this.legacyData = legacyData;
return this;
}
/**
* Side effect: This will cause NBT to be created if it is null
* This may affect some client sided inventory operations and may cause a desync
*
* @param enchantments The enchantments to set
* @return This builder
*/
public Builder enchantments(List<Enchantment> enchantments) {
this.enchantments = enchantments;
return this;
}
public Builder addEnchantment(Enchantment enchantment) {
if (enchantments == null) {
enchantments = new ArrayList<>();
}
this.enchantments.add(enchantment);
return this;
}
public ItemStack build() {
ItemStack stack = new ItemStack(type, amount, nbt, legacyData);
if (enchantments != null) {
stack.setEnchantments(enchantments);
}
return stack;
}
}
}
@@ -0,0 +1,71 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.protocol.item.enchantment;
import com.github.retrooper.packetevents.protocol.item.enchantment.type.EnchantmentType;
import com.github.retrooper.packetevents.protocol.item.enchantment.type.EnchantmentTypes;
public class Enchantment {
private EnchantmentType type;
private int level;
private Enchantment(EnchantmentType type, int level) {
this.type = type;
this.level = level;
}
public EnchantmentType getType() {
return type;
}
public void setType(EnchantmentType type) {
this.type = type;
}
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
public static Builder builder() {
return new Builder();
}
public static class Builder {
private EnchantmentType type;
private int level;
public Builder type(EnchantmentType type) {
this.type = type;
return this;
}
public Builder level(int level) {
this.level = level;
return this;
}
public Enchantment build() {
return new Enchantment(type, level);
}
}
}
@@ -0,0 +1,24 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.protocol.item.enchantment.type;
import com.github.retrooper.packetevents.protocol.mapper.MappedEntity;
public interface EnchantmentType extends MappedEntity {
}
@@ -0,0 +1,123 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.protocol.item.enchantment.type;
import com.github.retrooper.packetevents.protocol.player.ClientVersion;
import com.github.retrooper.packetevents.resources.ResourceLocation;
import com.github.retrooper.packetevents.util.TypesBuilder;
import com.github.retrooper.packetevents.util.TypesBuilderData;
import org.jetbrains.annotations.Nullable;
import java.util.HashMap;
import java.util.Map;
public class EnchantmentTypes {
private static final Map<String, EnchantmentType> ENCHANTMENT_TYPE_MAPPINGS = new HashMap<>();
private static final Map<Byte, Map<Integer, EnchantmentType>> ENCHANTMENT_TYPE_ID_MAPPINGS = new HashMap<>();
private static final TypesBuilder TYPES_BUILDER = new TypesBuilder("enchantment/enchantment_type_mappings",
ClientVersion.V_1_12,
ClientVersion.V_1_13,
ClientVersion.V_1_14,
ClientVersion.V_1_16);
public static EnchantmentType define(String key) {
TypesBuilderData data = TYPES_BUILDER.define(key);
EnchantmentType enchantmentType = new EnchantmentType() {
private final int[] ids = data.getData();
@Override
public ResourceLocation getName() {
return data.getName();
}
@Override
public int getId(ClientVersion version) {
int index = TYPES_BUILDER.getDataIndex(version);
return ids[index];
}
@Override
public boolean equals(Object obj) {
if (obj instanceof EnchantmentType) {
return getName() == ((EnchantmentType) obj).getName();
}
return false;
}
};
ENCHANTMENT_TYPE_MAPPINGS.put(enchantmentType.getName().toString(), enchantmentType);
for (ClientVersion version : TYPES_BUILDER.getVersions()) {
int index = TYPES_BUILDER.getDataIndex(version);
Map<Integer, EnchantmentType> typeIdMap = ENCHANTMENT_TYPE_ID_MAPPINGS.computeIfAbsent((byte) index, k -> new HashMap<>());
typeIdMap.put(enchantmentType.getId(version), enchantmentType);
}
return enchantmentType;
}
@Nullable
public static EnchantmentType getByName(String name) {
return ENCHANTMENT_TYPE_MAPPINGS.get(name);
}
@Nullable
public static EnchantmentType getById(ClientVersion version, int id) {
int index = TYPES_BUILDER.getDataIndex(version);
Map<Integer, EnchantmentType> typeIdMap = ENCHANTMENT_TYPE_ID_MAPPINGS.get((byte) index);
return typeIdMap.get(id);
}
public static final EnchantmentType ALL_DAMAGE_PROTECTION = define("protection");
public static final EnchantmentType FIRE_PROTECTION = define("fire_protection");
public static final EnchantmentType FALL_PROTECTION = define("feather_falling");
public static final EnchantmentType BLAST_PROTECTION = define("blast_protection");
public static final EnchantmentType PROJECTILE_PROTECTION = define("projectile_protection");
public static final EnchantmentType RESPIRATION = define("respiration");
public static final EnchantmentType AQUA_AFFINITY = define("aqua_affinity");
public static final EnchantmentType THORNS = define("thorns");
public static final EnchantmentType DEPTH_STRIDER = define("depth_strider");
public static final EnchantmentType FROST_WALKER = define("frost_walker");
public static final EnchantmentType BINDING_CURSE = define("binding_curse");
public static final EnchantmentType SOUL_SPEED = define("soul_speed");
public static final EnchantmentType SHARPNESS = define("sharpness");
public static final EnchantmentType SMITE = define("smite");
public static final EnchantmentType BANE_OF_ARTHROPODS = define("bane_of_arthropods");
public static final EnchantmentType KNOCKBACK = define("knockback");
public static final EnchantmentType FIRE_ASPECT = define("fire_aspect");
public static final EnchantmentType MOB_LOOTING = define("looting");
public static final EnchantmentType SWEEPING_EDGE = define("sweeping");
public static final EnchantmentType BLOCK_EFFICIENCY = define("efficiency");
public static final EnchantmentType SILK_TOUCH = define("silk_touch");
public static final EnchantmentType UNBREAKING = define("unbreaking");
public static final EnchantmentType BLOCK_FORTUNE = define("fortune");
public static final EnchantmentType POWER_ARROWS = define("power");
public static final EnchantmentType PUNCH_ARROWS = define("punch");
public static final EnchantmentType FLAMING_ARROWS = define("flame");
public static final EnchantmentType INFINITY_ARROWS = define("infinity");
public static final EnchantmentType FISHING_LUCK = define("luck_of_the_sea");
public static final EnchantmentType FISHING_SPEED = define("lure");
public static final EnchantmentType LOYALTY = define("loyalty");
public static final EnchantmentType IMPALING = define("impaling");
public static final EnchantmentType RIPTIDE = define("riptide");
public static final EnchantmentType CHANNELING = define("channeling");
public static final EnchantmentType MULTISHOT = define("multishot");
public static final EnchantmentType QUICK_CHARGE = define("quick_charge");
public static final EnchantmentType PIERCING = define("piercing");
public static final EnchantmentType MENDING = define("mending");
public static final EnchantmentType VANISHING_CURSE = define("vanishing_curse");
}
@@ -0,0 +1,42 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.protocol.item.type;
import com.github.retrooper.packetevents.protocol.mapper.MappedEntity;
import com.github.retrooper.packetevents.protocol.world.states.type.StateType;
import org.jetbrains.annotations.Nullable;
import java.util.Set;
public interface ItemType extends MappedEntity {
int getMaxAmount();
int getMaxDurability();
boolean isMusicDisc();
ItemType getCraftRemainder();
@Nullable
StateType getPlacedType();
Set<ItemTypes.ItemAttribute> getAttributes();
boolean hasAttribute(ItemTypes.ItemAttribute attribute);
}
@@ -0,0 +1,12 @@
package com.github.retrooper.packetevents.protocol.mapper;
import com.github.retrooper.packetevents.protocol.player.ClientVersion;
import com.github.retrooper.packetevents.resources.ResourceLocation;
public interface LegacyMappedEntity {
ResourceLocation getName();
int getLegacyId(ClientVersion version);
}
@@ -0,0 +1,28 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.protocol.mapper;
import com.github.retrooper.packetevents.protocol.player.ClientVersion;
import com.github.retrooper.packetevents.resources.ResourceLocation;
public interface MappedEntity {
ResourceLocation getName();
int getId(ClientVersion version);
}
@@ -0,0 +1,29 @@
/*
* This file is part of packetevents - https://github.com/retrooper/packetevents
* Copyright (C) 2021 retrooper and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.protocol.mapper;
import com.github.retrooper.packetevents.protocol.player.ClientVersion;
public interface StaticMappedEntity extends MappedEntity{
int getId();
default int getId(ClientVersion version) {
return getId();
}
}
@@ -0,0 +1,37 @@
/*
* This file is part of ProtocolSupport - https://github.com/ProtocolSupport/ProtocolSupport
* Copyright (C) 2021 ProtocolSupport
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.protocol.nbt;
public abstract class NBT {
public abstract NBTType<?> getType();
@Override
public abstract boolean equals(Object other);
@Override
public abstract int hashCode();
@Override
public String toString() {
return "nbt";
}
public abstract NBT copy();
}
@@ -0,0 +1,92 @@
/*
* This file is part of ProtocolSupport - https://github.com/ProtocolSupport/ProtocolSupport
* Copyright (C) 2021 ProtocolSupport
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.protocol.nbt;
public class NBTByte extends NBTNumber {
protected final byte value;
public NBTByte(byte value) {
this.value = value;
}
public NBTByte(boolean value) {
this((byte) (value ? 1 : 0));
}
@Override
public NBTType<NBTByte> getType() {
return NBTType.BYTE;
}
@Override
public byte getAsByte() {
return value;
}
@Override
public short getAsShort() {
return value;
}
@Override
public int getAsInt() {
return value;
}
@Override
public long getAsLong() {
return value;
}
@Override
public float getAsFloat() {
return value;
}
@Override
public double getAsDouble() {
return value;
}
@Override
public int hashCode() {
return Byte.hashCode(value);
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
NBTByte other = (NBTByte) obj;
return value == other.value;
}
@Override
public NBTByte copy() {
return this;
}
}
@@ -0,0 +1,65 @@
/*
* This file is part of ProtocolSupport - https://github.com/ProtocolSupport/ProtocolSupport
* Copyright (C) 2021 ProtocolSupport
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.protocol.nbt;
import java.util.Arrays;
public class NBTByteArray extends NBT {
protected final byte[] array;
public NBTByteArray(byte[] array) {
this.array = array;
}
@Override
public NBTType<NBTByteArray> getType() {
return NBTType.BYTE_ARRAY;
}
public byte[] getValue() {
return array;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
NBTByteArray other = (NBTByteArray) obj;
return Arrays.equals(array, other.array);
}
@Override
public int hashCode() {
return Arrays.hashCode(array);
}
public NBTByteArray copy() {
byte[] abyte = new byte[this.array.length];
System.arraycopy(this.array, 0, abyte, 0, this.array.length);
return new NBTByteArray(abyte);
}
}
@@ -0,0 +1,226 @@
/*
* This file is part of ProtocolSupport - https://github.com/ProtocolSupport/ProtocolSupport
* Copyright (C) 2021 ProtocolSupport
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.protocol.nbt;
import java.text.MessageFormat;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
public class NBTCompound extends NBT {
protected final Map<String, NBT> tags = new LinkedHashMap<>();
@Override
public NBTType<NBTCompound> getType() {
return NBTType.COMPOUND;
}
public boolean isEmpty() {
return tags.isEmpty();
}
public Set<String> getTagNames() {
return Collections.unmodifiableSet(tags.keySet());
}
public Map<String, NBT> getTags() {
return Collections.unmodifiableMap(tags);
}
public NBT getTagOrThrow(String key) {
NBT tag = getTagOrNull(key);
if (tag == null) {
throw new IllegalStateException(MessageFormat.format("NBT {0} does not exist", key));
}
return tag;
}
public NBT getTagOrNull(String key) {
return tags.get(key);
}
@SuppressWarnings("unchecked")
public <T extends NBT> T getTagOfTypeOrThrow(String key, Class<T> type) {
NBT tag = getTagOrThrow(key);
if (type.isInstance(tag)) {
return (T) tag;
} else {
throw new IllegalStateException(MessageFormat.format("NBT {0} has unexpected type, expected {1}, but got {2}", key, type, tag.getClass()));
}
}
@SuppressWarnings("unchecked")
public <T extends NBT> T getTagOfTypeOrNull(String key, Class<T> type) {
NBT tag = getTagOrNull(key);
if (type.isInstance(tag)) {
return (T) tag;
}
return null;
}
@SuppressWarnings("unchecked")
public <T extends NBT> NBTList<T> getTagListOfTypeOrThrow(String key, Class<T> type) {
NBTList<? extends NBT> list = getTagOfTypeOrThrow(key, NBTList.class);
if (!type.isAssignableFrom(list.getTagsType().getNBTClass())) {
throw new IllegalStateException(MessageFormat.format("NBTList {0} tags type has unexpected type, expected {1}, but got {2}", key, type, list.getTagsType().getNBTClass()));
}
return (NBTList<T>) list;
}
@SuppressWarnings("unchecked")
public <T extends NBT> NBTList<T> getTagListOfTypeOrNull(String key, Class<T> type) {
NBTList<? extends NBT> list = getTagOfTypeOrNull(key, NBTList.class);
if ((list != null) && type.isAssignableFrom(list.getTagsType().getNBTClass())) {
return (NBTList<T>) list;
}
return null;
}
public NBTCompound getCompoundTagOrThrow(String key) {
return getTagOfTypeOrThrow(key, NBTCompound.class);
}
public NBTCompound getCompoundTagOrNull(String key) {
return getTagOfTypeOrNull(key, NBTCompound.class);
}
public NBTNumber getNumberTagOrThrow(String key) {
return getTagOfTypeOrThrow(key, NBTNumber.class);
}
public NBTNumber getNumberTagOrNull(String key) {
return getTagOfTypeOrNull(key, NBTNumber.class);
}
public NBTString getStringTagOrThrow(String key) {
return getTagOfTypeOrThrow(key, NBTString.class);
}
public NBTString getStringTagOrNull(String key) {
return getTagOfTypeOrNull(key, NBTString.class);
}
public NBTList<NBTCompound> getCompoundListTagOrThrow(String key) {
return getTagListOfTypeOrThrow(key, NBTCompound.class);
}
public NBTList<NBTCompound> getCompoundListTagOrNull(String key) {
return getTagListOfTypeOrNull(key, NBTCompound.class);
}
public NBTList<NBTNumber> getNumberTagListTagOrThrow(String key) {
return getTagListOfTypeOrThrow(key, NBTNumber.class);
}
public NBTList<NBTNumber> getNumberListTagOrNull(String key) {
return getTagListOfTypeOrNull(key, NBTNumber.class);
}
public NBTList<NBTString> getStringListTagOrThrow(String key) {
return getTagListOfTypeOrThrow(key, NBTString.class);
}
public NBTList<NBTString> getStringListTagOrNull(String key) {
return getTagListOfTypeOrNull(key, NBTString.class);
}
public String getStringTagValueOrThrow(String key) {
return getStringTagOrThrow(key).getValue();
}
public String getStringTagValueOrNull(String key) {
NBT tag = getTagOrNull(key);
if (tag instanceof NBTString) {
return ((NBTString) tag).getValue();
}
return null;
}
public String getStringTagValueOrDefault(String key, String defaultValue) {
NBT tag = getTagOrNull(key);
if (tag instanceof NBTString) {
return ((NBTString) tag).getValue();
}
return defaultValue;
}
public NBT removeTag(String key) {
return tags.remove(key);
}
@SuppressWarnings("unchecked")
public <T extends NBT> T removeTagAndReturnIfType(String key, Class<T> type) {
NBT tag = removeTag(key);
if (type.isInstance(tag)) {
return (T) tag;
}
return null;
}
@SuppressWarnings("unchecked")
public <T extends NBT> NBTList<T> removeTagAndReturnIfListType(String key, Class<T> type) {
NBTList<?> list = removeTagAndReturnIfType(key, NBTList.class);
if ((list != null) && type.isAssignableFrom(list.getTagsType().getNBTClass())) {
return (NBTList<T>) list;
}
return null;
}
public void setTag(String key, NBT tag) {
if (tag != null) {
tags.put(key, tag);
} else {
tags.remove(key);
}
}
public NBTCompound copy() {
NBTCompound clone = new NBTCompound();
for (Map.Entry<String, NBT> entry : tags.entrySet()) {
clone.setTag(entry.getKey(), entry.getValue().copy());
}
return clone;
}
public boolean getBoolean(String string) {
NBTByte nbtByte = this.getTagOfTypeOrNull(string, NBTByte.class);
// Empty byte tags are considered 0
byte byteValue = nbtByte == null ? 0 : nbtByte.getAsByte();
return byteValue != 0;
}
@Override
public boolean equals(Object other) {
if (other instanceof NBTCompound) {
if (isEmpty() && ((NBTCompound) other).isEmpty()) {
return true;
}
return tags.equals(((NBTCompound) other).tags);
}
return false;
}
@Override
public int hashCode() {
return tags.hashCode();
}
}
@@ -0,0 +1,88 @@
/*
* This file is part of ProtocolSupport - https://github.com/ProtocolSupport/ProtocolSupport
* Copyright (C) 2021 ProtocolSupport
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.protocol.nbt;
public class NBTDouble extends NBTNumber {
protected final double value;
public NBTDouble(double value) {
this.value = value;
}
@Override
public NBTType<NBTDouble> getType() {
return NBTType.DOUBLE;
}
@Override
public byte getAsByte() {
return (byte) value;
}
@Override
public short getAsShort() {
return (short) value;
}
@Override
public int getAsInt() {
return (int) value;
}
@Override
public long getAsLong() {
return (long) value;
}
@Override
public float getAsFloat() {
return (float) value;
}
@Override
public double getAsDouble() {
return value;
}
@Override
public int hashCode() {
return Double.hashCode(value);
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
NBTDouble other = (NBTDouble) obj;
return Double.doubleToLongBits(value) == Double.doubleToLongBits(other.value);
}
@Override
public NBTDouble copy() {
return this;
}
}
@@ -0,0 +1,50 @@
/*
* This file is part of ProtocolSupport - https://github.com/ProtocolSupport/ProtocolSupport
* Copyright (C) 2021 ProtocolSupport
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.protocol.nbt;
public class NBTEnd extends NBT {
public static final NBTEnd INSTANCE = new NBTEnd();
@Override
public NBTType<NBTEnd> getType() {
return NBTType.END;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
return getClass() == obj.getClass();
}
@Override
public int hashCode() {
return 0;
}
@Override
public NBTEnd copy() {
return this;
}
}
@@ -0,0 +1,88 @@
/*
* This file is part of ProtocolSupport - https://github.com/ProtocolSupport/ProtocolSupport
* Copyright (C) 2021 ProtocolSupport
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.protocol.nbt;
public class NBTFloat extends NBTNumber {
protected final float value;
public NBTFloat(float value) {
this.value = value;
}
@Override
public NBTType<NBTFloat> getType() {
return NBTType.FLOAT;
}
@Override
public byte getAsByte() {
return (byte) value;
}
@Override
public short getAsShort() {
return (short) value;
}
@Override
public int getAsInt() {
return (int) value;
}
@Override
public long getAsLong() {
return (long) value;
}
@Override
public float getAsFloat() {
return value;
}
@Override
public double getAsDouble() {
return value;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
NBTFloat other = (NBTFloat) obj;
return Float.floatToIntBits(value) == Float.floatToIntBits(other.value);
}
@Override
public int hashCode() {
return Float.hashCode(value);
}
@Override
public NBTFloat copy() {
return this;
}
}
@@ -0,0 +1,88 @@
/*
* This file is part of ProtocolSupport - https://github.com/ProtocolSupport/ProtocolSupport
* Copyright (C) 2021 ProtocolSupport
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.protocol.nbt;
public class NBTInt extends NBTNumber {
protected final int value;
public NBTInt(int value) {
this.value = value;
}
@Override
public NBTType<NBTInt> getType() {
return NBTType.INT;
}
@Override
public byte getAsByte() {
return (byte) value;
}
@Override
public short getAsShort() {
return (short) value;
}
@Override
public int getAsInt() {
return value;
}
@Override
public long getAsLong() {
return value;
}
@Override
public float getAsFloat() {
return value;
}
@Override
public double getAsDouble() {
return value;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
NBTInt other = (NBTInt) obj;
return value == other.value;
}
@Override
public int hashCode() {
return Integer.hashCode(value);
}
@Override
public NBTInt copy() {
return this;
}
}
@@ -0,0 +1,66 @@
/*
* This file is part of ProtocolSupport - https://github.com/ProtocolSupport/ProtocolSupport
* Copyright (C) 2021 ProtocolSupport
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.protocol.nbt;
import java.util.Arrays;
public class NBTIntArray extends NBT {
protected final int[] array;
public NBTIntArray(int[] array) {
this.array = array;
}
@Override
public NBTType<NBTIntArray> getType() {
return NBTType.INT_ARRAY;
}
public int[] getValue() {
return array;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
NBTIntArray other = (NBTIntArray) obj;
return Arrays.equals(array, other.array);
}
@Override
public int hashCode() {
return Arrays.hashCode(array);
}
@Override
public NBTIntArray copy() {
int[] aint = new int[this.array.length];
System.arraycopy(this.array, 0, aint, 0, this.array.length);
return new NBTIntArray(aint);
}
}
@@ -0,0 +1,125 @@
/*
* This file is part of ProtocolSupport - https://github.com/ProtocolSupport/ProtocolSupport
* Copyright (C) 2021 ProtocolSupport
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.protocol.nbt;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
public class NBTList<T extends NBT> extends NBT {
protected final NBTType<T> type;
protected final List<T> tags = new ArrayList<>();
public NBTList(NBTType<T> type) {
this.type = type;
}
public NBTList(NBTType<T> type, List<T> tags) {
this.type = type;
this.tags.addAll(tags);
}
public static NBTList<NBTCompound> createCompoundList() {
return new NBTList<>(NBTType.COMPOUND);
}
public static NBTList<NBTString> createStringList() {
return new NBTList<>(NBTType.STRING);
}
@Override
@SuppressWarnings("rawtypes")
public NBTType<NBTList> getType() {
return NBTType.LIST;
}
public NBTType<T> getTagsType() {
return type;
}
public boolean isEmpty() {
return tags.isEmpty();
}
public int size() {
return tags.size();
}
public List<T> getTags() {
return Collections.unmodifiableList(tags);
}
public T getTag(int index) {
return tags.get(index);
}
public void setTag(int index, T tag) {
validateAddTag(tag);
tags.set(index, tag);
}
public void addTag(int index, T tag) {
validateAddTag(tag);
tags.add(index, tag);
}
public void addTag(T tag) {
validateAddTag(tag);
tags.add(tag);
}
protected void validateAddTag(T tag) {
if (type != tag.getType()) {
throw new IllegalArgumentException(MessageFormat.format("Invalid tag type. Expected {0}, got {1}.", type.getNBTClass(), tag.getClass()));
}
}
@SuppressWarnings("unchecked")
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
NBTList<T> other = (NBTList<T>) obj;
return Objects.equals(type, other.type) && Objects.equals(tags, other.tags);
}
@Override
public int hashCode() {
return Objects.hash(type, tags);
}
@Override
public NBTList<T> copy() {
List<T> newTags = new ArrayList<>();
for (T tag : this.tags) {
newTags.add((T) tag.copy());
}
return new NBTList<>(type, newTags);
}
}
@@ -0,0 +1,88 @@
/*
* This file is part of ProtocolSupport - https://github.com/ProtocolSupport/ProtocolSupport
* Copyright (C) 2021 ProtocolSupport
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.protocol.nbt;
public class NBTLong extends NBTNumber {
protected final long value;
public NBTLong(long value) {
this.value = value;
}
@Override
public NBTType<NBTLong> getType() {
return NBTType.LONG;
}
@Override
public byte getAsByte() {
return (byte) value;
}
@Override
public short getAsShort() {
return (short) value;
}
@Override
public int getAsInt() {
return (int) value;
}
@Override
public long getAsLong() {
return value;
}
@Override
public float getAsFloat() {
return value;
}
@Override
public double getAsDouble() {
return value;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
NBTLong other = (NBTLong) obj;
return value == other.value;
}
@Override
public int hashCode() {
return Long.hashCode(value);
}
@Override
public NBTLong copy() {
return this;
}
}
@@ -0,0 +1,66 @@
/*
* This file is part of ProtocolSupport - https://github.com/ProtocolSupport/ProtocolSupport
* Copyright (C) 2021 ProtocolSupport
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.protocol.nbt;
import java.util.Arrays;
public class NBTLongArray extends NBT {
protected final long[] array;
public NBTLongArray(long[] array) {
this.array = array;
}
@Override
public NBTType<NBTLongArray> getType() {
return NBTType.LONG_ARRAY;
}
public long[] getValue() {
return array;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
NBTLongArray other = (NBTLongArray) obj;
return Arrays.equals(array, other.array);
}
@Override
public int hashCode() {
return Arrays.hashCode(array);
}
@Override
public NBTLongArray copy() {
long[] along = new long[this.array.length];
System.arraycopy(this.array, 0, along, 0, this.array.length);
return new NBTLongArray(along);
}
}
@@ -0,0 +1,35 @@
/*
* This file is part of ProtocolSupport - https://github.com/ProtocolSupport/ProtocolSupport
* Copyright (C) 2021 ProtocolSupport
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.protocol.nbt;
public abstract class NBTNumber extends NBT {
public abstract byte getAsByte();
public abstract short getAsShort();
public abstract int getAsInt();
public abstract long getAsLong();
public abstract float getAsFloat();
public abstract double getAsDouble();
}
@@ -0,0 +1,87 @@
/*
* This file is part of ProtocolSupport - https://github.com/ProtocolSupport/ProtocolSupport
* Copyright (C) 2021 ProtocolSupport
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.protocol.nbt;
public class NBTShort extends NBTNumber {
protected final short value;
public NBTShort(short value) {
this.value = value;
}
@Override
public NBTType<NBTShort> getType() {
return NBTType.SHORT;
}
@Override
public byte getAsByte() {
return (byte) value;
}
@Override
public short getAsShort() {
return value;
}
@Override
public int getAsInt() {
return value;
}
@Override
public long getAsLong() {
return value;
}
@Override
public float getAsFloat() {
return value;
}
@Override
public double getAsDouble() {
return value;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
NBTShort other = (NBTShort) obj;
return value == other.value;
}
@Override
public int hashCode() {
return Short.hashCode(value);
}
@Override
public NBTShort copy() {
return this;
}
}
@@ -0,0 +1,64 @@
/*
* This file is part of ProtocolSupport - https://github.com/ProtocolSupport/ProtocolSupport
* Copyright (C) 2021 ProtocolSupport
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.protocol.nbt;
import java.util.Objects;
public class NBTString extends NBT {
protected final String string;
public NBTString(String string) {
this.string = string;
}
@Override
public NBTType<NBTString> getType() {
return NBTType.STRING;
}
public String getValue() {
return string;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
NBTString other = (NBTString) obj;
return Objects.equals(string, other.string);
}
@Override
public int hashCode() {
return Objects.hash(string);
}
@Override
public NBTString copy() {
return this;
}
}
@@ -0,0 +1,76 @@
/*
* This file is part of ProtocolSupport - https://github.com/ProtocolSupport/ProtocolSupport
* Copyright (C) 2021 ProtocolSupport
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.protocol.nbt;
import java.util.Objects;
public class NBTType<T extends NBT> {
public static final NBTType<NBTEnd> END = new NBTType<>(NBTEnd.class);
public static final NBTType<NBTByte> BYTE = new NBTType<>(NBTByte.class);
public static final NBTType<NBTShort> SHORT = new NBTType<>(NBTShort.class);
public static final NBTType<NBTInt> INT = new NBTType<>(NBTInt.class);
public static final NBTType<NBTLong> LONG = new NBTType<>(NBTLong.class);
public static final NBTType<NBTFloat> FLOAT = new NBTType<>(NBTFloat.class);
public static final NBTType<NBTDouble> DOUBLE = new NBTType<>(NBTDouble.class);
public static final NBTType<NBTByteArray> BYTE_ARRAY = new NBTType<>(NBTByteArray.class);
public static final NBTType<NBTString> STRING = new NBTType<>(NBTString.class);
@SuppressWarnings("rawtypes")
public static final NBTType<NBTList> LIST = new NBTType<>(NBTList.class);
public static final NBTType<NBTCompound> COMPOUND = new NBTType<>(NBTCompound.class);
public static final NBTType<NBTIntArray> INT_ARRAY = new NBTType<>(NBTIntArray.class);
public static final NBTType<NBTLongArray> LONG_ARRAY = new NBTType<>(NBTLongArray.class);
protected final Class<T> clazz;
protected NBTType(Class<T> clazz) {
this.clazz = clazz;
}
public Class<T> getNBTClass() {
return clazz;
}
@Override
public String toString() {
return clazz.getSimpleName();
}
@SuppressWarnings("unchecked")
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
NBTType<T> other = (NBTType<T>) obj;
return Objects.equals(clazz, other.clazz);
}
@Override
public int hashCode() {
return clazz.hashCode();
}
}
@@ -0,0 +1,95 @@
/*
* This file is part of ProtocolSupport - https://github.com/ProtocolSupport/ProtocolSupport
* Copyright (C) 2021 ProtocolSupport
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.github.retrooper.packetevents.protocol.nbt.codec;
import com.github.retrooper.packetevents.manager.server.ServerVersion;
import com.github.retrooper.packetevents.netty.buffer.ByteBufInputStream;
import com.github.retrooper.packetevents.netty.buffer.ByteBufOutputStream;
import com.github.retrooper.packetevents.netty.buffer.ByteBufHelper;
import com.github.retrooper.packetevents.protocol.nbt.NBTCompound;
import com.github.retrooper.packetevents.protocol.nbt.NBTEnd;
import com.github.retrooper.packetevents.protocol.nbt.serializer.DefaultNBTSerializer;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
public class NBTCodec {
public static NBTCompound readNBT(Object byteBuf, ServerVersion serverVersion) {
if (serverVersion.isNewerThanOrEquals(ServerVersion.V_1_8)) {
try {
return (NBTCompound) DefaultNBTSerializer.INSTANCE.deserializeTag(
new ByteBufInputStream(byteBuf));
} catch (IOException e) {
e.printStackTrace();
}
}
else {
try {
final short length = ByteBufHelper.readShort(byteBuf);
if (length < 0) {
return null;
}
Object slicedBuffer = ByteBufHelper.readSlice(byteBuf, length);
try (DataInputStream stream = new DataInputStream(
new GZIPInputStream(new ByteBufInputStream(slicedBuffer)))) {
return (NBTCompound) DefaultNBTSerializer.INSTANCE.deserializeTag(stream);
}
}
catch (IOException ex) {
throw new IllegalStateException(ex);
}
}
return null;
}
public static void writeNBT(Object byteBuf, ServerVersion serverVersion, NBTCompound tag) {
if (serverVersion.isNewerThanOrEquals(ServerVersion.V_1_8)) {
try (ByteBufOutputStream outputStream = new ByteBufOutputStream(byteBuf)) {
if (tag != null) {
DefaultNBTSerializer.INSTANCE.serializeTag(outputStream, tag);
} else {
DefaultNBTSerializer.INSTANCE.serializeTag(outputStream, NBTEnd.INSTANCE);
}
} catch (IOException e) {
throw new IllegalStateException(e);
}
}
else {
if (tag == null) {
ByteBufHelper.writeShort(byteBuf, -1);
} else {
int lengthWriterIndex = ByteBufHelper.writerIndex(byteBuf);
ByteBufHelper.writeShort(byteBuf, 0);
int writerIndexDataStart = ByteBufHelper.writerIndex(byteBuf);
try (DataOutputStream outputstream = new DataOutputStream(new GZIPOutputStream(new ByteBufOutputStream(byteBuf)))) {
DefaultNBTSerializer.INSTANCE.serializeTag(outputstream, tag);
} catch (Exception e) {
throw new IllegalStateException(e);
}
int writerIndexDataEnd = ByteBufHelper.writerIndex(byteBuf);
ByteBufHelper.writerIndex(byteBuf, lengthWriterIndex);
ByteBufHelper.writeShort(byteBuf, writerIndexDataEnd - writerIndexDataStart);
ByteBufHelper.writerIndex(byteBuf, writerIndexDataEnd);
}
}
}
}
Loaded 100 of 566 files, more files were not shown because too many files have changed in this diff. Show more