Commit Graph

58 Commits

Author SHA1 Message Date
CraftBukkit/Spigot
5783df9d13 Update CraftBukkit to Minecraft 1.7.2
By: mbax <matt@phozop.net>
2013-11-04 07:07:38 -06:00
CraftBukkit/Spigot
868456b95f Refactor EntityDamageEvents. Adds BUKKIT-1944 & BUKKIT-3684
By: feildmaster <admin@feildmaster.com>
2013-04-09 22:25:06 -05:00
CraftBukkit/Spigot
c8eaad4f3f We compile for 1.5
By: Wesley Wolfe <weswolf@aol.com>
2013-04-04 01:22:50 -05:00
CraftBukkit/Spigot
27e7fa2e01 Add a WeakCollection utility class.
This class is designed to be an invisible layer between a normal collection,
and one that silently loses entries because they are only weakly referencable.
Some operations have additional overhead to be semantically correct, but it
maintains the equals contract for all entries, as opposed to identity.

It does not support the equals or hash code method as it cannot easily have
the transitive and commutative properties.

By: Wesley Wolfe <weswolf@aol.com>
2013-04-02 07:52:17 -05:00
CraftBukkit/Spigot
fde7669132 Update CraftBukkit to Minecraft 1.4.6
By: feildmaster <admin@feildmaster.com>
2012-12-19 22:03:52 -06:00
CraftBukkit/Spigot
c459e6fc06 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.

By: Wesley Wolfe <weswolf@aol.com>
2012-12-12 03:54:11 -06:00
CraftBukkit/Spigot
730e3ceb1b 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.

By: Wesley Wolfe <weswolf@aol.com>
2012-10-07 15:08:21 -05:00
CraftBukkit/Spigot
4277872612 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.

By: Travis Watkins <amaranth@ubuntu.com>
2012-09-11 05:51:09 -05:00
CraftBukkit/Spigot
9c8b353591 Use standard format function to format logs. Addresses BUKKIT-2246
Also fix "excess" Log Levels.

By: EdGruberman <ed@rjump.com>
2012-08-11 16:29:50 -07:00
CraftBukkit/Spigot
c144b2459c 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.

By: Travis Watkins <amaranth@ubuntu.com>
2012-08-19 19:59:58 -05:00
CraftBukkit/Spigot
327e789c7f 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.

By: Travis Watkins <amaranth@ubuntu.com>
2012-08-17 18:53:59 -05:00
CraftBukkit/Spigot
9c569d394d 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.

By: Travis Watkins <amaranth@ubuntu.com>
2012-08-17 12:55:33 -05:00
CraftBukkit/Spigot
7383d52df7 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.

By: Wesley Wolfe <weswolf@aol.com>
2012-08-03 06:24:55 -05:00
CraftBukkit/Spigot
6e2987bb35 Update CraftBukkit to Minecraft 1.3.1
By: feildmaster <admin@feildmaster.com>
2012-07-29 02:33:13 -05:00
CraftBukkit/Spigot
8716e36905 Resize UnsafeList to initial capacity when cleared and implement clone.
By: Travis Watkins <amaranth@ubuntu.com>
2012-05-31 20:14:28 -05:00
CraftBukkit/Spigot
01b14886d7 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.

By: EdGruberman <ed@rjump.com>
2012-03-14 13:59:14 -07:00
CraftBukkit/Spigot
bdccfb5797 We build for Java 1.5.
By: EvilSeph <evilseph@gmail.com>
2012-04-23 23:05:57 -04:00
CraftBukkit/Spigot
f977f3cc65 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.

By: Travis Watkins <amaranth@ubuntu.com>
2012-04-23 09:47:05 -05:00
CraftBukkit/Spigot
d434857d8a [Bleeding] Added support for all TreeType entries to CraftWorld.generateTree(). Addresses BUKKIT-1161
By: zml2008 <zach@zachsthings.com>
2012-03-13 19:38:39 -07:00
CraftBukkit/Spigot
a90a7edd76 Only remove blocks when golem is successfully spawned. Fixes BUKKIT-1094
By: feildmaster <admin@feildmaster.com>
2012-03-10 23:01:39 -06:00
CraftBukkit/Spigot
d267b15b44 Fixed compile issues with StructureGrowDelegate not implementing the new isEmpty method
By: Nathan Adams <dinnerbone@dinnerbone.com>
2012-03-01 15:38:34 +00:00
CraftBukkit/Spigot
dc6dd3828c [Bleeding] Override not applicable
By: Wesley Wolfe <weswolf@aol.com>
2012-02-23 17:48:30 -06:00
CraftBukkit/Spigot
585a62f3d3 [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

By: Zeerix <zeerix@draig.de>
2011-12-23 00:54:34 +01:00
CraftBukkit/Spigot
fa547512af Deprecation cleanup.
By: Erik Broes <erikbroes@grum.nl>
2012-01-30 21:51:53 +01:00
CraftBukkit/Spigot
a9e780978a Fixed LongHashset incorrectly using read lock for popAll, and made it use write lock. This fixes BUKKIT-509
By: Nathan Adams <dinnerbone@dinnerbone.com>
2012-01-15 18:49:16 +00:00
CraftBukkit/Spigot
876c2db682 Dragons now throw events when creating portals
By: Nathan Adams <dinnerbone@dinnerbone.com>
2012-01-15 12:00:38 +00:00
CraftBukkit/Spigot
7c345d4d82 Fix formatting.
By: Erik Broes <erikbroes@grum.nl>
2012-01-14 23:02:10 +01:00
CraftBukkit/Spigot
ef2f82b9d2 Updated to Minecraft 1.1
By: Erik Broes <erikbroes@grum.nl>
2012-01-12 23:10:13 +01:00
CraftBukkit/Spigot
ae5c797119 Fix for entity spawning and some code cleanup
By: Tahg <tahgtahv@gmail.com>
2011-12-06 19:21:10 -05:00
CraftBukkit/Spigot
a84f36b67f Performance update to remove several very high counts of temp object creation
By: Tahg <tahgtahv@gmail.com>
2011-12-06 08:52:45 -05:00
CraftBukkit/Spigot
33742d5592 Implemented server.getOfflinePlayers
By: Nathan Adams <dinnerbone@dinnerbone.com>
2011-12-04 17:57:00 +00:00
CraftBukkit/Spigot
4c25ba70ad Implemented bukkit versioning
By: Nathan Adams <dinnerbone@dinnerbone.com>
2011-10-31 04:02:54 +00:00
CraftBukkit/Spigot
bac90b1d90 Removed deprecated ConcurrentSoftMap
By: Nathan Adams <dinnerbone@dinnerbone.com>
2011-10-10 22:05:35 +01:00
CraftBukkit/Spigot
5550ed992a Commands are now "bukkit.command.x" instead of "craftbukkit.command.x", added legacy perms for compat
By: Dinnerbone <dinnerbone@dinnerbone.com>
2011-09-02 19:19:50 +01:00
CraftBukkit/Spigot
f9b17ea956 Refactored default permission registration. Added "craftbukkit" and "craftbukkit.command" parent perms, and fixed whitelist adding
By: Dinnerbone <dinnerbone@dinnerbone.com>
2011-08-18 14:04:59 +01:00
CraftBukkit/Spigot
7746a2055d Added permissions for each vanilla command - see http://wiki.bukkit.org/Vanilla_permissions. Removed op requirement for all server commands :o
By: Dinnerbone <dinnerbone@dinnerbone.com>
2011-08-13 02:13:35 +01:00
CraftBukkit/Spigot
1511a5a437 Readded ConcurrentSoftMap because apparently some plugins need this. (They really, really shouldn't be using it. At all.)
By: Dinnerbone <dinnerbone@dinnerbone.com>
2011-07-15 21:49:53 +01:00
CraftBukkit/Spigot
9431ef57c0 Fixed huge memory leak (gigabytes/hour!) by placing a bukkit under the ceiling.
By: Dinnerbone <dinnerbone@dinnerbone.com>
2011-07-15 18:28:09 +01:00
CraftBukkit/Spigot
9bf573516b Generic cleanup of the org.bukkit.craftbukkit classes.
By: Erik Broes <erikbroes@grum.nl>
2011-06-12 01:12:43 +02:00
CraftBukkit/Spigot
5f5de88a00 Possible fix for -nojline printing blank lines
By: Dinnerbone <dinnerbone@dinnerbone.com>
2011-05-19 21:46:47 +01:00
CraftBukkit/Spigot
b16f6c647f 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 '>'.

By: EvilSeph <evilseph@unaligned.org>
2011-05-18 15:23:27 -04:00
CraftBukkit/Spigot
776b9efd3e Whitespace + general cleanup
By: Erik Broes <erikbroes@grum.nl>
2011-05-14 16:29:42 +02:00
CraftBukkit/Spigot
070c214267 Update for 1.4_00_01 -- if you bypassed Bukkit, you will most likely break.
By: Erik Broes <erikbroes@grum.nl>
2011-04-20 19:05:14 +02:00
CraftBukkit/Spigot
44f7dca0de Ctrl+C saves world before stopping
By: Dinnerbone <dinnerbone@dinnerbone.com>
2011-03-29 21:01:04 +01:00
CraftBukkit/Spigot
bf25c4a47e Updated for the cleanups done in Bukkit
By: Erik Broes <erikbroes@grum.nl>
2011-03-26 22:32:56 +01:00
CraftBukkit/Spigot
731d949bd6 Updated SoftMap to be concurrent.
By: Raphfrk <raphfrk@gmail.com>
2011-03-10 22:13:47 +00:00
CraftBukkit/Spigot
46286db7eb Clean code a bit
By: Erik Broes <erikbroes@grum.nl>
2011-03-12 14:59:50 +01:00
CraftBukkit/Spigot
a7ed1c966b Code cleanup, fixed doors, chunk entity fetching
By: Tahg <tahgtahv@gmail.com>
2011-03-11 16:25:35 -05:00
CraftBukkit/Spigot
ff806bfa66 properly implement locks
By: Tahg <tahgtahv@gmail.com>
2011-03-10 21:37:55 -05:00
CraftBukkit/Spigot
95de556b3a Add locks to Hashset
By: Tahg <tahgtahv@gmail.com>
2011-03-07 13:43:26 -05:00