Commit Graph

5099 Commits

Author SHA1 Message Date
JRoy
167f0e69c8 Expose MinecraftServer#isRunning
This allows for plugins to detect if the server is actually turning off in onDisable rather than just plugins reloading.
2020-04-10 21:24:12 -04:00
William Blake Galbreath
db792f5e1d Add tick times API and /mspt command 2020-04-05 22:23:14 -05:00
Jake Potrebic
3d6705e795 Set spigots verbose world setting to false by def 2020-12-02 20:17:54 -08:00
Spottedleaf
34933f9884 Optimise Chunk#getFluid
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-01-14 14:59:08 -08:00
Zero
05df94d332 Configurable chance of villager zombie infection
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-02-22 16:10:31 -05:00
William Blake Galbreath
fd378a7262 Add option to allow iron golems to spawn in air 2019-04-13 16:50:58 -05:00
Shane Freeder
26067ca04b Validate tripwire hook placement before update 2020-03-07 00:07:51 +00:00
Trigary
4bff4be120 add hand to BlockMultiPlaceEvent 2020-03-01 22:43:24 +01:00
William Blake Galbreath
fa7c667a3e Make the GUI graph fancier 2020-02-02 04:00:40 -06:00
William Blake Galbreath
196c153504 Add option to nerf pigmen from nether portals 2020-02-07 14:36:56 -06:00
BillyGalbreath
0dd8044178 Entity Jump API
== AT ==
public net.minecraft.world.entity.LivingEntity jumping
2020-02-08 23:26:11 -06:00
William Blake Galbreath
4e20691d59 Add ThrownEggHatchEvent
Adds a new event similar to PlayerEggThrowEvent, but without the Player requirement
(dispensers can throw eggs to hatch them, too).
2020-02-09 00:19:05 -06:00
Nassim Jahnke
a92909cfd7 Improve java version check
Co-Authored-By: MiniDigger | Martin <admin@benndorf.dev>
2022-03-16 13:58:16 +01:00
Spottedleaf
f179cfaff2 Add debug for sync chunk loads
This patch adds a tool to find calls to getChunkAt which would load
chunks, however it must be enabled by setting the startup flag
-Dpaper.debug-sync-loads=true

- To get a debug log for sync loads, the command is
  /paper syncloadinfo
- To clear clear the currently stored sync load info, use
  /paper syncloadinfo clear
2019-07-19 03:29:14 -07:00
Jake Potrebic
2ce266b657 Improve Block#breakNaturally API
Adds bool parameter to play world effect on block break

Adds bool parameter to drop xp from blocks

Fixes fluid-logged blocks not leaving fluid behind if
broken

Handles special cases for ice and turtle eggs

== AT ==
public net.minecraft.world.level.block.TurtleEggBlock decreaseEggs(Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/state/BlockState;)V

Co-authored-by: William Blake Galbreath <Blake.Galbreath@GMail.com>
2020-01-02 12:25:07 -06:00
William Blake Galbreath
e4290a3697 Bees get gravity in void. Fixes MC-167279 2020-01-26 16:30:19 -06:00
kickash32
c7b38e2bc7 Tracking Range Improvements
Sets tracking range of watermobs to animals instead of misc and simplifies code

Also ignores Enderdragon, defaulting it to Mojang's setting
2019-12-21 15:22:09 -05:00
kickash32
7b1d3d673a Alternative item-despawn-rate
Co-authored-by: Noah van der Aa <ndvdaa@gmail.com>
2019-06-03 02:02:39 -04:00
Spottedleaf
c33f47103e Guard against serializing mismatching chunk coordinate
Should help if something dumb happens
2019-12-27 09:42:26 -08:00
BrodyBeckwith
2eb4908754 Optimize call to getFluid for explosions 2020-01-14 17:49:03 -05:00
Nassim Jahnke
8a2c2db2a5 Fix item EAR ticks
Item entities only have their gravity ticked every 4 ticks when on ground.
Fix that and also remove Spigot's arbitrary tick skipping. It's a terribly
cheap way of getting extra performance that doesn't really work at all.
2024-10-30 13:51:54 +01:00
Spottedleaf
b948d38658 Optimise EntityGetter#getPlayerByUUID
Use the PlayerList map instead of iterating over all players
2020-01-11 21:50:56 -08:00
Aikar
a91c1c2d18 Don't load Chunks from Hoppers and other things
Hoppers call this to I guess "get the primary side" of a double sided chest.

If the double sided chest crosses chunk lines, it causes the chunk to load.
This will end up causing sync chunk loads, which will unload with Chunk GC,
only to be reloaded again the next tick.

This of course is undesirable, so just return the loaded side as "primary"
and treat it as a single chest if the other sides are unloaded
2016-11-03 20:28:12 -04:00
William Blake Galbreath
0e5a5711fc Prevent bees loading chunks checking hive position 2020-01-05 17:24:34 -06:00
Shane Freeder
0664232c53 PlayerDeathEvent#shouldDropExperience 2019-12-24 00:35:42 +00:00
Aikar
cd2f06bbc2 Duplicate UUID Resolve Option
Due to a bug in 2e29af3df0
which was added all the way back in March of 2016, it was unknown (potentially not at the time)
that an entity might actually change the seed of the random object.

At some point, EntitySquid did start setting the seed. Due to this shared random, this caused
every entity to use a Random object with a predictable seed.

This has caused entities to potentially generate with the same UUID....

Over the years, servers have had entities disappear, but no sign of trouble
because CraftBukkit removed the log lines indicating that something was wrong.

We have fixed the root issue causing duplicate UUID's, however we now have chunk
files full of entities that have the same UUID as another entity!

When these chunks load, the 2nd entity will not be added to the world correctly.

If that chunk loads in a different order in the future, then it will reverse and the
missing one is now the one added to the world and not the other. This results in very
inconsistent entity behavior.

This change allows you to recover any duplicate entity by generating a new UUID for it.
This also lets you delete them instead if you don't want to risk having new entities added to
the world that you previously did not see.

But for those who are ok with leaving this inconsistent behavior, you may use WARN or NOTHING options.

It is recommended you regenerate the entities, as these were legit entities, and deserve your love.
2018-07-21 14:27:34 -04:00
Callahan
a0513959ea Prevent sync chunk loads when villagers try to find beds 2020-01-13 23:47:28 -06:00
William Blake Galbreath
a0dc4eeb99 Add option to disable pillager patrols 2019-10-09 21:46:15 -05:00
Nassim Jahnke
ccc1107255 Dont send unnecessary sign update 2021-09-11 11:56:51 +02:00
kickash32
2cb6b995cc Prevent consuming the wrong itemstack 2019-08-19 19:42:35 +05:00
kickash32
0198ee9c8a offset item frame ticking 2019-07-30 03:17:16 +05:00
Lucavon
a89e4e6ae3 Configurable projectile relative velocity
This patch adds an option "disable relative projectile velocity", which, when
enabled, will cause projectiles to ignore the shooter's current velocity,
like they did in Minecraft 1.8 and prior.
If a player is falling, for example, their shooting range will be drastically
reduced, as a downwards velocity is applied to the projectile. This prevents
players from saving themselves from falling off floating islands, for example,
as a thrown ender pearl will not make it back to the island, while it would
have in 1.8.

While this could easily be done with plugins, too, there are multiple problems:
P1) If multiple plugins cancel the velocity by subtracting the shooter's velocity
from the projectile's velocity, the projectile's velocity would be different.
As there's no way to detect whether the projectile's velocity has already been
adjusted to ignore the player's velocity, plugins can't not do it if it's not
necessary.
P2) I've noticed some inconsistencies, e.g. weird velocity when shooting while
using an elytra. Checking for those inconsistencies is possible, but not as
efficient as just not applying the velocity in the first place.
P3) Solutions for 1) and especially 2) might not be future-proof, while this
server-internal fix makes this change future-proof.
2019-07-23 20:29:20 -05:00
Aikar
2cd6ace7ab Only count Natural Spawned mobs towards natural spawn mob limit
This resolves the super common complaint about mobs not spawning.

This was ultimately a flaw in the vanilla count algorithim that allows
spawners and other misc mobs to count against the mob limit, which are
not bounded, and can prevent the entire world from spawning new.

I believe Bukkits changes around persistence may of actually made it
worse than vanilla.

This should fully solve all of the issues around it so that only natural
influences natural spawns.
2019-03-24 01:01:32 -04:00
Spottedleaf
dee5102404 Show blockstate location if we failed to read it 2019-06-15 10:28:25 -07:00
William Blake Galbreath
3084b4ce9b Expose the internal current tick 2019-04-20 19:47:34 -05:00
simpleauthority
ab02b04a98 Implement CraftBlockSoundGroup 2019-05-28 03:48:51 -07:00
Phoenix616
f5be267fbf Fix sounds when item frames are modified (MC-123450)
This also fixes the adding sound playing when the item frame direction is changed.
2019-04-27 20:00:43 +01:00
Shane Freeder
26c77784e5 Fix CB call to changed postToMainThread method 2019-05-10 18:38:19 +01:00
William Blake Galbreath
b68af3dfa1 Mob Spawner API Enhancements
== AT ==
public net.minecraft.world.level.BaseSpawner isNearPlayer(Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;)Z
public net.minecraft.world.level.BaseSpawner delay(Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;)V
public net.minecraft.world.level.BaseSpawner setNextSpawnData(Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/SpawnData;)V
2019-04-19 12:41:13 -05:00
Aikar
5630b55346 Optimize Captured BlockEntity Lookup
upstream was doing a containsKey/get pattern, and always doing it at that.
that scenario is only even valid if were in the middle of a block place.

Optimize to check if the captured list even has values in it, and also to
just do a get call since the value can never be null.
2019-04-06 10:16:48 -04:00
Aikar
18f38c3167 PlayerDeathEvent#getItemsToKeep
Exposes a mutable array on items a player should keep on death

Example Usage: https://gist.github.com/aikar/5bb202de6057a051a950ce1f29feb0b4

== AT ==
public net.minecraft.world.entity.player.Inventory compartments
2019-03-27 23:01:33 -04:00
Aikar
8e13bc622b Server Tick Events
Fires event at start and end of a server tick
2019-03-27 22:48:45 -04:00
MisterVector
4ee0744e6d Add PlayerPostRespawnEvent 2018-10-26 21:31:00 -07:00
Mark Vainomaa
2433988460 Fire event on GS4 query 2019-03-17 21:46:56 +02:00
Aikar
0b77748b35 Fixes and additions to the spawn reason API
Expose an entities spawn reason on the entity.
Pre existing entities will return NATURAL if it was a non
persistenting Living Entity, SPAWNER for spawners,
or DEFAULT since data was not stored.

Additionally, add missing spawn reasons.

Co-authored-by: Jake Potrebic <jake.m.potrebic@gmail.com>
Co-authored-by: Doc <nachito94@msn.com>
2019-03-24 00:24:52 -04:00
Mark Vainomaa
19bd3b2655 Call WhitelistToggleEvent when whitelist is toggled 2019-03-13 20:08:09 +02:00
Aikar
04c783377e Limit Client Sign length more
modified clients can send more data from the client
to the server and it would get stored on the sign as sent.

Mojang has a limit of 384 which is much higher than reasonable.

the client can barely render around 16 characters as-is, but formatting
codes can get it to be more than 16 actual length.

Set a limit of 80 which should give an average of 16 characters 2
sets of legacy formatting codes which should be plenty for all uses.

This does not strip any existing data from the NBT as plugins
may use this for storing data out of the rendered area.

it only impacts data sent from the client.

Set -DPaper.maxSignLength=XX to change limit or -1 to disable
2019-02-27 22:18:40 -05:00
Aikar
05f977e3d1 Brigadier Mojang API
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-19 18:15:29 -04:00
Callahan
41218728d9 Async command map building
This adds a custom pool inorder to make sure that they are closed
without much though, as it doesn't matter if the client is not sent
commands if the server is restarting. Using the default async pool caused issues to arise
due to the shutdown logic generally being much later.
2020-04-08 02:42:14 -05:00
Aikar
b71ceb5e0f BlockDestroyEvent
Adds an event for when the server is going to destroy a current block,
potentially causing it to drop. This event can be cancelled to avoid
the block destruction, such as preventing signs from popping when
floating in the air.

This can replace many uses of BlockPhysicsEvent
2019-02-06 00:20:33 -05:00