Commit graph

53 Commits

Autor SHA1 Nachricht Datum
Wesley Wolfe
29d7cc711b Add utility class AsynchronousExecutor
This class is a general purpose task execution system, that uses stages
to separate processing blocks for asynchronous and synchronous
executions.
2012-12-12 04:05:47 -06:00
Wesley Wolfe
05e889f346 Queue tasks from secondary threads. Fixes BUKKIT-2546 and BUKKIT-2600
This change affects the old chat compatibility layer from an
implementation only standpoint. It does not queue the 'event' to fire,
but rather queues a runnable that allows the calling thread to wait for
execution to finish.

The other effect of this change is that rcon connects now have their
commands queued to be run on next server tick using the same
implementation.

The internal implementation is in org.bukkit.craftbukkit.util.Waitable.
It is very similar to a Future<T> task, but only contains minimal
implementation with object.wait() and object.notify() calls
under the hood of waitable.get() and waitable.run().

PlayerPreLoginEvent now properly implements thread-safe event execution
by queuing the events similar to chat and rcon. This is still a poor way
albeit proper way to implement thread-safety; PlayerPreLoginEvent will
stay deprecated.
2012-10-14 17:26:53 -05:00
Travis Watkins
74b3be57b7 Replace LongObjectHashMap with a more efficient implementation
After further testing it appears that while the original LongHashtable
has issues with object creation churn and is severly slower than even
java.util.HashMap in general case benchmarks it is in fact very efficient
for our use case.

With this in mind I wrote a replacement LongObjectHashMap modeled after
LongHashtable. Unlike the original implementation this one does not use
Entry objects for storage so does not have the same object creation churn.
It also uses a 2D array instead of a 3D one and does not use a cache as
benchmarking shows this is more efficient. The "bucket size" was chosen
based on benchmarking performance of the HashMap with contents that would
be plausible for a 200+ player server. This means it uses a little extra
memory for smaller servers but almost always uses less than the normal
java.util.HashMap.

To make up for the original LongHashtable being a poor choice for generic
datasets I added a mixer to the new implementation based on code from
MurmurHash. While this has no noticable effect positive or negative with
our normal use of chunk coordinates it makes the HashMap perform just as
well with nearly any kind of dataset.

After these changes ChunkProviderServer.isChunkLoaded() goes from using
20% CPU time while sampling to not even showing up after 45 minutes of
sampling due to the CPU usage being too low to be noticed.
2012-09-21 11:20:10 -05:00
EdGruberman
450edc3004 Use standard format function to format logs. Addresses BUKKIT-2246
Also fix "excess" Log Levels.
2012-08-21 19:17:29 -05:00
Travis Watkins
ccc760d629 Use a dynamic pool size for the iterator cache
Many codepaths only end up with one iterator being used at a time and
most of the rest only get up to two being used so using a static pool of
three is wasteful. This also allows us to efficiently handle cases that
exceed 3 iterators in use. Overall this dramatically increases the hit rate
and results in less iterators being created.
2012-08-20 18:44:07 -05:00
Travis Watkins
97ac0a3f14 Add LongObjectHashMap and LongHashSet
Replace uses of LongHashtable and LongHashset with new implementations.
Remove EntryBase, LongBaseHashtable, LongHashset, and LongHashtable as they
are no longer used.

LongObjectHashMap does not use Entry or EntryBase classes internally for
storage so has much lower object churn and greater performance. LongHashSet
is not as much of performance win for our use case but for general use is
up to seventeen times faster than the old implementation and is in fact
faster than alternatives from "high performance" java libraries. This is
being added so that if someone tries to use it in the future in a place
unrelated to its current use they don't accidentally end up with something
slower than the Java collections HashSet implementation.
2012-08-19 09:51:00 -05:00
Travis Watkins
858d36efc9 Add iterator cache to UnsafeList and use it in hotspots
Adds a specialized iterator for the list and a pool of iterators to avoid
object churn. Also optimizes the clear() method to reduce object creation.
2012-08-19 09:50:57 -05:00
Wesley Wolfe
02d6703da7 Implement new AsyncPlayerChatEvent. Addresses BUKKIT-2064
Added two utility collections for use with PlayerChatEvents allowing lazier
initialization of events and less need to synchronize against the player
list.

Provided a hidden queue system for similar logic to pre-1.3 chat. When a
plugin is listening for the deprecated PlayerChatEvent, all chat will be
delayed to be mirror executed from the main thread. All developers are
encouraged to immediately update to the developmental Bukkit chat API as a
minimum transition for server stability.

Additionally, changes were required to bring thread-safety to the flow
logic. CopyOnWriteArrayList is the only viable means to produce thread
safety with minimal diff; using a sane pre-implemented collection would
require reworking of sections of NMS logic.

As a minor change, implemented expected functionality for
PlayerCommandPreProcessEvent. Setting the player should now change the
player executing the command.
2012-08-03 23:44:45 -05:00
feildmaster
a43d621c01 Update CraftBukkit to Minecraft 1.3.1 2012-08-02 04:58:50 -05:00
Travis Watkins
70c91c161e Resize UnsafeList to initial capacity when cleared and implement clone. 2012-06-01 13:03:59 -05:00
EdGruberman
31d488a386 Update to jline 2. Fixes BUKKIT-717
JLine 2 allows for better color matching in the console and support for
colors in console on Windows. Hopefully provides better performance as well.
2012-05-15 23:27:51 -05:00
EvilSeph
e61a316815 We build for Java 1.5. 2012-04-23 23:05:57 -04:00
Travis Watkins
b7376e0865 Avoid doing unnecessary range checks when we're looping from start to end.
Make EntityLiving call AI logic every tick again.
Rework PathfinderGoalSelector logic.

Adds UnsafeList for use in places where we use ArrayList and know we won't
get index out of range errors. Added usage to World's tickEntities, Chunk's
entitySlices to speed up searching for entities, and to PathfinderGoalSelector
to speed up dealing with AI goals.

Reworked logic in PathfinderGoalSelector with help from fullwall. This code
no longer uses an extra ArrayList for setting up goals and only updates which
goals should be run every other time it is called.

Removed only calling PathfinderGoalSelector every other tick from EntityLiving
as we now only setup new goals every other tick. This ensures existing goals
run every tick to properly update mob movement.
2012-04-23 21:52:08 -04:00
zml2008
8aee4c3f56 [Bleeding] Added support for all TreeType entries to CraftWorld.generateTree(). Addresses BUKKIT-1161 2012-03-21 20:32:17 -04:00
feildmaster
4545336fdf Only remove blocks when golem is successfully spawned. Fixes BUKKIT-1094 2012-03-11 01:30:16 -05:00
Nathan Adams
a5be079797 Fixed compile issues with StructureGrowDelegate not implementing the new isEmpty method 2012-03-01 15:38:34 +00:00
Wesley Wolfe
078e2511a5 [Bleeding] Override not applicable 2012-02-23 21:33:51 -05:00
Zeerix
7a49e29b55 [Bleeding] Undo changes to the tree WorldGenerators.
- All StructureGrowEvent handling for these is in BlockSapling now, using a BlockChangeDelegate to collect the data.
- Moved StructureGrowDelegate into a separate class
2012-02-23 18:27:23 -05:00
Erik Broes
137880b727 Deprecation cleanup. 2012-02-18 13:06:12 -05:00
Nathan Adams
d3b4375d31 Fixed LongHashset incorrectly using read lock for popAll, and made it use write lock. This fixes BUKKIT-509 2012-01-15 18:49:16 +00:00
Nathan Adams
65f30fd99d Dragons now throw events when creating portals 2012-01-15 12:01:11 +00:00
Erik Broes
a4ce846d07 Fix formatting. 2012-01-15 10:54:57 +01:00
Erik Broes
7219d4dd85 Updated to Minecraft 1.1 2012-01-12 23:10:13 +01:00
Tahg
e4a839cbbc Fix for entity spawning and some code cleanup 2011-12-06 19:21:10 -05:00
Tahg
bc8f02788f Performance update to remove several very high counts of temp object creation 2011-12-06 08:52:45 -05:00
Nathan Adams
dbd3ff71fc Implemented server.getOfflinePlayers 2011-12-04 17:57:00 +00:00
Nathan Adams
b1671be875 Implemented bukkit versioning 2011-10-31 04:03:47 +00:00
Nathan Adams
1195944c90 Removed deprecated ConcurrentSoftMap 2011-10-10 22:05:35 +01:00
Dinnerbone
d69bbd38c2 Commands are now "bukkit.command.x" instead of "craftbukkit.command.x", added legacy perms for compat 2011-09-02 19:19:50 +01:00
Dinnerbone
90d1afb748 Refactored default permission registration. Added "craftbukkit" and "craftbukkit.command" parent perms, and fixed whitelist adding 2011-08-18 14:04:59 +01:00
Dinnerbone
e6876a97da Added permissions for each vanilla command - see http://wiki.bukkit.org/Vanilla_permissions. Removed op requirement for all server commands :o 2011-08-13 03:15:32 +01:00
Dinnerbone
c101c3553b Readded ConcurrentSoftMap because apparently some plugins need this. (They really, really shouldn't be using it. At all.) 2011-07-15 21:49:53 +01:00
Dinnerbone
a507add4ea Fixed huge memory leak (gigabytes/hour!) by placing a bukkit under the ceiling. 2011-07-15 20:52:54 +01:00
Erik Broes
9adc03abab Generic cleanup of the org.bukkit.craftbukkit classes. 2011-06-12 12:51:54 +02:00
Dinnerbone
6319a19073 Possible fix for -nojline printing blank lines 2011-05-19 21:46:47 +01:00
EvilSeph
eac5b9623d Added -nojline CLI option to emulate vanilla console behaviours. Added JLine disabling compatibility (removes the '>').
-nojline disables JLine, removes the '>', sets the timestamp to vanilla's and sets the language to English.

-Djline.terminal=jline.UnsupportedTerminal disables JLine and removes the '>'.
2011-05-18 21:36:30 -04:00
Erik Broes
309846d732 Whitespace + general cleanup 2011-05-15 13:41:46 +02:00
Erik Broes
483a878b8b Update for 1.4_00_01 -- if you bypassed Bukkit, you will most likely break. 2011-04-20 19:05:14 +02:00
Dinnerbone
2ac43ce223 Ctrl+C saves world before stopping 2011-03-29 21:01:04 +01:00
Erik Broes
e24b10dfd9 Updated for the cleanups done in Bukkit 2011-03-26 22:32:56 +01:00
Raphfrk
0b05cbb998 Updated SoftMap to be concurrent. 2011-03-23 19:37:12 +01:00
Erik Broes
22baecaf7f Clean code a bit 2011-03-12 16:12:41 +01:00
Tahg
078f48c0fb Code cleanup, fixed doors, chunk entity fetching 2011-03-11 16:25:35 -05:00
Tahg
c06f3e0d76 properly implement locks 2011-03-10 21:37:55 -05:00
Tahg
67cf10656c Add locks to Hashset 2011-03-10 13:04:59 -05:00
Dinnerbone
f040900d3c Attempt to fix console crash 2011-03-09 23:34:26 +00:00
Dinnerbone
0df1d1a101 Changed block cache to soft references (should help a lot with memory usage) 2011-03-09 22:12:28 +00:00
Erik Broes
9d9ad6bd1e Java 1.5 compat. 2011-03-02 15:24:17 +01:00
FrozenCow
9832ce06f1 Synchronized and moved Hash classes 2011-03-01 16:37:19 -05:00
Dinnerbone
d7114a4f62 Fixed empty console! Oops! 2011-02-26 11:51:31 +00:00