Commit graph

28 Commits

Autor SHA1 Nachricht Datum
Travis Watkins
24143ef6a1 Load chunks asynchronously for players.
When a player triggers a chunk load via walking around or teleporting there
is no need to stop everything and get this chunk on the main thread. The
client is used to having to wait some time for this chunk and the server
doesn't immediately do anything with it except send it to the player. At
the same time chunk loading is the last major source of file IO that still
runs on the main thread.

These two facts make it possible to offload chunks loaded for this reason
to another thread. However, not all parts of chunk loading can happen off
the main thread. For this we use the new AsynchronousExecutor system to
split chunk loading in to three pieces. The first is loading data from
disk, decompressing it, and parsing it in to an NBT structure.  The second
piece is creating entities and tile entities in the chunk and adding them
to the world, this is still done on the main thread. The third piece is
informing everyone who requested a chunk load that the load is finished.
For this we register callbacks and then run them on the main thread once
the previous two stages are finished.

There are still cases where a chunk is needed immediately and these will
still trigger chunk loading entirely on the main thread. The most obvious
case is plugins using the API to request a chunk load. We also must load
the chunk immediately when something in the world tries to access it. In
these cases we ignore any possibly pending or in progress chunk loading
that is happening asynchronously as we will have the chunk loaded by the
time they are finished.

The hope is that overall this system will result in less CPU time and
pauses due to blocking file IO on the main thread thus giving more
consistent performance. Testing so far has shown that this also speeds up
chunk loading client side although some of this is likely to be because
we are sending less chunks at once for the client to process.

Thanks for @ammaraskar for help with the implementation of this feature.
2012-12-12 19:35:53 -06:00
Travis Watkins
7f7192f8fd Update CraftBukkit to Minecraft 1.4.4. 2012-11-13 16:09:52 -06:00
Travis Watkins
b8cc862083 Update to 1.3.2 2012-08-25 00:54:21 -04:00
Mike Primm
5254993510 Fix issues with chunk saving. Fixes BUKKIT-2158, BUKKIT-2018 and BUKKIT-2229 2012-08-19 08:36:47 -04:00
Wesley Wolfe
0e013fa4b0 Fixed PlayerManager ConcurrentModificationExceptions. Fixes BUKKIT-1972 2012-08-04 22:12:16 -05:00
feildmaster
a43d621c01 Update CraftBukkit to Minecraft 1.3.1 2012-08-02 04:58:50 -05:00
Mike Primm
1e06e150b6 [Bleeding] Only do unload-all on tick when last player leaves. Fixes BUKKIT-1060 2012-03-08 16:27:01 -05:00
Erik Broes
7219d4dd85 Updated to Minecraft 1.1 2012-01-12 23:10:13 +01:00
Nathan Adams
8fbe78a2c3 Updated to use mc-dev rename revision 1 2011-11-30 21:46:19 +00:00
Dinnerbone
2b5a61f03d Rename revision 2 2011-09-15 17:39:17 +01:00
EvilSeph
8ea590bbcc Revert "Implements interface for changing the view distance." 2011-08-15 14:27:02 -04:00
Andrew Ardill
12e377501e Implements interface for changing the view distance.
Uses default view distance if player's view distance is not set

Throws an illegal argument exception if view distance is set too high
or too low.

Pushes notifications of server and world view distance changes to the player.
Move view distance functions from PlayerManger to WorldServer.
Set player minimum view distance to 1 for now.
Reset player's 'last known' position when recalculating visible chunks.

Use per-player view distance in chunk distance checks
2011-08-15 14:57:25 +10:00
Erik Broes
a98c7ba2c7 Massive renaming update in nms. If you bypassed Bukkit, you will likely break.
Also minimized all the nms diffs and generic cleanups all around.
2011-06-27 00:47:03 +02:00
Erik Broes
96b1b8a10c Generic cleanup 2011-06-12 00:30:52 +02:00
EvilSeph
b5d1619e75 More teleport changes. Thanks Zeerix! 2011-06-08 17:00:30 -04:00
Dinnerbone
6903f20242 Implemented 1.6! 2011-05-26 13:48:22 +01: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
d142fabfc1 Sped up teleporting even more, + fixed isSneaking 2011-02-28 20:30:33 +00:00
Dinnerbone
659fa9eaf9 Temporary fix for teleportation 2011-02-25 12:46:31 +00:00
Erik Broes
09aa37fe4a Generic code cleanup 2011-02-23 14:12:33 +01:00
Dinnerbone
f759e0b60d Update to Minecraft 1.3 beta 2011-02-23 02:37:56 +00:00
Dinnerbone
f659231e34 N.M.S cleanup in preparation for update 2011-02-21 22:30:01 +00:00
Dinnerbone
e9b1607fdc Fixed entity updating 2011-02-07 01:51:06 +00:00
Dinnerbone
7bdc190637 Possibly fixed block/chunk leaking 2011-02-07 01:51:06 +00:00
Dinnerbone
2be5181b0c Added internal MC support for multiple worlds 2011-02-07 01:44:43 +00:00
Erik Broes
5c467e941b Actually implement the spiral stuff now, oops 2011-02-01 21:40:52 +01:00
Erik Broes
a3fbada1e8 Chunkloading around player now happens in a spiral! No more floating over the void waiting for the floor to load! 2011-02-01 20:26:47 +01:00