Commit Graph
21 Commits
Author SHA1 Message Date
Techcable e0ada11f1e Change base variables in BlockPos to force diff 2016-12-16 19:53:35 -06:00
Techcable d0cfdc4c62 Speedup BlockPos by fixing inlining 2016-11-30 20:57:02 -06:00
Techcable 94a6e8cb09 Make entities look for hoppers
Cherry-pick of PR GH-319
2016-06-18 01:03:40 -05:00
Techcable 291d1f7d21 Make Spigot its own submodule
Merge pull request #118 from Techcable/spigot-in-submodule
2016-03-21 12:22:47 -05:00
Techcable a8d725eb23 Don't pass null title to constructor
Fixes #83
Fix resetTitle()
@Zbob750 shouldn't be doing these updates in the middle of the night
2016-03-16 18:58:48 -07:00
Techcable c114ab3fea Handle static methods 2016-03-12 09:43:39 -07:00
Techcable 88d0213190 Use ASM for event execution
Reflection (although highly optimized), has noticable overhead.
It also creates noticable GC overhead by allocating arrays with arguments, as @Aikar has said.

Based on WaterfallMC/Waterfall@1692934370

Merge pull request #45 from Techcable/feature/asm-executors
2016-03-03 13:26:03 -07:00
Techcable 99f7a9fcf5 Improve Paper's version checking system
Will now check commit hashes from this repo as a fallback when it is unable to find a build from our CI server. Because not everyone uses it directly
2016-03-11 22:30:18 -06:00
Techcable d78781c869 Re-add BlocksPos inlining patch 2016-03-07 16:00:29 -06:00
Techcable 85be8cc620 Improve BlockPosition inlining
Normally the JVM can inline virtual getters by having two sets of code, one is the 'optimized' code and the other is the 'deoptimized' code.
If a single type is used 99% of the time, then its worth it to inline, and to revert to 'deoptimized' the 1% of the time we encounter other types.
But if two types are encountered commonly, then the JVM can't inline them both, and the call overhead remains.

This scenario also occurs with BlockPos and MutableBlockPos.
The variables in BlockPos are final, so MutableBlockPos can't modify them.
MutableBlockPos fixes this by adding custom mutable variables, and overriding the getters to access them.

This approach with utility methods that operate on MutableBlockPos and BlockPos.
Specific examples are BlockPosition.up(), and World.isValidLocation().
It makes these simple methods much slower than they need to be.

This should result in an across the board speedup in anything that accesses blocks or does logic with positions.

This is based upon conclusions drawn from inspecting the assenmbly generated bythe JIT compiler on my microbenchmarks.
They had 'callq' (invoke) instead of 'mov' (get from memory) instructions.
2016-11-30 20:56:58 -06:00
Techcable 1bdbffaf84 Improve title API
Uses title objects instead of individual update methods
2016-02-17 19:03:21 -07:00
Techcable aea26a3f89 Speedup BlockPos by fixing inlining 2016-01-29 03:26:31 -06:00
Techcable 3e8e275447 Lookup game profiles for users that aren't onine 2015-08-15 14:05:03 -05:00
Techcable 15512b5459 Use the server usercache for player heads 2015-08-11 01:27:18 -05:00
Techcable f89d680e05 Add PlayerMicroMoveEvent 2015-07-23 04:30:13 -07:00
Techcable 68a47b98c6 Add ProjectileCollideEvent
Deprecated now and replaced with ProjectileHitEvent
2016-12-16 21:25:39 -06:00
Techcable 8da0c13f67 Add ProjectileCollideEvent
Now deprecated and replaced with ProjectileHitEvent
2016-12-16 21:25:39 -06:00
TechcableandFruxz b8f6338201 Player Tab List and Title APIs
Co-authored-by: Fruxz <cedricspitzer@outlook.de>
2016-02-29 20:02:40 -06:00
Techcable 844bc6c46a Use ASM for event executors.
Uses method handles for private or static methods.
2016-03-03 13:20:33 -07:00
Techcable eaf365a7b7 Player Tab List and Title APIs 2016-03-03 02:32:10 -06:00
Techcable da1b68adca Use UserCache for player heads 2016-03-02 23:42:37 -06:00