Commit Graph
100 Commits
Author SHA1 Message Date
Spottedleaf d118fdd5b3 Shift chunk key location in the correct direction (#2710) 2019-12-01 05:33:57 -08:00
Spottedleaf 829b622eea Fix racey NextTickListEntry creation. (#2683)
The counter is used to distinguish entries from each other, however
since we can concurrently increment the counter we could totally
screw over the comparision of entries (see a() in NextTickListEntry),
as it compares only the time when the entry will tick, the priority
at which it will tick, and the counter. The block is not compared.

Async loading loads the chunk asynchronously which creates these
entries asynchronously.
2019-11-10 10:00:16 -08:00
Spottedleaf 5ea1d44339 Fix server deadlock when loading some chunks (#2647)
Upstream has released updates that appears to apply and compile correctly.
This update has not been tested by PaperMC and as with ANY update, please do your own testing

CraftBukkit Changes:
7554e08e Add UUID support to CraftProfileBanList
3fe37460 SPIGOT-5378: Fix TileEntity fixer deadlock
12386dd4 SPIGOT-5375: Add spaces to coordinates from tile fixer
606c19e2 SPIGOT-5373: Simultaneous left+right click in creative mode does not work
13caf848 SPIGOT-5370: Fix Block#rayTrace considering other blocks.
2019-10-20 02:03:39 -07:00
Spottedleaf eacc91f30d Use getIfLoadedImmediately and not cached immediately for isLoa… (#2641) 2019-10-18 08:05:45 -07:00
Spottedleaf b0601574e0 Improve spawn loading and debug output for waiting on a chunk (#2595)
Spawn loading has been changed to use getChunkAt calls to manually
load chunks since watchdog can watch these calls and so we guard
against plugins/players changing the radius of a spawn while it's
loading

Debug output has been improved to note the status of the currently
waiting chunk
2019-09-29 18:23:09 -07:00
Spottedleaf fe0c5d9dc6 Remove debug logging for incremental saves (#2600) 2019-09-29 18:14:40 -07:00
Spottedleaf 0a5408a7d0 Add more timings to chunk provider tick (#2549)
- Misc mob spawning
- Chunk range checks
2019-09-29 14:06:03 -07:00
Spottedleaf 98854cdf4d Add server oversleep to timings (#2509)
Now everything except waiting for the next tick should be included
in timings
2019-09-29 13:49:38 -07:00
Spottedleaf 13d4dd046d Check if there are workers before trying to notify them (#2593)
* Fix #2591

We need to check if there are workers before trying to notify
them...
2019-09-29 13:29:56 -07:00
Spottedleaf 4d484708ad Drop Optimize-GameRules-to-use-LinkedHashMap (#2594)
Mojang has since replicated the logic
2019-09-29 13:01:21 -07:00
Spottedleaf ed4f937103 Check horse entity validity in container interactions (#2584)
Fixes #2580
2019-09-24 16:16:16 -07:00
Spottedleaf 02382b01b2 Updated Upstream (Bukkit/CraftBukkit/Spigot) (#2576)
* Updated Upstream (Bukkit/CraftBukkit/Spigot)

Upstream has released updates that appears to apply and compile correctly.
This update has not been tested by PaperMC and as with ANY update, please do your own testing

Bukkit Changes:
6527cb58 SPIGOT-5329: Clarify isGlowing documentation
5ddb414f Make Lantern extend BlockData
cb888903 Fix typos in previous commits
2a5e0ca2 Bring EnchantItemEvent documentation in line with EnchantmentOffer
3c5fcea2 SPIGOT-5317: Create accessors for player absorption hearts
c6e0d625 SPIGOT-5320: Clarify scope of ExactChoice

CraftBukkit Changes:
a3fdef8c SPIGOT-5331: Add support for Java 13
6ddeb980 SPIGOT-5317: Create accessors for player absorption hearts
5d335e96 SPIGOT-5315: Cannot serialize armor stand ItemMeta

Spigot Changes:
94af569b SPIGOT-5319: Async catcher for getNearbyEntities
2019-09-21 21:12:45 -07:00
Spottedleaf 7b3f64a452 Fix race conditions in flush allowing for previously scheduled tasks to execute later than the flush call (#2548) 2019-09-15 21:02:13 -07:00
Spottedleaf 859d398ff8 Improve save logic (#2485)
Only wait for IO at the end of the save
we also were not force flushing async saves with /save-all flush
2019-09-15 20:39:30 -07:00
Spottedleaf f636e0083c Improve POI data saving logic (#2475)
- Do not unload data if world saving is disabled
- Aggressively target unloading
2019-09-01 18:49:09 -07:00
Spottedleaf 76e4a9a0f6 Fix #2499 (#2500)
Proper scheduling if async chunks is disabled, we would execute
a task that is cancelled without setting its run status
2019-09-01 18:30:25 -07:00
Spottedleaf e5f584cf6b Target more sync loads (#2476) 2019-09-01 15:17:51 -07:00
Spottedleaf 45ed30b235 Fix #2511 (#2519)
Did not double-flush the file io thread if async = false
2019-09-01 14:18:40 -07:00
Spottedleaf 7f4d6050fd Async chunk api/io/loading (#2308) 2019-08-18 16:40:04 -07:00
Spottedleaf 38dc65720e Fix some API and commands usage of inactive chunks (#2457)
* /paper entity will no longer report entities in inactive chunks
* World#getEntityCount and World#getChunkCount will report only
in active chunks
2019-08-14 19:47:38 -07:00
Spottedleaf ada657bafd Print entity debug stacktrace on entity double add (#2438) 2019-08-14 19:37:07 -07:00
Spottedleaf 2ecd461296 Fix MC-158900 (#2458)
The problem was we were checking isExpired() on the entry, but if it
was expired at that point, then it would be null.
2019-08-14 19:32:25 -07:00
Spottedleaf 02105ddde6 Fix recursion in EntityFox (#2418)
I changed a method call without looking at the implications.
super.processDeath would re-invoke the unmapped method, whereas super.d
would call the super method.
2019-08-05 20:31:38 -07:00
Spottedleaf e6c3d60574 Updated Upstream (Bukkit/CraftBukkit/Spigot) (#2415)
* fixup patch and rebuild

* Updated Upstream (Bukkit/CraftBukkit/Spigot)

Upstream has released updates that appears to apply and compile correctly.
This update has not been tested by PaperMC and as with ANY update, please do your own testing

Bukkit Changes:
bde198c9 SPIGOT-5246: PlayerQuitEvent.get/setQuitMessage() is incorrectly marked as NotNull
24ad5a79 SPIGOT-5240: Vector.angle not valid for angles very close to each other
a143db9a SPIGOT-5231: ShotAtAngle API for Fireworks
10db5c3d SPIGOT-5226: Update Javadoc of PlayerDeathEvent

CraftBukkit Changes:
1ec1b05e SPIGOT-5245: Unneeded cast to WorldNBTStorage in CraftWorld#getWorldFolder
e5e8eec2 SPIGOT-5241: setAttributeModifiers does not work on untouched stack
803eaa31 SPIGOT-5231: ShotAtAngle API for Fireworks
7881d2ae SPIGOT-5237: Horses, pigs do not drop their inventory
06efc9ec Don't accept connections until all plugins have enabled
da62a66a SPIGOT-5225: World handle isn't closed if world is unloaded without saving
104b3831 SPIGOT-5222: Cannot get Long values from Entity memory
f0b3fe43 SPIGOT-5220: Server CPU usage reaches 100% when stdin is null

Spigot Changes:
e5b1b5db SPIGOT-5235: Destroy expired area effect clouds / fireworks that are inactive
cbcc8e87 Make region files more reliable to write to
8887c5f4 Remove redundant late-bind option
dac29063 Rebuild patches

* Preserve old flush on save flag for reliable regionfiles

Originally this patch was in paper

* Fix some issues with the death event

- Entities potentially entering a glitched state to the client where
they appear to be falling over
- Donkeys losing their chest if the event was cancelled (only an
issue since the upstream merge)
- Some wither death logic running for an entity killed by a wither
2019-08-05 09:35:40 -07:00
Spottedleaf 066f9c0345 Fix chest logic being weird for coordinates that sum to 0 or a… (#2364)
We were previously calling what looks like a legacy check for distance
away for the inventory. Unfortunately, with our logic, we called the
open logic before the active container was set. So the legacy check
would register 0 viewers and the logic would become bugged.
2019-08-02 10:48:22 -07:00
Spottedleaf ae53ee9e96 use getChunkImmediately for vehicles 2019-07-28 00:38:49 +01:00
Spottedleaf e170ab7fce Do not schedule to main for getChunkImmediately type calls (#2362)
They are MT-Safe already. These changes reduce deadlock chances
given these calls are used in Entity#isValid(), and plugins
check this in packet handling...
2019-07-25 18:36:26 -07:00
Spottedleaf 405dd2640c Peek the unload queue for chunk generation checks (#2332) 2019-07-23 20:41:26 -07:00
Spottedleaf 6d4ae38bae Bring task execution into server tick timings (#2357) 2019-07-23 20:20:14 -07:00
Spottedleaf 561f77a904 Ensure xray does not perform non MT-Safe operations (#2361) 2019-07-23 02:59:48 -07:00
Spottedleaf 61b8600730 Only write to cached header in RegionFile if write potentially succeeds (#2294) 2019-07-21 14:36:27 -07:00
Spottedleaf f01c2b2b7c Update to 1.14.4 (#2333) 2019-07-19 21:01:24 -07:00
Spottedleaf 22e3d2d3a7 Use getChunkIfLoadedImmediately in places (#2297)
* Use getChunkIfLoadedImmediately in places

This prevents us from hitting chunk loads for chunks at or less-than
ticket level 33 (yes getChunkIfLoaded will actually perform a chunk
load in that case).

* Resolve issue #2301

* Also target World#getChunkIfLoaded
2019-07-17 21:41:24 -07:00
Spottedleaf f06dcdb847 Fix entity count in timings graph (#2293) 2019-07-08 06:29:22 -07:00
Spottedleaf 9e4bffef00 Fix loadChunk(x, z, false)
I was not correctly checking if the status was even cached.

Actually fix it this time

Do not forget about the async chunk placeholder

Actually fix it this time I hope

No plugin tickets for getChunkAtGen(x, z, boolean)

Change ChunkStatus ABI

This is required for asynchronous IO. async io will require
calls to getChunkStatusIfCached to return the chunk status for a
chunk currently queued to save - this cannot be reasonably done
with current ABI
2019-07-07 23:52:08 -07:00
Spottedleaf ef1951f4b0 Merge branch 'ver/1.14' of github.com:PaperMC/Paper into anti-xray 2019-07-01 22:24:09 -07:00
Spottedleaf d575c87c82 Config migrations 2019-07-01 14:53:51 -07:00
Spottedleaf 698001f796 Resolve crash issue by shoving chunk loads onto the next tick 2019-07-01 14:36:31 -07:00
Spottedleaf 5efeb3be4a Merge branch 'ver/1.14' of github.com:PaperMC/Paper into anti-xray 2019-07-01 12:53:51 -07:00
Spottedleaf 807b8a4c50 Actually use our log full policy 2019-06-29 20:38:27 -07:00
Spottedleaf d19b667346 Queue log events when log buffer is full
This should resolve out of order logs when the buffer is full
2019-06-29 10:04:38 -07:00
Spottedleaf 9fd79c5479 Do not force load chunks for plugin constructed packets 2019-06-28 08:05:52 -07:00
Spottedleaf 30bf6e01f7 Merge branch 'ver/1.14' of github.com:PaperMC/Paper into anti-xray 2019-06-28 06:37:28 -07:00
Spottedleaf 59cef70173 Keep neighbour chunks loaded while obfuscating 2019-06-26 19:04:28 -07:00
Spottedleaf 8a544afc81 Fix build? 2019-06-25 22:27:22 -07:00
Spottedleaf c6a49e85f0 Use getChunkIfLoadedImmediately not getChunkIfCachedImmediately 2019-06-25 22:20:20 -07:00
Spottedleaf 4d410bac8e Re-Add Anti-Xray 2019-06-25 21:50:57 -07:00
Spottedleaf 651932f299 Fix tracker desync issue (#2224) 2019-06-23 19:32:10 -07:00
Spottedleaf f34c1b5fe2 Optimize protochunk saving (#2218)
Use a chunk status cache to check if we could potentially overwrite
a levelchunk.
The check could be entirely elided at the risk of overwriting chunk data,
however most protochunks should have their corresponding regionfile loaded
with their chunk status.
2019-06-22 13:17:40 -07:00
Spottedleaf 413757949e Fix verified-loaded-count being off for chunk debug command (#2219)
We need to bypass ticket checks when counting
2019-06-22 13:07:31 -07:00
Spottedleaf 83d1978402 Fix performance regression in loadChunk(x, z, false) (#2211)
Resolve a regression where calling loadChunk(x, z, false) would
potentially double-load chunk data
2019-06-22 13:04:26 -07:00
Spottedleaf 6bac289d83 Fix vanished players don't have rights patch 2019-06-22 13:04:58 -05:00
Spottedleaf 4d67bf0055 Log other thread in DataPaletteBlock lock failure 2019-06-21 14:45:20 -07:00
Spottedleaf 8e00f47527 Fix MC-154214 (#2195)
This should resolve unloading issues.
2019-06-19 15:48:48 -07:00
Spottedleaf 30fbda1376 Better format 2019-06-17 17:43:18 -07:00
Spottedleaf ec6ade68e0 Add WorldName to blockstate location 2019-06-17 17:41:53 -07:00
Spottedleaf a4a1cae173 Fix chunks refusing to save (#2196)
We should only set hasBeenLoaded to false potentially after saving a chunk
other wise we will not save it. The method to do this is
PlayerChunk#l(), which we were potentially calling for chunks we were not saving.
2019-06-17 00:47:51 -07:00
Spottedleaf bf2043b339 Fix World#isChunkGenerated calls (#2186)
* Fix World#isChunkGenerated calls

Optimize World#loadChunk() too
This patch also adds a chunk status cache on region files (note that
its only purpose is to cache the status on DISK)

* Ensure correct regionfile usage

This also bumps the minimum region file cache to 4 files given
readChunkData can load potentially 4 files.

* Fix closed check

* Better checks for invalid regionfile usage
2019-06-16 20:52:34 -07:00
Spottedleaf b1b5cc1713 fix exception message 2019-06-15 11:07:03 -07:00
Spottedleaf 1cda6342bf Proper paper commenting 2019-06-15 10:36:09 -07:00
Spottedleaf 7d67870905 Show blockstate location if we failed to read it 2019-06-15 10:30:43 -07:00
Spottedleaf 1cad29b3e2 Change format 2019-06-14 21:21:39 -07:00
Spottedleaf 5947d0b315 Add chunkinfo command
Used so that server owners can tell what types of chunks are loaded
without requiring to use a tool to analyse a debug report
2019-06-13 22:51:37 -07:00
Spottedleaf e8de107ca0 Update upstream & fix some chunk related issues (#2177)
* Updated Upstream (Bukkit/CraftBukkit)

Upstream has released updates that appears to apply and compile correctly.
This update has not been tested by PaperMC and as with ANY update, please do your own testing

Bukkit Changes:
45690fe9 SPIGOT-5047: Correct slot types for 1.14 inventories

CraftBukkit Changes:
4090d01f SPIGOT-5047: Correct slot types for 1.14 inventories
e8c08362 SPIGOT-5046: World#getLoadedChunks returning inaccessible cached chunks.
d445af3b SPIGOT-5067: Add item meta for 1.14 spawn eggs

* Bring Chunk load checks in-line with spigot

As of the last upstream merge spigot now checks ticket level status
when returning loaded chunks for a world from api. Now our checks
will respect that decision.

* Fix spawn ticket levels

Vanilla would keep the inner chunks of spawn available for ticking,
however my changes made all chunks non-ticking. Resolve by changing
ticket levels for spawn chunks inside the border to respect this
behavior.


* Make World#getChunkIfLoadedImmediately return only entity ticking chunks

Mojang appears to be using chunks with level > 33 (non-ticking chunks)
as cached chunks and not actually loaded chunks.

* Bring all loaded checks in line with spigot

Loaded chunks must be at least border  chunks, or level <= 33
2019-06-13 19:27:40 -07:00
Spottedleaf 522cb2b4d1 Improve chunk loaded checks 2019-06-10 17:29:30 -07:00
Spottedleaf 4d6f73449f Updated Upstream (CraftBukkit)
Upstream has released updates that appears to apply and compile correctly.
This update has not been tested by PaperMC and as with ANY update, please do your own testing

CraftBukkit Changes:
17543ecf SPIGOT-5035: Error Using Virtual Merchant GUI
0fc6922b SPIGOT-5028: Villager#setVillagerExperience() doesn't work
bdbdbe44 SPIGOT-5024: Fox error - Unknown target reason
2019-06-06 08:36:57 -07:00
Spottedleaf fffe000496 Fix tabcomplete firing off-main
Also rebuild patches
2019-06-02 19:19:44 -07:00
Spottedleaf da7a69cec3 Chunk debug command (#2118)
* Chunk debug command

Prints all chunk information to a text file into the debug
folder in the root server folder.

Will output server version and all online players to the
file as well. We do not log anything but the location,
world and username of the player.

Also logs the value of these config values (note not all are paper's):
- keep spawn loaded value
- spawn radius
- view distance

Each chunk has the following logged:
- Coordinate
- Ticket level & its corresponding state
- Whether it is queued for unload
- Chunk status (may be unloaded)
- All tickets on the chunk

Example log:
https://gist.github.com/Spottedleaf/203bd211020a3a04da0e574fb57dab45

For references on certain keywords (ticket, status, etc), please see:

https://bugs.mojang.com/browse/MC-141484?focusedCommentId=528273&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-528273
https://bugs.mojang.com/browse/MC-141484?focusedCommentId=528577&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-528577

* Use JSON for the chunk dump

* Fix obfhelper naming

* Fix incorrect JSON spec
2019-06-02 18:25:12 -07:00
Spottedleaf c4d927468c Fix missing thread check in SimplePluginManager#callEvent (#2111) 2019-06-02 18:21:42 -07:00
Spottedleaf 4ce3dc1b76 Fix memory leak if the server is constantly overloaded (#2109) 2019-05-30 20:19:06 -07:00
Spottedleaf 9b2872bd31 Updated Upstream (CraftBukkit)
Upstream has released updates that appears to apply and compile correctly.
This update has not been tested by PaperMC and as with ANY update, please do your own testing

CraftBukkit Changes:
ba575a5a SPIGOT-4992: Various villager issues due to broken mapping
2019-05-28 04:15:12 -07:00
Spottedleaf 9f4fe93a9a Update to 1.14.2 2019-05-27 16:01:45 -07:00
Spottedleaf 4d1f9bd463 Updated Upstream (Bukkit/CraftBukkit)
Upstream has released updates that appears to apply and compile correctly.
This update has not been tested by PaperMC and as with ANY update, please do your own testing

Bukkit Changes:
e041de28 SPIGOT-4946: Add VillagerCareerChangeEvent

CraftBukkit Changes:
fcb9f90b SPIGOT-4946: Add VillagerCareerChangeEvent
a4a2f679 SPIGOT-4987: Shulkerbox does not save empty slots
2019-05-27 03:57:28 -07:00
Spottedleaf 66554efabb Improve MT-Safety of UserCache (#2080)
We were missing a synchronize on a get if cached method, however
it appears that using a ConcurrentHashMap is a better solution
so readers can avoid locking if they just want a cached value.

Existing synchronization for writers remains untouched, the
ConcurrentHashMap is just so readers can safely read without
synchronization
2019-05-26 23:17:50 -07:00
Spottedleaf 78a4e64734 Move getTypeIfLoaded and friends to IBlockAccess (#2077) 2019-05-26 23:14:14 -07:00
Spottedleaf 4a65bd4b04 Handle gen flag for placeholder getChunkAtAsync (#2079)
Also fix a loadChunk call in heightmap api
2019-05-26 22:17:12 -07:00
Spottedleaf 3e0027e482 Revert Don-t-recheck-type-after-setting-a-block.patch 2019-05-26 10:40:12 -07:00
Spottedleaf b8fb51a017 Add configurable spawn loaded range back (#2051) 2019-05-23 20:12:57 -07:00
Spottedleaf 50c66c63aa Fix /tps (#2066) 2019-05-22 11:57:27 -07:00
Spottedleaf 6fef4e1b23 Fix RegionFileCache#hasRegionFile (#2062)
also remove the pointless synchronization on
RegionFileCache#getRegionFileName
2019-05-19 19:26:17 -07:00
Spottedleaf 63233b4c4c Fix MinecraftServer#isMainThread (#2046)
See patch notes
2019-05-16 15:27:36 -07:00
Spottedleaf b10550736e Resolve memory leak involving TileEntities
Their chunk is set to null before removal, so we kept them around.
2019-05-14 14:54:32 -07:00
Spottedleaf 8ff0f5c10d Fix CraftServer#isPrimaryThread
md_5 changed it so he could shut down the server asynchronously
from watchdog, although we have patches that prevent that type
of behavior for this exact reason.
2019-05-13 21:13:31 -07:00
Spottedleaf b56a982756 Optimize DataWatcher
The lock in DataWatcher is used to prevent concurrent modifications
to the 'd' field (entries in MCP). However any modifications to
this map only occur on initialization of an Entity in its
constructor. This modification is write-locked.

Every other access is through a readlock, which allows
the threads to pass if there is no thread holding the
writelock.

Since the writelock is only obtained in the constructor
of the Entity, the further readlocks are actually
useless (which get obtained on set, get, etc calls).

The entries field ('d' currently) has also been declared as
Int2ObjectOpenHashMap to avoid autoboxing on put(), get(), etc
calls.
2019-05-13 20:37:18 -07:00
Spottedleaf ecafb51908 Fix MC-151674 Close RegionFiles when they get evicted from cache
https://bugs.mojang.com/browse/MC-151674
2019-05-12 19:30:57 -07:00
Spottedleaf 6635ae643e Review EntityPathfindEvent
Add missing target forward
2019-05-12 18:39:06 -07:00
Spottedleaf e36079cf6f Remove TODO on Add more Zombie API
Testing in game verified the zombie's arms raise and fall correctly
when using the API.
Renamed the OBFHELPER since the method is placed on EntityInsentient
(since we want to conflict on changes).
2019-05-12 18:04:29 -07:00
Spottedleaf 1936613b92 Remove TODO on Add ray tracing methods to LivingEntity
Note: The entity parameter stays 'this' since we want the block the
entity is targetting. This can change based on the block the player
has in their hand (see scaffholding). With a scaffhold in hand, the
scaffhold blocks in the world become solid 1x1x1 cubes, and without they
follow their model's shape.
2019-05-12 17:23:21 -07:00
Spottedleaf 79a43cd2a2 Fix TODOs in Optional TNT doesn't move in water
Turns out the doWaterMovement method was never called.
Moved the tracker updates into tick() and delete doWaterMovement
2019-05-12 16:42:49 -07:00
Spottedleaf 8d7a074503 Resolve TODO on PlayerNaturallySpawnCreaturesEvent
- Add missing isCancelled check

We don't need to worry about going out of range of int
since the value is clamped to view distance, and view
distance is clamped to 33
2019-05-12 15:34:42 -07:00
Spottedleaf 396186a950 Fix patch "Faster redstone torch rapid clock removal" (#2014)
Tux pointed out the patch still has O(n^2) time complexity since
the sublist class in arraylist does not override clear() from
AbstractList, which uses a forward moving iterator to clear
the list.

Resolved by using a peek and poll from ArrayDeque.

This patch also removes the useless WeakHashMap which holds
the list (it mapped world->list) and replaces it with a
field on World.
2019-05-10 08:48:58 -07:00
Spottedleaf c0f92870ab Use WorldServer#entitesById for entity iteration
WorldServer#globalEntityList is not the actual list of entities in a world
2019-05-07 18:49:41 -07:00
Spottedleaf 54388d8715 Fix legacy checks for plugins 2019-05-07 18:43:07 -07:00
Spottedleaf 665bb10aaa Actually write to the tracker field on entity
perhaps we can also look into removing this modification altogether
2019-05-07 18:13:24 -07:00
Spottedleaf e052a9deff Fix foxes not dropping items 2019-05-07 08:20:32 -07:00
Spottedleaf f1e494aba9 Fix tracking dead entities 2019-05-07 06:50:02 -07:00
Spottedleaf 71b1db46b1 Fix entities refusing to die and portal search not working 2019-05-07 05:00:51 -07:00
Spottedleaf 5a6ef6ed50 Update upstream 2019-05-06 17:33:26 -07:00
Spottedleaf 96b32aa6bc Fix more runtime stuff
Remove chunk neighbour system until we can figure out the chunk system
2019-05-06 17:05:41 -07:00
Spottedleaf b372f891aa Fix some runtime issues 2019-05-06 13:45:02 -07:00