Commit Graph
100 Commits
Author SHA1 Message Date
Aikar ec95eb86f7 Update Upstream 2016-06-04 11:41:04 -04:00
Aikar ba0a4c75bd Only send Dragon/Wither Death sounds to same world
Also fix view distance lookup
2016-05-31 23:56:19 -04:00
Aikar a9ec7b3a75 Fix skeleton horse spawn chance ignoring difficulty modifier if custom set
Also reduce diff
2016-05-30 12:50:57 -04:00
Aikar d9971432c2 re-add timing that spigot missed 2016-05-27 22:29:09 -04:00
Aikar e9c7cca230 Ensure chunks never load async
Force operation to main thread if it occurs async
2016-05-27 22:28:23 -04:00
Aikar cac7bbc139 Remove unneeded mob spawn cap patch - Fixes #235
I misread the code and thought the code kept looping until the mob spawn cap was hit.

Upon furthur review, this is not true, so this patch doesn't do anything sane.
2016-05-27 21:35:28 -04:00
Aikar 45aa7db5c4 Update Upstream 2016-05-25 12:37:17 -04:00
Aikar 8bee892ded Avoid blocking on Network Manager creation
Fixes #294

Use a pending list to handle new connections so that the netty threads
do not block waiting for the main thread to finish ticking
2016-05-16 23:21:26 -04:00
Aikar c623104ffa MC-99914 - ensure EntityItem loads before EntityPotion 2016-05-16 22:54:48 -04:00
Aikar 4bead5b898 bump the default maxMobSpawns default to 250, and add support for unlimited
Use -1 to represent vanilla/unlimited.
Updated PaperWorldConfig to also update the individual worlds limit if it was set
to the new default value.

Should hopefully help #235
2016-05-16 22:07:12 -04:00
Aikar 478f246490 Optimize UserCache / Thread Safe
Because Techable keeps complaining about how this isn't thread safe,
easier to do this than replace the entire thing.

Additionally, move Saving of the User cache to be done async, incase
the user never changed the default setting for Spigot's save on stop only.
2016-05-16 21:14:28 -04:00
Aikar 1a5414bc4e Add Async Helper method to MCUtil 2016-05-16 20:50:09 -04:00
Aikar e4c179e827 Refactor Lighting Queue System
may help #284

Cleans up the lighting queue system, reducing diff and improving implementation.

We no longer stop chunk unloads due to lighting updates, and instead simply flush the lighting queue.
The cost of forcing the chunk (and its neighbors!) to stay loaded waiting for its
lighting work to finish is much greater than simply taking the hit and doing the work.

This change also helps reduce the diff and avoid bugs with missed diffs by removing
duplicated logic.

Also switches to a more effecient data structure (ArrayDeque instead of LinkedList) for the queue itself.
2016-05-15 18:48:39 -04:00
Aikar 8e62fb709b Timings v2: Start methods return self for use in try-with-resources
try (Timing ignored = timing) {
  // Code to time
}
// auto stops timing, even if you return in 42 other places in the block
2016-05-15 17:34:26 -04:00
Aikar 0c78971552 More cases of avoiding marking active for chunks, to stop potential leaks 2016-05-13 22:27:20 -04:00
Aikar 016dca3390 Bring back an EAR optimization from 1.9.2 2016-05-13 01:39:03 -04:00
Aikar b6d0dd32c6 Fix chunk leak issue with queued light updates 2016-05-13 01:34:37 -04:00
Aikar 6025355569 clean up spigot working files out of our Paper folder 2016-05-12 22:11:11 -04:00
Aikar 5d952ffa7e Use a more reliable fixed width sequence for rebuild patches 2016-05-12 21:37:14 -04:00
Aikar 9bba4a53e5 Be more targetted with patch deletion 2016-05-12 21:24:19 -04:00
Aikar 4e3d8a41ee Fix T/TE removal list bug
Thanks @Cat6363
2016-05-12 08:55:35 -04:00
Aikar 1850ae22cf unmark chunk as unloading when unload is cancelled
no obviousy bugs caused by this at the moment, but we may need to clean up process to be like
how I use to have it before vanilla did it, and we shouldn't leave this boolean in an invalid state.
2016-05-12 02:07:39 -04:00
Aikar a1916005e1 Fix chunk unload leak issues due to neighbor updates 2016-05-12 01:55:53 -04:00
Aikar 34fcd8ccc2 Paper 1.9.4 Update 2016-05-11 22:07:46 -04:00
Aikar 68f8205a32 Don't save empty scoreboard teams to scoreboard.dat - Fixes #244
While I can't think of any reason to do this except some REALLY weird workflow, I still added a config
to let you save them incase someone runs into issues.
2016-05-07 23:39:22 -04:00
Aikar e7be15b884 fix bug with lootable API
was returning the NMS instance of objects instead of the Bukkit API objects
2016-05-07 21:16:38 -04:00
Aikar 5c5c2b0a22 Fix hopper suck in patch bug
was checking for ItemStack's instead of EntityItem
2016-05-05 20:22:01 -04:00
Aikar 2570184ba1 Implement getNMSWorld on EntityMinecartContainer
Was missed because the class is abstract and nothing implementing the class was imported in Paper
2016-05-04 20:33:16 -04:00
Aikar 22d5cbee82 Update Upstream 2016-05-04 20:10:27 -04:00
Aikar 37eafdba1b Entity Tracking Improvements
If any part of a Vehicle/Passenger relationship is visible to a player,
send all passenger/vehicles to the player in the chain.
2016-05-04 20:10:22 -04:00
Aikar 7947dd83ae Do not load chunks for pathfinding 2016-05-04 19:53:33 -04:00
Aikar 3da6be053f LootTable API & Replenishable Lootables Feature
Provides an API to control the loot table for an object.
Also provides a feature that any Lootable Inventory (Chests in Structures)
can automatically replenish after a given time.

This feature is good for long term worlds so that newer players
do not suffer with "Every chest has been looted"

API and Event added to control the Auto Replenish feature for players.
2016-05-01 23:54:08 -04:00
Aikar 4e7355aa95 update upstream 2016-05-01 15:58:10 -04:00
Aikar 3b3f85f88f Try to determine plugin name on bad plugin command registration 2016-04-30 12:53:20 -04:00
Aikar 496b49861c Rename a Timings class and split up Tracker timings 2016-04-29 21:23:40 -04:00
Aikar b1e4588ae7 Improve Maps (in item frames) performance and bug fixes
Maps used a modified version of rendering to support plugin controlled
imaging on maps. The Craft Map Renderer is much slower than Vanilla,
causing maps in item frames to cause a noticeable hit on server performance.

This updates the map system to not use the Craft system if we detect that no
custom renderers are in use, defaulting to the much simpler Vanilla system.

Additionally, numerous issues to player position tracking on maps has been fixed.
2016-04-29 20:04:12 -04:00
Aikar 156b1cc524 comment out the other update call instead
otherwise might break stuff
2016-04-27 22:22:35 -04:00
Aikar 1652bda38d Improve Minecraft Hopper Performance
Removes unnecessary extra calls to .update() that are very expensive
Also reset cooldown each hopper tick that a hopper is full.
2016-04-27 22:15:57 -04:00
Daniel Ennis a2599693be Merge pull request #232 from willies952002/implement/BookEditEvent
Reimplement PlayerEditBookEvent
2016-04-26 23:06:54 -04:00
Aikar 71db253321 update upstream 2016-04-23 22:41:46 -04:00
Aikar 8b2f631d9b Fix Player View Distance API corrupting Chunk Sending - Fixes #207
The Player View Distance patch has been screwing with the configured world view distance.

The world a player was created in would set the players view distance, which would be locked to that distance.

Then switching worlds would not give you an updated view distance.

This then caused issues with what view distance the player should have in the chunk map and did not send chunks to the client correctly during movement.

This patch has now been changed to use a -1 default for "default" and will not override view distance until someone has actually used the API to change it.
2016-04-23 21:39:22 -04:00
Aikar b91603c782 remove potentially bad check 2016-04-23 13:10:55 -04:00
Aikar 73c44798c5 Fix a vanilla bug thats likely causing the mob spawn issues 2016-04-23 12:27:46 -04:00
Aikar 2a2540e76c improve the jackass test 2016-04-23 11:57:39 -04:00
Aikar d306bc67aa Prevent Fire from loading chunks
This causes the nether to spam unload/reload chunks, plus overall
bad behavior.
2016-04-17 17:28:16 -04:00
Aikar 06e483502f Configurable RCON IP address to bind to 2016-04-16 00:46:01 -04:00
Aikar d46f2997c2 Allow capping number of attempts at spawning mobs
By default, this logic would loop endlessly trying to fill the world
with entities until it hits the worlds spawn.

This patch will cap the # of attempts to so that the tick does not spend
extra long time on mob spawning
2016-04-15 22:35:03 -04:00
Aikar 75eb8243f7 Ensure we actually removed entity from chunk before decrementing counts
If a plugin hacks into NMS and triggers entity removal, it could
result in an entity being attempted to remove from the chunk twice.

The 2nd pass will return false, as it did not find the entity in the list.

We should not touch entity counts if the entity was not removed, to avoid
going negative.
2016-04-15 21:31:12 -04:00
Aikar 82c08cfbda Fix Bugs with Spigot Mob Spawn Logic - Fixes #138
Spigot drastically altered vanilla mob spawn logic and caused a few issues.
1) Used only spawnable chunks vs entire world for entity counting, resulting in ignoring
other entities in the world, and causing the world to go over its intended limit.

Specially with servers using smaller mob spawn ranges than view distance, as well as affects spawning API

2) Spigot was using 16x16 division instead of vanilla 17x17 division.

Issues got worse in 1.9 due to more chunks being loaded due to 1.9 changes, that fall out
of the monster spawn radius.

This patch returns mob counting to use all loaded chunks, and 17x17 division.
2016-04-14 21:03:57 -04:00
Aikar 1fc2eb982f Configurable Player Collision - Resolves #161 2016-04-13 02:11:40 -04:00
Aikar 2e00b8d691 Don't tick Skulls - unused code - Fixes #202 2016-04-13 00:32:05 -04:00
Aikar bfdc936100 Remove unused World Tile Entity List
Massive hit to performance and it is completely unnecessary.
2016-04-13 00:27:38 -04:00
Aikar e0b057c30f Update PlayerConnection for all teleportation of players
Previous fix for SPIGOT-1903 only applied to world changes, but many other
cases of players been teleporting can cause that same bug. So call it any time
setPosition is called to ensure we never falsely trigger "moved too quickly"

And this commit may be considered evil to some people.
2016-04-12 23:26:42 -04:00
Aikar 87deb42c1c update MCUtil.cmpFromMessage to use proper JSON 2016-04-11 01:06:28 -04:00
Aikar b602d093ec SPIGOT-1903: Update PlayerConnection on world change - Fixes #120 2016-04-10 22:36:56 -04:00
Aikar 52ca5f228b upstream 2016-04-10 19:58:05 -04:00
Aikar f1da39ab0f Provide ability to wrap test server command for willies... 2016-04-09 21:46:09 -04:00
Aikar 755eaa845d Add testserver command - quickly start a test server
This will help encourage testing with some widely used plugins
to help identify issues caused by changes before they are pushed.
2016-04-09 21:33:32 -04:00
Aikar 1223fcc8bb Include Redstone Torches in the redstone physics event optimization 2016-04-05 23:20:46 -04:00
Aikar a161d480b4 Remove Debug checks from DataBits
These are super hot and causing noticeable hits

Before: http://i.imgur.com/nQsMzAE.png
After: http://i.imgur.com/nJ46crB.png
2016-04-05 21:55:07 -04:00
Aikar 48ba10bc77 Re-add fastutil map to Chunk map. Amaranth confirmed its faster by 3x 2016-04-05 20:43:11 -04:00
Aikar 0726de949b Fix Nether/End world unloading spawn chunks - Fixes #92 2016-04-05 19:53:30 -04:00
Aikar 092d08f15c Update Timings to use Region based chunk reporting
This will drastically reduce file size on large servers and help
avoid the parser failing to load the report.

This will also reduce memory usage of timings data.
2016-04-05 01:20:25 -04:00
Aikar 56de8ba1a4 fix keep spawn loaded config 2016-04-03 23:08:13 -04:00
Aikar f718f4dbd7 Fix errorneous call of EntityDismountEvent 2016-04-03 19:11:25 -04:00
Aikar 7a9efce700 Fix makemcdevsrc script 2016-04-03 17:58:15 -04:00
Aikar 3c0a1bcc25 Fix Cancelling BlockPlaceEvent triggering physics 2016-04-03 17:49:31 -04:00
Aikar 57b915a706 Configurable Keep Spawn Loaded range per world
This lets you disable it for some worlds and lower it for others.
2016-04-03 17:34:15 -04:00
Aikar 746d46f6bb Configurable Grass Spread Tick Rate
Raise this value to make grass spread slower. Set to 0 to turn off grass spreading all together.
2016-04-03 16:29:39 -04:00
Aikar 215fc54e31 use http:// for my CI since snap-ci has bad cert chains 2016-04-03 12:22:42 -04:00
Aikar 9fcb513a2e Update upstream 2016-04-01 22:08:40 -04:00
Aikar 585b724740 Use relative paths for paperclip 2016-04-01 19:50:31 -04:00
Aikar 505761052f use windows line endings for paperclip.properties 2016-04-01 19:29:36 -04:00
Aikar e5d103dd3f improve implementation of chunk access patch 2016-04-01 00:35:44 -04:00
Aikar 0706403fa6 Fix pom to be compile instead of provided for fastutil 2016-04-01 00:35:21 -04:00
Aikar 1ac9958e8b Move fastutil from a patch file to a library, and improve EAR 2016-04-01 00:18:18 -04:00
Aikar a4d29fef6a Remove Long2ObjectHashMap for Chunks
Speaking with Amaranth, his point of his implementation was that most
of the lookups are on loaded chunks, so that code is optimized for that case.

While Long2Object should be faster as a general purpose map,
for MC uses, Amaranth's version should be faster. Will try to benchmark
the 2 at some future.
2016-03-31 21:45:30 -04:00
Aikar 809051d050 Fix isEdgeOfChunk check for MCUtils 2016-03-31 21:43:37 -04:00
Aikar 775169422d Update upstream for memory leak patch 2016-03-31 21:43:21 -04:00
Aikar baf8797e8f Do not load chunks for light checks
Should only happen for blocks on the edge that uses neighbors light level
(certain blocks). In that case, there will be 3-4 other neighbors to get a light level from.
2016-03-31 19:29:06 -04:00
Aikar 8b77debaf3 Fix Massive Memory Leak
Pathfinder objects are storing references to ChunkCache's, and never cleaning up.

These ChunkCache's then leak other entity objects. Those entity objects then have leaks to their
own chunk cache. A recursive problem....

Clean up the ChunkCache reference after it is done being used.
2016-03-31 19:08:27 -04:00
Aikar 4e89e1f0c7 add null check to getEntity API 2016-03-30 21:56:07 -04:00
Aikar 9fc220ea02 Use paperclip.properties so CI can work 2016-03-30 21:27:13 -04:00
Aikar 82b10bbf43 use original paperclip name 2016-03-30 20:53:39 -04:00
Aikar f16d938497 Paper 1.9.2 Update 2016-03-30 20:50:23 -04:00
Aikar fb94038453 Use FastUtil Long/Int HashMap's
For DataWatcher, swap out plain Integer key HashMap for a Int2ObjectOpenHashMap
For ChunkProviderServer, swap out CB's custom LongHashMap with Long2ObjectOpenHashMap

These collections are super fast as seen
http://java-performance.info/hashmap-overview-jdk-fastutil-goldman-sachs-hppc-koloboke-trove-january-2015/
2016-03-30 02:10:27 -04:00
Aikar e007d80c16 Move Timings v2 TimingHandler to FastUtil Int map 2016-03-30 01:59:47 -04:00
Aikar 092dbc4bea Add Minimal FastUtil int/long collections.
Importing the full library would double the jar size... its way too large.
So lets just import the basic int/long based collections to then use
to improve performance on these kind of collections.
2016-03-30 01:57:56 -04:00
Aikar aceb2cf3b5 Update contributing information to be more accurate 2016-03-30 01:03:27 -04:00
Aikar f3f0cb6bb2 Link to contributing for PR section 2016-03-29 00:07:27 -04:00
Aikar 314d1711d5 update README for PR instructions 2016-03-28 23:59:04 -04:00
Aikar 6e496985f5 Update upstream 2016-03-28 23:19:49 -04:00
Aikar 88ef71592b Remove, not invalidate, Metadata on reload
Objects loaded over different class loaders are not the same. Nasty dragons lie here.

Also clean up the previous patch to no longer butcher imports.
2016-03-28 22:43:05 -04:00
Aikar 7d7810721e Remove last patch, doesn't exactly do what I thought it was doing 2016-03-28 22:28:52 -04:00
Aikar a3d5c47c8a Remove Invalidated Metadata
Bukkit was using an unimplemented method to invalidate plugin meta.
2016-03-28 22:15:23 -04:00
Aikar 553319f958 Prevent Waterflow BlockFromToEvent from loading chunks
Many protection plugins would unintentionally trigger chunk loads
by calling .getToBlock() on an unloaded chunk, killing performance.

Simply skip the event call. as CraftBukkit blocks changing the block
of unloaded chunks anyways.

This keeps behavior consistent, vs inconsistent flowing based on plugin triggered loads.
2016-03-28 22:04:43 -04:00
Aikar 7c38e54a9d Remove some code from Timings v2 that was only for EMC. 2016-03-28 21:41:17 -04:00
Aikar 2b55c92307 EntityPathfindEvent
Fires when an Entity decides to start moving to a location.

This is not the same as a move event. This only fires when an entity chooses
to start moving to a location, and allows cancelling that pathfind.

Additionally, only get is supported for now. Unsure if changing target location
is safe to do.
2016-03-28 21:24:45 -04:00
Aikar 0623a754d8 Add MCUtils helper
This will be used by my next commit. But trying to get the build going
since CI blew up
2016-03-28 21:01:42 -04:00
Aikar 1180a5dd87 And AddTo is a different event than RemoveFrom 2016-03-28 20:58:42 -04:00