Commit Graph

3161 Commits

Author SHA1 Message Date
Spottedleaf 8c0c587472 Merge branch 'ver/1.16' of https://github.com/stonar96/Paper into ver/1.16 2020-06-26 20:34:31 -07:00
Spottedleaf bf478c36c7 fix async chunk loading disregardling light data 2020-06-26 20:05:12 -07:00
stonar96 f6227a0fc9 Fix Anti-Xray 2020-06-27 04:27:03 +02:00
Spottedleaf 028bff252f fix recursion for leashing an abstract horse 2020-06-26 15:54:39 -07:00
Spottedleaf 4fd1bd8aee Fix the piston duplication option when it is on 2020-06-26 14:36:48 -07:00
Spottedleaf 368fc7c8c0 Pass predicate from default get hard colliding entities method 2020-06-26 14:33:49 -07:00
Spottedleaf 37df424eda Fix the entity knockback by entity patch 2020-06-26 14:31:38 -07:00
Spottedleaf 4c1712f868 Fix packed data reading in anti-xray 2020-06-26 14:11:08 -07:00
Nassim 387571da58
Some fixes (#3630)
* Fix block action sending

* Fix chest property check
2020-06-26 14:34:52 -05:00
MiniDigger c63757c131
[WIP|1.16] Misc fixes (#3627) 2020-06-26 12:20:03 -04:00
MiniDigger c3640b1dc0
[1.16] Make it run (#3626)
* She compiles!

Also readded the armorstand ticking patch, thanks cat

* Update mob goal api

* Misc fixes to make it run

drop per playing mob spawns for now
2020-06-26 05:04:38 -07:00
Aikar 68636aee72
Latest progress - restored patches, some issues resolved 2020-06-26 05:03:23 -04:00
Aikar 014b7f115d
Current non compilable status of all patches - THIS IS NOT READY
THERE IS STILL NO ETA. GOBLINS WILL EAT YOU.
2020-06-26 02:01:05 -04:00
Spottedleaf 939690baea even even even even even even more work 2020-06-25 18:53:21 -07:00
Spottedleaf c300745c8b even even even even more work 2020-06-25 16:38:24 -07:00
MiniDigger 03a53a63b6 even even even more work 2020-06-25 20:41:40 +02:00
Spottedleaf 8ac3123f9f even even more work 2020-06-25 06:11:48 -07:00
Spottedleaf 2bf5db6cc9 even more work 2020-06-25 05:04:34 -07:00
Spottedleaf 8269101af0 more progress 2020-06-25 04:00:35 -07:00
Aikar 6800c77f75
Current progress - Leaf, tag your it 2020-06-25 05:27:25 -04:00
Aikar e27149bff4
Current progress 2020-06-25 00:02:26 -04:00
Aikar 6c87b85dd1
1.16.1 prep 2020-06-24 22:00:02 -04:00
Aikar a28f80090e
Initial prep for 1.16
Remove patcehs we know need to go
add comment on one im not sure should be dropped

go ahead and fix patched repos to turn off gpg signing, as this
helps rebase/apply --continue commands not suck.

Go ahead and prep the pom file change
2020-06-24 04:41:14 -04:00
Aikar ec9fa36908
1.15.2 - 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:
149527f7 SPIGOT-5782: Set Arrow Launched From Crossbow

CraftBukkit Changes:
be6aaf04 SPIGOT-5782: Set Arrow Launched From Crossbow
833da9c4 SPIGOT-5799: InventoryCloseEvent fires after PlayerQuitEvent
26c0084f SPIGOT-5675, SPIGOT-5798, MC-149563: Fix tracking of entities across dimensions
7f3e7c3f SPIGOT-5797: Zombie(Villagers) Instant Convert based on their lifetime
2020-06-23 20:28:43 -04:00
Jan Tuck 70df8f2716
Add PrepareGrindstoneEvent 2020-06-23 05:06:48 -04:00
Aikar 24b2f54b7b
Fix Player skulls for offline mode servers
Always use online mode for them in Profile API calls

Adds new API to profile API to let you control online mode yourself

Fixes #3594
2020-06-23 04:53:02 -04:00
Aikar ce270e1412
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:
b2f1908c SPIGOT-5783: Add helpful info to UnknownDependencyException
e4f46260 SPIGOT-2623: Add EntityEquipment methods to get/set ItemStacks by slot.
529a9a69 SPIGOT-5751: Clarify behaviour of block drop-related API methods

CraftBukkit Changes:
8ea9b138 Remove outdated build delay.
ffc2b251 Revert "#675: Fix redirected CommandNodes sometimes not being properly redirected"
cb701f6b #675: Fix redirected CommandNodes sometimes not being properly redirected
c9d7c16b SPIGOT-2623: Add EntityEquipment methods to get/set ItemStacks by slot.
fad2494a #673: Fix Craftworld#isChunkLoaded
8637ec00 SPIGOT-5751: Made breakNaturally and getDrops returns the correct item if no argument is given

Spigot Changes:
a99063f7 Rebuild patches

Fixes #3602
2020-06-23 04:40:03 -04:00
Aikar c4ada0e199
Fix many chunk loading issues
Fixes a few various issues with chunk ticket state

restores mojangs ticket throttle but tries to be smarter about it.
fixes a few state mismatches that needed to be handled.

Fixes fake NPC's adding player tickets when they shouldn't have been.

Improves teleport chunk loading by processing high priority on new area

Fixes #3605
Fixes #3537
Fixes #3573
2020-06-23 04:40:02 -04:00
Spottedleaf 37b244b50b
Fix not running level updates for light if no pre/post task 2020-06-23 04:09:58 -04:00
Josh Roy e614299517
Add and implement PlayerRecipeBookClickEvent (#3351)
Co-authored-by: LordKorea <lk97798@posteo.net>
2020-06-22 23:33:08 -05:00
Mariell 9bb4e93090
Fix piston dupe patch creating ghost blocks (#3603)
The 2 flag (send change to clients) must always be set. If it is only set
when the `map.replace` call before it does something, as was suggested
on Discord, the issue will not change whatsoever.

Fixes #3593
2020-06-22 19:00:00 -04:00
PatoTheBest e9c332ddb6
Fix NPE on TileEntitySkull (#3598)
The setGameProfile method on TileEntitySkull is annotated with the @nullable annotation,
but the skull didn't check for null profiles before attempting to retrieve cached skin.
This bug was introduced by the commit making the skull use spigot's User Cache.

Additionally, CraftMetaSkull also had the same issue with a null GameProfile, so this also
ensures it doesn't break.

The whole CraftPlayerProfile class is not null-safe, it requires a GameProfile that isn't
null so we add a Validation on the constructor, that way it is easier to catch this kind
of issue in the future.
2020-06-21 22:59:34 -04:00
Nesaak b6a25a5356
Expose getItemStack in Arrows 2020-06-20 16:34:06 -04:00
kickash32 246af15ddc
Track Ender Dragon at current (no tick) view distance 2020-06-20 16:20:00 -04:00
Mariell Hoversholm 29a96bc1c5
Add clear reputation API 2020-06-20 16:02:28 -04:00
ㄗㄠˋ ㄑㄧˊ b2afcf1194
Add history file for terminal 2020-06-20 15:46:25 -04:00
Max Lee c7e4c45f26
Add Inventory getHolder methods without creating new block snapshots (#3535) 2020-06-20 15:34:56 -04:00
Techcable 87e3c18093
Make `enableTreasureMaps` apply to shipwreck loot generation
Fixes #3480
Previously it only controlled whether villagers could trade treasure maps.
Now it should apply to loot generated in treasure maps.

We don't unregister treasure maps from the loot table,
since this option is per-world and the table is global.
Instead I just replaced the implementation with a NOP.
2020-06-20 15:26:38 -04:00
HeartPattern 7d256d659f
Remove useless warn logging while disconnecting
Remove useless "handleDisconnection() called twice" logging.
This warning log every time player kicked by server.
2020-06-20 15:23:02 -04:00
Spottedleaf 0d8594ae94
Fix enderdragon exp dupe
Properly track death stage when unloading/loading in the dragon
2020-06-20 15:04:50 -04:00
Spottedleaf 1cf1ebdc5d
Prevent position desync in teleporting during movement
Caused the server to revert to the player's overworld coordinates
after teleporting into the end.

Sidenote: The underlying issue is that the move call can teleport
entities and do other things like kill the entity. In the future,
to fix all exploits derieved from this usually unexpected
behaviour, we need to move all of this dangerous logic outside
of the move call and into an appropriate place in the tick method.
2020-06-20 14:59:49 -04:00
Spottedleaf 8f28f22ccf
Fix sand not dying correctly
If the falling block dies during teleportation (entity#move), then we need
to detect that by placing a check after the move.
2020-06-20 14:58:35 -04:00
Spottedleaf 96feb68ad9
Fix carpet and rail duping by pistons under same TNT duping config
This renames the config from enable tnt duping to enable piston duping

Normally we would not have a config for rails and carpet duping, but
the fix for TNT is the same fix for rails and carpet, so they are
having to be covered under that same config.
2020-06-20 14:56:08 -04:00
Spottedleaf 3e75d90810
Fix more cases of Bedrock breaking
This is still covered under the setting to re-enable this.
2020-06-20 14:54:17 -04:00
Mariell 01ce3cb0a5
Only complete from cache if ID is given (#3591)
As it stands, one can complete from the cache if no ID is given. If
there is no ID, it will throw an NPE, as ConcurrentHashMap (which is used
in UserCache) does not support null keys. This should fix any current
and future issues where exceptions are thrown just because a UUID is not
currently given on the profile due to a plugin or server bug/issue.

Fixes #3590.
2020-06-20 14:46:57 -04:00
Aikar b68ae39f9a
Revert a change made to getChunkFuture for isUnloading
Talked with leaf on it and understand what its going now even though
it was a hack fix by Spigot, but seems ok.

I had orig made this change thinking it was the source of another
issue but that came out to not be true.

Fixes #3573
2020-06-20 14:37:25 -04:00
Aikar 1f181040dd
Ensure we load chunks for Entity getCubes
Was some other code paths missing the set for loading chunks

Fixes #3582
Fixes #3368

Probably helps with "falling through world" issues too.
2020-06-20 14:25:11 -04:00
Aikar 2a3cb3753f
Optimize Network Manager Closed channel handling and flushing
Adds Netty Channel Flush Consolidation to reduce the amount of flushing
This improves performanceo of netty event loop.

If a problem is encountered with this, you can disable it by adding the java flag:
  -DPaper.disableFlushConsolidate=true

Also avoids spamming closed channel exception by rechecking closed state in dispatch
and then catch exceptions and close if they fire.

This should resolve connections getting stuck spamming ChannelClosed in logs and
let them clean up and close correctly.
2020-06-20 14:25:11 -04:00
Aikar 3dc5ad343f
Improvements to chunk priority / bug fixes
ensure we add missing player tickets even if already full status
remove the player ticket throttler entirely... causes a lot of issues and
our system handles the role that it was serving now too.

increase max delays on farther out chunks load delay

remove -5 priority delay for distant chunks seemed it applied at weird times.

ensure if delay distance manager tick ever got left lingering it unsets on a chunk load.

Fixes #3572
2020-06-20 02:38:59 -04:00
Aikar a70618cd5c
Make Skull Texture Lookup use the User Cache
Spigots cache only cached by name which really was not correct...

Additionally, user cache exposes a cache of any player who has logged in
once this session too even if offline.

Also fixed some quirks with Profile API where we might of had textures
in the cache that we didn't even try to look up.

So this should overall help reduce API calls to Mojang.

Sadly, the User Cache doesn't cache textures, but if that ever
changes in future, we would gain benefit there too.
2020-06-19 22:07:19 -04:00
Aikar 92d1247ee3
Improve light optimizations and fix bugs
Rewrites the Threaded task logic to no longer use 2 queues and instead
keep a single prioritized queue and do all of a chunks light tasks in a single batch

Fix a math issue in one place (Thankfully didn't seem to really be a common place since didn't notice anything)
2020-06-19 19:10:38 -04:00
Zach Brown 9ffaa44ae1
Also restrict height in the vanilla teleport command
Uses the same ridiculously large limit as before,
just now also applied to the Y coord.

Fixes GH-3575
2020-06-17 17:46:45 -05:00
Josh Roy f860969175
Add unsupported-settings section to config (piston tnt dupe config option) (#3565) 2020-06-15 12:29:39 -04:00
Shane Freeder 83e832b44c
[CI-SKIP] Rebuild patches 2020-06-14 20:46:12 +01:00
Spottedleaf 91459fe514
Fix piston physics inconsistency (fix tnt dupers) (#3544)
Co-authored-by: Spottedleaf <Spottedleaf@users.noreply.github.com>
2020-06-12 03:30:30 -04:00
David Slovikosky 8c41ac1c98
Fix missing chunks due to integer overflow (#3527)
This patch fixes a bug in the WorldChunkManagerTheEnd class where the distance
from 0,0 squared overflows the maximum size of an integer. The overflow leads
to hard chunk borders around 370,000 blocks from 0,0. After this cutoff there
is a few hundred thousand block gap before end land resuming to generate at
530,000 blocks from spawn. This is due to the integer flipping back and forth.

The fix for the issue is quite simple, casting chunk coordinates to longs
allows the distance calculation to avoid overflow and work as intended.
2020-06-12 03:30:18 -04:00
avaruus1 cffe4c075e
Scheduling an async task timer creates a non-repeating task (#3543) 2020-06-11 19:32:48 -04:00
Aikar e224f0bdab
Fix issues with SIGTERM not shutting down gracefully - Fixes #3062
We had 2 issues.
1) Log4J2 Shutdown hook seemed to be causing issues as it shutdown logger while we still needed it
2) ServerShutdownThread needs to stay alive until server is shutdown to keep jvm open.

It appears SIGINT is handled differently than SIGTERM, as SIGINT worked correctly.

But this will make both methods work.
2020-06-10 23:40:28 -04:00
Spottedleaf c7112d0661
Ensure chunk gen tasks return to main thread before completing futures 2020-06-10 23:40:23 -04:00
Aikar a72d4bb2ab
Improve chunk loading speed and prioritization further - Fixes #3530 2020-06-10 09:24:17 -04:00
Aikar 64666dc8b6
Improve Chunk Priority, Frustum Priority and Load Speed Algorithms
Fix bug where mojang has a -90 modifier in yaw resulting in us calculating
chunks to the players left rather than in front of them.

Drastically improve Frustum Prioritization function to reduce lag from its
calculations (Found it was being spammed really heavy on world add/teleport)

Also improved the logic behind choosing chunks to prioritize.

Add Priority tickets to a radius of 3 on any login, world chnge or teleport

This should help improve world load / chunk sending upon a player changing
locations by loading those chunks faster.

Improved the Player Ticket Delayer to be a little bit smarter about delays to
let closer chunks load a bit faster and only delay the farther out ones more.

This update will provide significant improvements to priority of chunks and
reduce the cpu cost of doing these calculations.

Fixes #3530
2020-06-10 01:20:57 -04:00
Aikar 146b99080c
Improve ChunkMapDistance.b crash fix to clean up properly
There is some vanilla level bug where this tracking state appears
to get messed up and player doesn't exists in chunk its trying to untrack.

We returned early to prevent crashing, but I suspect if there was a level being
tracked for the chunk, it got leaked due to the early return.

So going to ensure we clean up the level tracker when this state occurs.

This may help with any leaked chunk issues.
2020-06-09 23:05:43 -04:00
Aikar c5c909c9af
Improve Plugin Ticket Management
Now supports async chunk access even though doing that is bad
and shouldn't be done anyways since we force you back to main, itll
now just delay the ticket add to main the same way.

Now only add the ticket if the plugin CAUSED the chunk load, so no longer
adds ticket if the chunk was already loaded.

Additionally, cap chunk ticket limits to 1 second (Effectively ignoring chunk-gc config
unless the config is lower than 20 ticks)

Fixes #3533
2020-06-09 21:15:36 -04:00
stonar96 de6dfedfef
Make Anti-Xray multithreaded (#3520)
Obfuscate multiple chunks at a time over the server thread pool.

Will speed up chunk processing when anti xray is enabled.

Co-authored-by: Aikar <aikar@aikar.co>
2020-06-09 04:12:20 -04:00
Aikar 531c4b3fd1
Add PluginTickets to API Chunk Methods
Like previous versions, plugins loading chunks kept them loaded until
they garbage collected to avoid constant spamming of chunk loads

This adds tickets to a few more places so that they can be unloaded.

Additionally, this drops their ticket level to BORDER so they wont be ticking
so they will just sit inactive instead.

Using .loadChunk to keep a chunk ticking was a horrible idea for upstream
when we have TWO methods that are able to do that already in the API.

Not adding it to .getType() though to keep behavior consistent with vanilla.
2020-06-09 03:43:11 -04:00
Aikar b2d81e21c5
Improve Chunk Prioritization and Internal Scheduler
In previous MC versions, we had a rather simple internal scheduler
for delayed tasks that would just keep pushing task back until desired
tick was reached.

The method it called to schedule the task changed behavior in 1.14, and now
this scheduler is not working nowhere near what it was supposed to be doing.

This was causing long delayed task to eat up CPU (In Oversleep for example)

Rewrite this to just use the CraftScheduler for scheduling delayed tasks.

Once this was fixed, it became quite clear the code that delayed ticket
additions for chunks based on distance was clearly not right, as it was
tested on the previous broken logic.

So the ticket delay process has been vastly revamped to be even smarter.
Chunks behind the player can load slower than the chunks in front of the player.
We also can delay ticket adding until one of its neighbors has loaded, as
this lets us get a smoother spiral out for the chunks (minus frustum intent).

Additionally on frustum previous commit inadvertently broke frustum trying to
fix an issue when the real fix lied elsewhere, so restore chunk priority so
it works again.
2020-06-09 03:17:25 -04:00
Aikar 24a2e80431
Improve Login to use Urgent priority - improves login chunk load times 2020-06-08 21:47:39 -04:00
Aikar 9dfe1321d5
Delay Chunk Unloads based on Player Movement
When players are moving in the world, doing things such as building or exploring,
they will commonly go back and forth in a small area. This causes a ton of chunk load
and unload activity on the edge chunks of their view distance.

A simple back and forth movement in 6 blocks could spam a chunk to thrash a
loading and unload cycle over and over again.

This is very wasteful. This system introduces a delay of inactivity on a chunk
before it actually unloads, which will be handled by the ticket expiry process.

This allows servers with smaller worlds who do less long distance exploring to stop
wasting cpu cycles on saving/unloading/reloading chunks repeatedly.
2020-06-08 18:17:11 -04:00
Aikar f0409edcd7
Drop Close region files patch, doesn't add any value.
Upon further knowledge of the system, it is known that region files
are closing properly, as well as this didn't help native memory use anyways.

This patch also caused issues compiling on a newer JDK being able to
release the jar to java 8 users.
2020-06-08 17:07:23 -04:00
Aikar 700070c5e6
Fix undesirable behavior around world level changes due to priority
priority tickets being added at 33 was hurting sync EMPTY and lesser requests.

this was likely the source of recent treasure map issues.

This then further hurt nether portal travel too. lots of oddness around.

This also avoids scheduling a level change on ticket removal when the level
is unchanged, as well as ditches CB's horrible change to not letting
you access an unloading chunk which should be valid to cancel the unload
2020-06-08 17:03:42 -04:00
Aikar 34e5942bf0
Fix timings task name generation for extreme cases - Fixes #3499
I'm going make a class, and in that class i'm going to
make a method. And in that method, I'm going to make a local class.

And then in that local class, I'm going to make another inner class.

I heard you like complex class trees.
2020-06-08 12:22:40 -04:00
Aikar 5e3bacbced
Ensure ThreadDeath propagates fully - Fixes #3521 2020-06-08 11:54:12 -04:00
Aikar 9fa6ba267c
Optimize Light Engine
Massive update to light to improve performance and chunk loading/generation.

1) Massive bit packing/unpacking optimizations and inlining.
  A lot of performance has to do with constant packing and unpacking of bits.
  We now inline a most bit operations, and re-use base x/y/z bits in many places.
  This helps with cpu level processing to just do all the math at once instead
  of having to jump in and out of function calls.

  This much logic also is likely over the JVM Inline limit for JIT too.
2) Applied a few of JellySquid's Phosphor mod optimizations such as
  - ensuring we don't notify neighbor chunks when neighbor chunk doesn't need to be notified
  - reduce hasLight checks in initializing light, and prob some more, they are tagged JellySquid where phosphor influence was used.
3) Optimize hot path accesses to getting updating chunk to have less branching
4) Optimize getBlock accesses to have less branching, and less unpacking
5) Have a separate urgent bucket for chunk light tasks. These tasks will always cut in line over non blocking light tasks.
6) Retain chunk priority while light tasks are enqueued. So if a task comes in at high priority but the queue is full
   of tasks already at a lower priority, before the task was simply added to the end. Now it can cut in line to the front.
   this applies for both urgent and non urgent tasks.
7) Buffer non urgent tasks even if queueUpdate is called multiple times to improve efficiency.
8) Fix NPE risk that crashes server in getting nibble data

Fixes #3489
Fixes #3363
2020-06-07 20:31:29 -04:00
Aikar dfd3848ee6
Use seed based lookup for Treasure Maps - Fixes lag from carto/sunken maps 2020-06-07 19:28:58 -04:00
Aikar 74dcb3c923
Revert "Fix enchantment costs (#3519)"
This reverts commit 6d72ea1659.
2020-06-07 19:13:41 -04:00
Alexander 6d72ea1659
Fix enchantment costs (#3519) 2020-06-07 17:53:49 -04:00
Max Lee 68cc8d79b2
Maps shouldn't load chunks (#3518)
Previously maps would load all chunks in a certain radius depending on
 their scale when trying to update their content. This would result in
 main thread chunk loads when they weren't really necessary, especially
 on low view distances or "slow" async chunk loads after teleports or
 other prioritisation.

 This changes it to only try to render already loaded chunks based on
 the assumption that the chunks around the player will get loaded
 eventually anyways.
2020-06-07 16:57:52 -04:00
chickeneer e7cf34a039
Fix villager trading demand MC-163962 (#3498) 2020-06-07 14:41:32 -04:00
Shane Freeder 225484ccef
Fix SoundEffectType#getHitSound OBFHELPER 2020-06-07 09:51:00 +01:00
Aikar b75eeca0e5
Boost light task priority to ensure it doesnt hold up chunk loads
Run urgent as 2 so urgent light can run as 1 (light run at chunk -1 for loading purposes)
2020-06-03 01:46:09 -04:00
Aikar 3d2bc848c1
Ensure VillagerTrades doesn't load async - fixes #3495
In rare cases, this class could potentially be loaded from
the chunk threads causing it to initialize async and cause errors.

This would then break the server and chunk saving.

So ensure its loaded at start of server to avoid this.
2020-06-03 00:00:17 -04:00
Aikar e470f1effe
Add more information to Timing Reports
Still needs front end changes to see it yet though.

1) Adds Game Rules per world
2) Adds View distances per world
3) Removes extra garbage on lambda task names
4) Adds more memory information such as native load
5) Adds load average for non crap operating systems.
6) Fixes online mode showing false when privacy=true
7) Adds Data packs loaded
2020-06-02 23:30:58 -04:00
Aikar f4a47db699
Improve Thread Pool usage to allow single threads for single cpu servers
Switch to a standard fixed size ThreadPoolExecutor as we don't use the
advanced capabilities of a ForkJoinPool.

ForkJoinPool does not allow single threads, and really rather not use
2 different executor types based on core count.

Also, change thread priorities so that main thread is prioritized by
the OS at a higher priority than the other threads. May not help too much
but it at least signals the OS the information to know main is more important.
2020-06-02 02:19:07 -04:00
Aikar a4fe910f57
Fix sounds when using worldedit regen command
Locks dimension manager to the first world its used with.

WE is creating a temp world and the world ref on that manager
is getting changed to the temp world.

This would of also caused a memory leak of that temp world too.
2020-06-02 01:29:18 -04:00
Aikar 70ad51a80c
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

My recent work on serialization is now in CraftBukkit so was able to drop the patch and Paper
is now consistent with upstream.

Bukkit Changes:
e2699636 Move API notes to more obvious location

CraftBukkit Changes:
1b2830a3 SPIGOT-4441: Fix serializing Components to and from Legacy
2020-06-02 01:29:18 -04:00
Aikar d7cfa4fa5c
Improve legacy format serialization more
This should now complete legacy serialization to avoid ever
changing the output content.

This removes the concept of "Default Color" from the method as
that entire concept was flawed and broke the intent of chat components.

Going to actually PR this patch to Spigot soon.

This now puts us back at a point where any data saved pre Spigot
breaking things will still save back the exact same way as before,

but new component -> legacy will now be fixed to not insert undesirable
default colors (such as black) into the legacy string, and instead use
the proper reset code.

This means you can now safety get the text from a book and
put it in chat or an entity display name without worry about black
color codes or other undesired color codes leaking into the new
context where that color doesn't make sense.
2020-05-31 22:13:17 -04:00
Aikar a3fdafbd11
Restore Serialization Improvements again, wasn't an issue.
I was a little quick to jump to blame this patch as cause of an issue,
but appears it was not the source for what I saw that made me revert this.
2020-05-31 05:01:26 -04:00
Aikar 0e441c7960
Revert "Improve Chat Component Legacy Serialization more"
This reverts commit 53ef67b88d.

Seems to be having undesired impact, will need to polish more.
2020-05-31 04:08:03 -04:00
Aikar 53ef67b88d
Improve Chat Component Legacy Serialization more
This brings chat componenent serialization to 100% accuracy so
that any text input in the legacy format, converting to comps and
then back to legacy will result in identical results.

If the user explicitly sets a color as prefix to a string, it is retained,
even if that color matches the default.

This also helps improve dealing with the empty string wrappers Bukkit creates.

A unit test has been added to verify this behavior.
2020-05-31 03:20:31 -04:00
wea_ondara afc1fcfc2e
Fix serialization of colors from components
This patch fixes the serialization of display names, item lores and
other things which use strings with color codes. The old implementation
deleted the color codes at the beginning of the resulting string if it
matched the default color passed to the conversion function. This
resulted in items having a black display name losing the black color
code in the beginning of the text when the item was serialized (e.g.
saving an ItemStack in a Yaml config).

Spigot has now made the issue worse and expanded the scope to more places.
2020-05-30 23:31:06 -04:00
Aikar eaa76a3115
Add Villager Tasks to EAR inactive tick to keep behavior
Stuff like restocking trades and reputation changes can happen when
a Villager is out of Activation Range now.
2020-05-30 04:54:40 -04:00
Aikar 357b52fd98
Improve Chunk Prioritization / Load Order
1) Improve frustum to look more at the near chunks and frontal chunks only instead of 1 large single look up.
2) Delay adding 33 tickets based on view distance and lower their task priority. This will slower roll out the spiral
3) Chunks behind the player have additional delay on loading, favoring chunks in front of the player.

This has benefit that if faster traveling, some of the chunks will be cancelled / not loaded.

This should reduce pressure on chunk loading, as well as reduce loading/unloading unnecessary chunks while moving.
2020-05-30 03:51:07 -04:00
Aikar a76bc4029d
Improve Chunk Status Transition Speed
When a chunk is loaded from disk that has already been generated,
the server has to promote the chunk through the system to reach
it's current desired status level.

This results in every single status transition going from the main thread
to the world gen threads, only to discover it has no work it actually
needs to do.... and then it returns back to main.

This back and forth costs a lot of time and can really delay chunk loads
when the server is under high TPS due to their being a lot of time in
between chunk load times, as well as hogs up the chunk threads from doing
actual generation and light work.

Additionally, the whole task system uses a lot of CPU on the server threads anyways.

So by optimizing status transitions for status's that are already complete,
we can run them to the desired level while on main thread (where it has
to happen anyways) instead of ever jumping to world gen thread.

This will improve chunk loading effeciency to be reduced down to the following
scenario / path:

1) MAIN: Chunk Requested, Load Request sent to ChunkTaskManager / IO Queue
2) IO: Once position in queue comes, submit read IO data and schedule to chunk task thread
3) CHUNK: Once IO is loaded and position in queue comes, deserialize the chunk data, process conversions, submit to main queue
4) MAIN: next Chunk Task process (Mid Tick or End Of Tick), load chunk data into world (POI, main thread tasks)
5) MAIN: process status transitions all the way to LIGHT, light schedules Threaded task
6) SERVER: Light tasks register light enablement for chunk and any lighting needing to be done
7) MAIN: Task returns to main, finish processing to FULL/TICKING status

Previously would have hopped to SERVER around 12+ times there extra.
2020-05-30 01:12:18 -04:00
Aikar 7a2b345b55
Synchronize DataPaletteBlock instead of ReentrantLock
Mojang has flaws in their logic about chunks being concurrently
wrote to. So we constantly see crashes around multiple threads writing.

Additionally, java has optimized synchronization so well that its
in many times faster than trying to manage read wrote locks for low
contention situations.

And this is extremely a low contention situation.

Fixes #3293
Fixes #2493
2020-05-29 20:36:42 -04:00
Aikar a8ef0a93b9
Drop remove leaked chunk patch - causing many issues
I'm hoping the other fix in 324 for the level map getting corrupted
fixes the real issue and this isn't needed anymore, but i suspect it is

will wait until more study can be done though.

Fixes #3469
2020-05-29 03:32:13 -04:00
Aikar ff4ca31f0d
Fix premature unloading of neighbor chunks for world gen
We must check the level tracker as ticket levels add "virtual"
tickets to neighbors.

Also added neighbor tracking during generation to be extra safe.

Fixes #3465
Fixes #3451
Fixes #3459
2020-05-28 22:59:40 -04:00
Aikar fde81356bb
Fix Chunks unloading immediately for priority access - Fixes #3461
Adding a priority ticket was apparently causing the level tracker
to immediately unload the chunk.

That code is scary
2020-05-28 22:57:27 -04:00
Aikar 9980f427db
Fix some logic on villager poi max attempts
Hopefully will help #3462
2020-05-28 20:45:36 -04:00
Aikar 919ab67a13
Fix concurrency issue in light engine (Vanilla bug)
Mojang implemented a cache like chunks have, but this cache
is accessed by multiple threads and is totally not safe.

So just remove it

Fixes #3466

Also missed a pooled nibble release, so slid that in there too.
2020-05-28 20:37:40 -04:00
Spottedleaf 0d5ec65372
Cleanup async chunks (#3456)
Co-authored-by: Spottedleaf <Spottedleaf@users.noreply.github.com>
2020-05-28 19:34:58 -04:00
Aikar b0b54e4ef3
Optimize Villager Pathfinding - Massive Villager Improvement
This change reimplements the entire BehaviorFindPosition method to
get rid of all of the streams, and implement the logic in a more sane way.

We keep vanilla behavior 100% the same with this change, just wrote more
optimal, as we can abort iterating POI's as soon as we find a match....

One slight change is that Minecraft adds a random delay before a POI is
attempted again. I've increased the amount of that delay based on the distance
to said POI, so farther POI's will not be attempted as often.

Additionally, we spiral out, so we favor local POI's before we ever favor farther POI's.

We also try to pathfind 1 POI at a time instead of collecting multiple POI's then tossing them
all to the pathfinder, so that once we get a match we can return before even looking at other
POI's.

This benefits us in that ideally, a villager will constantly find the near POI's and
not even try to pathfind to the farther POI. Trying to pathfind to distant POI's is
what causes significant lag.

Other improvements here is to stop spamming the POI manager with empty nullables.
Vanilla used them to represent if they needed to load POI data off disk or not.

Well, we load POI data async on chunk load, so we have it, and we surely do not ever
want to load POI data sync either for unloaded chunks!

So this massively reduces object count in the POI hashmaps, resulting in less hash collions,
and also less memory use.

Additionally, unemployed villagers were using significant time due to major ineffeciency in
the code rebuilding data that is static every single invocation for every POI type...

So we cache that and only rebuild it if professions change, which should be never unless
a plugin manipulates and adds custom professions, which it will handle by rebuilding.
2020-05-27 01:35:36 -04:00
Aikar 33a2134b65
Workaround for really evil plugins breaking sounds
Some plugins are doing really really bad things to worlds breaking the
ability to send sounds to some users.

So creating another reference to the player chunk map that plugins wont be breaking, and
print a stack trace at world creation if we ever get an expected world state to identify
who is doing it!

If we encounter this illegal state, we fall back to the old method of sending sounds, so
sending sounds will still work, just less effecient.
2020-05-27 01:00:43 -04:00
Aikar b88ee11f5a
Don't unregister the primary dimensions on world unload 2020-05-27 00:15:57 -04:00
Aikar 21f9efa2ca
Improve implementation of chunk leak clean to not run as often 2020-05-25 21:42:53 -04:00
Aikar 7ee711460f
Add missing null check for structure start chunk access
Spigot made structure start not load chunks, but forgot to null check
the result...

This likely never blew up before due to the chunk leak issue, but now
that leaky chunks are cleaned up, it was identified.
2020-05-25 14:19:11 -04:00
Aikar b12177fb04
One more to seal the deal to improve unloading inactive chunks
While last was mostly there, still had some slight risk of unloading
before it was fully finished.

So just going to bump the delay to 3 minutes to be safe. Better than
forever at least.

Was really hoping we could unload them as soon as they were done to
any memory prematurely promoting to old generation, but guess we can't.
2020-05-25 13:09:56 -04:00
Aikar 78ee3b4e88
Restore a condition I accidently removed in last build 2020-05-25 12:53:40 -04:00
Aikar 88a6882930
Fix unloading inaccessible chunks too fast regressing gen speed
A chunk was loaded but not yet finished in use and was unloaded too early.

This caused it to be reloaded again or caused crashes.

Now also check if the chunk pops out of the unload queue that it also
doesn't now have a ticket either.
2020-05-25 12:36:19 -04:00
Aikar 210a32f26f
Unload leaked Cached Chunks
Due to some complexity in mojangs complicated chain of juggling
whether or not a chunk should be unloaded when the last ticket is
removed, many chunks are remaining around in the cache.

These chunks are never being targetted for unload because they are
vastly out of view distance range and have no reason to be looked at.

This is a huge issue for performance because we have to iterate these
chunks EVERY TICK... This is what's been leading to high SELF time in
Ticking Chunks timings/profiler results.

We will now detect these chunks in that iteration, and automatically
add it to the unload queue when the chunk is found without any tickets.
2020-05-25 11:12:22 -04:00
Aikar c9795e9221
Fix Spigot bug with chunk unloading
Spigot inserted their Slack Activity Accountant in the wrong location
resulting in a chunk being removed from the unload queue, inserted into
the unload map, but never calling the function to finish the removal....

This caused the chunk to become stuck in the unload map if ever hit, because
the unload map was meant to be a TEMPORARY location while it was saving.

Fix this by abort iteration AFTER the current chunk is finisehd processing

Also, improve how aggressive we are at unloading chunks, targetting 10% per tick instead.
These saves are asynchronous so there should be less of a hit here.
2020-05-25 11:09:44 -04:00
Aikar b6cf80ee66
Preload important classes such as Logger and JLine
This is for 2 reasons:
1) Ensuring our log4j is mostly loaded at OUR version.
   I've seen stack traces with line numbers that do not match our version. This means that some
   plugin has shaded in log4j and their loaded version is mixing with ours....
   So by at least trying to load a bunch of log4j classes before we load plugins, we can be
   more sure mixed versions are not loading.

2) If the jar file is replaced while the server is runnimg class not found errors galore
   This will preloaod a bunch of classes commonly seen to error during shutdown due to this.

   The goal here is to help let the server shutdown gracefully as possible. Some plugins will
   still blow up here if they access a class that hadn't been loaded yet, but goal is to at least
   stop freezing the shutdown process as it does with JLine and Log4j errors requiring an external kill.

   Ideally you should not replace jars while the server is running, but it is something that happens in
   development for testing.

Updated test server to do a copy though to avoid this happening in Paper development.
2020-05-24 13:19:08 -04:00
Aikar ea1a909c80
Fix netty version to 50 and restore epoll native support
Accidently used the snapshot, as well as needed to exclude the
existing old 25 build of libnetty so that we load the newer build of
epoll instead.

Thanks to 56738 for the catch.
2020-05-24 13:07:53 -04:00
Aikar 10502558e9
Workaround for some hacky environments that mess up things
2 people had issues where some plugin is doing some reallly insane NMS hackery
that created invalid worlds, which caused some errors...

Really don't understand what in the world they did, but putting in a dumb guard that
shouldn't even be necessary to just not send the sound effect rather than erroring.
2020-05-23 22:27:37 -04:00
Aikar 8b2a437b9e
Fix plugins calling getChunkAtAsync asynchronously
While this method has async in it's name, it's not actually meant
to be called asynchronously.... It just means IT will load the chunk
asynchronously without blocking main.

So fix this so that if a plugin calls it async, it forces the request back to main thread.
2020-05-23 18:38:29 -04:00
Aikar c8055836e8
Update Netty to 4.1.51
Minecraft's Netty version was severely out of date. There has been
numerous security fixes, bug fixes, and likely performance fixes
since the version Minecraft uses (4.1.25).

This fixes some known issues with "Closed Channel" spam.

Fixes #3388
2020-05-23 17:58:45 -04:00
Aikar 64cfcf3e4b
Optimize sending packets to nearby locations (sounds/effects)
Instead of using the entire world or player list, use the distance
maps to only iterate players who are even seeing the chunk the packet
is originating from.

This will drastically cut down on packet sending cost for worlds with
lots of players in them.

Closes #3437
2020-05-23 17:17:14 -04:00
Aikar cf82dad399
Fix Non Full Status Chunk NBT Memory Leak
Any full status chunk that was requested for any status less than full
would hold onto their entire nbt tree and every variable in that function.

This was due to use of a lambda that persists on the Chunk object
until that chunk reaches FULL status.

With introduction of no tick, we greatly increased the number of non
full chunks so this was really starting to hurt.

We further improve it by making a copy of the nbt tag with only the memory
it needs, so that we dont have to hold a copy to the entire compound.
2020-05-23 01:40:27 -04:00
Aikar 5a12515a42
Update Log4J Configuration file to stop truncating stack traces
This should help greatly (as long as this change works...) in
understanding an exception when it doesn't get truncated with
"... and 14 more" at a vital point of the stack trace.
2020-05-22 23:52:56 -04:00
Aikar 7c001d64a5
More Improvements to Chunks
Fixed issues where urgent and prioritized chunks didn't actually
always get their priority boosted correctly....

Properly deprioritize non ticking chunks.
Limit recursion on watchdog prints to stop flooding as much
Remove neighbor priorities from watchdog to reduce information
reduce synchronization duration so that watch dog won't block main should main actually wake up
probably fixed a deadlock risk in watchdog printing also that was leading to crashes
fixed chunk holder enqueues not being processed correctly
added async catchers in some locations that should not be ran async

Fixed upstream bug where VITAL callbacks that must run on main actually could
sometimes run on the server thread pool causing alot of these nasty bugs we've seen lately!

This build will provide massive improvements to stability as well as even faster
sync chunk load/gens now that priority is correctly set.

Fixes #3435
2020-05-22 23:52:56 -04:00
Aikar e1c451968c
Fix high memory use of non ticking chunks
The nibble pooling for NBT Tags was 'semi' leaked from loaded chunks
as we store the NBT Tag of Tile Entities in a Chunk, but don't process
them and remove them until chunk reaches Entity Ticking status....

This caused some phantom references to persist causing high memory use
of these chunks.

So I just got rid of pooling from NBT deserialization and we'll have to
take the hit on memory allocations there because too many cascading concerns
with anyone using NBT Tag Byte Arrays.

Fixes #3431
2020-05-22 23:52:51 -04:00
Aikar ee9f0d513f
Fix another case of breaking blocks causing sync chunk loads 2020-05-22 18:57:48 -04:00
Aikar 6009ba8f44
Drop AABB limit patch until it can be tested more
Fixes #3428
2020-05-22 02:21:32 -04:00
Aikar 0e9c24e595
Fix log spam about Hanging entities bounding boxes
Nothing really "Broke" them, just a lot of log spam. This will clean that up
2020-05-22 02:04:00 -04:00
Aikar 83fadad7da
Fix conversion for deserializing raw nbt itemstacks - Fixes #3424 2020-05-22 01:08:18 -04:00
Aikar 4d38ee111f
Many fixes and improvements to chunk prioritization
I believe this brings us back to stable. A lot of complexity was
learned about juggling priorities.

We were essentially promoting more chunks to urgent than really
needed to be urgent.

So this commit adds a lot more logic to juggle neighbor priorities
and demote their priority once they meet the requirements needed of
them.

This greatly improves the performance of "urgent" chunks".

Fixes #3410
Fixes #3426
Fixes #3425
Fixes #3416
2020-05-22 01:03:42 -04:00
Aikar 281181c7c7
Use saner Entity bounding box limits
CB only protected from > 64 but there's no reason an entity should ever
be more than 2x its width or 1x height as the BB is supposed to represent
the entity size.

BB is / 2 to calculate position.
2020-05-22 00:40:56 -04:00
Aikar edd6b6a2ba
Protect the visible chunk map from plugins touching it, trim Timing Errors
Blow up if a plugin tries to mutate visibleChunks directly and prevent them
from doing so.

Also provide a safe get call if any plugins directly call get on it so
that it uses the special logic to check pending.

Also restores ABI for the visibleChunks field back to what it was too.

Additionally, remove the stack trace from Timings Stack Corruption for any
error thrown on Minecraft Timings, and tell them to get the error ABOVE this
instead, so people stop giving us useless error reports.

Also fixes a memory leak when the source map down sizes but dest map didn't,
which resulted in lingering references to old chunk holders.

Fixes #3414
2020-05-22 00:39:16 -04:00
Aikar 18c686576b
Optimize performance of object pool
synchronized arraydeque ends up still being way faster.
Kinda shocked how much that strategy was using, it wasn't really
that complicated... but oh well, this is even simpler and not
seeing blocked threads show up at all in profiling because
the lock is held for such a short amount of time.

also because most uses are on either server thread pool or chunk load pool.

Also optimize the pooling of nibbles to not register Cleaner's
for Light Engine directed usages, as we know we are properly
controlling clean up there, so we don't need to rely on GC.

This will return them to the pool manually, saving a lot of Cleaners.

Closes #3417
2020-05-20 21:45:43 -04:00
Aikar 7e1525ea2d
Many improvements to chunk prioritization and bug fixes
Fixed a few bugs, and made numerous improvements.
Fixed issue where a sync chunk load could have its ticket removed and the
priority ticket could expire...
Still not perfect there but better than before.

Also fixed few other misc issues such as watchdog cpu usage, chunk queue update
had risk of double enqueue due to it no longer being a set.

Added much more information about chunk state to watchdog prints.

I see some more room for improvement even, but this is much better than before.

Fixes #3407
Fixes #3411
Fixes #3395
Fixes #3389
2020-05-20 05:13:01 -04:00
Aikar c82b292ab0
Fix pooled buffer leak resulting in dynmap black spots - Fixes #3386
Dynmap accessed the raw bytes because it utilized NBT locally, but the
NBTTagcompound was garbage collected while the bytes were still being used.

This will return getBytes() back to being safe, and add a new PoolSafe method
that will prevent the additional allocations for general chunk loading.

Also fixed applyPatches for people with paths in their working directory
if they have mcdev sources built.
2020-05-20 00:55:30 -04:00
Aikar 614a664bd3
Implement Chunk Priority / Urgency System for Chunks
Mark chunks that are blocking main thread for world generation as urgent

Implements a general priority system so that chunks that are sorted in
the generator queues can prioritize certain chunks over another.

Urgent chunks will jump to the front of the line, ensuring that a
sync chunk load on an ungenerated chunk does not lag the server for
a long period of time if the servers generator queues are filled with
lots of chunks already.

This massively reduces the lag spikes from sync chunk gens.

Then we further prioritize loading order so nearby chunks have higher
priority than distant chunks, reducing the pressure a high no tick
view distance holds on you.

Chunks in front of the player have higher priority, to help with
fast traveling players keep up with their movement.

This commit also improves single core cpu scenarios in that we will
now automatically disable Async Chunks as well as Minecrafts thread
pool.

It is never recommended to use async chunks on a single CPU as context
switching will be slower than just running it all on main.

This also bumps the number of server worker threads by default too.
Mojang does not utilize the workers in an effecient manner, resulting
in them using barely any sustained CPU.

So give it more workers so more chunks can be processed concurrently

This change also improves urgent chunk loading, so players flying into
unloaded chunks will hurt a little bit less (but still hurt)

Ping #3395 #3363 (Not marking as closed, we need to make prevent moving work)
2020-05-19 04:09:37 -04:00
Mariell c8028d1c76
Fix data version check for ItemStack serialization (#3394)
The expected version should be equal to or newer than the one stored.

Although Aikar claims he did this on accident (and NOT my ligatures!), I
claim this is all a big conspiracy by followers of the Taco cult.
2020-05-18 12:24:06 -05:00
Mariell Hoversholm 6f196fe701
Add Raw Byte ItemStack Serialization
Serializes using NBT which is safer for server data migrations than bukkits format.
2020-05-17 00:52:24 -04:00
Spottedleaf df43f82838
Allow server startup for those poor people running <1G Xmx
Clamp logic for poolsize so we dont pass zero
2020-05-17 00:32:37 -04:00
Spottedleaf 3c9b65ef9d
Fix cases where no-tick < tick view distance 2020-05-17 00:24:49 -04:00
MeFisto94 72f89a076a
Workaround for Client Lag Spikes (MC-162253)
When crossing certain chunk boundaries, the client needlessly
calculates light maps for chunk neighbours. In some specific map
configurations, these calculations cause a 500ms+ freeze on the Client.

This patch basically serves as a workaround by sending light maps
to the client, so that it doesn't attempt to calculate them.
This mitigates the frametime impact to a minimum (but it's still there).
2020-05-17 00:21:42 -04:00
Mariell Hoversholm 3f941c0cce
Add option for console having all permissions
Overrides permissions set to default false (which op does not get)
2020-05-16 23:55:54 -04:00
Mariell Hoversholm d2ae4658ec
Add permission for command blocks 2020-05-16 23:48:54 -04:00
kickash32 74466412ee
Check portal restrictions when entering end gateways 2020-05-16 23:28:59 -04:00
Josh Roy fc9cf84dc6
Fix NPE when temp ip bans expire (#3373) 2020-05-16 23:26:49 -04:00
Max Lee 16bd420db5
Add missing mob goals for API (#3367) 2020-05-16 23:19:24 -04:00
Mariell Hoversholm b5c4e2f655
Ensure no-tick view is not smaller than ticking VD
Fixes #3372.
2020-05-16 23:09:06 -04:00
MiniDigger 52564b1f89
Expand Pathfinding API with more options 2020-05-16 23:02:48 -04:00
MiniDigger dde6548136
Fix usage of vanilla goals 2020-05-16 22:59:20 -04:00
kickash32 7797aebe63
Drop Leads from nether portals - Fixes #3226 2020-05-16 22:58:11 -04:00
Spottedleaf 511b6bc278
Reduce MutableInt and Vec3d allocations, use ArrayDeque 2020-05-16 22:26:45 -04:00
Aikar 84673141a0
Optimize NibbleArray to use pooled buffers
Massively reduces memory allocation of 2048 byte buffers by using
an object pool for these.

Uses lots of advanced new capabilities of the Paper codebase :)

Targets 3072 * 8 buffers per 1GB of heap memory up to a max consideration
of 6GB of heap (any more over 6GB won't give more nibble pool)

You can control the 3072 number by setting -DPaper.nibbleBucketSize=2048

Remember this number is * 8 then * heap memory in GB

That is 98304 objects for 4GB of memory, at 2064 bytes roughly, meaning 194MB

You may also control max number of pooled objects directly instead of any
dynamic calculation using -DPaper.maxNibblePoolSize=1024000

While this will use more old generation by a tad bit, allocation rate will drop
significantly, causing less young generation GC's.

This commit has gone through extensive testing for over a day and confident
it no longer has any issues with light corruption.
2020-05-16 22:24:36 -04:00
Aikar 897dd2c840
Foundational work for Future Memory usage improvements
This commit doesn't do much on its own, but adds a new Java Cleaner API
that lets us hook into Garbage Collector events to reclaim pooled objects and
return them to the pool.

Adds framework for Network Packets to know when a packet has finished dispatching
to get an idea when a packet is done sending to players.

Rewrites PooledObjects impl to properly respect max pool size and remove
almost all risk of contention.

Bumps the Paper Async Task Queue to use 2 threads, and properly shuts it down on shutdown.
2020-05-16 21:38:19 -04:00
Spottedleaf bb4002d82e
Handle CraftPlayer#setSpectatorTarget better
Use a proper teleport for teleporting to entities in different
worlds.

Validate that the target entity is valid and deny spectate
requests from frozen players.

Also, make sure the entity is spawned to the client before
sending the camera packet. If the entity isn't spawned clientside
when it receives the camera packet, then the client will not
spectate the target entity.
2020-05-14 18:05:00 -05:00
Aikar 4ae089597b
Fix collision checks on spawning hanging entities and null on async chunk loads
getCubes will now always load chunks
getChunk with gen false will now not throw error

Fixes #3368
Fixes #3364
2020-05-14 05:05:13 -04:00
Aikar c2f8d1ef98
Protect Bedrock and End Portal/Frames from being destroyed
This fixes exploits that let players destroy bedrock by Pistons, explosions
and Mushrooom/Tree generation.

These blocks are designed to not be broken except by creative players/commands.
So protect them from a multitude of methods of destroying them.

A config is provided if you rather let players use these exploits, and let
them destroy the worlds End Portals and get on top of the nether easy.
2020-05-14 03:16:31 -04:00
Aikar 827cc63263
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:
ffc8e4ca SPIGOT-5716: Clarify documentation of MultipleFacing

CraftBukkit Changes:
d07a78b1 SPIGOT-5716: Clarify documentation of MultipleFacing
46a13860 SPIGOT-5718: Block.BreakBlockNaturally does not reflect tool used
214ffea9 SPIGOT-5727: GameRule doImmediateRespawn cannot be set per-world

Spigot Changes:
2f5d615f SPIGOT-5730: Modernise inventory patch
a2bdb119 SPIGOT-5679: Add config option for end portal activation sound

Closes #3352
2020-05-12 01:27:07 -04:00
Aikar 92f680ed84
Fix Pathfinding and obscure glitchy buggy 0 tick farms
I swear the crap that stuff will abuse to make stuff happen is insane.

Hash codes apparently changing behavior of stuff based on its value, so
reverting 2d401d2dfb

Fixes #3346
Fixes #3341
2020-05-11 21:18:11 -04:00
Aikar 7a7c429260
Optimize Pathfinder - Remove Streams / Optimized collections
I utilized the IDE to convert streams to non streams code, so shouldn't
be any risk of behavior change. Only did minor optimization of the
generated code set to remove unnecessary things.

I expect us to just drop this patch on next major update and re-apply
it with the IDE again and re-apply the collections optimization.

Optimize collection by creating a list instead of a set of the key and value.

This lets us get faster foreach iteration, as well as avoids map lookups on
the values when needed.
2020-05-11 04:24:38 -04:00
Aikar fc917d1687
Optimize Hoppers - Major performance improvement
Removed streams from hoppers and also fixed a mistake in the logic.
When this patch was ported to 1.14/1.15, a line of code was put in
the wrong place which disabled a significant portion of the improvement.

Replaced usages of streams in isEmpty and itemstack checks
Replaced usage of streams in pulling loop
Replaced usage of streams in Lootable Inventory isEmpty() check
Only check for refilling Lootable Inventory when accessing first slot, not all

All of these in general were pretty significant hits, so this single commit
is going to cause tacos to magically appear in front of you every day.

🌮🌮🌮🌮🌮🌮🌮🌮🌮🌮🌮🌮🌮🌮🌮🌮🌮🌮🌮🌮🌮🌮🌮🌮🌮🌮🌮🌮🌮🌮🌮🌮🌮

Nom Nom Nom
If you hate taco's, you're not allowed to use this improvement.

Also ignore the renames, pulled a lot of PR's.
2020-05-11 03:42:32 -04:00
Omer Uddin 14ad77c692
Fix PotionEffect API Ignoring Icon bug
Fixes #3142
2020-05-11 00:44:27 -04:00
Omer Uddin eb3ce8a258
Fix EntityRaider picking up items when they shouldn't be able
Fixes #2205
2020-05-11 00:41:15 -04:00
Aikar 1ea9ada0da
Add a TELEPORT ticket when changing dimensions
This should fix any remaining issues around collision issues on
chunk edges when changing dimensions sending to Y 256
2020-05-11 00:19:40 -04:00
Aikar 8e9459eadc
Fix missing flag pass for isUrgent 2020-05-11 00:19:40 -04:00
Josh Roy 7befec4420
Potential bed api (#3339) 2020-05-11 00:19:04 -04:00
Spottedleaf 27945a6b1f
Optimize WorldBorder collision checks and air
Port part of leafs changes from Tuinity, will worry about rest later with larger changes coming
2020-05-10 22:52:20 -04:00
Aikar 55e17a8599
Wait for Async Tasks during shutdown
Server.reload() had this logic to give time for tasks to shutdown,
however shutdown did not...

Adds a 5 second grace period for any async tasks to finish and warns
if any are still running after that delay just as reload does.

Closes #3337
2020-05-10 22:17:55 -04:00
Aikar b59052566b
Ensure Entity AABB's are never invalid
If anything used setPositionRaw, it left potential for an AABB
to be left stale at their old location, which could cause massive
AABB boxes if movement ever then got called on the new position.

This guarantees any time we set the entities position, we also
update their AABB.
2020-05-10 22:14:47 -04:00
Aikar a054aa6f02
Properly remove Entities from current chunk
We store a reference to the chunk the entity is currently in, so use it
to more accurately unregister it in chunkCheck

Should maybe fix some entity loss issues.
2020-05-10 05:52:31 -04:00
Aikar c894ddfd38
Fix teleporting onto a chunk line
Obscure detail in that if you teleport right on a chunk line, it
adds +1 to your collision check and will check the unloaded neighbor.

but the call to load the chunk then returned null if it was pending unload, such
as the load we did in Player List

However we want gen=true for players here anyways, so use getType
2020-05-10 05:52:26 -04:00
Aikar 57d6cc0158
Send LOGIN protocol packets immediately - Fix disconnect during async prelogin 2020-05-10 03:12:05 -04:00
Aikar cd93e54df3
Don't use our modified chunk checks for collision in world gen
Fixes issues with errors in logs on generating chunks
2020-05-10 02:27:50 -04:00
Aikar b4003ef1ca
Allow loading entities current chunk if needed to fix collision checks
Having trouble reproducing this myself, but this should do it.
2020-05-10 01:04:45 -04:00
Aikar e5f6489602
Add Urgent API for Async Chunks API and use it for Async Teleport
This also cleans up the implementation of Async Chunks to get rid of most
Consumer callbacks and instead return futures.

This lets us propogate errors correctly up the future chain
(barring one isn't lost even deeper in the chain...)

So exceptions can now bubble to plugins using getChunkAtAsync
2020-05-10 00:57:03 -04:00
Aikar ad8e59dc79
Ensure chunks loaded on respawn for suffocation check 2020-05-09 21:13:30 -04:00
Aikar b1691e7b69
Remove some Streams usage in Entity Collision
While there is more down the collision system, remove some of the wrapping
Spliterator stuff as even this wrapper stream has shown up in profiling.

With other collision optimizations, we might also even avoid inner streams too.
2020-05-09 19:38:31 -04:00
JellySquid d454bbd5e1
Implement JellySquid's Entity Collision optimisations patch
This patch replaces the vanilla collision code for both block and entity collisions with faster implementations by JellySquid, used originally in her Lithium mod.

Optimizes Full Block voxel collisions, and removes streams from Entity collisions

Original code by JellySquid, licensed under GNU Lesser General Public License v3.0
you can find the original code on https://github.com/jellysquid3/lithium-fabric/tree/1.15.x/fabric (Yarn mappings)

Ported by
Co-authored-by: Zoutelande <54509836+Zoutelande@users.noreply.github.com>

Touched up by Aikar to keep previous paper optimizations
2020-05-09 19:19:18 -04:00
Aikar 8e85f841d8
Optimize Collision to not load chunks
The collision code takes an AABB and generates a cuboid of checks rather
than a cylinder, so at high velocity this can generate a lot of chunk checks.

Treat an unloaded chunk as a collision for entities, and also for players if
the "prevent moving into unloaded chunks" setting is enabled.

If that setting is not enabled, collisions will be ignored for players, since
movement will load only the chunk the player enters anyways and avoids loading
massive amounts of surrounding chunks due to large AABB lookups.

Fixes #3321
2020-05-09 19:19:08 -04:00
Aikar ceb824dbde
Fix ChunkCache .getXIfLoaded to use the local chunks in the cache
It was calling back out to world for it, we already have them.

Also use the nocache method for building the chunk cache too.
2020-05-09 14:58:08 -04:00
Aikar f6f9157bd4
Don't toString block unless actually showing the message
This is causing MASSIVE performance issues with hoppers and block states
in general.
2020-05-09 13:55:41 -04:00
Aikar ec8d7387ad
MC-183249: Don't generate Carving Masks BitSet unless needed
This was using SIGNIFICANT amounts of memory allocating many
long[]'s for BitSets for every ProtoChunk in the cache that had
been unloaded and reloaded.

This will result in a nice memory reduction.
2020-05-09 12:13:29 -04:00
Aikar 2d401d2dfb
Improve BlockPosition hashCode/equals
Actually showed up in profiling as decent time spent here...

Noticed y/z was missing its final that it use to have, when x had it. some how
must of got messed up on some update. though people suggest this shouldn't of
mattered anyways, but lets put it back for safety.

Added cache of hashcode, as well as optimized the hash code using larger primes.
Also stored the long value of the x/y/z so that for equals we can compare a single long,
as well as have that long value cached for .asLong()
2020-05-09 10:59:29 -04:00
Aikar 2572bd017c
Fix world unload toLowercase - Fixes #3326 2020-05-09 10:59:10 -04:00
virustotalop dda9680be5
Optimize brigadier child sorting performance
Use a TreeMap instead of a LinkedHashMap and then manually sorting

This will significantly reduce CPU usage on logging in and changing worlds.
2020-05-08 20:55:44 -04:00
Aikar a71a4ec215
Fix CraftServer.unloadWorld Leak
The dimension manager was still registered which leaked the entire World
2020-05-08 20:40:42 -04:00
Aikar f6fc0d4cd4
Don't create region files for chunk checks - mistake on upstream merge
Accidently handled a conflict wrong in a previous upstream merge and set wrong param.
2020-05-08 18:22:37 -04:00
Aikar cfed00cf54
Fix Light Command
This lets you run /paper fixlight <chunkRadius> (max 5) to automatically
fix all light data in the chunks.

Permission node is same "bukkit.command.paper"
2020-05-07 19:44:33 -04:00
Aikar a6ff84add7
Revert Nibble patch, causing issues still 2020-05-07 05:30:40 -04:00
Aikar f1a8eb7fda
Use a finalizer for light packet instead of onPacketDone
Sadly sharing packets is breaking the ability to do this :(

We can prob still do a little better than this but will save that
for another commit.
2020-05-07 01:58:23 -04:00
Aikar 03c9bb05c1
Optimize NibbleArray to use pooled buffers
Massively reduces memory allocation of 2048 byte buffers by using
an object pool for these.
2020-05-07 01:32:02 -04:00
Aikar d0a528b1cb
Move delayed init down later in tick, improve accuracy of startup time
Now tracks the full startup time for "Done" message at end, as apparently
Vanillas was done in a place that skipped tracking a lot of code too.

This fixes an issue with ViaVersion
2020-05-06 21:24:43 -04:00
Aikar cc477e6abb
Force Plugins that use delayed tasks for init back in their place
Will now run those tasks just before we print "Done" so that startup
time is appropriately accounted for a plugin, as well as will no longer
trip the watchdog on startup.

Any plugin that tries to bypass this is just going to then trip watchdog
on Spigot too, so don't you dare.

Stop trying to cheat the delay your plugin added to startup time.

This isn't a behavior change because the first thing the tick does....
was run these tasks....

So it's just moving it slightly a few lines to be before a watchdog tick and
to account for it in "Done" time.

Fixes #3294
2020-05-06 20:18:31 -04:00
Aikar 597263fd55
Don't skip full player connection tick when dead
Still need to send keep alives and kick for idle

Fixes #3299
2020-05-06 19:30:47 -04:00
Spottedleaf e2c23475b5
Revert loaded entity list (#3304) 2020-05-06 11:31:29 -05:00
Spottedleaf fa87db6b91
Move another NetworkManager util into the inner class (#3303)
Those poor souls running outdated ProtocolLib.
2020-05-06 10:07:51 -05:00
Spottedleaf 841c7d1879
Make loaded entity list logic more consistent (#3301)
When adding/removing to a chunk, we need to also look at
editing the loaded entity list.

Co-authored-by: Spottedleaf <Spottedleaf@users.noreply.github.com>
2020-05-06 09:57:18 -05:00
Aikar 36f34f01c0
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:
da9ef3c5 #496: Add methods to get/set ItemStacks in EquipmentSlots
3abebc9f #492: Let Tameable extend Animals rather than Entity
941111a0 #495: Expose ItemStack and hand used in PlayerShearEntityEvent
4fe19cae #494: InventoryView - Add missing Brewing FUEL_TIME

CraftBukkit Changes:
933e9094 #664: Add methods to get/set ItemStacks in EquipmentSlots
18722312 #662: Expose ItemStack and hand used in PlayerShearEntityEvent
2020-05-06 06:05:22 -04:00
Aikar 5ca5f131bb
Rebuild all patches using the new rebuild pattern 2020-05-06 05:48:49 -04:00
Mariell Hoversholm 1ccff6fabb
Add villager reputation API 2020-05-06 05:48:06 -04:00
Aikar f37381ea8a
Optimize Network Manager to not need synchronization
Removes synchronization from sending packets
Makes normal packet sends no longer need to be wrapped and queued like it use to work.
Adds more packet queue immunities on top of keep alive to let the following scenarios go out
without delay:
  - Keep Alive
  - Chat
  - Kick
  - All of the packets during the Player Joined World event

Hoping that latter one helps join timeout issues more too for slow connections.

Removes processing packet queue off of main thread
  - for the few cases where it is allowed, order is not necessary nor
    should it even be happening concurrently in first place (handshaking/login/status)

Ensures packets sent asynchronously are dispatched on main thread

This helps ensure safety for ProtocolLib as packet listeners
are commonly accessing world state. This will allow you to schedule
a packet to be sent async, but itll be dispatched sync for packet
listeners to process.

This should solve some deadlock risks

This may provide a decent performance improvement because thread synchronization incurs a cache reset
so by avoiding ever entering a synchronized block, we get to avoid that, and packet sending is a really
hot activity.
2020-05-06 05:28:47 -04:00
stonar96 8f9df2ed43
Anti Xray cleanup
Undo the accidental renaming of a method in 0aad8bf
Aikar wanted to rename DataPalette#getDataBits(T object) to getOrCreateIdFor
in 0aad8bf but he also accidentally renamed
ChunkPacketInfo#getDataBitsIndex(int chunkSectionIndex) to
getOrCreateIdForIndex.

Remove chunk-edge-mode and chunk loading entirely from Anti-Xray
The chunk-edge-mode is broken since several versions.
Loading chunk neighbors for chunk edge obfuscation isn't needed anymore.
Unlike in previous versions, these are under normal circumstances already loaded
at the time we need them (plugins for example can bypass this).

Use the modified methods and constructors everywhere
Anti-Xray provides support for the default nms methods and constructors,
which where modified by Anti-Xray to avoid breaking stuff (plugins)
which somehow uses these methods.
However, the modified versions of those methods and constructors should be used
where possible.
2020-05-06 04:35:20 -04:00
Spottedleaf 878c66f116
No-Tick view distance implementation - Closes #3196
Implements world view distance getters/setters

Per-Player is absent due to difficulty of maintaining
the diff required to make it happen.
2020-05-06 03:50:52 -04:00
Spottedleaf b87743c1e0
Stop copy-on-write operations for updating light data
Causes huge memory allocations + gc issues
2020-05-06 03:48:56 -04:00
Spottedleaf 97a9c9724a
Optimize isOutsideRange to use distance maps
Use a distance map to find the players in range quickly
2020-05-06 03:48:18 -04:00
Spottedleaf b4e629a283
Use distance map to optimise entity tracker / Misc Utils
Use the distance map to find candidate players for tracking.

This also ports a few utility changes from Tuinity
2020-05-06 03:47:24 -04:00
Spottedleaf d80d15174b
Optimize Entity Ticking to Loaded Chunks only
We retain a list of loaded entities specifically for this usage
2020-05-06 03:43:11 -04:00
MiniDigger 75e1e3b3e1 Mob Goal API 2020-05-05 18:05:27 +02:00
Aikar c7bc393a87
Revert "Don't flush packet queue off main thread"
This reverts commit 1abd2bd279.

Sadly not gonna work due to server pings
2020-05-04 04:50:08 -04:00
Aikar 1abd2bd279
Don't flush packet queue off main thread
Increases risk of deadlock if a plugin using protocollib sends a packet
async, and then a listener then reads world state, and main thread is then
blocked waiting for the queue to flush.

This will break out of the synchronized block when it jumps to the netty event loop.

See: https://gist.github.com/aikar/e7abb2ba7059149d0a91f7a226e98590
2020-05-04 03:07:04 -04:00
Aikar a4ed58a9ab
Clean up Direct Memory Region Files Fix for different Java versions
Java 9+ doesn't allow using the exposed cleanup method, but added
a new method on Unsafe to do it.

So have to detect java version and use the appropriate strategy.
2020-05-04 02:19:38 -04:00
Aikar 55e3501967
Set cap on JDK per-thread native byte buffer cache
See: https://www.evanjones.ca/java-bytebuffer-leak.html

This is potentially a source of lots of native memory usage.

We are clearly seeing native usage upwards to 1-4GB which doesn't make sense.

Region File usage fixed in previous patch should of tecnically only been somewhat
temporary until GC finally gets it some time later, but between all the various
plugins doing IO on various threads, this hidden detail of the JDK could be
keeping long lived large direct buffers in cache.

Set system properly at server startup if not set already to help protect from this.
2020-05-04 01:14:10 -04:00
Aikar b5101f4f97
Cleanup Region Files Direct Memory on close
Mojang was semi leaking native memory here by relying on finalizers
to clean up the direct memory.

Finalizers have no guarantee on when they will be ran, and since this is
old generation memory, it might be a while before its called.
2020-05-04 01:08:51 -04:00
Aikar 81e655d7fa
Optimize Voxel Shape Merging
This method shows up as super hot in profiler, and also a high "self" time.

Upon analyzing, it appears most usages of this method fall down to the final
else statement of the nasty ternary.

Upon even further analyzation, it appears then the majority of those have a
consistent list 1.... One with Infinity head and Tails.

First optimization is to detect these infinite states and immediately return that
VoxelShapeMergerList so we can avoid testing the rest for most cases.

Break the method into 2 to help the JVM promote inlining of this fast path.

Then it was also noticed that VoxelShapeMergerList constructor is also a hotspot
with a high self time...

Well, knowing that in most cases our list 1 is actualy the same value, it allows
us to know that with an infinite list1, the result on the merger is essentially
list2 as the final values.

This let us analyze the 2 potential states (Infinite with 2 sources or 4 sources)
and compute a deterministic result for the MergerList values.

Additionally, this lets us avoid even allocating new objects for this too, further
reducing memory usage.
2020-05-03 23:02:52 -04:00
Aikar ed9fc11fe3
Sync position on teleportation
We've seen many a cases where the "last good" x/y/z is desynced from
the x/y/z that is checked for moving too fast.

Theory is that when you have multiple movement packets queued up,
and the player is teleported after the first then the 2nd and 3rd come in,
it is triggering a massive movement velocity.

This will ensure that the servers position is synchronized anytime player is te

Fixes #3258
2020-05-03 15:29:53 -04:00
Aikar 9c326fceda
Nanothing to see here 2020-05-03 03:38:19 -04:00
Aikar 3e9fc24b66
Attempt to fix FastLogin maybe 2020-05-03 02:20:56 -04:00
Aikar 932e97f345
Rename to AsyncPlayerSendSuggestionsEvent to be consistent in naming
It was still technically read correctly in what it was doing, but
all our Player events begin with Player.

Nothing uses this event yet so safe to rename.

If you are some rapid adopter of this event, sorry :P
2020-05-02 15:29:03 -04:00
Aikar 0dd1907568
AsyncSendPlayerSuggestionsEvent Brigadier Event
Going to be used for ACF to be able to send Tooltips to client :)

This is after completions are calculated, to control what is sent to the client.
2020-05-02 14:17:17 -04:00
Aikar a9e20e5f62
Fix being kicked in survival for block picking - Fixes #3277 2020-05-02 13:32:03 -04:00
MiniDigger 4d20537e6e
Expose game version (#3274) 2020-05-02 04:56:08 -04:00
Aikar 85fb00152a
Validate PickItem Packet and kick for invalid - Fixes #3256 2020-05-02 03:10:26 -04:00
Aikar 5729bc716e
Special case Keep Alive packets from Anti Xray
If a server enables Anti Xray, packet sending can be delayed until the
chunk has been obfuscated, blocking the entire queue from going out.

On a busy server, considering Anti Xray can only operate on a single
thread, it is quite possible the obfuscation backlog can get quite behind
resulting in a delay of sending packets.

And logging in is a clear area where lots of chunks are going to be queued
for obfuscation....

We should probably special case a few more than this (such as chat),
but this will hopefully help the keep alive issues some people run into.
2020-05-02 01:01:50 -04:00
Spottedleaf a76b774070
Improved oversized chunk data packet handling
Now target all TE data, except for TE's that do not have
update packets.
2020-05-02 00:31:24 -04:00
Aikar a6f78170db
Use Vanilla Bed Search for non players (Villagers)
Should help #2959
2020-05-01 21:56:50 -04:00
Aikar 68fb98b50f
Fix 2 plugin specific issues with loot drop and pathfinders
Based on what that collection does, won't really cause any real issue for UC.
So let it silently be ignored.

Fixes #3269
Fixes #3255
2020-05-01 21:48:43 -04:00
Aikar 6e41f7b79a
Update Activation Range 2.0 with more villager controls
Now has separate configs to control Villager immunities a bit.

whether or not they wake up due to panic situations (raids)
and when should they wake up when work is available after being
inactive for so long, and for how long.

This work config may make the 'wake up inactive' feature for villagers
useless in most scenarios, but if there is a situation where the villager
does go without needing to work for a long period of time, it would kick
in then.

This also removes movement based immunities, so now villagers should only move
if they trigger a work immunity, panic immunity, or inactive wake up immunity.

Fixes #3263
2020-05-01 21:48:33 -04:00
Aikar 57dd397155
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:
b999860d SPIGOT-2304: Add LootGenerateEvent

CraftBukkit Changes:
77fd87e4 SPIGOT-2304: Implement LootGenerateEvent
a1a705ee SPIGOT-5566: Doused campfires & fires should call EntityChangeBlockEvent
41712edd SPIGOT-5707: PersistentDataHolder not Persistent on API dropped Item
2020-05-01 18:03:57 -04:00
MiniDigger 5ab48ad901
Fix commodore (#3264)
fixes #3262
2020-04-30 18:05:20 +01:00
Aikar 87e7ee7e79
Improve Async Login to avoid firing in middle of Entity Ticking
If a sync load was triggered, it would process pending join events,
causing them to be added to the world in the middle of the entity ticking
process.

This caused their add to be queued instead of immediate, causing
"Illegal Tracking" errors.

This schedules it to fire at the players next Connection Tick, which
is exactly where this entire process use to run anyways.

Also added missing tab complete and syntax for syncloadinfo debug command
2020-04-29 05:40:40 -04:00
Aikar 00d760a537
Fix build due to spigot changing the build timestamp process 2020-04-27 04:03:00 -04:00
Aikar 842e040c19
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:
220bc594 #486: Add method to get player's attack cooldown
21853d39 SPIGOT-5681: Increase max plugin channel size
5b972adc Improve build process
b55e58d9 Note which custom generator is missing required method

CraftBukkit Changes:
893ad93b #650: Add method to get player's attack cooldown
ef706b06 #655: Added support for the VM tag jansi.passthrough when processing messages sent to a ColouredConsoleSender.
e0cfb347 SPIGOT-5689: Fireball.setDirection increases velocity too much
94cb030f SPIGOT-5673: swingHand API does not show to self
b331a055 SPIGOT-5680: isChunkGenerated creates empty region files
e1335932 Improve build process
a8ec1d60 Add a couple of method null checks to CraftWorld
ce66f693 Misc checkstyle fixes
8bd0e9ab SPIGOT-5669: Fix Beehive.isSedated

Spigot Changes:
2040c4c4 SPIGOT-5677, MC-114796: Fix portals generating outside world border
ab8f6b5a Rebuild patches
e7dc2f53 Rebuild patches
2020-04-27 03:34:45 -04:00
nick c03260a280
Add getter and setter for villager's numberOfRestocksToday (#3231) 2020-04-27 02:13:41 -04:00
Aikar fe366fbe77
null check tracker for entity metadata update - Fixes #3070 2020-04-27 01:57:42 -04:00
Aikar fdf41b742d
Implement Brigadier Mojang API
This is the start of a new module for Paper to add support for API's
that interface Mojang API's directly.

This allows us to version properly by MC version incase Mojang makes any major breaking changes.

It also lets us separate Mojang API's from Paper-API so our downstream friends at Glowstone
will not have to worry about Mojang code.

Adds AsyncPlayerSendCommandsEvent
  - Allows modifying on a per command basis what command data they see.

Adds CommandRegisteredEvent
  - Allows manipulating the CommandNode to add more children/metadata for the client
2020-04-27 01:42:12 -04:00
Aikar e0ea2e0e14
Entity Activation Range 2.0! Major improvements to restoring behavior
Calling this 2.0 as it's a pretty major improvement with more knobs to twist.

This update fixes many things. The goal here is to restore vanilla behavior to some degree.
Instead of permanent inactive pools of animals, let them show some signs of life some....

Yes this may reduce performance compared to before, but I hope it is minimal. Got to find a balance.
Previous EAR logic really compromised vanilla behavior of mobs. This tries to restore it.

Changes:

1) All monsters are now classed as Monster. Mojang has an interface, we should use it.
   - This now includes Shulker, Slimes, see #2 for Phantom and Ghast
2) Villagers and Flying Monsters now have their own separate activation range configs.
   - Villagers will default to your Animals config
3) Added a bunch of more immunities
   - Brand new entities are immune for a few seconds
   - Entities that recently traveled by portal are immune for few seconds
   - Entities that are leashed to a player are immune
   - Ender Signals are immune
   - Entities that are jumping, climbing, dying (lol) are immune
   - Minecarts are now always immune to the movement restriction
4) Villagers immunity received major overhaul...
   - Now has many immunities for Villager activities to let them
     do their work then go back inactive
   - Such as interacting with doors and workstations should be more normal now
   - Raids will trigger immunities, in that villagers will run and hide when bell rings.
   - Raid should keep the entire village immune during the raid to keep gameplay mechanics
     You can disable raids by game rule if you dont want raids

Then the big one.....

Wake Up Inactive Entities:
One issue plagueing "farms" is that we no longer even let entities move now.
Entities become lifeless.

A new system has been introduced to wake up inactive entities every so often, to let
them stretch their legs, eat some food, play with each other and experience the good entity life.

Animals, Villagers, Monsters (Includes Pillagers), and Flying Monsters will now wake up every
so often after staying inactive for a very long. This grants them a temporary immunity, that
the goal is they will then find "stuff to do" by having a longer activity window.

How many to wake up, how often they wake up, and for how long they wake up are all configurable.

Current EAR Immunities really don't give some entities enough of a window to find work
to then keep them immune for the work to even start. This system should help that.

We will only wake up a few entities per tick on the first wave, restoring 1 per type per world per tick.

So say you have 10 monsters qualify for inactive wake up, all 8 will wake up on the first eligible tick,
and then the 9th will wake up on next tick, 10th on next tick.

If for 5 ticks no more inactive wake up, our buffer will have built back up to 5, and then 5 can go next needed tick.

This basically incrementally wakes them up, preventing too many from waking up in a single tick, to reduce impact to TPS.
2020-04-27 01:22:44 -04:00
Aikar 10396d28e1
Fix Tracking Range mismatch on Vehicle/Passenger checks
This was missing Entity Tracking Range support, creating different
values in this section vs normal section.

Concerned this might of caused some carnage on tracker if this code says
"Yes you should track this player 500 blocks away from you on a horse" and then
the other check uses the normal value.
2020-04-27 00:33:14 -04:00
Aikar 68994c64ec
Add a config to turn off Optimized TickList #3145
Set:

settings:
  - use-optimized-ticklist: false

If you are having issues with block updates and want to see if this fixes it.

Please report confirmations on #3145 ticket
2020-04-26 04:01:03 -04:00
Aikar d847d33684
Improve blocking players from opening inventories while sleeping
This is friendlier to plugins as far as the plugin is concerned,
the inventory did open and immediately closed.

We avoid sending the packet to client so they don't see the window
flash either.

If a plugin wants to avoid wasteful fake opens, they should check
that the player is not sleeping before opening the inventory.
2020-04-26 03:26:21 -04:00
Aikar ac4f6b5022
Clean up Timings and Async Chunk Configs
Renames a bunch of timings to be more appropriate for the new environment.

Many things dealt with sync loads which wasn't correct anymore.
adjusted timings to be a little bit more accurate here.

Also cleaned up old 1.13 async chunks configs so people won't keep
thinking they can change some of those configs when they can't.
2020-04-26 02:19:43 -04:00
Aikar fcf89e852e
Improve mid tick chunk loading, Fix Oversleep, other improvements
Process loads outside of any canSleep check. Original intent was to
only apply those restrictions to generations but realized I had some
checks higher up the call chain.

Reworked the back off strategy to just run every 1 millisecond per world,
and to apply the per tick limit to generations only.

This guarantees that your chunk will load with at most around 1ms delay.

Additionally, fire midTick processing in a few more places, notably the
oversleep section so we can keep processing loads here too which has
a large up to 50ms window...

Speaking of oversleep, we had a bug in our implementation changes for
Timings that caused oversleep to not sleep the correct amount.

Because we now moved it into the NEXT tick instead of THIS tick, the
value of nextTick had already been increased to +50ms, resulting in
the risk of sleeping more than it should, but, more importantly, this
caused every task that was trying to NOT run during oversleep to actually
run during oversleep.

This is now fixed.

Another small tweak is to the /tps command, to no longer show the star when
TPS is right at 20.

Due to ineffeciencies in the sleep precision, TPS is commonly 20.02.
This causes the star to show up almost constantly, so now only show it if
we actually hit a real "catchup".

This commit also improves the changes to the CallbackExecutor, in that
it now is also recursion safe.

It was possible that the executor could run tasks out of desired order
if the executor task scheduled more executor tasks.

We solve this by ensuring new additions do not enter the currently iterated queue.

Each depth level will have its own queue.

Fixes #3220
2020-04-26 01:14:52 -04:00
Spottedleaf ab36835ca0
Improve random ticking behaviour - Fixes #3181 2020-04-25 18:43:13 -04:00
Aikar a6ac47e502
Fix numerous item duplication issues and teleport issues
This notably fixes the newest "Donkey Dupe", but also fixes a lot
of dupe bugs in general around nether portals and entity world transfer

We also fix item duplication generically by anytime we clone an item
to drop it on the ground, destroy the source item.

This avoid an itemstack ever existing twice in the world state pre
clean up stage.

So even if something NEW comes up, it would be impossible to drop the
same item twice because the source was destroyed.

This should make us more forward proof on preventing dupes.

These dupes have been in for years at this point, they aren't new...
Everyone knows about them and are mitigating with plugins atm breaking gameplay.

so better to make it clear its fixed in the messaging.

I am submitting this to Mojang.
2020-04-25 16:38:14 -04:00
BillyGalbreath b7402f11c3
Add phantom creative and insomniac controls (#3222) 2020-04-25 16:33:18 -04:00
Aikar cb15cfa4f8
Improve Async Login so pending connections dont get exposed
We still keep vanilla process of waiting for existing session to be removed before logging in
by storing a separate map of pending.

also fire the callback using executor incase further recursion causes any trouble
2020-04-24 05:48:51 -04:00
Aikar f275e9cb9c
Optimize Hoppers - Major Boost - Got2GoFast!
* Don't check for Entities with Inventories if the block above us is also occluding (not just Inventoried)
* Remove Streams from Item Suck In and restore restore 1.12 AABB checks which is simpler and no voxel allocations (was doing TWO Item Suck ins)
* Restore missing application of previous optimization to getEntities for Inventoried Entities from CullanP
* Use getChunkIfLoadedImmediately for getting loaded entities (faster/simpler, no risk of sync loads)
2020-04-24 03:01:17 -04:00
Aikar 0106485ccb
Improvements to watchdog changes
catch a thread death, fix invalid watchdog timeouts

<= 0 seconds will now change to 5 minutes.
2020-04-24 00:27:50 -04:00
Aikar 65934b1fec
Fix build for last commit. 5am commits are great 2020-04-23 04:53:20 -04:00
Aikar 3f4360296c
Don't process watchdog until server has fully started and ticked.
I think adjusting watchdog settings may of caused instant crashes.

Fixes #3209
2020-04-23 04:49:41 -04:00
Aikar 938bd97255
Don't fire BlockFade on worldgen threads - Fixes #3208
Caused a deadlock
2020-04-23 01:37:30 -04:00
Aikar 509a828e06
Fix loading spawn chunks when async chunks is off
I feel sorry for those who need to do this, and now feel sorry more
since back to slow startups again.

There is keep-spawn-loaded-range in paper.yml to reduce the range to
mitigate this if you must keep async chunks off.
2020-04-22 05:47:35 -04:00
Aikar 8a91bfd240
Improvements to async login
Bump chunk priority to ensure chunks load fast
Handle case where client disconnects before they even fire PlayerJoinEvent
  - no longer call PlayerQuitEvent or print quit message.
  - don't save the player data file if never joined. Nothing has changed.
    CraftBukkit has a bug here that if you do save it, you will lose
    any horse that the player logged off on because the horse hasn't
    been resummoned yet.
2020-04-22 05:40:06 -04:00
Ytnoos bf698865f7
Revert "Re-track players that dismount from other players" 2020-04-22 03:16:31 -04:00
Aikar 82b984184a
Fix some issues with async login as well another source of sync loads 2020-04-22 02:52:17 -04:00
Aikar aa241d2b64
Allow multiple callbacks to schedule for Callback Executor
ChunkMapDistance polls multiple entries for pendingChunkUpdates

Each of these have the potential to move a chunk in and out of
"Loaded" state, which will result in multiple callbacks being
needed within a single tick of ChunkMapDistance

Use an ArrayDeque to store this Queue
2020-04-21 03:55:31 -04:00
nossr50 a2064a4135
Add PlayerAttackEntityCooldownResetEvent
This event is called when processing a player's attack on an entity
right before their attack strength cd is reset, there are no existing
events that fire within this period of time so it was impossible to
capture the players attack strength via API prior to this commit.

The event is cancellable, which will just skip over the normal reset of
attack strength cd
2020-04-21 02:10:43 -04:00
Mariell Hoversholm f48d429968
Allow sleeping players to float
This change lets players who are in their bed have a position which is above
ground for a longer period of time. This is because of the server not setting
their position to the ground/exit location when entering the bed, resulting in
the server believing they're still in the air.
2020-04-20 23:15:55 -04:00
Omer Uddin eeb2f67db6
Fix Bed respawn deviating too far from vanilla (#3195) 2020-04-20 23:14:28 -04:00
2277 68a7b9fec8
Move player to spawn point if spawn in unloaded world
The code following this has better support for null worlds to move
them back to the world spawn.
2020-04-20 23:12:28 -04:00
Spottedleaf f29c7ebd84
Improve async login (#3189)
Add helper functions to ChunkProviderServer to make this easier
for other uses

Co-authored-by: Spottedleaf <Spottedleaf@users.noreply.github.com>
2020-04-19 13:58:02 -04:00
Aikar 9fd36824fc
Fix Citizens Player NPC tracking issue - Fixes #3186 2020-04-19 13:41:16 -04:00
Aikar 0e72de1c18
Fix Player Tracking issue during join process.
Because we moved entity registration to occur before the PlayerJoinEvent occurs,
We started tracking the entity too early before it was registered to the client.

So delay tracking until after list packets have been sent.
2020-04-19 06:46:48 -04:00
Aikar f26362afa4
Load Spawn Chunks Asynchronously and Spiral Out
Ensures absolute center is first in priority
Speeds up server startup
2020-04-19 06:01:07 -04:00
Aikar 54f762e2f7
Load Chunks for Login Asynchronously
No longer will trigger Synchronous Chunk Loads when a player logs
in to the server.

Will delay PlayerJoinEvent until the chunk has been loaded.

Should have massive performance benefits for larger servers with
lots of players logging in and out.
2020-04-19 04:35:01 -04:00
Aikar f2d1b6e549
Clean up duplicate PlayerInitialSpawnEvent
Confused on this one, as commit history says Spigots version is older
than our version, so i'm not sure how we ended up duplicating this when
the 2 events are 100% identical.

Subclass spigots event and rely on the inheritance system, and clean up
the duplicate event fires.

Fix Spigots setPosition to use setPositionRaw to avoid chunk load prematurely.
2020-04-19 04:34:43 -04:00
Aikar c2d022d7e7
Fix Longstanding Broken behavior of PlayerJoinEvent
For years, plugin developers have had to delay many things they do
inside of the PlayerJoinEvent by 1 tick to make it actually work.

This all boiled down to 1 reason why: The event fired before the
player was fully ready and joined to the world!

Additionally, if that player logged out on a vehicle, the event
fired before the vehicle was even loaded, so that plugins had no
access to the vehicle during this event either.

This change finally fixes this issue, fully preparing the player
into the world as a fully ready entity, vehicle included.

There should be no plugins that break because of this change, but might
improve consistency with other plugins instead.

For example, if 2 plugins listens to this event, and the first one
teleported the player in the event, then the 2nd plugin actually
would be getting a valid player!

This was very non deterministic. This change will ensure every plugin
receives a deterministic result, and should no longer require 1 tick
delays anymore.
2020-04-19 00:56:43 -04:00
AvrooVulcan d0a348b95e
Broadcast join messages to console 2020-04-19 00:52:35 -04:00
Aikar 1ef687a4a6
Don't crash if player is attempted to be removed from untracked chunk.
I suspect it deals with teleporting as it uses players current x/y/z

Fixes #2803
2020-04-18 16:03:30 -04:00
Spottedleaf c11668aca1
Make sure the chunk conversion task is executed immediately
Appending to the tail of the chunk tasks leaves a
window for the chunk to be moved to a
non-ticking status.

Additionally, use CB's callback executor so we
can ensure that we are not incorrectly
scheduling.
2020-04-18 13:00:17 -04:00
Aikar 26fb7cc35a
Fix Chunk Post Processing deadlock risk
See: https://gist.github.com/aikar/dd22bbd2a3d78a2fd3d92e95e9f28dc6

as part of post processing a chunk, we can call ChunkConverter.

ChunkConverter then kicks off major physics updates, and when blocks
that have connections across chunk boundries occur, a recursive risk
can occur where A updates a block that triggers a physics request.

That physics request may trigger a chunk request, that then enqueues
a task into the Mailbox ChunkTaskQueueSorter.

If anything requests that same chunk that is in the middle of conversion,
it's mailbox queue is going to be held up, so the subsequent chunk request
will be unable to proceed.

We delay post processing of Chunk.A() 1 "pass" by re stuffing it back into
the executor so that the mailbox ChunkQueue is now considered empty.

This successfully fixed a reoccurring and highly reproduceable crash
for heightmaps.
2020-04-18 04:44:35 -04:00
Shane Freeder ffecc4e264
Revert "Optimize entity list iteration requiring entities be in"
This reverts commit bc48a3172d.
2020-04-17 18:26:57 +01:00
Aikar 0a4286cc42
Prevent Fire from loading chunks
Had my server die from this twice already as it can cause a chain reaction.
2020-04-17 00:29:53 -04:00
MiniDigger 07915ea183
Add Player Client Options API (#2883) 2020-04-17 00:10:38 -04:00
Spottedleaf bc48a3172d
Optimize entity list iteration requiring entities be in
loaded chunks

We retain a list of loaded entities specifically for this usage
2020-04-16 23:59:15 -04:00
Spottedleaf 88092fef13
Optimize ChunkProviderServer's chunk level checking helper methods
These can be hot functions (i.e entity ticking and block ticking),
so inline where possible, and avoid the abstraction of the
Either class.
2020-04-16 23:47:15 -04:00
Aikar 01e8ce8d2d
Forced Watchdog Crash support and Improve Async Shutdown
If the request to shut down the server is received while we are in
a watchdog hang, immediately treat it as a crash and begin the shutdown
process. Shutdown process is now improved to also shutdown cleanly when
not using restart scripts either.

If a server is deadlocked, a server owner can send SIGHUP (or any other signal
the JVM understands to shut down as it currently does) and the watchdog
will no longer need to wait until the full timeout, allowing you to trigger
a close process and try to shut the server down gracefully, saving player and
world data.

Previously there was no way to trigger this outside of waiting for a full watchdog
timeout, which may be set to a really long time...

Additionally, fix everything to do with shutting the server down asynchronously.

Previously, nearly everything about the process was fragile and unsafe. Main might
not have actually been frozen, and might still be manipulating state.

Or, some reuest might ask main to do something in the shutdown but main is dead.

Or worse, other things might start closing down items such as the Console or Thread Pool
before we are fully shutdown.

This change tries to resolve all of these issues by moving everything into the stop
method and guaranteeing only one thread is stopping the server.

We then issue Thread Death to the main thread of another thread initiates the stop process.
We have to ensure Thread Death propagates correctly though to stop main completely.

This is to ensure that if main isn't truely stuck, it's not manipulating state we are trying to save.
2020-04-16 22:40:20 -04:00
Zach Brown fdb8fe7807
Be less strict with vanilla teleport command limits
Just limit to the same valid location check as BaseBlockPosition, no
reason to restrict to the world border.

Ref: GH-3165
2020-04-16 21:19:42 -05:00
Zach Brown 0f06d38062
Restrict vanilla teleport command to within worldborder
Fixes GH-3165
2020-04-16 20:11:44 -05:00
Aikar 24d93aafa2
Fix Optional null issue - Fixes #3155
Also check class loader cache before locking to speed up cached hits to avoid the lock

wasn't gonna make a unique build just for that but can lump it in here.
2020-04-16 03:57:02 -04:00
Spottedleaf eb71c5fa3b
Fix incorect timing of mspt
Move oversleep and all task execution back into the timed area...
2020-04-16 03:47:38 -04:00
Spottedleaf 1ca8043428
Optimise entity hard collision checking
Very few entities actually hard collide, so store them in their own
entity slices and provide a special getEntites type call just for them.
This reduces entity collision checking impact (in my testing) by 25%
for crammed entities (shove 130 cows into an 8x6 area in one chunk).
Less crammed entities are likely to show significantly less benefit.
Effectively, this patch optimises crammed entity situations.
2020-04-16 00:40:47 -04:00
Spottedleaf b67a423768
Don't run entity collision code if not needed
Will not run if max entity craming is disabled and
the max collisions per entity is less than or equal to 0
2020-04-16 00:40:34 -04:00
Spottedleaf bd9aa547d2
Optimise ArraySetSorted#removeIf
Remove iterator allocation and ensure the call is always O(n)
2020-04-16 00:21:32 -04:00
Aikar 81706e6268
Make the shutdown thread try to shutdown on main 2020-04-13 03:30:12 -04:00
Shane Freeder 8918245090
Prevent opening inventories when frozen 2020-04-13 07:33:46 +01:00
Spottedleaf e6d395cc83
Port 04-Util.patch from Tuinity (#3136) 2020-04-13 01:34:18 -04:00
Aikar 59453f6675
Fix incorrectly loading chunks on a cancelled interact event
A players previous block break location is held onto permanently, and if
an interact event is cancelled, the client sends a stop breaking block packet
This then tries to update client about that old location.

This old location might then be in a now unloaded chunk, and it caused it to load.

We now also clear reference to it once abort destroy block is ran to stop trying
to send updates about the old block anyways.
2020-04-12 23:56:29 -04:00
Aikar bdcc31caad
Let invalid positioned entities clean up previous chunk by the chunkCheck
I had did a few of the operations myself, which would have broken chunkCheck
from doing it itself, which would leave some state left in the original chunk
and thats not good....
2020-04-12 22:55:43 -04:00
Spottedleaf 92d2907d14
Multiple memory and performance optimizations (removing streams) 2020-04-12 19:34:56 -04:00
Aikar 748e6447e3
Improve the don't save entities patch per leafs feedback 2020-04-12 18:29:52 -04:00
Callahan c096fe19fa
Port 20w15a Villager AI optimizations 2020-04-12 16:56:59 -04:00
Aikar 832687de70
Restore preventing saving bad entities patch to full effect 2020-04-12 16:50:50 -04:00
Aikar df8eedeed0
Restore Optimize Pathfinding patch 2020-04-12 16:50:34 -04:00
Aikar 97b1cc361b
Allow shutting down server during a watchdog hang gracefully
If the request to shut down the server is received while we are in
a watchdog hang, immediately treat it as a crash and begin the shutdown
process. Shutdown process is now improved to also shutdown cleanly when
not using restart scripts either.

If a server is deadlocked, a server owner can send SIGUP (or any other signal
the JVM understands to shut down as it currently does) and the watchdog
will no longer need to wait until the full timeout, allowing you to trigger
a close process and try to shut the server down gracefully, saving player and
world data.

Previously there was no way to trigger this outside of waiting for a full watchdog
timeout, which may be set to a really long time...
2020-04-12 15:56:03 -04:00
Callahan 06044e2458
Async command map building
Reduces lag created on login and world change for sending the command map to client
2020-04-12 15:43:07 -04:00
DrHenchman a4f066ccea
Fix method profiler inbalance introduced in a2a9ffe (#3132)
Fixes #3131
2020-04-12 02:41:57 -04:00
Aikar c65dcad3eb
Don't delay chunk unloads during entity ticking
Leaf informed me this could cause ordering issues.

So, the risk if this occurring is lowered now anyways, but if an
entity causes a sync chunk load, it could process an unload...

We will tackle the problem better in a future commit

Also fixed another async-chunks=false issue
2020-04-12 00:42:28 -04:00
Aikar bc17ce69d4
Delay unsafe actions until after entity ticking is done - Fixes #3114
This will help prevent many cases of unregistering entities during entity ticking

Currently delays Chunk Unloads and Async Chunk load callbacks

Also dropped mid ticking chunk tasks during entity ticking to reduce this risk
2020-04-11 23:22:40 -04:00
Aikar e12c51d9bc
Use better variable for isStopping() API
Previous method only worked for a normal shutdown, and didn't include
when the server enters a closing state due to watchdog crashes

This is the correct variable to detect the server is in the middle of shutdown process
2020-04-11 23:21:33 -04:00
Aikar 586ee2bb11
Remove patch for MC-111480, fixed in 1.14
We were now starting entities at ID 2
2020-04-11 20:39:21 -04:00
Spottedleaf 09a942155f
Remove streams from Mob AI System
The streams hurt performance and allocate tons of garbage, so
replace them with the standard iterator.

Also optimise the stream.anyMatch statement to move to a bitset
where we can replace the call with a single bitwise operation.
2020-04-11 20:15:22 -04:00
Aikar bb5c294ecf
Fix Disabling Asynchronous Chunks
This fix is for the few people who are using such low end systems that
asynchronous chunk loading hurts them rather than helping.

The previous build made paper crash if you turned off async chunks, and
this fixes that issue.
2020-04-11 17:15:41 -04:00
Aikar 089d83568b
Implement Chunk Priority / Urgency System for World Gen
Mark chunks that are blocking main thread for world generation as urgent

Implements a general priority system so that chunks that are sorted in
the generator queues can prioritize certain chunks over another.

Urgent chunks will jump to the front of the line, ensuring that a
sync chunk load on an ungenerated chunk does not lag the server for
a long period of time if the servers generator queues are filled with
lots of chunks already.

This massively reduces the lag spikes from sync chunk gens.

This is also a precursor to my next improvement to prioritize chunks
in front of the player (Frustum Priorization)
2020-04-11 04:46:21 -04:00
Aikar fce69af70c
Use dedicated thread for main thread blocking chunk loads
In most cases, this change won't benefit much. However, there
exists the possibility that your Chunk Task threads are all busy
doing super slow work such as converting chunks.

If this occurs, the main thread blocking tasks, even at highest priority,
has to wait for some thread to become available.

This change gives us a waiting thread used only for main thread blocking
tasks, as well as an increased thread priority level, so that the OS
will give priority to this thread over the other threads.

This is more about guarantees, and won't be any real performanc boost
to anyone who has low or fast activity on their chunk tasks anyways.

But not all of us force upgrade our worlds, and this can be a life saver.

also reordered some patches because multiple PR's were merged.
2020-04-11 04:46:13 -04:00
BillyGalbreath 588b62e47b
Add tick times API and /mspt command (#3102) 2020-04-11 01:52:17 -04:00
Josh Roy 11de41c777
Add API MinecraftServer#isStopping (#3129) 2020-04-11 01:51:35 -04:00
Aikar 0ed6da7ab2
Fix issues with 167 causing crashes due to missing chunks - Fixes #3122
Forgot to flip the pending boolean back to false, causing it to copy
empty data on the next tick if nothing else triggered a load.

haven't managed to actually reproduce the crash others got, but did
verify that the bad copy was occurring erasing the data.

also fixed a bug with chunk load callback not executing before
another one was scheduled.
2020-04-10 14:11:46 -04:00
Aikar 23ee0a8a88
Fix issue with 0,0 chunks causing crash 2020-04-09 23:02:17 -04:00
Aikar bc8fafb206
Updated Upstream (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

CraftBukkit Changes:
183139d4 SPIGOT-5665: Improve loading spawn egg NBT
dec5df26 SPIGOT-5667: Can't add recipe without (vanilla) datapack

Spigot Changes:
ae72bf43 SPIGOT-5666: Customizable End City Seed
2020-04-09 21:33:10 -04:00
Aikar ebbca5cedb
Drowned is a RangedEntity (fixes API for Drowned to support Ranged) 2020-04-09 21:33:03 -04:00
Aikar 83b03eee04
Don't move existing players to world spawn
This can cause a nasty server lag the spawn chunks are not kept loaded
or they aren't finished loading yet, or if the world spawn radius is
larger than the keep loaded range.

By skipping this, we avoid potential for a large spike on server start.
2020-04-09 21:22:21 -04:00
Aikar 3b3e38fd01
Fix issue with loading chunk during ticking chunks issue
Also speed up performance of copying pending/updating to visible by
directly copying the internal array data instead of putAll
2020-04-09 20:45:46 -04:00
Aikar ab74bb4514
Speed up processing of chunk loads and generation
Credit to Spotted for the idea

A lot of the new chunk system requires constant back and forth the main thread
to handle priority scheduling and ensuring conflicting tasks do not run at the
same time.

The issue is, these queues are only checked at either:

A) Sync Chunk Loads
B) End of Tick while sleeping

This results in generating chunks sitting waiting for a full tick to
complete before it will even start the next unit of work to do.

Additionally, this also delays loading of chunks until this same timing.

We will now periodically poll the chunk task queues throughout the tick,
looking for work to do.
We do this in a fair method that considers all worlds, not just the one being
ticked, so that each world can get 1 task procesed each before the next pass.

We also cap the throughput of these task processes to 1 per world per 0.1ms or
200 max per tick, to ensure that high volume of tasks do not overload the current
tick time.

In a view distance of 15, chunk loading performance was visually faster on the client.

Flying at high speed in spectator mode was able to keep up with chunk loading (as long as they are already generated)
2020-04-09 02:25:18 -04:00
Aikar f5dd491fce
Increase Light Queue Size
Wiz mentioned that large WorldEdit operations cause light to run on
main thread. The queue was small, set to 5.. this bumps it to 20
but makes it configurable per-world.

The main risk of increasing this higher is during shutdown, some
queued light updates may be lost because mojang did not flush the
light engine on shutdown...

The queue size only puts a cap on max loss, doesn't solve that problem.

Don't touch this unless you know you have a problem and ok with the risk.
2020-04-09 02:25:09 -04:00
Aikar 9ab693487f
Don't load chunks when attempting to unload a chunk
Big Brain Logic
2020-04-08 21:13:48 -04:00
Aikar 38c626229d
Improve Optimize Memory use logic to make iterator safer and fix bad plugins like P2
Accessing world state async is bad mkay. But we know you didn't do it city <3
2020-04-08 21:07:59 -04:00
Aikar d33ba160a4
Fix incorrect keyword use on visibleChunksClone 2020-04-08 04:12:48 -04:00
Aikar 2f34301581
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:
7361a62e SPIGOT-5641: Add Block.getDrops(ItemStack, Entity)
1dc91b15 Add specific notes about what is not API
2b05ef88 #484: Allow statistics to be accessed for offline players

CraftBukkit Changes:
f7d6ad53 SPIGOT-5603: Use LootContext#lootingModifier in CraftLootTable
5838285d SPIGOT-5657: BlockPlaceEvent not cancelling for tripwire hooks
f325b9be SPIGOT-5641: Add Block.getDrops(ItemStack, Entity)
e25a2272 Fix some formatting in CraftHumanEntity
498540e0 Add Merchant slot delegate
b2de47d5 SPIGOT-5621: Add missing container types for opening InventoryView
aa3a2f27 #645: Allow statistics to be accessed for offline players
2122c0b1 #649: CraftBell should implement Bell
2020-04-08 03:49:15 -04:00
Aikar a65831bd69
Optimize PlayerChunkMap memory use for visibleChunks
No longer clones visible chunks which is causing massive memory
allocation issues, likely the source of Humongous Objects on large servers.

Instead we just synchronize, clear and rebuild, reusing the same object buffers
as before with only 2 small objects created (FastIterator/MapEntry)

This should result in siginificant memory use reduction and improved GC behavior.
2020-04-08 03:09:05 -04:00
Aikar 6c39a59ae7
Use entity.dead instead of entity.die()
Fixes #3096
2020-04-04 21:09:27 -04:00
Aikar 2c37d2ebee
Restore accidently reverted item in water fix 2020-04-02 23:12:21 -04:00
Aikar cfaf32cf66
Dead Player's shouldn't be able to move
This fixes a lot of game state issues where packets were delayed for processing
due to 1.15's new queue but processed while dead.
2020-04-02 19:42:20 -04:00
Aikar 16287d01e2
Don't tick dead players
Causes sync chunk loads and who knows what all else.
This is safe because Spectators are skipped in unloaded chunks too in vanilla.
2020-04-02 17:19:44 -04:00
Aikar e4d10a6d67
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:
122289ff Add FaceAttachable interface to handle Grindstone facing in common with Switches
a6db750e SPIGOT-5647: ZombieVillager entity should have getVillagerType()

CraftBukkit Changes:
bbe3d58e SPIGOT-5650: Lectern.setPage(int) causes a NullPointerException
3075579f Add FaceAttachable interface to handle Grindstone facing in common with Switches
95bd4238 SPIGOT-5647: ZombieVillager entity should have getVillagerType()
4d975ac3 SPIGOT-5617: setBlockData does not work when NotPlayEvent is called by redstone current
2020-04-02 17:09:17 -04:00
Aikar c867045d3c
And that's why hand editing patch files in nano is risky.... make it compile 2020-04-02 03:58:46 -04:00
Aikar c2d7876a54
Improve Entities in water activation immunity and let items always move 2020-04-02 03:56:05 -04:00
Aikar 1dc7c308aa
Optimize Collision Chunk lookup and avoid loading far chunks
Try to use a faster chunk lookup for collision detection, and only
fall back to the original for nearby chunks.

The collision code takes an AABB and generates a cuboid of checks rather
than a cylinder, so at high velocity this can generate a lot of chunk checks.
2020-04-02 02:43:07 -04:00
Aikar d5c6dbee56
Prevent Double PlayerChunkMap adds crashing server
Suspected case would be around the technique used in .stopRiding
Stack will identify any causer of this and warn instead of crashing.
2020-04-02 01:45:33 -04:00
Aikar a2a9ffe3b9
Fix issues with Activation Range causing large chunk lookups.
Where I blocked movement did not consider velocity buildup, which I assume
then "unleashes" if something was really trying to push that entity, and moves
it a very large distance.

Additionally, this method was completely misnamed, as movementTick
is more "doLotsOfTickThings", and ended up breaking AI too, which the whole
point of temporary wake ups was to let AI run to trigger new immunity.

Also fixed numerous behavioral rules for Immunity to improve vanilla gameplay,
suchas bees that are angry or moving towards a flower or hive, any insentient
that is targetting any enemy (Accidently made it any player), and included flying
mobs such as phantoms by reducing the type check to insentient instead of Creature.

Also improved inWater immunity to consider if the mob is movable by water or not.
2020-04-02 01:25:36 -04:00
Aikar 017297cdba
Improve entity.getCurrentChunk() and use it for entity.isChunkLoaded() 2020-04-02 00:43:11 -04:00
chickeneer 979b53a7f1
Do not allow bee's to load chunks for beehives 2020-03-31 03:54:42 -04:00
Aikar 13cb837394
Remote Connections shouldn't hold up shutdown
Bugs in the connection logic appears to leave stale connections even, preventing shutdown
2020-03-31 03:52:57 -04:00
Aikar 7dac546709
Fix bug in double register fix
could accidently delay entity reg by a tick if the bug this was fixing was encountered
2020-03-31 03:52:30 -04:00
Aikar 87829d8333
Remove incorrect IO flush for save-all that doesn't have flush parameter
The entire reason the if statement exists is to only flush and print when done if flag is true

This avoids /save-all from hurting as much as it was before, such as from backup plugins.
2020-03-31 03:15:34 -04:00
Aikar 31e751cb40
Fix unregistering entities from unloading chunks
CraftBukkit caused a regression here by making unloading chunks not
have a ticket added and returning unloaded future.

This caused entities who were killed in same tick their chunk is unloading
to not be able to be removed from the chunk.

This then results in dead entities lingering in the Chunk.

Combine that with a buggy detail of the previous implementation of
the Dupe UUID patch, then this was the likely source of the "Ghost entities"
2020-03-31 03:05:04 -04:00
Aikar bc351f6eff
Ensure Entity is never double registered
If something calls register twice, and the world is ticking, it could be
enqueued to add twice.

Vs behavior of non ticking of just overwriting state.

We will now simply log a warning when this happens instead of crashing the server.
2020-03-31 03:04:47 -04:00
Aikar 2ec0274b88
Fix many issues with dupe uuid resolve patch
This was not applied correctly, and would completely blow up chunk entity
registration if this feature was turned off....

Additionally, change how the entities are removed to be more consistent with other code.

Surface some of the logs indicating there is a problem as we are having so many issues with
entities that we don't need to be surpressing logs like that.
2020-03-31 02:52:12 -04:00
Shane Freeder 756da10d46
(Actually) Don't duplicate velocity entry into hidden-configs 2020-03-31 05:37:39 +01:00
Shane Freeder 9b3679fbd3
Don't duplicate velocity entry into hidden-configs
also, rebuild patches
2020-03-31 05:30:04 +01:00
Max Lee 28cf6540c6
Pillager patrol spawn settings and per player options (#2924) 2020-03-31 04:27:58 +01:00
froobynooby 6bf04cd5ed
Reduce entity tracker updates on move 2020-03-31 03:58:13 +01:00
Spottedleaf de5b093c05
Handle chunk unloading during block tick 2020-03-30 05:07:04 +01:00
Spottedleaf be7b40634d
performance: Improve Activation Range entity iteration
Faster Entity iteration using the chunks full entity list and array access.

Faster chunk lookups skipping the cache, as the pattern of access was not suitable
for cache usage (each request will likely blow cache)

This reduces the cost of Entity Activation Range's initial marking.
2020-03-29 23:35:04 -04:00
Aikar bacbd8805f
performance: Many Entity Activation Range Improvements
1) Immunity no longer gives 20 tick immunity, each immunity check can
give its own tick value on how long it lasts, drastically cutting down on most to 0-1 ticks.

2) Fixed Villager Immunity to use proper 1.15 check for Breeding.

3) Fixed Water Mobs being 100% immune due to the inWater check...

4) Fixed flying mobs being 100% immune due to the !onGround check...

5) Made Insentient mobs only check for the hasTasks during immunity check window, not every single tick. this made them way more active than desired
  - this puts behavior closer to inline with my original behavior in Spigot, but still does some checks to allow them temporary immunity, just not as much as before.

6) Inactive Entities would "inch" while trying to move, effectively getting nowhere. Now while an entity is inactive, it just won't even try to move.
  - this saves us from the expensiveness of Entity movement 1 out of 20 ticks. Now they will only move while either active or triggered a true immunity.
2020-03-29 23:33:39 -04:00
Shane Freeder 269394fe15
Update hidden-configs 2020-03-30 03:52:56 +01:00
Shane Freeder 9a7ca3dbc5
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:
564ed152 #482: Add a DragonBattle API to manipulate respawn phases etc
9f2fd967 #474: Add ability to set other plugin names as provided API so others can still depend on it

CraftBukkit Changes:
fc318cc1 #642: Add a DragonBattle API to manipulate respawn phases etc
796eb15a #644: Fix ChunkMapDistance#removeAllTicketsFor not propagating ticket level updates
a6f80937 SPIGOT-5606: call BlockRedstoneEvent for fence gates

Spigot Changes:
a03b1fdb Rebuild patches
2020-03-26 02:44:23 +00:00
Spottedleaf 68ec946c7a
Fix memory leak in TickListServer (#3068)
Only occurred when entries were scheduled with huge tick delays

Add two flags to debug excessive tick delays:
-Dpaper.ticklist-warn-on-excessive-delay=true (false by default)
and -Dpaper.ticklist-excessive-delay-threshold=ticks which
sets the excessive tick delay to the specified ticks (defaults to
60 * 20 ticks, aka 60 seconds)
2020-03-25 14:56:18 -05:00
Spottedleaf 49fdb18206
Timings changes (#3044)
* Timings changes

- Increment entity tick count only when an entity ticks
- Remove chunk inhabited timer
- Try finally entity timings

* Add activated entity ticks

Co-authored-by: Spottedleaf <Spottedleaf@users.noreply.github.com>
2020-03-19 02:03:32 -04:00
Nassim d63075dff8
Pass fireworks through vanished players (#3021) 2020-03-18 13:58:50 +00:00
Shane Freeder 4d991f1946
[CI-SKIP] Rebuild patches 2020-03-18 12:42:18 +00:00
Spottedleaf 26070a0e5c
Indicate ticking status in entity list command (#2856) 2020-03-18 12:38:24 +00:00
Spottedleaf 2ff7b4800b
Optimise Chunk#getFluid (#2860)
Removing the try catch and generally reducing ops should make it
faster on its own, however removing the try catch makes it
easier to inline due to code size
2020-03-18 12:21:35 +00:00
Spottedleaf c23ebb780d
Optimise ticklistserver (#2957) 2020-03-18 12:17:28 +00:00
Shane Freeder e4602b6d48
Drop Ignore-Missing-Recipes-in-RecipeBook-to-avoid-data-e.patch
This patch appears to be no longer relevant, and is seemingly a leading
cause of datapack performance being horrific
2020-03-15 20:03:36 +00:00
Jan 0ad8cf73ff
Call BlockRedstoneEvent for fence gates (#3026)
Co-authored-by: Jan Boerman <Janboerman95@gmail.com>
2020-03-14 13:39:54 +00:00
Shevchik c8dea96ee1
Prevent blocking on adding a new network manager (#3027)
Previous solution could still block network thread (while addPending is executing). This window is small, but removing it completely is better. This should probably also speed up concurrent adds, because no locking will be performed anymore.
The only possible downside is that adding elements one by one to synchronized list might be slower (But it's done while already locked, so maybe jvm will avoid additional locking?),
2020-03-14 11:20:50 +00:00
BillyGalbreath ac2bbf62c8
Fix NPE on GUI during Windows Lock Screen (#3023) 2020-03-13 07:02:30 +00:00
Zero e1281a1414
Configurable chance of villager zombie infection (Closes #2501)
This allows you to solve an issue in vanilla behavior where:
* On easy difficulty your villagers will NEVER get infected, meaning they will always die.
* On normal difficulty they will have a 50% of getting infected or dying.
2020-03-10 16:13:58 +00:00
William Blake Galbreath ad708dd3f3
Add option to allow iron golems to spawn in air (Closes #1965, Closes #1851) 2020-03-10 15:35:54 +00:00
Shane Freeder b16fd5c3a3
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:
6148fca7 SPIGOT-5484: Add more spawn tick settings

CraftBukkit Changes:
fc249340 SPIGOT-5484: Add more spawn tick settings

Spigot Changes:
6de3d4be Rebuild patches
2020-03-10 11:01:21 +00:00
Shane Freeder 2e44dc1ae3
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:
7f61a252 #640: Fix chunk load/unload callbacks for chunk load cancellations
2020-03-07 08:47:53 +00:00
Shane Freeder 2c07231eeb
Validate tripwire hook placement before update 2020-03-07 00:08:51 +00:00
Shane Freeder 31872198b4
Fix dead telepotation logger format 2020-03-06 23:29:13 +00:00
Shane Freeder ccf1d5908f
Prevent teleporting dead entities (#2803) 2020-03-03 05:34:30 +00:00
Gergely Sarkozi 5ce1dd48e1
Add hand to BlockMultiPlaceEvent (fixes #2997) (#2998) 2020-03-02 20:55:31 +00:00
Shane Freeder 3ad47bcf8e
Reduce chunk range timers 2020-03-02 19:56:04 +00:00
Shane Freeder 793bae0d45
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:
13ed05de Prepare for Java 14
6b00b145 #639: Deep clone itemmetas persistent container on clone
2020-03-02 19:17:49 +00:00
Shane Freeder 4df3dad85d
Reduce PlayerNaturallySpawnCreaturesEvent calls 2020-02-29 23:49:45 +00:00
Andrew Mollenkamp c0f4b24e3a
Fix random ticks (Fixes #2990) (#2992) 2020-02-27 08:42:47 +00:00
Shane Freeder b077005910
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:
fd28180e #479: Add LivingEntity#attack, LivingEntity#swingMainHand, LivingEntity#swingOffHand
ae72ba3a SPIGOT-5591: Allow concurrent potion effects

CraftBukkit Changes:
3d61a853 Fix formatting in CraftLivingEntity
f7ab3055 #633: Add LivingEntity#attack, LivingEntity#swingMainHand, LivingEntity#swingOffHand
d5ef2eab SPIGOT-5591: Allow concurrent potion effects
25a9a9ff SPIGOT-5592: Custom ChunkGenerator can cause bugged dirt
3f6d0de9 Make it clear in error messages that api-version above 1.13 is also supported
2020-02-25 18:57:15 +00:00
Cat73 0809d6be3e
[CI-SKIP] fix avoid-hopper-search obfhelper hint type (#2989) 2020-02-25 18:42:52 +00:00
Shane Freeder 7434b6d710
Fix ProjectilCollideEvent cancellation (Fixes #2953) 2020-02-22 15:00:41 +00:00
Shane Freeder e5e4e9f717
Do not send PlayerProfile info before initial server send 2020-02-22 14:13:29 +00:00
Shane Freeder 4e0ed1f812
Backport fix for MC-167561 (Fixes #2886, closes#2960) 2020-02-21 18:46:00 +00:00
Shane Freeder 9946cef8c5
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:
f52c70ab Fix incorrect nullability in MultipleFacing
6af4c0b2 SPIGOT-5311: Add API to get/set item associated with throwable projectiles
97aeae56 Add set/isAware to disable Vanilla AI components of a Mob

CraftBukkit Changes:
fba9f487 Improve legacy conversion of some materials that changed post flattening
b1ba8749 Move Bukkit.Aware loading/saving to correct location
f7cdb53c SPIGOT-5311: Add API to get/set item associated with throwable projectiles
689f429c #634: Cross platform patch scripts
ab85433d Add set/isAware to disable Vanilla AI components of a Mob

Spigot Changes:
8faa8b45 Rebuild patches
2020-02-21 17:52:20 +00:00
Zach Brown 9f5fadcc7c
Remove extraneous space from host info log message
This has been bothering me for a long time now.
2020-02-18 22:57:49 -06:00
BillyGalbreath d60a10c9ff
Make the GUI graph fancier (#2928) 2020-02-18 22:52:18 -06:00
Zach Brown ecfaff5283
Revert "Add root/admin user detection (#2432)"
This reverts commit 555ca59af7.

Unknown issue on CentOS/RHEL(?) requires further examination.
2020-02-18 22:32:13 -06:00
egg82 555ca59af7
Add root/admin user detection (#2432)
This patch detects whether or not the server is currently executing as a privileged user and spits out a warning. The warning serves as a sort-of PSA for newer server admins who don't understand the risks of running as root.

We've seen plenty of bad/malicious plugins hit markets, and there's been a few close-calls with exploits in the past. Hopefully this helps mitigate some potential damage to servers, even if it is just a warning.
2020-02-18 22:10:41 -06:00
Gergely Sarkozi e1f3b6d033
fix tripwire hook BlockPlaceEvent (fixes #2969) (#2971) 2020-02-18 21:51:51 -06:00
BillyGalbreath 33a615de43
Add option to nerf pigmen from nether portals (#2937)
* Add option to nerf pigmen from nether portals
2020-02-18 19:42:05 -06:00
Shane Freeder 6ea3c2cf3b
[CI-SKIP] Rebuild patches 2020-02-12 14:03:09 +00:00
Spottedleaf d7bed4cb07
Heavily optimise random block ticking (#2914)
* Optimise random block ticking

Massive performance improvement for random block ticking.
The performance increase comes from the fact that the vast
majority of attempted block ticks (~95% in my testing) fail
because the randomly selected block is not tickable.

Now only tickable blocks are targeted, however this means that
the maximum number of block ticks occurs per chunk. However,
not all chunks are going to be targeted. The percent chance
of a chunk being targeted is based on how many tickable blocks
are in the chunk.
This means that while block ticks are spread out less, the
total number of blocks ticked per world tick remains the same.
Therefore, the chance of a random tickable block being ticked
remains the same.
2020-02-12 13:49:52 +00:00
Zach Brown ba71c5d6e7
Stop stripping private use block Unicode from signs
Fixes GH-2943
2020-02-10 22:35:46 -06:00
BillyGalbreath 28d9dcfcf4
Entity Jump API (#1587) 2020-02-10 22:28:39 -06:00
Shane Freeder 9976a76809
Fix PlayerNaturallySpawnCreaturesEvent boolean inversion 2020-02-09 19:32:40 +00:00
BillyGalbreath a8984ccb9f
Add ThrownEggHatchEvent (#1982)
Add a new event similar to PlayerEggThrowEvent but without the Player
requirement (dispensers can throw eggs to hatch as well).
2020-02-09 00:32:29 -06:00
Gergely Sarkozi 9f24d4952b
Allow nerfed blazes, endermen to take water damage (#2847)
Fixes GH-2841
2020-02-08 22:19:54 -06:00
Zach Brown f09fed894f
Update upstream B/CB
--- work/Bukkit
Submodule work/Bukkit 6a4242cb..337955e3:
  > SPIGOT-5468: Improve Beehive TileEntity API
  > #473: Add an API for passing the heightmap to getHighestBlockAt* method

--- work/CraftBukkit
Submodule work/CraftBukkit 807a677e..708be695:
  > SPIGOT-5468: Improve Beehive TileEntity API
  > #624: Add an API for passing the heightmap to getHighestBlockAt* method
  > MC-135989, SPIGOT-5564: Don't kick players for flight while riptiding

This deprecates the Paper getHighestBlockAt HeightMap APIs now that
Bukkit has added their own. These methods will stick around long enough
for people to migrate. Their API is pretty much the same as ours,
migration should be quick and easy.
2020-02-08 18:32:48 -06:00
Zach Brown 7c1ef0b701
Add option to ignore the java version check in CB
Fixes GH-2935
2020-02-08 18:08:56 -06:00
Zach Brown 6aa27ec378
Rebuild patches 2020-02-06 21:07:34 -06:00
Spottedleaf 4712863375
Lag compensate eating (#2861)
When the server is lagging, players will wait longer when eating.
Change to also use a time check instead if it passes.
2020-02-06 21:06:52 -06:00
Zach Brown fa7400e567
Be more tolerant of invalid attributes 2020-02-06 19:32:49 -06:00
Shane Freeder 3dafa6a08a
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:
807a677e SPIGOT-5558: Fix World#getHighestBlockAt, previously off by +1
2020-02-03 01:54:02 +00:00
Shane Freeder 77b05b9c8e
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:
6a4242cb #468: Allow delegation of certain elements to Vanilla when using a custom ChunkGenerator
c6697f90 SPIGOT-5559: Add EntityPotionEffectEvent causes for PATROL_CAPTAIN and WITHER_ROSE
9c1fa040 #467: Add method to remove a recipe by its key
3961d1aa Add nb-configuration.xml to .gitignore

CraftBukkit Changes:
d70084e5 Remove unused seed in CustomChunkGenerator
8a66d4c7 #619: Allow delegation of certain elements to Vanilla when using a custom ChunkGenerator
c2dc19d3 Craftbukkit -> CraftBukkit
ae45e092 SPIGOT-5559: Add EntityPotionEffectEvent causes for bee, raiders and wither rose
00980376 #618: Add method to remove a recipe by its key

Spigot Changes:
c574e08b Rebuild patches
13c24cc4 Rebuild patches
2020-02-02 11:53:48 +00:00
Shane Freeder 55b3a09dde
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:
d0800d0c Update checkstyle
e4e4bf70 Remove package-info from tests, breaks some IDEs
d6651bb0 No longer necessary to synchronize sync events

CraftBukkit Changes:
e82b5477 SPIGOT-5556: Some biome methods use incorrect positions
544ccdc5 Update checkstyle
512ff7a5 Print legacy load reason in debug mode
df371c1b SPIGOT-5554: Clear error message when BossBar is used for not fully joined players
18168500 Update scriptus
6bbb4e73 Clean up CraftBlockData.toString
b1e96bd5 SPIGOT-5551: BlockState.setData fails when used by legacy plugin

Spigot Changes:
b9baf717 Add space before ocean seed output
13394884 Rebuild patches
2020-02-01 15:20:54 +00:00
Shane Freeder 859f1296fe
Remove entities from per-chunk list (Fixes #2918) 2020-01-31 16:09:56 +00:00
Shane Freeder b21010e7e3
Remove chunks after calling ChunkUnloadEvent (Fixes #2919) 2020-01-30 16:57:46 +00:00
Shane Freeder 4e48785d91
Drop 0394-Fixed-MC-156852.patch (Fixes #2913) 2020-01-30 09:36:03 +00:00
Spottedleaf 01b965e0fd
Fix getChunkAtIfCachedImmediately (#2915) 2020-01-29 01:26:07 +00:00
Shane Freeder 0a897d6e6a
Rebuild patches
Because you know... That's how you commit them...
2020-01-28 19:48:56 +00:00
Shane Freeder 5792c8626a
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:
93e39ce1 Clarify documentation regarding getMaterial with legacyName = true
c3aeaea0 Improve dependency tracker
14c9d275 Add support for transitive depends in load access warning
c8afe560 SPIGOT-5526: Add EntityEnterBlockEvent
6bb6f07d SPIGOT-5548: Show error that hints towards plugins misusing reflection
ed75537d SPIGOT-5546: Fix bad depend access using wrong provider in message
4e4c0ee9 Fix buggy classloader warning triggering for all classes
89586a4c Print warning when loading classes from depends that have not been specified
d4fe9680 Fix bug where disablePlugin could remove ConfigurationSerializable classes from other plugins
85e683b7 Add additional checkstyle checks
612fd8e1 Correct max page count in BookMeta docs
fa8a9781 Correct max title length in BookMeta docs

CraftBukkit Changes:
ab13a117 SPIGOT-5550: Cancelled ProjectileLaunchEvent still plays sound for eggs
44016b1d SPIGOT-5538: Using javaw to run GUI prints input error
e653ae76 SPIGOT-5526: Call EntityEnterBlockEvent for bees trying to enter hives
6515ea49 SPIGOT-5537: Bee nests generated by growing trees near flower have no bees
d82b3149 Remove unused CraftWorld.getId method
10763a88 Change some block == AIR checks to isAir to catch CAVE_AIR

Spigot Changes:
f2c1cd15 Rebuild patches
bcd458ad Reformat patches
2020-01-28 19:43:57 +00:00
Gergely Sarkozi c9eebbb802 Fix Player#applyMending NPE (#2917) 2020-01-28 18:20:53 +00:00
Spottedleaf d16a5d8813 Performance patches prerequisite (#2802)
Prereq changes for the coming storm of performance patches.
Includes optimising incremental saving
2020-01-27 18:16:53 -06:00
BillyGalbreath 5fdafcd7a9 Fix #2906 - Bees get gravity in void - Fixes MC-167279 (#2912) 2020-01-26 23:59:43 +00:00
Shane Freeder 60d4c80854
Properly check for running tasks in EAR 2020-01-26 23:35:34 +00:00
Shane Freeder 7329e19ce5
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:
e911c70f SPIGOT-5542: Cancelling EntityToggleGlideEvent doesn't stop client from gliding
2020-01-25 01:22:52 +00:00
BillyGalbreath b3a97d1446 Fix startup errors when double clicking jar (#2903) 2020-01-24 23:06:37 +00:00
Shane Freeder b51fbefc48
Revert "Fix errors on startup when double clicking jar (#2901)"
This reverts commit a0438faba9.
2020-01-24 21:30:15 +00:00
BillyGalbreath a0438faba9 Fix errors on startup when double clicking jar (#2901) 2020-01-24 19:13:59 +00:00
Max Lee e0da6d4b81 Seed based feature search (Fixes #2312) (#2852) 2020-01-24 19:07:14 +00:00
Shane Freeder 969ef51ad2
Init legacy material data
This fixes an issue with plugins using legacy materials, spigot does
not populate the bukkit registry properly, leading to NPEs when using
outdated plugins. This patch should likely be dropped when spigot fixes
their legacy data usage....

Also rebuild patches because 10/10
2020-01-23 21:38:17 +00:00
Andrew Mollenkamp c471490985
Fix items vanishing through end portal (Resolves #2681) (#2894)
hehe
2020-01-23 15:38:47 +00:00
Shane Freeder 8a0b371c68
Fix comparator behavior for EntityPhanton goal 2020-01-22 21:01:28 +00:00
Zach Brown 79710332e3
Update upstream CB
--- work/CraftBukkit
Submodule work/CraftBukkit 29737ccb..efd6cf55:
  > Only load legacy support data if something uses it
2020-01-21 20:12:53 -06:00
Spottedleaf 19de9af63c 1.15.2 update (#2887)
Functional GUI fix added by billygalbreath
2020-01-21 20:02:07 -06:00
Shane Freeder d4ae43fc00
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:
58d299a5 Clarify that TotalExperience (XpTotal) is not displayed anywhere
3342ab1e #460: Add Player#sendExperienceChange
acc05b40 SPIGOT-5525: saveResource saves files from server jars

CraftBukkit Changes:
5c6b0dc6 SPIGOT-5526: Call EntityChangeBlockEvent for bees triggering crop growth
b91ce119 #601: Implement Player#sendExperienceChange
661bebc6 Remove outdated build delay.
2020-01-21 15:12:47 +00:00
Shane Freeder 9c2d9a5f41
[CI-SKIP] Rebuild patches 2020-01-20 16:04:39 +00:00
Andrew Mollenkamp 86a4b75200 Fix items not falling correctly (Resolves #2835) (#2872) 2020-01-20 15:57:12 +00:00
Omer Uddin 35472de2bc Port activation range improvement patch (#2763) 2020-01-20 15:54:57 +00:00
BillyGalbreath 617f6033e7 Add effect to block break naturally (#2819) 2020-01-18 20:10:06 -06:00
Shane Freeder 00860e4e10
[CI-SKIP] rebuild patches 2020-01-18 17:58:05 +00:00
Callahhh 3d51966885 Prevent sync chunk loads when villagers try to find beds (#2855) 2020-01-18 17:54:33 +00:00
Spottedleaf f177f878a8 Full chunk debug on incremental watchdog (#2868) 2020-01-18 17:50:23 +00:00
Spottedleaf c2954557e7 Fix last firework in stack not having effects when dispensed - #2871 (#2876)
CB used the resulting item in the dispenser rather than the item
dispensed. The resulting item would have size == 0 and therefore
be convertered to air, hence why the effects disappeared.
2020-01-18 17:31:05 +00:00
Spottedleaf dd8b8df0ca Ensure portal search radius is used when teleporting players (#2877)
Also add the create search radius mojang recently introduced
to config
2020-01-18 17:28:32 +00:00
Mark Vainomaa 701114058c Fix dupe with Eigencraft redstone implementation (#2864) 2020-01-16 20:07:50 -06:00
Brody Beckwith 5dc6bd450e Optimize call to getFluid for explosions (#2859)
Signed-off-by: BrodyBeckwith <brody@beckwith.dev>
2020-01-15 00:16:04 +00:00
Shane Freeder 0f795c3e8a
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:
01334e7d #616: Fix exception on entity portal teleport attempt
2020-01-14 21:43:50 +00:00
Shane Freeder 1d5bd44d13
Fix entity teleportation exceptions 2020-01-14 09:14:12 +00:00
Shane Freeder bd0337b7a9
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:
7dd1cfcd PortalEvent additions

CraftBukkit Changes:
e8cb2f51 SPIGOT-5252: Nether portal fixes and additions
fde78ef3 SPIGOT-5477: Server not shutting down

Spigot Changes:
037559e7 Rebuild patches
2020-01-13 22:36:41 +00:00
Spottedleaf 654a131620 Add more chunk debug to watchdog (#2851)
print chunk holder status, useful for indicating what steps the
server has gone through after loading chunks from disk

Also rebuild patches (cat...)
2020-01-12 21:06:05 +00:00
Spottedleaf d94d6a2970 Optimise IEntityAccess#getPlayerByUUID (#2842)
Use the world entity map instead of iterating over all players
2020-01-12 06:36:31 +00:00
Spottedleaf 4237539e58 Guard against serializing mismatching chunk coordinate (#2844)
Should help if something dumb happens
2020-01-12 06:32:44 +00:00
Shane Freeder c1f57657ee
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:
d208733e SPIGOT-5509: Sleeping player does not eject bed when teleported
2020-01-11 13:34:00 +00:00
Brokkonaut f5569fd3d8 Fix SkullMeta.setPlayerProfile() (#2833) 2020-01-10 18:07:29 +00:00
Omer Uddin 4151617d29 Update no chunk loads for hoppers and double chests patch (#2777) 2020-01-09 21:11:19 -06:00
Spottedleaf db3af11cea Fix race condition with regionfile being closed right after getting one (#2812)
Occurs when 1 thread retrieves a regionfile, and then the
regionfile is closed due to it being thrown out of cache.
2020-01-09 19:42:33 -06:00
BillyGalbreath 9aeba7c95a Prevent bees loading chunks checking hive position (#2828) 2020-01-09 19:28:29 -06:00
Shane Freeder bd1e1ad1aa
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:
5d4de46e Fix checkstyle.xml formatting
adf331f1 SPIGOT-5496: API to create and manipulate hardcore worlds

CraftBukkit Changes:
c727dc2a Fix checkstyle.xml formatting
e7202cd4 SPIGOT-5496: API to create and manipulate hardcore worlds
9820cd2d MC-151364, SPIGOT-5494: Feeding dolphin hangs if generate-structures=false
2020-01-05 23:08:18 +00:00
Zach Brown b74fe8ea11
Update upstream B/CB
--- work/Bukkit
Submodule work/Bukkit bbfd13dd..72e3dfd4:
  > SPIGOT-5486: Raider CanJoinRaid

--- work/CraftBukkit
Submodule work/CraftBukkit 83af86db..731e819c:
  > SPIGOT-5486: Raider CanJoinRaid
  > SPIGOT-5487: Increase outdated build delay
2020-01-01 17:44:53 -06:00
Shane Freeder 7530141468
remove burtned TNT blocks (Fixes #2808) 2019-12-30 12:49:48 +00:00
Zach Brown 92933b162c
Fix double dropping xp now that Spigot fixed it 2019-12-26 22:28:02 -05:00
Zach Brown 4ed5ab7c79
Update upstream CB/S
--- work/CraftBukkit
Submodule work/CraftBukkit 297ff400..83af86db:
  > SPIGOT-5457: Downgrade 'Mismatch in destroy block pos' message to debug
  > SPIGOT-5481: PlayerBedLeaveEvent returns wrong bed location
  > SPIGOT-5482: Structure Block setUsageMode encounters NullpointerException
  > SPIGOT-5426: isSimilar for player heads fails
  > SPIGOT-5478: XP not dropping when a player dies

--- work/Spigot
Submodule work/Spigot 05bb8bcf..492a7792:
  > Rebuild patches
2019-12-26 22:18:27 -05:00
Shane Freeder c32f8e132c
PlayerDeathEvent#shouldDropExperience 2019-12-24 00:36:24 +00:00
Shane Freeder 05ecc314d2
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:
8073dbec SPIGOT-5474: Just ignore bugged fireball data
2019-12-23 03:59:27 +00:00
Shane Freeder f8fd607e04
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:
bbfd13dd Hyperlink 'Events' in raid event package documentation
b2095bed SPIGOT-5413: Add TrustedPlayer API for foxes
1bf1f3f4 Block trace methods do not require hash sets
abf0cfdc Javadoc improvements per checkstyle
c4a2b425 Add TimeSkipEvent

CraftBukkit Changes:
817116de SPIGOT-5413: Add TrustedPlayer API for foxes
062680a8 SPIGOT-5467: Calm down bees that cannot exit hive
75fac431 SPIGOT-5472: Spurious warning when using clone command on tile entities
85106731 SPIGOT-5471: Allow empty title/author for books
2d9db47f Add TimeSkipEvent
384225c2 Add thread name to TerminalConsoleWriterThread

Spigot Changes:
05bb8bcf Postpone stopping the watchdog until the server is completely stopped
18e2b9be Add package-info.java for Spigot APIs
2019-12-23 02:37:47 +00:00
Omer Uddin 3f5564f1bc Port Optimize-Hoppers.patch to 1.15 (#2765)
* port patch

* fix hoppers eating items
2019-12-22 02:28:35 +00:00
Shane Freeder 26dfbc8046
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:
3aa8286b SPIGOT-794: Add boats to EntityPlaceEvent
c36d90a6 SPIGOT-5464: Add BEEHIVE SpawnReason for when a bee leaves a beehive

CraftBukkit Changes:
90ef74ef SPIGOT-794: Add boats to EntityPlaceEvent
fb7abcb3 SPIGOT-5466: Bees still get angry even if damage event cancelled
4499fec5 SPIGOT-5464: Add BEEHIVE SpawnReason for when a bee leaves a beehive
2019-12-19 19:17:36 +00:00
BillyGalbreath 539543ca9a MC-145656 Fix Follow Range Initial Target (#2778) 2019-12-19 19:03:16 +00:00
Shane Freeder 8e972bf5aa
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:
bf1fa3e3 Update to Minecraft 1.15.1

CraftBukkit Changes:
30a1b691 Update to Minecraft 1.15.1
e2790ae2 Remove outdated build delay.

Spigot Changes:
2ee05fef Update to Minecraft 1.15.1
2019-12-17 22:39:07 +00:00
Shane Freeder 3cd952e225
Yank 0417-Avoid-Chunk-Lookups-for-Entity-TileEntity-Current-Ch.patch
Currently causing leaks
2019-12-16 19:02:26 +00:00
Shane Freeder c47cf32c7c
Restore 0129-Optimize-World.isLoaded-BlockPosition-Z.patch 2019-12-16 02:58:14 +00:00
Shane Freeder cd499c92a1
Restore Use-getChunkIfLoadedImmediately-in-places.patch 2019-12-16 02:47:46 +00:00
Callahhh 7986f57e5d Bring back Reduce-sync-loads.patch (#2761) 2019-12-16 01:43:21 +00:00
Shane Freeder 9e58f22640
Address gen concurrency issue causing crashes (Fixes #2746) 2019-12-16 01:38:00 +00:00
Shane Freeder 8b25307b34
Merge branch 'ver/1.14' 2019-12-15 23:05:36 +00:00
Shane Freeder 1c38436266
attempt to allow timings to continue with janky plugin classes 2019-12-15 22:45:17 +00:00
Shane Freeder 443ffb450b
Fix spectator teleport target (#2743) 2019-12-15 20:19:52 +00:00
Shane Freeder 7d8117083f
Fix spawn radius being treated as 0 (Fixes #2742) 2019-12-15 19:42:35 +00:00
Shane Freeder c36cf2aff4
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:
e43416a3 SPIGOT-5455: Mobs do not ignite due to sun in extra worlds
2019-12-15 19:40:28 +00:00
Shane Freeder 8782be3bb0
[CI-SKIP] Rebuild patches 2019-12-15 18:33:43 +00:00
Black Hole ff8a48b9d1 Don't show 1.15 plugins as legacy in plugins command (#2755)
* Don't show 1.15 plugins as legacy in plugins command

* Use CraftMagicNumbers.SUPPORTED_API
2019-12-15 18:28:44 +00:00
Omer Uddin a133980223 port PlayerLaunchProjectileEvent patch to 1.15 (#2758) 2019-12-15 18:25:10 +00:00
Omer Uddin f3c55f239a port TE chunk lookup patch to 1.15 (#2757) 2019-12-15 18:17:16 +00:00
Shane Freeder 0585f99b05
Prevent TRAP while loading Fireballs 2019-12-14 01:15:01 +00:00
Shane Freeder 12051feb76
Updated Upstream (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

CraftBukkit Changes:
61d4b090 SPIGOT-5428: Better handling of some ItemMeta

Spigot Changes:
047b6f86 SPIGOT-5421: Add separate trident despawn rate
c1047ed9 SPIGOT-5445: Add log-villager-deaths option
2019-12-14 01:02:52 +00:00
Shane Freeder bc447dc137
Track correct branch for /version 2019-12-13 22:56:02 +00:00
Shane Freeder 7dbceea208
Restore zero-tick farms fix
They no longer directly call the tick method, so, one step forward...
2019-12-13 22:48:40 +00:00
Shane Freeder 55944bc6ff
Revert "Drop fix zero-tick farms (Fixes #2736)"
This reverts commit 3b93c5b112.
2019-12-13 22:41:00 +00:00
Shane Freeder 3b93c5b112
Drop fix zero-tick farms (Fixes #2736)
Fixed by mojang in 1.15, farm blocks are no longer in the next tick list

Also, add hopper optimization patch to the removed folder
2019-12-13 21:53:20 +00:00
Shane Freeder 31bc07cb65
Drop hopper optimization patch 2019-12-13 20:41:01 +00:00
Shane Freeder 788e033817
Don't set the count on already empty items in hopper moves (Fixes #2735) 2019-12-13 20:11:45 +00:00
Shane Freeder c034be8a82
Remove debug statement and rebuild patches properly 2019-12-13 16:29:51 +00:00
Shane Freeder 058e4efb41
Allow reading of oversized region files 2019-12-13 16:22:16 +00:00
Shane Freeder ae68db1f0e
Drop entity experience on death 2019-12-13 15:21:58 +00:00
Shane Freeder d413dca4ee
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:
333b9f02 SPIGOT-5422: Add support for 3-dimensional biomes
170d7386 Fix bad link in deprecated FlowerPot MaterialData class

CraftBukkit Changes:
16dc5758 SPIGOT-5449: Fix issue with projectiles
fd25653f SPIGOT-5448: Shulker Boxes collapse empty slots when picked up
b97d581a SPIGOT-5443: BEE_NEST BlockState
73698cf8 SPIGOT-5442: Fix issue with fire charges
beff9fb9 SPIGOT-5437: Fix CustomChunkGenerator.CustomBiomeGrid ignoring the y value for biomes
f777640e SPIGOT-5425: Prevent empty/air loot (again?)
db0dafb1 SPIGOT-5422: Add support for 3-dimensional biomes
4633e6c5 Fix crash with disabled worlds

Spigot Changes:
f39a89ef SPIGOT-5423: Remove covariant type change to give better chance of Java downgrades working
2019-12-13 14:08:40 +00:00
MiniDigger bd93836d4c Nuke IOWorker, make stuff compile (#2733)
* remove removed patch cause its not removed anymore

* Nuke IOWorker, oh, and also make it compile

* synchronize writes properly

* Remove note about IOWorker
2019-12-13 13:46:45 +00:00
Zach Brown 4565495711
More compile fixes 2019-12-12 21:29:45 -06:00
Shane Freeder b0dc983f21
More progression on patches 2019-12-12 21:01:16 +00:00
MiniDigger d8a0622602 Compile fixes (#2732) 2019-12-12 18:45:00 +00:00
MiniDigger 44d032f1e9 Houston, we got a patch (#2731)
* Houston, we got a patch

* is this the end of the beginning or the beginning of the end
2019-12-12 16:20:43 +00:00
Shane Freeder bbf27ec651
Fixup timings patch 2019-12-12 03:06:23 +00:00
Zach Brown e2c4ff50a2
My Name is ;
Hi! My name is (what?)
My name is (who?)
My name is
;

Hi! My name is (huh?)
My name is (what?)
My name is
;
2019-12-11 21:00:50 -06:00
Zach Brown 01de058bf2
Little more progress
Keep getting interrupted so not as much as I'd like :(
2019-12-11 20:48:34 -06:00
MiniDigger b00d871009 Patches 100-260 (#2729) 2019-12-11 17:43:22 -06:00
Zach Brown f2ed239ead
More progress 2019-12-10 22:01:17 -06:00
Shane Freeder a308619d28
Work on server patches 2019-12-11 00:56:03 +00:00
Shane Freeder 4d2f85630a
Fix ArmorStand#setItem flow (Fixes #2726) 2019-12-10 23:37:32 +00:00
Shane Freeder bb8b1e3eca
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:
8b6dd103 Update /version to reflect final build status.
6bdfd385 Remove some draft API designations
78a12dd9 SPIGOT-5417: Campfire should implement Directional

CraftBukkit Changes:
65670174 SPIGOT-5417: Campfire should implement Directional
eeae942e SPIGOT-5416: Block.getDrops gives drops even when tool should not give drops
2019-12-10 23:23:50 +00:00
Lukasz Derlatka 86daffa21c
Fix AssertionError when player hand set to empty type
Fixes GH-2718
2019-12-07 19:09:44 -06:00
Shane Freeder 3032599d38
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:
43183eab SPIGOT-5399: spawn-npcs ignored during world generation
e9bb2f15 SPIGOT-5403: isSimilar returns true for different skulls
5c9e7236 SPIGOT-5409: Remove unnecessary defaulting in CraftMetaBookSigned
821238b6 SPIGOT-5412: Use SpawnReason.NATURAL for wandering traders and trader llamas
2019-12-05 10:23:10 +00:00
stefvanschie 779f34cc37 Fix empty CanPlaceOn tags causing errors (#2713) 2019-12-01 00:20:12 +00:00
BillyGalbreath 4a97a7ca44 Add option to disable pillager patrols (#2626) 2019-11-24 01:10:15 -06:00
Gerrygames 23e53aab97 Backport MC-160177 fix from 1.15 (#2702) 2019-11-24 00:36:20 -06:00
Zach Brown 45089d59f0
Update upstream CB
--- work/CraftBukkit
Submodule work/CraftBukkit 7554e08e..ccd47a50:
  > SPIGOT-5395: Call BlockFadeEvent for Scaffolding
  > Increase outdated build delay to 4 weeks
2019-11-24 00:06:19 -06:00
BillyGalbreath 761c24fae9 Fix stuck in sneak when changing worlds (MC-10657) (#2627) 2019-11-24 00:02:47 -06:00
Spottedleaf 10c29e7369 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 12:00:16 -06:00
William Blake Galbreath 8d036cea01
Expose the internal current tick 2019-10-30 18:10:42 +00:00
MisterErwin 0c71539093 [PATCH] bounding box check for hanging entities (#2664)
This patch intends to fix an issue with LeashHitchs where an exception
was thrown due EntityHanging#calculateBoundingBox not being able to
accept EnumDirections UP and DOWN.

This issue was introduced in a fix for SPIGOT-4674
(d65a2576e40e58c8e446b330febe6799d13a604f)
2019-10-30 17:29:40 +00:00
Shane Freeder 527073aa65
Update config version 2019-10-27 00:07:42 +01:00
Zach Brown 0d3b35c339
Rename baby zombie movement config option
This option does not set the absolute speed of the entity as the name
implies. It sets a modifier. The default (vanilla) value of `0.5` sets
the baby zombie to move at 50% faster than the base speed.

A negative value like `-0.4` would set them to move at 40% slower.

There should be no functional changes as a result of this change, it's
just clarifying the config name.
2019-10-26 17:55:58 -05:00
Spottedleaf df984898ac 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 10:03:39 +01:00
weaondara 9ea1f9ee3d performance improvement for CraftChunk.getEntities() (#2629) 2019-10-19 23:33:35 +01:00
Shane Freeder 419ae0e668
Fire EntityRemovedFromWorldEvent for all entities (Fixes #2282) 2019-10-19 09:14:26 +01:00
Shane Freeder 0f2ea04c1c
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:
af58d316 Fix javadoc warning in Firework.setShotAtAngle

CraftBukkit Changes:
e2dd6555 SPIGOT-5372: Re-add tile entity fixer due to MC-163945
1e7a197f Fix incorrect inequality in 683bae0670c
db98d54d SPIGOT-5362: Suspicious stews fail isSimilar check

Spigot Changes:
56f84710 Rebuild patches
2019-10-18 17:31:01 +01:00
Jonathan Frederick 2c8d20406f Re-implement treasure-maps-return-already-discovered for 1.14 (#2636) 2019-10-18 16:14:43 +01:00
Spottedleaf 8260cdf8c1 Use getIfLoadedImmediately and not cached immediately for isLoa… (#2641) 2019-10-18 16:05:45 +01:00
Andrew Steinborn ff8b9ef3d5
Really fix JLine on Windows
The history of how paths work in Win32 is a sad story and shall not be documented here.
Needless to say, Windows hates the temporary file name for jansi's native code since it
includes the version. For git builds, it includes quotes around the actual version. But
alas, the issue apparently doesn't occur if you build on Windows since it removes the
quotes from the git commandline that is ultimately used to build the version string,
because of more Win32 sadness and shame.

Go look at Raymond Chen's blog, The Old New Thing. It's full of Windows oddities and
it will make you want to weep because almost 90% of the world uses this legacy OS from
the 1980s.
2019-10-13 16:36:23 -05:00
Zach c65396072f
Revert "Fix jline with git builds under Windows (#2624)" (#2632)
This reverts commit 0c64f7b0ae.
2019-10-13 01:19:22 -05:00
Zach Brown a4dbabdbd3
Update upstream CB
--- work/CraftBukkit
Submodule work/CraftBukkit 7deb3728..d6b3eddf:
  > SPIGOT-5355: Double Chests still open after InventoryOpenEvent cancelled
2019-10-13 00:28:46 -05:00
Andrew Steinborn 0c64f7b0ae Fix jline with git builds under Windows (#2624) 2019-10-13 00:06:44 -05:00
Shane Freeder e8c82f4eee
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:
0399d9d6 SPIGOT-5341: Add Material.isAir
547f5709 SPIGOT-5353: Expand explosion API by adding source entity

CraftBukkit Changes:
7deb3728 SPIGOT-5309: Call cancelled EntityDamageEvent when damaging invisible armor stands
46351e17 SPIGOT-5341: Add Material.isAir
683bae06 SPIGOT-5342: Lore lost when deserializing items with no version stored
c2d12011 SPIGOT-5353: Expand explosion API by adding source entity
2019-10-08 19:37:02 +01:00
Omer Uddin aa776c1b15 Don't save canTick of armor stands if it has not been set by API (#2608) 2019-10-02 19:20:40 -05:00
Spottedleaf bfc807c27a 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 20:23:09 -05:00
Spottedleaf 826b4762c0 Remove debug logging for incremental saves (#2600) 2019-09-29 20:14:39 -05:00
Spottedleaf d39916c7e2 Add more timings to chunk provider tick (#2549)
- Misc mob spawning
- Chunk range checks
2019-09-29 16:06:03 -05:00
Spottedleaf 43ec79a32c Add server oversleep to timings (#2509)
Now everything except waiting for the next tick should be included
in timings
2019-09-29 15:49:38 -05:00
Spottedleaf 1d2a5915ed 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 15:29:56 -05:00
Zach Brown 89eb890239
[CI-SKIP] Rebuild patches 2019-09-29 15:02:04 -05:00
Spottedleaf 27fca92fa1 Drop Optimize-GameRules-to-use-LinkedHashMap (#2594)
Mojang has since replicated the logic
2019-09-29 15:01:21 -05:00
Zach Brown 936d57ba93
Use local variable for bedrock generation
Fixes GH-2596.
2019-09-27 20:53:20 -05:00
Zach Brown 767b935552
[CI-SKIP] Fix wrong patch author on zero-tick fix
See GH-2559 for context
2019-09-27 18:10:48 -05:00
Zach Brown 7caed1a8fa
[CI-SKIP] Rebuild patches 2019-09-24 18:19:41 -05:00
Spottedleaf 777073a54d Check horse entity validity in container interactions (#2584)
Fixes #2580
2019-09-24 18:16:16 -05:00
BillyGalbreath d69fe6c511 Fix zero-tick instant grow farms MC-113809 (#2559) 2019-09-22 23:07:01 -05:00
Spottedleaf c68dbb864c 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 23:12:45 -05:00
Spottedleaf 30f9955e2a Fix race conditions in flush allowing for previously scheduled tasks to execute later than the flush call (#2548) 2019-09-15 23:02:13 -05:00
Spottedleaf 9e1620e3d3 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 22:39:30 -05:00
Zach Brown 728605013c
[CI-SKIP] Fix duplicate patch number 2019-09-15 22:15:33 -05:00
prplz 8735587529 Fix nether portal frame creation (#2546) 2019-09-15 22:12:17 -05:00
Zach Brown 26acc9b77a
Re-add flat bedrock config option 2019-09-15 19:20:02 -05:00
Shane Freeder 14513c3ce1
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:
92f24ff2 SPIGOT-5158: Add SuspiciousStewMeta
b9bf4dae SPIGOT-5310: Add Chunk.contains
b2adbb45 Add API to get/set inhabited time of a Chunk
e3c812dd SPIGOT-5250: Add ChunkSnapshot.contains
71973d85 SPIGOT-5255: Raid / patrol spawn reasons

CraftBukkit Changes:
03b145b3 SPIGOT-5158: Add SuspiciousStewMeta
9aa74304 SPIGOT-5310: Add Chunk.contains
7ef2b20d SPIGOT-3308: RecipeIterator cannot longer remove recipes
023f438c Add API to get/set inhabited time of a Chunk
b79a86ed SPIGOT-5250: Add ChunkSnapshot.contains
aa492e55 SPIGOT-5255: Raid / patrol spawn reasons
2019-09-10 19:51:02 +01:00
Omer Uddin b7dc6fb00e fix double world add bug (#2486) 2019-09-02 17:46:04 +01:00
Shane Freeder 439131c704
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:
e28fb3bd SPIGOT-5301: BlockIgniteEvent for campfire + arrow

CraftBukkit Changes:
763e5601 SPIGOT-5294: Cancelled EntityPickupItemEvent and PlayerPickupItemEvent alter on-ground stacks
403ac185 SPIGOT-5301: BlockIgniteEvent for campfire + arrow
2019-09-02 17:28:24 +01:00
Zach Brown 14e07afd20
[CI-SKIP] Fix patch number 2019-09-01 20:50:15 -05:00
Spottedleaf fc570959d4 Improve POI data saving logic (#2475)
- Do not unload data if world saving is disabled
- Aggressively target unloading
2019-09-01 20:49:09 -05:00
Spottedleaf 5ef93ded42 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 20:30:25 -05:00
Nassim 26f644c554 Fix sign line capping check (#2522) 2019-09-01 17:21:08 -05:00
Spottedleaf b2758246c8 Target more sync loads (#2476) 2019-09-01 17:17:51 -05:00
Spottedleaf 5272f3c2ef Fix #2511 (#2519)
Did not double-flush the file io thread if async = false
2019-09-01 16:18:39 -05:00
Shane Freeder c9fd745840
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:
ff0672ca SPIGOT-5211: Add Raid API

CraftBukkit Changes:
96bc85f0 SPIGOT-5298: Remove unexplained 0.1 drop chance offset
6ed8a189 SPIGOT-5290: Invulnerable and/or Marker armor stand triggers EntityDamageEvent
631eaeb0 SPIGOT-5297: PlayerBedLeaveEvent.getBed() returns player location
8d4bc541 SPIGOT-5293: Sponge behaviour differs from Vanilla
e91fd75e SPIGOT-5291: Missing event for ravagers trampling crops
cbdd7139 SPIGOT-5211: Add Raid API
edd8fdfb SPIGOT-5287: Fix rare CME generating new chunks
3fc97f08 SPIGOT-5265: FireworkExplodeEvent only fired when rockets explode in air

Spigot Changes:
065a3734 Rebuild patches
a5961826 SPIGOT-5286: tick-inactive-villagers invokes the AI for NoAI villagers
2019-08-31 20:30:44 +01:00
Shane Freeder aba4969668
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:
e970fd72 Remove incorrect javadoc from TargetReason
84df6df1 SPIGOT-5282: Improve bucket event API

CraftBukkit Changes:
b2bcde89 SPIGOT-5258: TNT Not Moving Players in Creative Mode
44d675ad SPIGOT-5263: Chests stay open after InventoryOpenEvent cancelled.
2439178e SPIGOT-5278: EntityDrowned memory leak
7055c931 SPIGOT-5264: Call event for experience orbs losing their target
49141172 SPIGOT-5282: Improve bucket event API
6bbb3b04 SPIGOT-5281: Clearer error messages for ChunkSnapshot misuse
2019-08-26 15:36:37 +01:00
Omer Uddin 21faf8227b Implement optional per player mobspawning (#2171) 2019-08-21 02:02:51 +01:00
Omer Uddin 88722ec89c Prevent consuming the wrong itemstack (#2477) 2019-08-19 16:24:33 +01:00
Spottedleaf 294e30462b Async chunk api/io/loading (#2308) 2019-08-18 18:40:04 -05:00
Shane Freeder eee1a019f9
Updated Upstream (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

CraftBukkit Changes:
2012f1e0 SPIGOT-5269: Item attribute modifiers don't persist their order
7a806a3a SPIGOT-5270: Call BlockSpreadEvent when bamboo saplings grow

Spigot Changes:
798ea6ab Add async catcher to World#save
2019-08-17 04:26:58 +01:00
Spottedleaf c4ae0002e1 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 21:47:38 -05:00
Spottedleaf 700a664981 Print entity debug stacktrace on entity double add (#2438) 2019-08-14 21:37:07 -05:00
Spottedleaf 9d6680eec0 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 21:32:25 -05:00
Zach Brown 928abb41f8
[CI-SKIP] Rebuild patches for last merge 2019-08-11 11:27:09 -05:00
Paul Sauve 34e64781e8 Do less work if we have a custom Bukkit generator (#2318) 2019-08-11 11:23:11 -05:00
Zach Brown cdd0bb4376
Update upstream CB/S
--- work/CraftBukkit
Submodule work/CraftBukkit 1ec1b05e..368f4e99:
  > Increase outdated build delay to 3 weeks
  > SPIGOT-5249: Do not add data to empty loot table
  > SPIGOT-5257: Call EntityBreedEvent for foxes and set the child's spawn reason to BREEDING

--- work/Spigot
Submodule work/Spigot e5b1b5db..ea7e48b3:
  > Add string default for view distance, and API to retrieve per world
2019-08-10 12:44:57 -05:00
Shane Freeder aa022fdaca
Fix java cross-version compilation
(Also, rebuild patches)
2019-08-08 16:12:57 +01:00
Omer Uddin 8b7952a958 Implement alternative item-despawn-rate (#2128) 2019-08-07 22:06:08 +01:00
Omer Uddin 6ccf0bda3b Reimplement hopper optimization patch (#2388)
Co-authored-by: Shane Freeder <theboyetronic@gmail.com>
2019-08-07 19:08:22 +01:00