29fc853 Allow empty paths in namespaced keys (#12687) - Lulu13022002
#paper
1 messages ยท Page 25 of 1
I also agree that we should prolly just remove the command.
Does this changed since the hard fork?
Discussion Category: Ideas
Isn't setAccessible unofficially deprecated? I think the replacement is called trySetAccessible
So can this option be added without the need to install third-party data packs and plugins?๐
Discussion Category: Ideas
A helper method somewhere to get vanilla adventure keys might be nice, maybe adventure itself? but looks good
4419afb fix: Safely handle nanosecond overflow in ClickCal... - kezz
5652882 Add isProxyEnabled method to ServerConfiguration (... - NonSwag
Expected behavior
Players connecting into my Survival world.
Observed/Actual behavior
Players connect to the Hub and then attempt to connect to Survival, then get kicked with this error.
[14:47:22 INFO]: Averagestea98 lost connection: Internal Exception: io.netty.handler.codec.EncoderException: Packet too large: size 2203033 is over 8
Steps/models to reproduce
Update paper to the latest version build 114 on 1.21.5 and try to connect.
Plugin and Datapack List
No plugins installed I removed to make sure it wasn't a plugin issue, datapacks are terralith, structory, incendium, and alienend.
Paper version
This server is running Paper version 1.21.5-114-ver/1.21.5@a1b3058 (2025-06-18T10:59:02Z) (Implementing API version 1.21.5-R0.1-SNAPSHOT)
You are running the latest version
Previous version: 1.21.5-113-ba7fb23 (MC: 1.21.5)
Other
I have removed all plugins from my Survival server, and my proxy server with no luck. I can only assume that this is a paper...
enable debug in server.properties, but, nothing really changed that would impact this sorta thing, that would likely scream that it was just a matter of bad timing and somebody did something to the world or their player containers
I've implemented it in this way because I didn't want to change up how and where the Event is called. Hence the hacky field in ResultSlot. If there's a better way, please say so.
Of course Mojang will make this change pretty much obsolete in the future, but when that happens this change can either be reverted or adjusted depending on how they do it.
There also may be some workaround by cancelling or setting the Result of the CraftItemEvent, but then a developer would need to implement ResultSlot's code themselves.
We hadn't made any changes to the world prior to the issue arising.
Mentioned in [discord](#docs-website message) the Spawner class has a few errors in JD this PR fixs that and also make a cleanup.
6d0821d [ci skip] Fix docs for Spawner class and cleanup (... - Doc94
That appeared to be the issue, thanks!
Adds spawn selector to the entity variant registry entries and builders.
However, can you also please update ProviderUtil#loadClass? This way this applies to paper plugins too.
Done
Isn't
setAccessibleunofficially deprecated? I think the replacement is calledtrySetAccessible
I looked at trySetAccessible, the only difference is that instead of throwing an InaccessibleObjectException, it returns false, but it can still throw a SecurityException.
cceffe3 Release ItemType and BlockType (#12708) - Machine-Maker
[PaperMC/Paper] branch deleted: feature/release-item-type-block-type
Because of the particle type being very hacky, I decided to move it out of this PR for now.
For documentation purposes, this is the patch for the particle argument type:
particles.patch
[PaperMC/Paper] New branch created: feature/remove-more-experimentals
f1d8583 Remove a bunch more experimental annotations - Machine-Maker
Removes Experimental status from the following:
- Brigadier API
- Lifecycle events (just the general system and the brig event)
- Tags event and datapack discovery and registry events are all still Experimental
- PluginMeta
- TagKey
- including all constant files
- Just TagKey, not our new Tag, RegistryKeySet, RegistrySet, etc and associated method
BlockData#createBlockState()BlockState#copy(),BlockState#copy(Location)AbstractArrow#getItem(),AbstractArrow#setItem()Player#sendBlockUpdate(Location, TileState)- BlockDispenseLootEvent
- VaultDisplayItemEvent
- Player input
- PlayerInputEvent
- Input
Player#getCurrentInput()
- EquipmentSlotGroup
- TrialSpawnerConfiguration
- JukeboxSong
2efba2e Remove bukkit dispatcher invocations - Owen1212055
[PaperMC/Paper] New branch created: cleanup/command-dispatching
Also fixes the item drop statistic
c65557a Fix recursive command calls in certain situations - Owen1212055
Width and height range
There really should be org.jetbrains.annotations.Range annotations or javadoc comments stating that the width and height parameters should be at least 1 and max of whatever it is, most commonly it's 1024, but there are exceptions where it's less. For example the width and height parameters for DialogBody.ItemBody have a max value of 256.
These numbers are from the minecraft wiki.
Default values
One other thing I'd like to see is default values being used. So you don't have to specify width/height and use the default.
ad8c102 Add restricted command API - Owen1212055
Last updated for: ad8c10266bf59b64d07b7730c4aabb508209389c.
Download the Paperclip jar for this pull request: paper-12713.zip
<details>
<summary>Maven Publication</summary>
The artifacts published by this PR:
- :package:
io.papermc.paper:dev-bundle:1.21.6-R0.1-SNAPSHOT - :package:
io.papermc.paper:paper-api:1.21.6-R0.1-SNAPSHOT
Repository Declaration
In order to use the artifacts published by the PR, add the following repository to your buildscript:
repositories {
maven("https://maven-prs.papermc.io/Paper/pr12713") {
name = "Maven for PR #12713" // https://github.com/PaperMC/Paper/pull/12713
mavenContent {
includeModule("io.papermc.paper", "dev-bundle")
includeModule("io.papermc.paper", "paper-api")
}
}
}
</details>
bef0a88 Revert "generate tags" - Lulu13022002
Please merge the linked docs PR when merging this PR
053f08b Extremely rough concept of dialog event - Machine-Maker
Ok, I pushed a super duper rough concept of the PlayerCustomClickEvent which includes 2 methods to extract a dialog response. One method takes the dialog instance, and tries to validate its inputs against the received payload, returning null if its not valid. Of course you should be making the payload ids super unique so you know its your dialog.
The other is a raw response wrapper with methods to just get any bool, float, or string in the top level of the response payload (if the response payload exists and is a compound tag).
And of course you can get a BinaryTagHolder and parse it into NBT using whatever library you want.
I feel like this should extend PlayerEvent.
No, it won't. It will not have a Player always, as you can use this in the configuration phase. Once Owen's pr for configuration phase API is in, it will have a connection instance, one implementation of which will have a player, the other just a player profile.
Ah, I see, didn't think of that possibility, makes sense.
Can we generate this?
I am not quite sure about canceling this? As this will cause the menu to just reveal a blank screen which may be very confusing. At least, I think this should be documented.
5698874 another rough approach using callbacks - Machine-Maker
Ok, I added another approach. You can manually specify a callback that runs. Create it with DialogAction#customAll(Key, DialogActionCallback, ClickCallback$Options) and use it in the actions.
In my Stats request PR I answered with an empty map because the client would show a loading screen until it got an update if the stats weren't cached before
(Not 100% sure if that is vanilla behavior since I have a few mods installed that might change that behavior, but just in case)
Maybe the same documentation I had could be applied?
Expected behavior
The waypoint for an entity should disappear when using hideEntity
Observed/Actual behavior
Still visible
Steps/models to reproduce
Call hideEntity on an entity that is tracked via the locator bar
Plugin and Datapack List
[09:46:47 INFO]: โน Server Plugins (3):
[09:46:47 INFO]: Paper Plugins:
[09:46:47 INFO]: - Commander, Tweaks, Worlds
[09:47:09 INFO]: There are 3 data pack(s) enabled: [vanilla (built-in)], [file/bukkit (world)], [paper (built-in)]
Paper version
This server is running Paper version 1.21.6-27-main@5edcf6d (2025-06-22T01:51:33Z) (Implementing API version 1.21.6-R0.1-SNAPSHOT)
You are running the latest version
Previous version: 1.21.6-12-4781d28 (MC: 1.21.6)
Other
No response
Closes https://github.com/PaperMC/Paper/issues/12714 by adding support for mark the entity hidden like "ignored" if is hidden from receiver.
Example using.
// first call this in command
player.getWorld().spawn(player.getLocation().toCenterLocation(), Wolf.class, wolf -> {
wolf.setOwner(player);
wolf.setAI(false);
player.hideEntity(TestPlugin.this, wolf);
AttributeInstance waypointTransmitRange = wolf.getAttribute(Attribute.WAYPOINT_TRANSMIT_RANGE);
waypointTransmitRange.setBaseValue(100);
});
// then make the entity show again
player.getWorld().getEntitiesByClass(Wolf.class).forEach(wolf -> {
player.showEntity(TestPlugin.this, wolf);
});
https://github.com/user-attachments/assets/d112b903-327c-4f4f-a067-b50a15b8e719
Expected behavior
Connect to server
Observed/Actual behavior
[17:23:51 ERROR]: [connected player] RasmusVraa (/87.248.247.168:61237): unable to connect to server StarVanilla
com.velocitypowered.proxy.util.except.QuietRuntimeException: The connection to the remote server was unexpectedly closed.
Steps/models to reproduce
Connect with velocity
Plugin and Datapack List
Doesn't matter
Paper version
paper-1.21.6-27
Other
No response
First of all, this seems more like a Velocity issues, second of all, please ask #velocity-help for help first
e2acf69 Don't save twice for players disconnected for dupl... - Owen1212055
[PaperMC/Paper] New branch created: fix/clickevent-edge-case
95e1651 Attempt to patch edge cases in component serializa... - Owen1212055
8796f90 Bundles dont work in config stage - Owen1212055
e4efdcc Skip second PlayerLoginEvent on configuration - Owen1212055
should just put all the string manip in a single map call
5ad70ab Fix disconnect continuing to tick ServerLoginPacke... - Owen1212055
Expected behavior
Happy Ghast is considered a vehicle that implements the Vehicle interface. Thus, I believe it should fire all vehicle related events such as VehicleMoveEvent. I did not test other vehicle related events as my plugin does not require them.
Observed/Actual behavior
VehicleMoveEvent is not fired when the happy ghast moves.
Steps/models to reproduce
Spawn a happy ghast and move it, my plugin did not receive any VehicleMoveEvent. When spawning a boat/minecart, the VehicleMoveEvent is received by my plugin.
// only getting VehicleMoveEvent for boats, but not happy ghasts
[13:04:50 INFO]: [Multiverse-Portals-Debug] Vehicle CraftOakBoat{uuid=2729c52a-ff78-472b-ba9f-8eff0ab70fd7} moved
[13:04:50 INFO]: [Multiverse-Portals-Debug] Vehicle CraftOakBoat{uuid=2729c52a-ff78-472b-ba9f-8eff0ab70fd7} moved
[13:04:50 INFO]: [Multiverse-Portals-Debug] Vehicle CraftOakBoat{uuid=2729c52a-ff78-472b-ba9f-8eff0ab70fd7} moved
Plugin and Datapack List
[13:06:35 INFO]:```...
Is your feature request related to a problem?
I use setHasStung(false) 1 tick after its attack to make the bee attack forever, but the timeSinceSting keeps increasing, so when the value is very large, the bee still has chance to die.
Describe the solution you'd like.
title
Describe alternatives you've considered.
beelosenectar event?
Other
No response
Stack trace
[04:44:11 ERROR]: --- DO NOT REPORT THIS TO PAPER - THIS IS NOT A BUG OR A CRASH - 1.21.5-114-a1b3058 (MC: 1.21.5) ---
[04:44:11 ERROR]: The server has not responded for 30 seconds! Creating thread dump
[04:44:11 ERROR]: ------------------------------
[04:44:11 ERROR]: Server thread dump (Look for plugins here before reporting to Paper!):
[04:44:11 ERROR]: ------------------------------
[04:44:11 ERROR]: Current Thread: Server thread
[04:44:11 ERROR]: PID: 37 | Suspended: false | Native: false | State: RUNNABLE
[04:44:11 ERROR]: Stack:
[04:44:11 ERROR]: ca.spottedleaf.moonrise.patches.chunk_system.level.entity.ChunkEntitySlices$EntityCollectionBySection.getEntities(ChunkEntitySlices.java:527)
[04:44:11 ERROR]: ca.spottedleaf.moonrise.patches.chunk_system.level.entity.ChunkEntitySlices.getEntities(ChunkEntitySlices.java:305)
[04:44:11 ERROR]: ca.spottedleaf.moonrise.p...
Please note the THIS IS NOT A BUG OR A CRASH line. Your server is just lagging very hard trying to tick llama spit, or so it seems from the stack trace.
Please send a spark report in #paper-help and we might be able to help you find the cause.
This is not a bug, you simply have your max_leash_distance configured instead of at default.
@Doc94 as in linking attributes (like max_health) to an enchantment?
@Doc94 as in linking attributes (like max_health) to an enchantment?
yep all related to https://minecraft.wiki/w/Enchantment_definition#Effect_components
That's intended, the event is only called for non-living entities (i.e. boats and minecarts), for other living entities you can look at the EntityMoveEvent
This can stay open until the config is properly implemented per world, currently it's kinda a global config
Expected behavior
Either cancelling the event to leave the LeashFenceKnot intact, or for HangingPlaceEvent to not be fired at all as no new entity is being created.
Observed/Actual behavior
If a player attempts to leash additional mobs to an already existing LeashFenceKnot, a HangingPlaceEvent gets fired. This already seems strange to me as there is no new entity being created. If this event is then cancelled (e.g a protection plugin like GriefPrevention), the LeashFenceKnot is removed and all entities are unleashed.
Steps/models to reproduce
- Leash one or mob mobs to a fence
- Create and load a plugin which cancels
HangingPlaceEvent - Attempt to leash further mobs to the fence
- Observe how all mobs are unleashed when the event is cancelled
Plugin and Datapack List
Issue is reproducible with any plugin that cancels HangingPlaceEvent. No additonal plugins or datapacks required.
Paper version
This server is running Paper version 1.21.6-28-main@803baf0...
[PaperMC/Paper] branch deleted: feature/fill
Upon further testing it seems you have to right-click the fence post itself for this problem to occur. Right-clicking the knot works correctly.
Expected behavior
The spawner's type should be returned by CreatureSpawner#getSpawnedType
Observed/Actual behavior
An exception is thrown:
[19:15:28 ERROR]: Could not pass event PlayerToggleSneakEvent to RoseStacker v1.5.34-SNAPSHOT
java.lang.NullPointerException: Cannot invoke "org.bukkit.craftbukkit.CraftWorld.getHandle()" because "this.world" is null
at org.bukkit.craftbukkit.block.CraftCreatureSpawner.getInternalWorld(CraftCreatureSpawner.java:333) ~[paper-1.21.6.jar:1.21.6-28-803baf0]
at org.bukkit.craftbukkit.block.CraftCreatureSpawner.getSpawnedType(CraftCreatureSpawner.java:53) ~[paper-1.21.6.jar:1.21.6-28-803baf0]
at RoseStacker-1.5.34-SNAPSHOT.jar/dev.rosewood.rosestacker.listener.ItemListener.onPlayerSneak(ItemListener.java:83) ~[RoseStacker-1.5.34-SNAPSHOT.jar:?]
at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:80) ~[paper-api-1.21.6-R0.1-SNAPSHOT.jar:?]
at org.bukkit.plugin.RegisteredListener.callEve```...
Fixes the javadoc as both implementations of the PluginManager are treating the names case-sensitive. I assume the original javadoc is from Bukkit and was not updated, maybe the line can be removed fully?
[PaperMC/Paper] New branch created: fix/entity-desync-issues
Fixes projectile trajectory issues and itemframes changing their location on the client when changing direction.
Before:
https://github.com/user-attachments/assets/1d55686d-3af8-4ec9-9bfc-b413e67324c3
After:
https://github.com/user-attachments/assets/5cdd3bea-d5b9-48ec-a441-7d36fe8c033d
IMO, dont change SimplePluginManager, that is not technically api.
Else looks good to me.
Should I maybe just delete the javadoc there? Sounds better than leaving it wrong
I am not quite sure about extending Position like that, as its not really a position since it doesnt hold the y coordinate (and assuming its zero isnt great ngl)
I am not sure, would be curious what @Machine-Maker thinks, but I think potentially having different types here would be fine.
e454fef Add support for private constructors in plugin mai... - Wiicart
Well if you are using that class you're technically wrong in the first place ๐
Not sure about it, it's probably fine ngl.
[PaperMC/Paper] New branch created: fix/leash-knot-event
Track when knots are created and only fire the event then
[PaperMC/Paper] New branch created: fix/registry-access-in-blockentity
076890d Fix #12722 - Owen1212055
Use our getRegistryAccess to null check against world
6abf5f0 Avoid and discourage use of Maven Central as a CDN... - jpenilla
[PaperMC/Paper] branch deleted: backport/12689
also ctrl+f and remove at least half of the mentions of the word "currently" (especially in event headers)๐ฉ
If it's just for reconfiguration, call it completeReconfiguration
This should be shortened/reworded a bit, like:
WARNING: Legacy PlayerLoginEvent usage detected!
This event forces an alternative player loading path that is
deprecated and will be removed in a future release.
See the PlayerLoginEvent javadocs for more information.
Please notify the following plugin developers: %s
Just getConnection to be in line with the other connection getters in and outside of events
Hi everyone,
I pushed a commit last week based on the previous feedback. If anyone gets a chance, Iโd really appreciate it if you could take a quick look and let me know if itโs okay as is โ or if thereโs anything else I should add.
Thanks again for all the support!
Best regards,
Guilherme Corvelo
Good afternoon, put on your prodovy server, your experimental build Paper 1.21.6 on the site version: 28.
But my players have encountered a problem with farms and loading cars!
I attach a photo of the bug, the wagon does not break when colliding with the cauldron with lava
P.S. on other versions below 1.21.6 all worked correctly
Is your feature request related to a problem?
Good afternoon, put on your prodovy server, your experimental build Paper 1.21.6 on the site version: 28.
But my players have encountered a problem with farms and loading cars!
I attach a photo of the bug, the wagon does not break when colliding with the cauldron with lava
P.S. on other versions below 1.21.6 all worked correctly
Describe the solution you'd like.
Describe alternatives you've considered.
Other
Discussion Category: Ideas
The reason for making the column ones extend position so that they can be used for... something. Because adding a new type which basically does nothing but hold two numbers, but you cannot do anything with that class, is kinda weird in my opinion.
Then again, there is no API that I can think of which would deeply yearn for not having a y variable, so idk. Maybe some Location getLocationAt(double y) on those so that you can at least retrieve a location easily could be useful as a utility? No clue
aa6ee44 Re-add global region scheduler tick erroneously re... - Spottedleaf
Stack trace
[22:52:03 ERROR]: Encountered an unexpected exception
java.lang.NoSuchFieldError: Class io.papermc.paper.datacomponent.DataComponentTypes does not have member field 'io.papermc.paper.datacomponent.DataComponentType$NonValued HIDE_TOOLTIP'
at paper-brigadier-crashing-0.0.1-SNAPSHOT.jar/io.github.nahkd123.paperbrigadiercrash.PaperBrigadierCrashMain.crashTestCommand(PaperBrigadierCrashMain.java:13) ~[paper-brigadier-crashing-0.0.1-SNAPSHOT.jar:?]
at com.mojang.brigadier.context.ContextChain.runExecutable(ContextChain.java:73) ~[brigadier-1.3.10.jar:?]
at net.minecraft.commands.execution.tasks.ExecuteCommand.execute(ExecuteCommand.java:30) ~[paper-1.21.6.jar:1.21.6-33-aa6ee44]
at net.minecraft.commands.execution.tasks.ExecuteCommand.execute(ExecuteCommand.java:13) ~[paper-1.21.6.jar:1.21.6-33-aa6ee44]
at net.minecraft.commands.execution.UnboundEntryAction.lambda$bind$0(UnboundEntryAction.java:8) ~[paper-1.21.6.jar:1.21.6-33-aa6ee44]```...
This doesn't fix the issue. Just from looking over the diff it seems like you did the same thing that i previously said will stall the server. Now its just behind a config flag.
I would like to see a configuration option that allows us to configure the 32/10/32 block radius that way people who would like to change this behavior can do so accordingly.
^ this is what owen asked for and would fix the issue
[PaperMC/Paper] Issue opened: #12730 Arrows loosing owner, after the owning player leaves the server
Expected behavior
In Vanilla, Arrows keep Owner, and still have the owner after reconnecting, even if the arrow gets moved by piston, slime blocks etc.
Observed/Actual behavior
In Paper, it looses its owner, i think its under the condition, that its getting moved.
Steps/models to reproduce
https://www.youtube.com/watch?v=FnUE-ZaALLw&t
I tested it with his contraption
(in the "Other" section, i also added a video of mine, where i show the issue)
this zip file includes a schematic, which is shown in the Video of Squibble
Plugin and Datapack List
No Plugins/Datapacks
Paper version
Paper 1.21.4 Build 232
Other
Hey there,
as the title says, currently arrows are loosing its owner, i think, its under a certain condition.
Yes, the arrow is in a chunkloaded chunk, and it never gets unloaded.
Im shooting the arrow, it has an owner (me), then im leaving and rejoining the server, and its owner is gone. Im not restarting the server!
I tested...
Nesting limit for component flattening set to an arbitrary value for now, will be configurable via property + SPI in Adventure 4.24.0. This PR is ready to go now, Adventure 4.24.0 coming soon!
wow extra space I can't believe it
private final Map<UUID, StoredCallback> callbacks = new HashMap<>();
updating tests, then merging
Expected behavior
When a player breaks a block without the correct tool, it still plays the break particles and sound even if no item is dropped. Block#breakBlockNaturally should do this if the triggerEffects parameter is true.
Observed/Actual behavior
There are no particles or sound when triggerEffects is true.
Steps/models to reproduce
Call Block#breakBlockNaturally on a cobblestone block with triggerEffects set to false
Plugin and Datapack List
Plugins: packetevents, machinery (my own)
No custom datapacks.
Paper version
This server is running Paper version 1.21.6-33-main@aa6ee44 (2025-06-24T15:21:35Z) (Implementing API version 1.21.6-R0.1-SNAPSHOT)
You are running the latest version
Previous version: 1.21.6-30-e454fef (MC: 1.21.6)
Other
One option to fix this is to just add a new method with another boolean parameter such as ignoreInvalidToolForEffects, or just edit the current behavior.
This is likely intended to be subtractive rather than additive, this would require a forceEffects boolean or something
Closes https://github.com/PaperMC/Paper/issues/11722
Pending javadocs and need to look what to do for potentialSpawns in the registry builder.
Discussion Category: Ideas
your image didn't upload, we would need an issue report, and likeky a spark report to validate some configuration aspects
Discussion Category: Ideas
Minecraft updated the lava cauldron (boiler) hitboxes in 1.21.6, your farm will have to be updated.
Discussion Category: Ideas
[PaperMC/Paper] branch deleted: fix/registry-access-in-blockentity
5d8927e Use mutable boolean + check if actually spawned - Owen1212055
Fixes/Adds the feature for #12731 by adding Block#breakNaturally(@NotNull ItemStack tool, boolean triggerEffect, boolean dropExperience, boolean forceEffect);.
Let me know if there is anything I should change.
Fixes/Adds the feature for #12731 by adding Block#breakNaturally(@NotNull ItemStack tool, boolean triggerEffect, boolean dropExperience, boolean forceEffect);.
Let me know if there is anything I should change.
Hi,
so I've dug a bit into the code and found the error:
- the getOwner method returns null, if the player is offline.
- the setOwner method sets the uuid to null (and some other stuff too, but that doesn't matter...) as an addition by paper
- the deflect method calls setOwner with its owner argument.
- the hitTargetOrDeflectSelf method calls deflect method with getOwner also as an addition by paper
So if the hitTargetOrDeflectSelf method is called, while the player is offline, the uuid is reset.
A fix for this would be to check if the owner is null at the deflect method before calling setOwner, but this is a paper addition and I dont know if I'm ruining something so if anyone knows something about their usages, I'd be really happy.
Cheers,
Toniboni.
Be interesting to know if the underlying issue that is trying to fix is resolved, if not, we just need to migrate away from using the Entity itself and just restoring the EntityReference, I'd imagine
Expected behavior
The server should NOT kick the player, because it wouldn't make sense when doing it.
Observed/Actual behavior
The server kicks the player for "Flight is not enabled on this server" when doing the simple bug.
Steps/models to reproduce
Here's a video of me reproducing it.
- Ensure you have
allow-flightset to false in server.properties, and you are in survival mode. - Sit on your horse.
- Ride your horse to the Happy Ghast on it's head.
- Wait a few seconds.
- The server kicks you for "Flight is not enabled on this server".
Plugin and Datapack List
/plugins:
[22:17:46 INFO]: โน Server Plugins (5):
[22:17:46 INFO]: Paper Plugins (1):
[22:17:46 INFO]: - Veinminer
[22:17:46 INFO]: Bukkit Plugins (4):
[22:17:46 INFO]: - GSit, ProtocolLib, SkinsRestorer, SystemChat
/datapack list:
[22:18:43 INFO]: There are 3 data pack(s) enabled: [vanilla (built-in)], [file/bukkit (world)], [paper (built-in)]
[22:18:43 INFO]: There are no more data```...
Is your feature request related to a problem?
As of now, blocking damage leads to no knockback for the player and Mojang has not added a way to modify how much knockback resistance blocking causes. Therefore, to allow the player to take full knockback, the base and factor fields both have to be zero and the damage reduction can be applied using existing functionality within EntityDamageByEntityEvent.
Describe the solution you'd like.
A method called isBlocked() where it returns true if the damage was blocked (either by a shield or an item with the blocks_attacks component) and false if otherwise.
Describe alternatives you've considered.
I have found an alternative method to get the feature I need, however, the code used is deprecated.
@EventHandler public void onEntityDamage(EntityDamageByEntityEvent event) { if (!(event.getEntity() instanceof Player player)) return; if (!MaterialTags.SWORDS.isTagged(player.getActiveItem())) return; if...
If its just an "Audience", how to I, in a callback where I only have the audience, get access to the methods I can use on the connection?
Expected behavior
You can teleport with your vehicle
Observed/Actual behavior
No you can't, if you don't add that flag you will get ejected, if you add it you are not able to teleport
Steps/models to reproduce
try
entity.teleport(entity.getLocation().add(0,1,0), TeleportFlag.EntityState.RETAIN_VEHICLE)
Plugin and Datapack List
Not related
Paper version
This server is running Paper version 1.21.5-114-ver/1.21.5@a1b3058 (2025-06-18T10:59:02Z) (Implementing API version 1.21.5-R0.1-SNAPSHOT)
You are running the latest version
Previous version: 1.21.5-103-2ba1675 (MC: 1.21.5)
Other
No response
Expected behavior
Download API should be listed in order of release, with the oldest version displayed first.
In addition, I cannot access "https://api.papermc.io/docs".
Request URL: https://api.papermc.io/v2/projects/paper
<details><summary>Expected Response</summary>
<pre><code>
{
"project_id": "paper",
"project_name": "Paper",
"version_groups": [
"1.8",
"1.9",
"1.10",
"1.11",
"1.12",
"1.13",
"1.14",
"1.15",
"1.16",
"1.17",
"1.18",
"1.19",
"1.20",
"1.21"
],
"versions": [
"1.8.8",
"1.9.4",
"1.10.2",
"1.11.2",
"1.12",
"1.12.1",
"1.12.2",
"1.13-pre7",
"1.13",
"1.13.1",
"1.13.2",
"1.14",
"1.14.1",
"1.14.2",
"1.14.3",
"1.14.4",
"1.15",
"1.15.1",
"1.15.2",
"1.16.1",
"1.16.2",
"1....
Stack trace
[09:08:36 ERROR]: [ca.spottedleaf.dataconverter.minecraft.versions.V4290] Failed to convert json to nbt: Tricky Tracks
com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Use JsonReader.setStrictness(Strictness.LENIENT) to accept malformed JSON at line 1 column 9 path $
See https://github.com/google/gson/blob/main/Troubleshooting.md#malformed-json
at com.google.gson.JsonParser.parseReader(JsonParser.java:116) ~[gson-2.11.0.jar:?]
at com.google.gson.JsonParser.parseString(JsonParser.java:92) ~[gson-2.11.0.jar:?]
at ca.spottedleaf.dataconverter.minecraft.versions.V4290$1.convert(V4290.java:235) ~[paper-1.21.6.jar:1.21.6-DEV-d7510ef]
at ca.spottedleaf.dataconverter.minecraft.datatypes.DynamicDataType.convert(DynamicDataType.java:82) ~[paper-1.21.6.jar:1.21.6-DEV-d7510ef]
at ca.spottedleaf.dataconverter.minecraft.walkers.generic.WalkerUtils.convert(WalkerUtils.java:89) ~[paper-1.21.6.jar:1.21.6-DEV-d7```...
upgrade issues should be filed against data converter
changing it in SimplePluginManager is fine imo, can't hurt
Be interesting to know if the underlying issue that is trying to fix is resolved, if not, we just need to migrate away from using the Entity itself and just restoring the EntityReference, I'd imagine; How there would be any difference here vs a vanilla server makes little sense on the surface
Iยดm not quite sure what youยดre about to tell me... Does this mean like, i may need to fix it myself, by coding a plugin, or that you are now aware of this issue?
Be interesting to know if the underlying issue that is trying to fix is resolved, if not, we just need to migrate away from using the Entity itself and just restoring the EntityReference, I'd imagine; How there would be any difference here vs a vanilla server makes little sense on the surface
So in the newer versions it actually is using a entityReference, but that doesn't fix the issue, as it still can set the owner to null. The difference between paper and vanilla is, that in paper the deflect method calls setOwner, wich in vanilla is not performed...
and because the owner argument of the deflect method is null if called with getOwner as the argument, it sets the owner to null.
This close https://github.com/PaperMC/Paper/issues/12737
currently the API with the passengers flags works for normal entities but when the passenger is a player this not works, the PR move that logic when need teleport and retain-passengers to use the NMS teleport like happen with crossDimension teleport and if not just use the snapTo
An example running
this.getServer().getCommandMap().register("fallback", new BukkitCommand("test1", "cool hi command", "<>", List.of("hialias")) {
@Override
public boolean execute(@NotNull CommandSender sender, @NotNull String commandLabel, @NotNull String[] args) {
if (sender instanceof Player player) {
Entity vehicle = player.getVehicle();
if (vehicle != null) {
vehicle.teleport(vehicle.getLocation().clone().add(0, 5, 0), TeleportFlag.EntityState.RETAIN_VEHICLE, TeleportFlag.EntityState.RETAIN_PASSENGERS);
}
}
return true;
}
});
https://github.com/user-attachments/assets/19e0a215-405a-4c30-aa81-847451d848bf
[PaperMC/Paper] New branch created: dev/1.21.7
Last updated for: a939eea8b03fda79418ac47399fd3f0c0380d248.
Download the Paperclip jar for this pull request: paper-12741.zip
<details>
<summary>Maven Publication</summary>
The artifacts published by this PR:
- :package:
io.papermc.paper:dev-bundle:1.21.7-R0.1-SNAPSHOT - :package:
io.papermc.paper:paper-api:1.21.7-R0.1-SNAPSHOT
Repository Declaration
In order to use the artifacts published by the PR, add the following repository to your buildscript:
repositories {
maven("https://maven-prs.papermc.io/Paper/pr12741") {
name = "Maven for PR #12741" // https://github.com/PaperMC/Paper/pull/12741
mavenContent {
includeModule("io.papermc.paper", "dev-bundle")
includeModule("io.papermc.paper", "paper-api")
}
}
}
</details>
I'm trying to surmise what the issue is in order to work out wher I or somebody else needs to go;
<img width="1325" alt="Image" src="https://github.com/user-attachments/assets/c6163cd5-1a04-46df-b376-26fc996aeaf4" />
I am trying to gather how you've tested this to determine if this is just a single-player vs. server quirk, or if Paper has regressed some behaviour here, especially as I don't immediately see any difference in the logic flow that would impact anything here. You're pointing to a method call which is supposed to only exist in paper, but, I cannot see where you're spotting that
I'm trying to surmise what the issue is in order to work out wher I or somebody else needs to go;
<img width="1325" alt="Image" src="https://github.com/user-attachments/assets/c6163cd5-1a04-46df-b376-26fc996aeaf4" />
I am trying to gather how you've tested this to determine if this is just a single-player vs. server quirk, or if Paper has regressed some behaviour here, especially as I don't immediately see any difference in the logic flow that would impact anything here. You're pointing to a method call which is supposed to only exist in paper, but, I cannot see where you're spotting that
Its not a singeplayer vanilla vs paper thingy.. I tested it on a vanilla server, and on a paper server.
Both multiplayer.
The suspicious call is in the
//Paper start - Fix PickupStatus getting reset
if (this instanceof AbstractArrow arrow) {
arrow.setOwner(owner, false);
} else {
this.setOwner(owner);
}
//Paper end - Fix PickupStatus
This is, as the paper comment suggests only in paper, so only paper makes this setOwner call with (sometimes) null as the argument, so this only exists in paper, as only paper has this call.
The call already exists in vanilla, as shown, paper just optionally disables a bunch of extra logic in that method from running downstream in order to prevent some other variables being updated erroniously
Oh my fault, read it wrong. Another cause could be the
// Paper start - Refresh ProjectileSource for projectiles
else {
this.ownerUUID = null;
this.cachedOwner = null;
this.projectileSource = null;
}
// Paper end - Refresh ProjectileSource for projectiles
wich if I read it correctly is from paper.
Just checked, as the null check isn't present anymore, they introduces the bug to vanilla...
How did you check it? Did you remove the null check by yourself?
Ahhh okay good to know... so now even in vanilla minecraft, since 1.21.6 this bug is present.. dang it.. thats not nice to hear, that reconnecting will now always clear the owner tag from an moving arrow...
Maybe there is a option for papermc to add like an "config-option" for this arrow thingy?
Well I made a bug report and would wait what Mojang does...
ea10fa4 Don't mutate the position of Items for MC-4 Fix (#... - Owen1212055
[PaperMC/Paper] branch deleted: feat/better-mc4-fix
This change introduces support for plugin developers to generate and emit ItemStack instances based on a given LootContext, aligning with the existing loot generation mechanics. It allows plugins to better integrate with Minecraft's loot system and produce contextual rewards or drops.
aa6cd74 Remove unnecesary item check for ServerboundPlayer... - Doc94
IMO, dont change SimplePluginManager, that is not technically api.
Else looks good to me.
c9e89f4 Expose arrow velocity in EntityShootBowEvent for m... - Lulu13022002
Turns out it's happening for vanilla either. Going to report the bug in the Mojira bug tracker.
This sorta check has been broken for a decade, the general advice has been to disable it and use an anti-cheat, idk if anybody really wants to throw time into this stuff when most people who care about that sorta hack would be better off using an AC anyways
I want to mention that the retain_vehicle flag also doesn't work for non-player entities
Migrating events to interfaces provides several benefits
- Hides constructors from API (actually, not by javadoc contract)
- Lazy type conversion
- More flexible type hierarchies.
Can do with asm-utils already.
They should not extend FinePosition or Position or be related in any way. If we want to add types for this, it should literally just be a separate interface with 2 methods to get the x and z. Don't need methods to mutate or anything. Cause like you said, I don't think its more useful than just as way to get values from the argument.
This PR takes a few of things related to the cause of player teleport
- In teleport command if a vehicle has a player in passenger the cause is UNKNOWN
- Caused because when move the player the cause is not passed and its reset when generate a new TeleportTransition
- UNMOUNT its used when player dismount the vehicle
- Minor fix in docs
Expected behavior
In previous builds you can set the yield of an explosion to 0, preventing the blocks from dropping. This allows for patching creeper holes without duping blocks.
Observed/Actual behavior
The blocks are dropped despite the following code in use (which has worked for a long time.)
// Remove the drops from the explosion.
if (event instanceof EntityExplodeEvent)
((EntityExplodeEvent) event).setYield(0);
else if (event instanceof BlockExplodeEvent)
((BlockExplodeEvent) event).setYield(0);
Steps/models to reproduce
Create a plugin that listens to the EntityExplodeEvent, and sets the explosion yield to 0.
Place a creeper in the world surrounded by explodable blocks and ignite it with a flint & steel.
The creeper will explode and the blocks will drop despite the explosion yield being 0.
Plugin and Datapack List
Only a plugin that reduces an explosion yield to zero is needed.
Paper version
Paper 1.21.6-44-main@4e1a255 (...
Expected behavior
The Citezines Should Show &e&lAuction In The Expcted Colors So bold and Yellow
Observed/Actual behavior
They Show <yellow><b>Auction In White
Steps/models to reproduce
Install Citazines 2.0.39 On Paper 1.21.6-44 Restart Or Reload And In The Logs Should Show This
Plugin and Datapack List
AnimatedScoreboard (0.3.7), AuthMe (5.6.0-bCUSTOM), AxTrade (1.18.0), BetterRTP (3.6.13), BroadcastPlus (3.0.0), Cestino (1.0), Citizens (2.0.39-SNAPSHOT (build 3835)), CitizensCMD (2.7.2), CloudnodeMSG (1.0.4), Essentials (2.21.1), EssentialsChat (2.21.1), GCore (8.50.0), GHolo (2.2.1), GriefPrevention (16.18.4), HeadDatabase (4.21.2), HeroAction (4.0), InvSeePlusPlus (0.30.0), InvSeePlusPlus_Clear (0.30.0), InvSeePlusPlus_Give (0.30.0), KeepItems (1.3.2), LuckPerms (5.5.8), MineSpawners (2.7), Multiverse-Core (5.0.2), PlaceholderAPI (2.11.6), PlayTime (3.6), SimpleSit (1.7.1), SimpleTpa (7.6), SkinsRestorer (15.7.2), Skript (2.11.2), T2C-Alias (1.5), T2CodeLib...
The Text Bugger is <yellow><b>Autction
With < yellow > < b > without spaces
This is not the adventure repository.
Adventure platform (https://github.com/KyoriPowered/adventure-platform) is on a different org.
Thank you!
On Thu, Jun 26, 2025, 9:58โฏAM Nassim Jahnke @.***>
wrote:
Closed #12745 https://github.com/PaperMC/Paper/issues/12745 as
completed via e382e68
https://github.com/PaperMC/Paper/commit/e382e6872ca9613c26697909ebeb7f0f6902614c
.โ
Reply to this email directly, view it on GitHub
https://github.com/PaperMC/Paper/issues/12745#event-18338233926, or
unsubscribe
https://github.com/notifications/unsubscribe-auth/AAGWZDGJAQRJVX6EJBYFNZL3FQDBRAVCNFSM6AAAAACAF63WQSVHI2DSMVQWIX3LMV45UABCJFZXG5LFIV3GK3TUJZXXI2LGNFRWC5DJN5XDWMJYGMZTQMRTGM4TENQ
.
You are receiving this because you authored the thread.Message ID:
@.***>
Hi everyone,
Apologies for the confusion โ I made a mistake when committing earlier, so please disregard my previous commit. I am going to push the corrected changes in a bit.
Sorry for the inconvenience, and thank you all again for your time and patience!
Best regards,
Guilherme Corvelo
needs to set proper user agent header, i.e. Paper/1.21.5 (https://papermc.io)
the system proper changed its meaning and thus should be named better now, something like paper.disableStartupVersionCheck
[PaperMC/Paper] New branch created: cat/use-dropped-stacks-for-stats
3dc851b Use dropped item for stats info - electronicboy
We are already using the dropped stack to determine the type, we
might as well also use it for the count, given that plugins can already
mutate the type, might as well let them mess with the amount.
35b2c6e Use dropped item for stats info (#12747) - electronicboy
[PaperMC/Paper] branch deleted: cat/use-dropped-stacks-for-stats
bd79e20 [ci skip] PluginManager#getPlugin and PluginManage... - FlorianMichael
Rather than having two methods that both do the same thing, why not have just one?
I mean, the map one is required for the multi-registering one. But I felt like making the single-one be wrapped into a map would be kind of stupid, but then again there is no particular reason apart from that. Sure, I can make them be just one method
[PaperMC/Paper] branch deleted: feat/config-api
Due to this being a pretty low priority issue because we are not currently breaking vanilla behavior and there being a lot of back and forth we have decided to not move forward with this PR. Thank you for your effort anyways!
Should i also change the references to fill now? and make all of them use an user agent? also what would be the correct channels now for checking if a build is experimental or not
Hey thanks for rebasing, is there anything still blocking this PR?
Time, and the nature of concern around merging such things right before we jump onto the next MC build; hopefully we'll get this into .7
Yes, you should change all API calls to Fill. You can find a new API reference in the Swagger UI, as noted in the announcement: https://fill.papermc.io/swagger-ui/index.html
The current loot table API is generally broken, I don't think we should be expanding upon this thing, we really should just replace it with API that allows people to properly create a loot context and add a method to fill it, rather than expanding this already flawed and fairly broken API
switched build checking to the /latest endpoint, should be good to review now i dont foresee any changes other than related to reviews
Very well, then. We came to this idea from brainstorming ways to create this support without fundamentally changing the API; however, if it's needed, then we can look into it. I have heard, however, that this sort of big change would not be very welcome due to the team's current focus being on keeping the API up to date, more so than these big ideas.
Would this sort of change be welcomed?
Expected behavior
Expected behavior
When the fix-climbing-bypassing-cramming-rule: true option is enabled, entities should not collide with each other, similar to vanilla Minecraft behavior. The cramming rule should still function to kill entities when there are too many in a confined space, without causing collision issues.
Entities should not collide, like in vanilla, with cramming rule killing excess entities instead.
Entities in scaffolds collide and push each other with fix-climbing-bypassing-cramming-rule: true enabled.
Observed/Actual behavior
Observed/Actual behavior
With fix-climbing-bypassing-cramming-rule: true enabled, entities now collide with each other, which is not the intended behavior. This collision should not occur, as it deviates from vanilla mechanics where entities do not collide under these conditions.
Steps/models to reproduce
Steps/models to reproduce
- Set up a PaperMC server with the latest version.
- Enable
fix-cl...
Expected behavior
i should be able to login and play
Observed/Actual behavior
i cannot login due to "Internal Exception: java.lang.IllegalStateException: void future"
Steps/models to reproduce
have a paper server running on 1.21.4 and update to 1.21.6 and then try to login.
Plugin and Datapack List
CMI, CMILib, CoreProtect, DiscordSRV, FastAsyncWorldEdit, FastChunkPregenerator, Kingdoms, LuckPerms, mcMMO, PlaceholderAPI, ProtocolLib, TARDIS, Themis, ThemisToDiscord, Vault, ViaBackwards, ViaVersion, Votifier, WorldGuard, WorldManager
Paper version
This server is running Paper version 1.21.4-232-ver/1.21.4@12d8fe0 (2025-06-09T10:15:42Z) (Implementing API version 1.21.4-R0.1-SNAPSHOT)
(we had to restore from backup)
Other
the only error in the console was litterally this line:
[20:48:34 INFO]: friskylime (/10.0.2.208:60430) lost connection: Internal Exception: java.lang.IllegalStateException: void future
no other stack traces or anything else useful a...
6454f57 integrate into adventure codecs - Machine-Maker
This is an issue with something using the packetevents library
On Fri, 27 Jun 2025 at 04:04, Mrs Feathers @.***> wrote:
Mrs-Feathers created an issue (PaperMC/Paper#12749)
https://github.com/PaperMC/Paper/issues/12749
Expected behaviori should be able to login and play
Observed/Actual behaviori cannot login due to "Internal Exception:
java.lang.IllegalStateException: void future"
Steps/models to reproducehave a paper server running on 1.21.4 and update to 1.21.6 and then try to
login.
Plugin and Datapack ListCMI, CMILib, CoreProtect, DiscordSRV, FastAsyncWorldEdit,
FastChunkPregenerator, Kingdoms, LuckPerms, mcMMO, PlaceholderAPI,
ProtocolLib, TARDIS, Themis, ThemisToDiscord, Vault, ViaBackwards,
ViaVersion, Votifier, WorldGuard, WorldManager
Paper versionThis server is running Paper version @.***
(2025-06-09T10:15:42Z) (Implementing API version 1.21.4-R0.1-SNAPSHOT)(we had to restore from backup)
Ot************...
Is your feature request related to a problem?
Right now, some features are hardcoded using block tags. One example of this is LeavesBlock checking if a block is a log to update the state.
Describe the solution you'd like.
It would be nice to be able to implement custom predicates for block tags.
One potential way to do this would be to have some way to register a predicate on a block type with some sort of registerTagPredicate(Plugin, TagPredicate), where TagPredicate looks something like this:
interface TagPredicate<T> extends Keyed {
boolean test(Tag<T> tag, BlockData blockData, @Nullable Location location);
}
The Location would probably have to be nullable because some checks for block tags might not have a location context.
I'm not sure exactly how this would be implemented, but if this is a feature that could be added I can make a PR for it.
Describe alternatives you've considered.
I don't know if there are alternatives, for leaves I know you can listen...
tags are baked into the registry and based on the type which is synced with the client, there is 0 context of locationality, etc; We can't run every single predicate whenever we're asked "what tags apply to this element", this would be highly invasive as it would require working how tags work, and is generally just not feasable (or desirable)
Is there a reason why you decide to handle the custom actions here?
Instead use this method MinecraftServer#handleCustomClickAction(ResourceLocation id, Optional<Tag> payload)
This also reduced my IDLE RAM Usage on my Server from 7GB to 1.5GB
This was used by some primitive invsee plugins, which were broken by vanilla adding 2 more items to player inventory
Can be tested with just player.openInventory(player.getInventory());
Currently throws https://pastes.dev/swutgCc86m
Ok, I added another approach. You can manually specify a callback that runs. Create it with
DialogAction#customAll(Key, DialogActionCallback, ClickCallback$Options)and use it in the actions.
why even add a key, feels like this should just create a key internally
Since Range is already used for brigadier, might be okay to use guava again?
need to do the null check with asArgument like the other calls, seems the damage type entry misses a lot of those too. Also it's useless to check if the value is configured in the build() method since it's never null
Is your feature request related to a problem?
It would be nice to have this feature to prevent / change the distance of leaves when their distance is updated internally.
This allows for making other blocks behave like leaves and logs. One example is if you want a note block with a specific state to act like a log. Then when the event is called, you can check the neighbors and set the leaves distance to 1 if one of the neighbors is the noteblock. This allows texture packs to be used to make custom logs without having to deal with all the different events that can cause a leaves distance to be updated, such as placing a block, breaking a block, pushing a block with a piston, etc.
Describe the solution you'd like.
I made a PR for the event which I will link to this issue.
Describe alternatives you've considered.
An alternative is to use the BlockPhysicsEvent, but that is a general-purpose event that also might not get called every time the distance of leaves are updated....
Yeah, I think you're right. Will remove.
I did not see a way to make a DialogAction close the dialog? Am I missing something or is that just not a thing? I'd be needed if you don't auto close it.
You don't have to specify any action. In say, a confirmation dialog, the dialog will follow the DialogAfterAction on any button click.
This feels like an event that can be called a ton, maybe we can wrap the call to first check if there are any registered listeners. This is done for several other events. You can do LeavesDistanceUpdateEvent.getHandlerList().getRegisteredListeners and check if there are any listeners.
you could even cache that value as a boolean on ServerLevel, and then only check that bool. I think we do that for the InventoryMoveItemEvent.
It feels weird to have these as methods. Aren't these constant values? just the min/max of that specific block state property?
I don't think they need to be exposed to the API like this (especially in lieu of https://github.com/PaperMC/Paper/pull/11963 which lets people access them directly.
I would just have the setter check against a hardcoded min/max in a precondition.
I was curious about that... should we require setting spawn conditions? It's not optional in the codec. The only reason we default to EMPTY was because we didn't have API for it at the start. What do you think?
Is there some constant or some calculation we can do from the nms.Inventory type to automatically have this value update?
Stack trace
Plugin and Datapack List
Paper Plugins (4):
- CraftBook5, HuskHomes, LiteEco
Bukkit Plugins (31):
ChunkSpawnerLimiter, Chunky, ColoredSigns, CommandBook, DiscordSRV, FarmControl, FlyingCarpet, LogBlock, LogBlockQuestioner, LuckPerms, LWC, mcMMO, Multiverse-Core, Multiverse-Portals, OpenInv, ProtocolLib, QuickShop-Hikari, RedstoneClockDetector, SignRewards, TitleManager, VanishNoPacket, Vault, VaultChatFormatter, ViaVersion, Votifier, WorldBorder, WorldEdit, WorldGuard, ZHorse
Actions to reproduce (if known)
No response
Paper version
This server is running Paper version 1.21.6-46-main@35b2c6e (2025-06-26T18:53:41Z) (Implementing API version 1.21.6-R0.1-SNAPSHOT)
Other
No response
I can remove the getMinDistance and getMaxDistance, I wasn't sure if I should hardcode those or not. For the part about checking if listeners are registered, would it make more sense to have the event be a config option like the InventoryMoveItemEvent? I'm not sure if caching a bool using the count of the number of listeners would work because what if a plugin enables after the world loads? Then the event might get called before the plugin has a chance to register a listener.
This pull was created to solve the compression overhead of serialization methods.
It also replaces java.io.*Stream with non-synchronized alternatives for byte[] NBT output.
This pull does not change the existing user-facing behavior of serialization.
What it adds:
- boolean compress serialization overloads
- automatically decompresses if the input byte[] is GZip compressed.
- Direct NBT InputStream/OutputStream serialization overloads
- Exposed utility method in UnsafeValues to determine compression.
<details>
<summary>Testing done</summary>
public void createComplexItemStack() {
ItemStack aCoolSword = ItemType.DIAMOND_SWORD.createItemStack(meta ->
meta.addEnchant(Enchantment.SHARPNESS, 10, true));
ItemStack someStone = ItemType.STONE.createItemStack(38);
ItemStack thing = ItemType.STICK.createItemStack(meta -> {
var pdc = meta.getPersistentDataContainer();
pdc.set(NamespacedKey.minecraft("some_bytes"), Persisten_```...
Expected behavior
ENTITY_LEASH_KNOT_PLACE should be there, its still a valid game sound? entity.leash_knot.break https://minecraft.wiki/w/Lead#Sounds
Observed/Actual behavior
all lead sounds are missing
Steps/models to reproduce
1.21.6 read sound.class
Plugin and Datapack List
N/A
Paper version
1.21.6 46
Other
No response
Expected behavior
commodore needs updated to support renamed lead sounds
Observed/Actual behavior
a
Steps/models to reproduce
a
Plugin and Datapack List
a
Paper version
1.21.6 46
Other
No response
There are some ways to currently calculate that, but I feel like they all would have same stability as just hardcoding this. I can just add a separate entry in base switch to always return GENERIC_9x4 for player to avoid size checks, which in my opinion would be more stable
also Sound.ENTITY_WOLF_HOWL missing (although this sound is actually removed, is there a suitable substitute? maybe entity.wolf.whine?
This sound was removed from the game in Vanilla version 1.21.5 when they introduced all of the Wolf Sound variants. I know, it is sad.
Also I could remove handling of player inventory, as inventory type already has the good menu type, so the default case would handle it perfectly fine
Currently the enum still has outdated information about the inventory type
What happens if it encounters zlib/deflate compressed NBT?
It will fail to deserialize it.
I suppose I should specify that more clearly in the Javadocs.
I only implemented the automatic header check so that plugin developers wouldn't have to keep track of serializeAsBytes(true|false)
I thought about supporting other formats, but figured it was out of scope for Paper to handle this.
Instead I decided to implement the far more flexible InputStream/OutputStream overloads.
This PR convert the entirety of the /paper command to use the Brigadier command framework.
I had to do some (possibly?) very intrusive changes to the moonrise diff, by which I mean that I am no longer sure if one can simply drop the patch and it would still compile correctly. I just hope whoever ends up having to merge this has some spare time ๐
.
Regardless, these subcommands are not fully tested as of yet and may contain bugs. I will un-draft the PR once I believe all of them to be fixed.
Hi, it's Sound.ITEM_LEAD_TIED now.
I know, but plugins are supposed to be backwards compatible, right?
also Sound.ENTITY_WOLF_HOWL missing (although this sound is actually removed, is there a suitable substitute? maybe entity.wolf.whine?
This sound was removed from the game in Vanilla version 1.21.5 when they introduced all of the Wolf Sound variants. I know, it is sad. Mojang considered it unused - so no real replacement exists.
Sure, but maybe we get a silent sound or some random sound as replacement instead of NoClassDefFoundError
795dd14 Remove a bunch more experimental annotations (#127... - Machine-Maker
[PaperMC/Paper] branch deleted: feature/remove-more-experimentals
no, I don't think so for "construction". The guava range has more possible values than the vanilla MinMaxBounds.Doubles. For example, in guava ranges, you can have "open" ranges. That isn't possible to represent in MinMaxBounds.Doubles, they are all closed ranges.
Why not a .resetColor method rather than appropriating null for a different outcome? ...pedantically that hides potential NPEs too.
The internals are using optionals here, so it is kinda expected to work with empty optionals too.
It doesn't hide any NPEs because it is optional, the getColor method internally defaults to the real default.
Also, when spawning a new area effect cloud, the color is an empty optional.
Expected behavior
When trading with villagers, the cost of items like potatoes should follow standard Minecraft mechanics. Prices may increase gradually due to demand when trading repeatedly, but they should not exhibit sudden, unexplained jumps (e.g., from 26 to 45 in a single trade cycle). Discounts may apply to some trades, but costs should remain consistent and predictable across restocks and villagers.
Observed/Actual behavior
While trading with villagers, the cost of certain items, such as potatoes, sometimes increases dramatically after a few trades. For example:
Potatoes jumped from 26 to 45, then to 51, and continued rising (up to 64 or higher) with restocks.
This behavior is inconsistent: it affects some villagers but not others, and it can occur with different items.
Some trades show discounts while others inexplicably increase in price.
The issue occurs randomlyโsometimes affecting 4 out of 5 villagers tested, other times only 1 out of 15.
This persists even wit...
Can confirm, my tests:
- 12 farmers with potato trade
- Tick rate 1000
Vanilla
avrg: 25 potatoes per emerald
Start price: 26
decreased after first trade and pretty much never got more expensive or cheaper
Trading with the same villager multiple times in a row until maxed out while waiting for restock got the price to 38 after 8 trade cycles, 9: 58, 10: 40, 11: 61, 12, 64, 13: 58, 14: 64, after the 14th consecutive trade cycle it stayed close to/at 64
Villager data of most expensive villager: https://pastebin.com/X2sSfXyP
Trades in total: 1017
Paper
avrg: 42 potatoes per emerald
gradually increased with each trade cycle, rarely went down in price
Trading with the same villager multiple times in a row until maxed out while waiting for restock... -/-
stopped restocking after a few full consecutive trade cycles and after 14 minutes of waiting I gave up
Villager data of most expensive villager: https://pastebin.com/gJtYBuHB
Trades in total: 742
Open to feedback/no changes at all on all of these, but this is what caught my eye
Where can it be used? I don't see it
The public static Index NAMES on enums can be confusing depending on how high up the IDE puts it, I'd maybe make it private with a getter instead, but I have no strong opinion on that
The specialty naming seems a bit weird to me (also because the connotation is different to 'specific'), I would just go with ConfirmationType or ConfirmationDialogType etc., both for making it easier to find them and understanding what they are?
Just registryValueSet would also be fine since everything here is builders and the others don't have the suffix
Next step of #12183
Adds tasks to generate paper and vanilla datapacks and make the output consistent with what's in the server.
we do this a bunch of places in our types already, and adventure follows this pattern a ton too.
Is your feature request related to a problem?
Previously, there was a PredicateChoice in Paper, in which developers could make their own conditions for recipe when developing their plugins, but in the latest change from @Machine-Maker, this was removed and replaced with PotionMix, I do not understand why and for what purpose this was done.
Describe the solution you'd like.
Return the PredicateChoice that was suggested in this PR
https://github.com/PaperMC/Paper/pull/9996
Describe alternatives you've considered.
I tried to create a PotionMix, but it's not designed for anything other than potions, I can't use it to create a predicate that will check items by, for example, its namespace.
Other
Has none of the developers ever encountered the problem that, for example, there is an item that has its own nbt tag / namespace, you only need to check it, the display name may change, or lore
There has never been a general PredicateChoice in Paper.
I've dealt with this too.
There has never been a general PredicateChoice in Paper, only the 1 used exclusively for potions.
What do potions have to do with it? If this is an api that plug-in developers use, are you aware of their existence?
DialogList accepts RegistrySet
Previously, there was a PredicateChoice in Paper, in which developers could make their own conditions for recipe when developing their plugins
Is just false.
https://github.com/PaperMC/Paper/pull/9486 exists and was merged for potion mixes.
API for non potion mix recipes that takes a Predicate is in draft in PR https://github.com/PaperMC/Paper/pull/12017.
Such API has not existed and hence has not been "removed" by changes.
This is just a feature request for the expansion of this API, which is already tracked in the linked PR ๐
There has never been a general PredicateChoice in Paper, only the 1 used exclusively for potions.
var shapedRecipe = new ShapedRecipe(NamespacedKey.minecraft("test_recipe"),
new ItemStack(Material.DIAMOND_SWORD));
shapedRecipe.shape(" A ", " B ", " A ");
shapedRecipe.setIngredient('A', Material.DIAMOND);
var exactChoice = new RecipeChoice.ExactChoice(new ItemStack(Material.STICK));
exactChoice.setPredicate(new NamespacedPredicate(NamespacedKey.minecraft("test_recipe")));
shapedRecipe.setIngredient('B', exactChoice);
getServer().addRecipe(shapedRecipe);
It just existed, in ExactChoice I could install Predicate and conveniently use it in plugins, if I could write such code before and it worked properly, now how do I do it?
Previously, there was a PredicateChoice in Paper, in which developers could make their own conditions for recipe when developing their plugins
Is just false. #9486 exists and was merged for potion mixes. API for non potion mix recipes that takes a Predicate is in draft in PR #12017. Such API has not existed and hence has not been "removed" by changes. This is just a feature request for the expansion of this API, which is already tracked in the linked PR ๐
<img width="959" alt="Image" src="https://github.com/user-attachments/assets/74810412-2e7d-45b4-9645-62c5964459df" />
Is this what you call "tracked"? In my opinion, you have given up on this and do not want to return what was many months and possibly years ago.
Is this what you call "tracked"? In my opinion, you have given up on this and do not want to return what was many months and possibly years ago.
Yes the PR is not particularly active, nor are a lot of them as we have been stuck in keeping up with mojangs update cycle between 1.21.6 and 1.21.7.
The PR is open and we will get it to.
As tony highlighted, you seem to be confused about paper vs purpur API methods. I don't know if purpur removed this API or not, that would be for you to find out. Please be aware that this project is also run by volunteers in their free time and as such the work on the PR queue varies (especially when focus on updates and update related API eats our time too)
I get it, it looks like I really messed up the forks.
This pr aims to reduce the overhead of checking multiple times per tick if an entity is climbing. It does it by caching the last climbing block pos and checking if its the same as the current pos and returning early.
In my testing it helps to reduce the tick time spent on entities and the climbing related logic such as setClimbing now taking 0.02% of the tick time instead of 0.06%
Before:
https://spark.lucko.me/cV9CmdEmwJ
After:
https://spark.lucko.me/7PDoTbgYhA
Entities on which these sparks were conducted are spiders
note: a version of this patch, however only applied to ActivationRange was also used in forks such as Pufferfish and Airplane and provided great results when paired with huge entity numbers
What exactly changed that makes this redundant?
All classes/resources are already imported ever since the hard fork, you don't need to manually import classes that haven't been touched before anymore.
I think we can do this:
living.getLastClimbablePos().map(living.blockPosition()::equals).orElse(false)
As if climbable pos is unset, we can assume that they are not climbing.
Maybe its too early to mark 1.21.6 stable?
This has been an ongoing issue for ages just nobody actually made an issue or tested it properly
I remember users complaining to me about this in 1.19 but when I did research about it I couldn't find anything trustworthy nor did the paper team confirm this as a known issue
Iโm against using a lambda here, perhaps we should use the same code as now and just without the ||
Caused by https://github.com/PaperMC/Paper/pull/3498
This is a rather large behavior change and potentially should just be dropped. In general this logic is certainly very broken in Paper, maybe this can be moved to a config however.
I'd be in favor of a config option, thought what should be the default?
If the server is newly created make it vanilla? If the config already existed keep the behavior as is?
Is your feature request related to a problem?
I'm primarily using kotlinx.coroutines for handling paper events and etc. Recently I've decided to move onto brigadier paper commands. So I've written this
fun <E : LifecycleEvent> JavaPlugin.lifecycleEventFlow(
configuration: LifecycleEventType.Prioritizable<LifecycleEventOwner, E>
) = channelFlow {
var isEnabled = true
val eventHandler: LifecycleEventHandler<E> = LifecycleEventHandler<E> {
if (!isEnabled) return@LifecycleEventHandler
launch { send(it) }
}
lifecycleManager.registerEventHandler(configuration, eventHandler)
awaitClose {
kLogger.error {
"#lifecycleEventFlow this function cannot be closed. Memory has been leaked!"
}
isEnabled = false
}
}
As you can see, there's no way to unsubscribe in lifecycleManager. Only registerEventHandler
On the other hand, paper also have HandlerList, which is helpful in managing event subscriptions
Des...
Out of curiosity: What is the use case of unregistering a lifecycle event handler?
Out of curiosity: What is the use case of unregistering a lifecycle event handler?
- Loading and unloading plugins dynamically during running server
- Unregistering event handler after first call because it's no longer needed
Well, for commands, you def don't want to unregister the event handler. Otherwise the command is gonna be lost if someone does a /minecraft:reload.
Well, yes. If someone will minecraft:reload it will disapper. So we would leave this flow event inside onEnable
But if you have additional logic inside this event and you will run reload, this logic will be executed twice. Because onEnable will be executed again and a new subscription will be added
reload isn't supported, and hasn't been for a long time. In fact, if certain lifecycle events are registered, trying to trigger a bukkit reload doesn't work at all. Like any registry events will just prevent a reload (not minecraft:reload) from ever happening.
I, uh, think that you'd usually want to keep the lifecycle handlers during server runtime. Basically their entire point is that at any point during server runtime, if a resource reload is triggered, they can be re-run.
And loading and unloading plugins is generally not a particularly supported mechanism anyways and thus should be avoided. Something like PlugManX is known to often break certain plugins.
Something like PlugManX is known to often break certain plugins.
I want to be sure that my plugins don't have memory leaks. My plugins fully support stuff like PlugmanX and/reload confirmbecause it manages subscriptions. For receiver/consumer is important to have unsubscribe feature
eae46be Add warning for config api if legacy - Owen1212055
When a plugin is disabled correctly, any lingering handlers referencing plugin classes keep those classes on the heap. This can lead to actual memory leaks on reload
Lifecycle event handlers persist even after plugin disable โ which is precisely when they should be torn down
Moreover, one-way registration is not idiomatic or safe. Most event systems in Java including Bukkitโs own event system support both registration and unregistration
Lifecycle events break this idiom:
- No way to unbind stale lambdas
- No control over when a handler is cleaned up
- Plugin disable events can't reverse what was registered
Adding unregisterEventHandler will not break anything:
- optional and zero-impact for plugins that donโt need it
- cleanier disable logic
- better testing and hot reloading
Alternatives are only fragile workaround like:
- flag-guarded logic
- It's error-prone and leak-prone
- It clutters lifecycle code with state management that the API should be handling
There are two things I can add to that:
- I can almost fully guarantee that you will not have a memory leak because of a lifecycle events re-register. As you basically only register a lambda, which is just a method (basically passing a method pointer), those very very few bytes will not bring your server to crash or even make a measurable difference.
- Just because you want to support this, does not mean it is a generally supported mechanism. Bukkit's
/reloadis known to cause issues. That is the whole reason why Paper added the confirmation. There just are certain parts of plugins which you cannot reload correctly, like thePluginLoaderorPluginBootstrap, or, for a matter or fact,LifecycleEventHandlers. That's just how it is and I am pretty sure Paper is not aiming to support something like this any time soon. - (Bonus addition) You could solve this entirely differently as well. You could have an 'initial load' boolean floating around, which you initially set to true after your l...
There are two things I can add to that:
Please read what I've wrote above
We aren't gonna do this. Lifecycle events aren't like the bukkit events, in that they tie into specific aspects of the initialization of the server, areas that the bukkit event system was never designed to handle.
It's not a "general purpose" event system, it's specific to the initialization process. Plugin disabling already clears the lifecycle event handlers registered for it. And enabling plugins after startup isn't supported behavior.
Closing this as wont fix.
I'll add: i've been running a survival server of 10-20 concurrent players online since version 1.12.
Only in 1.21+ have i had frequent complaints. Players are showing me tons of villagers that have every single trade at the max stack limit. I manually check of some the "demand" values and they are in the thousands sometimes.
Maybe players just started noticing it now.
Last updated for: 940d7bc37f6979259924ac12d5bccd392697a103.
Download the Paperclip jar for this pull request: paper-11831.zip
<details>
<summary>Maven Publication</summary>
The artifacts published by this PR:
- :package:
io.papermc.paper:dev-bundle:1.21.7-R0.1-SNAPSHOT - :package:
io.papermc.paper:paper-api:1.21.7-R0.1-SNAPSHOT
Repository Declaration
In order to use the artifacts published by the PR, add the following repository to your buildscript:
repositories {
maven("https://maven-prs.papermc.io/Paper/pr11831") {
name = "Maven for PR #11831" // https://github.com/PaperMC/Paper/pull/11831
mavenContent {
includeModule("io.papermc.paper", "dev-bundle")
includeModule("io.papermc.paper", "paper-api")
}
}
}
</details>
Sort issue resolved. Docs changed to new URL with API v3.
https://fill.papermc.io/swagger-ui/index.html
Expected behavior
org.bukkit.craftbukkit.inventoryCraftContainer#getNotchInventoryType(Inventory) should map the correct value of 43 to player inventory size instead of the old 41
Observed/Actual behavior
The method still maps it as 41
Steps/models to reproduce
val viewer = Bukkit.getPlayer("Me")
val inventory = Bukkit.getPlayer("Other").inventory
viewer.openInventory(inventory)
Plugin and Datapack List
Just the 1 simple test plugin to test this issue.
Paper version
This server is running Phoros version 1.21.6-4-HEAD@5494be5 (2025-06-19T08:45:15Z) (Implementing API version 1.21.6-R0.1-SNAPSHOT)
Confirmed to be present on latest paper via visual code check:
https://github.com/PaperMC/Paper/blob/main/paper-server/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java#L126
Other
Reference (on 1.21.6, should be similar if not identical on latest):
org.bukkit.craftbukkit.inventoryCraftContainer#getNotchInventoryType(Inventory) Line 126
ne...
i do not currently have time to fix this so i made an issue. i know i know ๐ญ
There is already a PR open to fix this, https://github.com/PaperMC/Paper/pull/12751
oh, the person i was about to ask to fix this already fixed it, thats funny
Expected behavior
dispatchCommand would be executed when player click an item in a gui (If the event works as a command).
Observed/Actual behavior
Expected behaivor has worked on the paper version 1.21.6-26, but it doesn't work at 1.21.6-27 and include after versions.
Steps/models to reproduce
https://github.com/user-attachments/assets/fd37c70f-6a0f-47bb-8730-ffbfbb43ae19
paper version 1.21.6-26 (worked)
https://github.com/user-attachments/assets/4e4a4e1a-da65-48ff-a183-3f482c78f9db
paper version 1.21.6-27 (doesn't work)
Plugin and Datapack List
[20:25:36 INFO]: Bukkit plugins (5):
- BetterEconomy (3.1), Citizens (2.0.39-SNAPSHOT (build 3836)), Coins (1.13.1), DynamicShop (3.13.0), Vault (1.7.3-b131)
Paper version
[20:26:12 INFO]: This server is running Paper version 1.21.6-27-main@5edcf6d (2025-06-22T01:51:33Z) (Implementing API version 1.21.6-R0.1-SNAPSHOT)
You are 21 version(s) behind
Other
No response
could you provide code to reproduce this?
[PaperMC/Paper] branch deleted: dev/1.21.7
Expected behavior
Expected to get advancement upon shearing armored wolf
Observed/Actual behavior
Advancement is not given when shearing armored wolf
Steps/models to reproduce
- Befriend wolf
- Put wolf armor on wolf
- Shear the wolf
Plugin and Datapack List
Bolt, Luckperms
Paper version
1.21.6 Build 46
Other
No response
fb60760 Enable spigot obfuscation support for 1.21.7 - NoahvdAa
[PaperMC/Paper] New branch created: misc/enable-reobf
4c47c76 Update DataConverter constants for 1.21.7 - Spottedleaf
9686f8b Enable obfuscation mappings for 1.21.7 (#12770) - NoahvdAa
[PaperMC/Paper] branch deleted: misc/enable-reobf
Introduce io.papermc.paper.loot: a type-safe, builder-based Loot API
Replaces the broken Bukkit LootTable API with a new system featuring immutable LootContext, a type-safe LootGenerator, and centralized LootTableManager. Supports all vanilla context params and maintains backward compatibility via deprecation.
[PaperMC/Paper] Pull request opened: #12772 Make warning of PlayerLoginEvent use unique plugin names
This fixs a issue where if a plugin use the PlayerLoginEvent in many places then the warning for the use repeat the plugin name the name of times the event was used.
Currently:
Also include a minor change for use the recent URL for the 1.21.7 announcement
If I wanted my Minecraft server software to nag me, I would have married it!
723510f Make warning of PlayerLoginEvent use unique plugin... - Doc94
6e021c8 Fix CraftContainer#getNotchInventoryType detection... - masmc05
Expected behavior
methods overriding onPluginMessageReceived work.
Observed/Actual behavior
any methods overriding onPluginMessageReceived don't run at all
Steps/models to reproduce
- Make a test plugin that uses PluginMessageListener somewhere (make sure to put "Bukkit.getMessenger().registerIncomingPluginChannel(this, "minecraft:brand", new ClientDetection());" in onEnable() as well)
- Method is called as it was on 1.21.6 and below
Plugin and Datapack List
AdvancedReplay, AntiCheatReplay, Apollo-Bukkit, BadlionClientModAPI, BedWars, Citizens, Essentials, EssentialsDiscord, EssentialsGeoIP, floodgate, Geyser-Spigot, GriefPrevention, IngotAntiCheat, IngotBedrockTweaker, IngotBridges, IngotCommunications, IngotDuels, IngotEconomy, IngotFactions, IngotHub, IngotInsights, IngotKitPvP, IngotMinigamesAPI, IngotPlayerManager, IngotServerManager, IngotSkywars, IngotSpleefPlus, IngotSurvivalGames, IngotTNTWars, IngotTowerDefense, IngotVanillaTweaker, IngotWorldManager,...
Are plugin messages being sent during the config phase?
This should still continue to function for other plugin messages.
You should instead be using Player#getClientBrandName() to get the brand of the client.
The fact that "minecraft:brand" worked like this is more of an implementation detail I feel. And unfortunately, it is not possible for this to be supported due to the plugin message system no longer supporting the config phase.
might be related, but getClientBrandName() isn't working either. I put it in a PlayerJoinEvent and it returns null no matter what i join with.
[PaperMC/Paper] New branch created: feat/config-messaging
03a26a9 Add support for listening to plugin messages - Owen1212055
both instanceof have to be in a nested if, still falling to true
@Budderman18 In a few minutes a jar/artifact will be published to https://github.com/PaperMC/Paper/pull/12775
If you could test this. In order to listen, you will need to implement the new PluginMessageListener that exists on that class. As you need to use a player connection vs a Player
Expected behavior
When upgrading from the legacy version 1.20.4 to 1.21.7, commands in command blocks are upgraded like when upgrading from 1.20.4 to 1.20.5-1.21.4.
Observed/Actual behavior
When going straight from 1.20.4 to 1.21.7, the commands in command blocks are not upgraded. I suspect other commands, like in signs, are affected as well.
Considering Paper's recommended policy on not using --forceUpgrade, any chunks not loaded since 1.20.4 will therefore have a different upgrade result (= no upgrade) than the chunks that were already loaded in 1.20.5-1.21.4 (= upgraded to data components).
Steps/models to reproduce
- Create a world in 1.20.4 (or earlier)
- Place a command block with the command
/give @p book{display:{Name:'{"text":"Test"}'}} 1 - Stop the server
- Drop the 1.21.7 jar in and start the server with that version
- Inspect the command block, notice no change.
Compared to 1.21.4 (previous stable)
- Create a world in 1.20.4 (or earlier)
- Place a...
Last updated for: 0afef7fdbcefec311b8032d85b6514cb3a702ff2.
Download the Paperclip jar for this pull request: paper-12775.zip
<details>
<summary>Maven Publication</summary>
The artifacts published by this PR:
- :package:
io.papermc.paper:dev-bundle:1.21.7-R0.1-SNAPSHOT - :package:
io.papermc.paper:paper-api:1.21.7-R0.1-SNAPSHOT
Repository Declaration
In order to use the artifacts published by the PR, add the following repository to your buildscript:
repositories {
maven("https://maven-prs.papermc.io/Paper/pr12775") {
name = "Maven for PR #12775" // https://github.com/PaperMC/Paper/pull/12775
mavenContent {
includeModule("io.papermc.paper", "dev-bundle")
includeModule("io.papermc.paper", "paper-api")
}
}
}
</details>
I can confirm the getClientBrandName now works on that jar, but I wonโt be able to test the new PluginMessageListener for a few hours.
And if Iโm being honest, Iโd rather just use getClientBrandName if message listener is going to require an NMS field now. (Unless player.connection is accessible without it via paper)
Yes, you should certainly use that instead of what you were doing before anyways.
But no there is no "NMS field" being required here on your end. This is just adding support for the plugin message system through the config api.
Correction: getClientBrand ame isnโt fully working, Fabric is being displayed as vanilla instead
There is no default value set, are you sure the client is not sending that value still? Could you try to use an alternative mod launcher?
I tried fabric through the official mc launcher, same result.
Probably not as there is no clean way to mitigate this which doesn't also break existing usage of the interact event, plugins would need to mitigate this calling for cases they don't care about where viable
I cant reproduce this, it returns fabric for me just fine. How are you testing this?
Noticed this when working on Newwind 1.21.7 and thought I should fix it.
False alarm, it was an issue with my test plugin. Its working fine using getClientBrandName now.
@kennytv Sorry to bug you. I unfortunately have tested this fully again, and within trading a villager for carrots 5 times, the price jumped from 22 to 35.
Did you make a new villager?
51d28af [ci skip] Typo in CartographyInventory (#12777) - NewwindServer
I'm gonna close this. This isn't fixing the actual problem with bukkit's lootcontext. Bukkit's lootcontext just doesn't support parameterization like vanilla's system does. The proper solution is https://github.com/PaperMC/Paper/pull/7655 which I just never updated after we hardforked cause we've been focused on other things (until https://github.com/PaperMC/Paper/pull/12778).
@kennytv do you think such an event warrants any additional toggle? I'm now thinking that its probably fine to leave, there are still events that fire way more frequently.
Yeah, lets just have the non-map method, delegate to the map method to avoid duplicating all the logic.
Put the record inside the method.
Why remove this method? It will break ABI for no reason.
Did you make a new villager?
Yes absolutely. All new villagers.
I can reproduce these large jumps on vanilla
Expected behavior
Player riptides and swaps to another item, animation still appears and PlayerRiptideEvent is called.
Observed/Actual behavior
Player riptides and swaps to another item, no animation appears, and PlayerRiptideEvent is not called, however their character is as if they did Riptide.
Specifically, pressing the offhand key as the player riptides circumvents whatever 'fix' someone added for this.
Steps/models to reproduce
- Get trident with riptide
- Go in water, hold down right click
- Release, and press key to transfer to offhand (default is F)
Plugin and Datapack List
N/A
Paper version
This server is running Paper version 1.21.7-9-main@5661fbb (2025-06-30T19:43:31Z) (Implementing API version 1.21.7-R0.1-SNAPSHOT)
You are running the latest version
Previous version: 1.21.4-106-ab1b312 (MC: 1.21.4)
Other
EntityCrossbowLoadEvent is practically broken at the moment for cancellation. This fixes it so that whilst the float continues to scale, the load event is only called at the proper time, and once, rather than every tick that the player continues to hold right click, and is able to be canceled.
6ea679e Allow listening to plugin messages during configur... - Owen1212055
[PaperMC/Paper] branch deleted: feat/config-messaging
I can reproduce these large jumps on vanilla
Thanks for testing that.
The question is: are we happy with this behavior or do we want to change it? is it something that we want included in Paper?
If there is a vanilla bug report against it which is confirmed, ideally not; The big headache is generally patching into this fairly messy mechanism without breaking other stuff as a side-effect, which is often a headache to do and prove
Original author: Kevin Raneri kevin.raneri@gmail.com taken from this pufferfish patch
This change implements a new per-world configuration to throttle far away mob goal selector ticks, which can help with performance in heavy entity load situations, but is defaulted to false as it might introduce slight inconsistencies when enabled, however the inconsistencies should be unnoticeable to most.
The new behavior aims to throttle the goal selector of inactive mobs to tick once in every 20 ticks or in human language once a second.
Spark reports concluded on ~500 entities:
before: https://spark.lucko.me/iDreuGZkdL
after: https://spark.lucko.me/08hDQO2qRV
As we can see we gathered an extra 0.03% gain which while not that substantial, scales a lot higher with higher far-away entity counts and can provide a lot better results which are worth it for servers that have a lot of...
Using null to reset it seems fine to me.
You mean to keep the with-map method?
This was before you taught me the art of local classes xd. Will do ๐
Both methods can be API, just have the one without a map, delegate to the method with a map. Call it, wrap the input in a new Map.
Yeah that's what I meant, just wanted clarification because you said 'lets just have the non-map method'. Thanks for the clarifying!
167c6da Reduce PlayerLoginEvent alt behavior nag - electronicboy
[PaperMC/Paper] New branch created: impr/reduce-ple-nag
While we improve on the API access here to certain common operations, and give
devs some time to migrate away from the caveats of this event
Feel like this should still mention which plugins..?
it does, at the end; The goal is to just make it smaller and less invasive in the meantime; if somebody has improvements to the format, etc, be my guest; english is not my strong suit, as my english teacher would tell you :D
it does, at the end; The goal is to just make it smaller and less invasive in the meantime; if somebody has improvements to the format, etc, be my guest; english is not my strong suit, as my english teacher would tell you :D
Ohโฆoops didnโt see that part.
okay shut up I know I didn't finish the description
108255c Reduce PlayerLoginEvent alt behavior nag for now (... - electronicboy
[PaperMC/Paper] branch deleted: impr/reduce-ple-nag
thanks that nag was comical
[PaperMC/Paper] New branch created: fix/leavemessage
78e4cc6 Fix quitmessage nullability issues - Owen1212055
This would return an empty component causing it to be ignored, but we want this to be null as then it will delegate to the default quit message.
lgtm, after testing it with and without plugins changing the quit/kick message and everything seems to work correctly.
Expected behavior
Quit messages should show in chat
Observed/Actual behavior
they don't
Steps/models to reproduce
quit the game, no quit message, also PlayerQuitEvent .quitMessage() is {"color":"#FFF6A1","text":""}
Plugin and Datapack List
Happens even with 0 plugins
Paper version
1.21.7 build 14 (latest)
Other
No response
Known issue, will be fixed in #12783
sweat dripping from my brow, hunched over, eyes 2 inches from the screen, pressing refresh over and over waiting for this to get merged
0cadaef Fix quitmessage nullability issues (#12783) - Owen1212055
[PaperMC/Paper] branch deleted: fix/leavemessage
Great api i cant wait for it there are certaint features from this that would be cool to use and make a plugin with / about this can bring alot of functionality to certaint plugins would love to see this.
The variable that getTotalWaves() accesses seems to be final from a glance. I'm not sure what the effects of changing this would be...
hmm the only issues is for things like when you change that value because that value is used for bonus rounds and rest of rounds. and maybe i miss something but can be good allow create a Raid using API
Did some testing with this and generally everything works as expected, just some nitpicks.
I pushed my test-plugin for anyone curious on what exactly I tried.
Other type implementations (such as MultiActionTypeImpl) use preconditions to validate the values. Is there a reason there are none in this? Without these it kicks a player with an EncoderException when he's receiving a dialog with invalid values.
columns > 0
buttonWidth > 0 && buttonWidth <= 1024
same here with preconditions
columns > 0
buttonWidth > 0 && buttonWidth <= 1024
Description
Fixes PlayerRiptideEvent not being called when a player uses riptide and quickly switches the trident to their offhand
Problem
When switching hands during riptide usage, stopUsingItem() was called which cleared the useItem before the RELEASE_USE_ITEM packet could properly call the releaseUsing() method. This caused the riptide effect to occur without firing the corresponding event
Solution
Changed stopUsingItem() to releaseUsingItem() in the SWAP_ITEM_WITH_OFFHAND case to ensure proper completion of item usage and event firing
Fixes #12779
Fixes #11676
hmm the only issues is for things like when you change that value because that value is used for bonus rounds and rest of rounds. and maybe i miss something but can be good allow create a Raid using APIๅฏ๏ผๅฏไธ็้ฎ้ขๆฏๅฝไฝ ๆดๆน่ฏฅๅผๆถ๏ผๅ ไธบ่ฏฅๅผ็จไบๅฅๅฑๅๅๅๅ ถไฝๅๅใไน่ฎธๆ้่ฟไบไปไน๏ผไฝๅฏไปฅๅพๅฅฝๅฐๅ ่ฎธไฝฟ็จ API ๅๅปบ Raid
In fact I've tried to modify purpur myself and implemented it, just let bouns wave count equals to level of Raid Omen effect. so youcan set the level of Raid Omen to modify total waves.
Expected behavior
command "/h <arg>" gets redirected to "/home <arg>" via player.performCommand, it should behave the same as if the player typed /home <arg>
Observed/Actual behavior
it throws some brigadier exception
[17:42:17] [Server thread/ERROR]: Could not pass event PlayerCommandPreprocessEvent to FactionsSpawn v1.0
org.bukkit.command.CommandException: Unhandled exception executing 'home ' in org.bukkit.command.PluginCommand(home, EssentialsCore v1.0)
at org.bukkit.craftbukkit.CraftServer.dispatchCommand(CraftServer.java:1003) ~[paper-1.21.7.jar:1.21.7-DEV-0cadaef]
at org.bukkit.craftbukkit.entity.CraftPlayer.performCommand(CraftPlayer.java:745) ~[paper-1.21.7.jar:1.21.7-DEV-0cadaef]
...
at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:80) ~[paper-api-1.21.7-R0.1-SNAPSHOT.jar:?]
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:71) ~[paper-api-1.21.7-R0.1-SNAPSHOT.jar:?]
at io.papermc.paper.plugin.manager.PaperEvent```...
Can confirm now that it seems to happen a lot more often on Paper.
I also did some further testing with the Moonrise client mod in singleplayer to rule out its collision optimisation patches. No issue with just Moonrise, so that must be caused by something else.
Expected behavior
Order changes to e.getCompletions() should affect the order sent to the client.
Observed/Actual behavior
The completions are alphabetized after the event, before being sent to the client. The final completions from TabCompleteEvent with a MONITOR priority differ from that in the actual packet. Updating the order in the packet itself does affect the client-side order.
Steps/models to reproduce
Running this test plugin, the tab completions 3,2,1 are expected, but 1,2,3 is produced.
https://github.com/ks-hl/TabCompleteTest
Plugin and Datapack List
Just the test plugin listed above
Paper version
This server is running Paper version 1.21.7-15-main@0cadaef (2025-07-01T22:53:44Z) (Implementing API version 1.21.7-R0.1-SNAPSHOT)
You are running the latest version
Previous version: 1.21.6-38-ea10fa4 (MC: 1.21.6)
Other
No response
Add BlockGrowEvent and BlockFadeEvent to Dried Ghast and spawn reason for Happy Ghast similar to Turtles/Sniffers
Noticed a few issues. This properly fixes the event - there would be times where it would still load. Latest change fixes that.
When I modify the packet, I am simply running Collections#shuffle on the root level list of the packet, and those changes persist.
I've done some testing on CraftBukkit, Spigot and Paper.
I built a paper jar with all* patches deleted. (except 32 because of compile errors, that patch has nothing to do with entities anyway)
This issue only affects paper (even paper with the aforementioned patches removed)
It's very reproducible.
They can also teleport through walls to sleep in beds when they get pushed into said wall.
Definitely something fishy going on with villagers on Paper.
https://imgur.com/a/ehkicPX
Mojangs suggestion builder sorts the collection alphanumerically, I don't think that there is any interest in breaking this behavior
Description
Adds API methods to get and set the time since a bee last stung, allowing better control over bee behavior after stinging.
Problem
Currently there's no way to access or modify the timeSinceSting field through the API. This prevents plugins from properly managing bee behavior when using setHasStung(false) to make bees attack repeatedly, as the timeSinceSting value keeps increasing and can eventually cause the bee to die.
Solution
Added two new methods to the Bee API:
getTimeSinceSting()- Returns the number of ticks since the bee last stungsetTimeSinceSting(int time)- Sets the number of ticks since the bee last stung
Closes #12719
Description
Adds API methods to get and set the time since a bee last stung, allowing better control over bee behavior after stinging.
Problem
Currently there's no way to access or modify the timeSinceSting field through the API. This prevents plugins from properly managing bee behavior when using setHasStung(false) to make bees attack repeatedly, as the timeSinceSting value keeps increasing and can eventually cause the bee to die.
Solution
Added two new methods to the Bee API:
getTimeSinceSting()- Returns the number of ticks since the bee last stungsetTimeSinceSting(int time)- Sets the number of ticks since the bee last stung
Closes #12719
Expected behavior
the breach enchantment on maces makes them ignore armor to a certain % normally dealing 6 hearts on a fully charged crit. (breach 4)
Observed/Actual behavior
On paper the breach 4 enchantment only does 3 hearts on a fully charged hit.
Steps/models to reproduce
this is how it should be https://www.youtube.com/watch?v=BhbWMfiSGR4
Plugin and Datapack List
none
Paper version
1.21.4 version 232
Other
No response
Not sure if is valid call this spawn by "egg" maybe can be good a new SpawnReason?
[PaperMC/Paper] New comment on pull request: #12790 Add Bee#set/getTimeSinceSting() methods (#12719)
looks like the target branch its a little outdated, this need to be "main"
Description
Adds API methods to get and set the time since a bee last stung, allowing better control over bee behavior after stinging.
Problem
Currently there's no way to access or modify the timeSinceSting field through the API. This prevents plugins from properly managing bee behavior when using setHasStung(false) to make bees attack repeatedly, as the timeSinceSting value keeps increasing and can eventually cause the bee to die.
Solution
Added two new methods to the Bee API:
getTimeSinceSting()- Returns the number of ticks since the bee last stungsetTimeSinceSting(int time)- Sets the number of ticks since the bee last stung
Closes #12719
Maybe there could be a boolean in the event to disable sorting. If not, at the very least, the JavaDoc should be updated not imply that the order of the completions is relevant.
The list of completions which will be offered to the sender, in order. This list is mutable and reflects what will be offered.
This pull request fixes config option fixClimbingBypassingCrammingRule not working on Paper 1.21.7, the config value is never getting passed.
I directly edited the Level#getPushableEntities as the only usage is the one in LivingEntity#pushEntities.
[PaperMC/Paper] Pull request review comment: #12792 Add Bee#set/getTimeSinceSting() methods (#12719)
Just make the field public. Much smaller diff, can even be done with no diff, just an access transformer inside the build-data/paper.at file.
[PaperMC/Paper] Pull request review comment: #12792 Add Bee#set/getTimeSinceSting() methods (#12719)
Don't have source in front of me, are there any range restrictions on this number? Like should it never be negative? That sort of thing.
It's passed here to LivingEntity#isPushable which as far as I can tell should be enough. Are you saying that how cramming itself works changed so that this isPushable check isn't responsible for the cramming damage anymore?
It's passed here to
LivingEntity#isPushablewhich as far as I can tell should be enough. Are you saying that how cramming itself works changed so that thisisPushablecheck isn't responsible for the cramming damage anymore?
ใThe getPushableEntities is using EntitySelector.pushableBy, which is always passing a false to isCollidableใ
It's passed here to
LivingEntity#isPushablewhich as far as I can tell should be enough. Are you saying that how cramming itself works changed so that thisisPushablecheck isn't responsible for the cramming damage anymore?
The getPushableEntities is using EntitySelector.pushableBy, which is always passing a false to isCollidable
...
Right, looks like there is an unnecessary change there in the pushableBy method:
There should be no reason to even have a method with the ignoreClimbing parameter (that is never used) and it should work when simply using the same code as before the patch (at least for the push-check) which used isPushable (which then uses the config option) instead of the custom isCollidable which takes the paramter.
I personally think that's the cleaner approach as it actually reduces the diff instead of increasing it as your solution does.
Right, looks like there is an unnecessary change there in the
pushableBymethod:There should be no reason to even have a
pushableBy(Entity, boolean)method with theignoreClimbingparameter (as it is never set to anything butfalse) and it should work when simply using the same code as before the patch (at least for the push-check) which usedisPushable(which then uses the config option) instead of the customisCollidablewhich takes the parameter.I personally think that's the cleaner approach as it actually reduces the diff instead of increasing it as your solution does.
Yeah but, vanilla uses pushableBy entity selector, the pushable added by Paper is a redirection, which prevents diffs from flying everywhere. And some entities don't need this check like boats and minecarts.
I'm unsure what you mean by "prevents diffs from flying everywhere" seeing as you are increasing the diff which would be my understanding of "flying everyhwere".
Also Boats and Minecarts are not a LivingEntity hence why the climbing setting wouldn't even apply to them (it's defined in LivingEntity#isPushable after all)
Just to be a bit more clear, this is what I suggest
Yea that would make sense, i assume that should be included in another PR? Seems kinda off-topic for this one though( ยดโฝ` )
Yea that would make sense, i assume that should be included in another PR? Seems kinda off-topic for this one though( ยดโฝ` )
What do you mean? It's literally the solution for the issue this PR solves but simpler.
Yea that would make sense, i assume that should be included in another PR? Seems kinda off-topic for this one though( ยดโฝ` )
What do you mean? It's literally the solution for the issue this PR solves but simpler.
Ah I see, what I thought before is to minimize diffs made by this PR, sry for my misunderstanding
[PaperMC/Paper] New comment on pull request: #12792 Add Bee#set/getTimeSinceSting() methods (#12719)
@Machine-Maker Done. Made the timeSinceSting field public and added validation to prevent negative values. Thanks for the suggestions
[PaperMC/Paper] New comment on pull request: #12792 Add Bee#set/getTimeSinceSting() methods (#12719)
As it was said before, please use an AT (paper.at) for making things public
[PaperMC/Paper] New comment on pull request: #12792 Add Bee#set/getTimeSinceSting() methods (#12719)
Now I used Access Transformer
You can check that in a precondition i think.
Yes it might be more explicit that way not sure if it's worth too to break existing plugins.
[PaperMC/Paper] Pull request review comment: #12792 Add Bee#set/getTimeSinceSting() methods (#12719)
You can use a precondition, can you also rebuild patches to sort the AT file if you don't mind.
[PaperMC/Paper] New comment on pull request: #12792 Add Bee#set/getTimeSinceSting() methods (#12719)
@Lulu13022002 Done. Used Preconditions.checkArgument() for validation, added @NonNegative annotation, also rebuilt patches as you asked
[PaperMC/Paper] New branch created: fix/12043
a1968fa Fix incorrect createPath overload arguments, fixes... - jpenilla
This was missed during the 1.21.2 update process.
fixes #12043
Is your feature request related to a problem?
JackerAcid once make a post about this, it was resolved, but globally for the whole server.
Describe the solution you'd like.
You guys should add an option so you can add what Minecraft world(s) apart of the server have this ability instead of making it the entire server. So some parts of the server don't allow the "skip-vanilla-damage-tick-when-shield-blocked", and some do, IF enabled the "skip-vanilla-damage-tick-when-shield-blocked: true".
Describe alternatives you've considered.
Nothing much to be said about the idea.
Other
Nothing further
6e598f8 Fix incorrect createPath overload arguments, fixes... - jpenilla
[PaperMC/Paper] branch deleted: fix/12043
Expected behavior
When running
data merge entity @n[type=text_display,tag=gameDisplay,tag=gameDisplayT1S] {text:{"color":"black","score":{"name":"@n[type=armor_stand,tag=stateMarker]","objective":"BL_score_1"}}}
The text on the text display should change to match the score of the armor stand on scoreboard objective BL_score_1
Observed/Actual behavior
When running
data merge entity @n[type=text_display,tag=gameDisplay,tag=gameDisplayT1S] {text:{"color":"black","score":{"name":"@n[type=armor_stand,tag=stateMarker]","objective":"BL_score_1"}}}
The text on the text display does not change at all
Steps/models to reproduce
(though, the tags and entities besides the text display do not matter, it happens anyways no matter which entities score it pulls from)
Create a text display with tags; gameDisplay and gameDisplayT1S
Create an armorstand with tags: stateMarker
Create scoreboard objective with dummy criteria: BL_score_1
Set the armorstand to any score on BL_score_1
Run ``data merge...
[PaperMC/Paper] New branch created: feat/remote-build-cache
42fe723 [ci skip] Add remote build cache configuration thr... - jpenilla
0d2fd14 Configure GitHub Actions for remote build caching - jpenilla
3a976fa Make cache vars accessible to all steps - jpenilla
noticed this issue as well, seems to work fine for the first hit but count every hit following it as an uncharged attack (based on hit sound effect), dealing less than half the damage. very annoying for pvp server
What about ability to disable this automatic update check? i.e. for local development servers in offline environment...
(okay, please ignore my previous repeated comment about "ability to disable this automatic update check", it appeared on its own when I opened this page from browser cache.. looks like GitHub still going crazy on my side for some reason...)
Expected behavior
When a top inventory is being viewed, PlayerInventory#setItemInOffHand should show an item in the players offhand.
Observed/Actual behavior
PlayerInventory#setItemInOffHand does not show the item in the players offhand, only after when the inventory is closed, or Player#updateInventory is called, or when using the swap offhand item key within the inventory
Steps/models to reproduce
both
@EventHandler
public void onInventoryClick(InventoryClickEvent e){
Bukkit.getScheduler().runTaskLater(Main.getPlugin(), () -> {
e.getWhoClicked().getInventory().setItemInOffHand(new ItemStack(Material.DIAMOND));
}, 1);
}
,
@EventHandler
public void onInventoryClick(InventoryClickEvent e){
e.getWhoClicked().getInventory().setItemInOffHand(new ItemStack(Material.DIAMOND));
}
and
@EventHandler
public void onInventoryOpen(InventoryOpenEvent e){
Bukkit.getScheduler().runTaskLater(Main.getPlugin(), () -> {
e.getPlayer().getInventory().set```...
I can fully reproduce this, but am unable to find out the cause for this, looking at at the src.
This might be a Vanilla client issue, but I'd like somebody to verify that.
avez vous un plugin pou rรฉparer ceci?
f7d5a0a [ci skip] Add remote build cache configuration thr... - jpenilla
[PaperMC/Paper] branch deleted: feat/remote-build-cache
This is an issue with something using the packetevents library
โฆOn Fri, 27 Jun 2025 at 04:04, Mrs Feathers @.***> wrote:
Mrs-Feathers created an issue (PaperMC/Paper#12749)
<#12749>
Expected behaviori should be able to login and play
Observed/Actual behaviori cannot login due to "Internal Exception:
java.lang.IllegalStateException: void future"
Steps/models to reproducehave a paper server running on 1.21.4 and update to 1.21.6 and then try to
login.
Plugin and Datapack ListCMI, CMILib, CoreProtect, DiscordSRV, FastAsyncWorldEdit,
FastChunkPregenerator, Kingdoms, LuckPerms, mcMMO, PlaceholderAPI,
ProtocolLib, TARDIS, Themis, ThemisToDiscord, Vault, ViaBackwards,
ViaVersion, Votifier, WorldGuard, WorldManager
Paper versionThis server is running Paper version @.***
(2025-06-09T10:15:42Z) (Implementing API version 1.21.4-R0.1-SNAPSHOT)(we had to restore from backup)
Otherthe only error in the c************...
That's how I meant it, yea. Just that there are now some left-over comments regarding the climbing option which shouldn't really be necessary as that feature does not touch this method anymore.
Comment is not necessary, this line is not touched for the climbing cramming bypass option (as pushedEntity#isPushable is the Vanilla code and the other change is just the collidable API)
Comment is not necessary, this method is not touched for the climbing cramming bypass option
Comment is not necessary, this method is not touched for the climbing cramming bypass option
That's how I meant it, yea. Just that there are now some left-over comments regarding the climbing option which shouldn't really be necessary as that feature does not touch this method anymore.
Done.
Cat did this in another PR, doesn't need to be rebased.
Doesn't need to happen anymore, no more callback command, no rebase required.
tags are autogenerated now, no need to rebase.
Replaces https://github.com/PaperMC/Paper/pull/10734/files
Restores more vanilla-like logic for non-player teleports. Player's will be handled later, as well as changing the default behavior of api teleport methods to include passengers by default.
Also makes relative velocity flags work for teleporting entities.
Replaces https://github.com/PaperMC/Paper/pull/10721
So my thinking here, was any inventory that had result slots that wasn't already using CraftResultInventory should have their "storage" contents exclude the result slots. The ones I found were villager trading inventories, all the furnaces, brewing stands, and crafting inventories.
I also fixed an issue where Inventories that were CraftResultInventories didn't include all the contents in getContents.
I think this is now obsolete. With MenuType, and creating views correctly, this shouldn't be an issue anymore.
Replaces https://github.com/PaperMC/Paper/pull/8636
Adds EntityReceiveGameEvent and expands BlockReceiveGameEvent
BlockReceiveGameEvent was not called for all block listeners, and was called for entity listeners. This separates them out into two events and adds missing event calls. It also adds more api for bypassing line of sight/occlusion checks (not sure what to call that).
Plugins can just do this themselves with the lifecycle event.
With this also cover this https://github.com/PaperMC/Paper/issues/12737 not? because now the teleport api calls the teleport and not just the snapTo
and if true then can close my PR https://github.com/PaperMC/Paper/pull/12740/files i think
That flag needs to be removed. It's not supposed to have the behavior that the PR is doing.
It doesn't do anything anymore
This PR aims to add support to as many Menus as possible so long as it is reasonable to maintain and it makes sense to add. This PR in its original state supports all chest inventories (generic 1-6) and the dispesner and hopper. I'm up for discussion on other menu types.
This PR also needs to make another important decision regarding the future of Server#createInventory. This PR will aim to fully replace the old inventory api thus will aim to deprecate it completely.
My current plan on this front. Keep Server#createInventory(InventoryHolder, int). and deprecate the rest along with deprecated InventoryType. Keeping the mentioned method it will need to be expanded to support more arbitrary sizes as in the case with the hopper it needs to support atleast 5 slots. Though the arbitrary value may need to change depending on if any more menu support is added.
This PR also somewhat annoyingly so goes back and cleans up internals. I know its not necessarily what you would want to see...
Is your feature request related to a problem?
My idea is to be able to save ItemStacks in PDCs, or any type of NBT object native to Minecraft, such as Entities, TileEntities, or other native Minecraft NBT objects that aren't huge (like a Chunk or a World).
The problem is, if we want to put an ItemStack in a PDC, we have to create our PersistentDataType<ItemStack>, okay, but when we have to save the components, it's immediately hellish. We have to create a PersistentDataType for each component, while behind it, it's all NBTs.
The same goes for if we want to put an Entity in a PDC; saving all the important data for each entity type in a PersistentDataContainer quickly becomes unmanageable.
Describe the solution you'd like.
Add a PersistentDataType for Entity, ItemStack and TileState. This way we could do:
container.set(key, PersistentDataType.ITEMSTACK, item);
container.set(key, PersistentDataType.ENTITY, entity);
container.set(key, PersistentDataType.TILESTATE, tileState);```...
My main question here is why though? ItemStack already has a serializeAsBytes Method and for containers serializeItemsAsBytes. I'd say at most this is slightly convenient.
container.set(key, PersistentDataType.BYTE_ARRAY, myItem.serializeAsBytes())
// to deserialize
ItemStack.deserializeBytes(container.get(key, PersistentDataType.BYTE_ARRAY))
I thought about it, but behind all that it's only NBT, I tell myself that it's more optimized to stay in the same format, whereas going through serialize in byte must be heavier to read/write the data but also to save them and send them over the network
heavier than probably not much, but I still think about this kind of thing ๐.
for example, with the same item, the serialize method, the data is much bigger for not much, and I don't find that clean, after all these are byte[] compared to a string, so the difference must not be that big.
<img width="980" height="243" alt="Image" src="https://github.com/user-attachments/assets/64dcc316-5776-4734-a8c7-07d389a13f0b" />
<img width="651" height="61" alt="Image" src="https://github.com/user-attachments/assets/27fccfd5-5cbe-42ba-b991-5ff11db6adf6" />
This is a small pull that exposes the attackStrengthTicker of nms.LivingEntity through obb.Player.
There isn't currently any point in exposing this through obb.LivingEntity as it isn't currently used anywhere except in nms.Player.
If that changes in the future, moving it to obb.LivingEntity wouldn't break the bytecode of plugins, as obb.Player extends obb.LivingEntity anyway.
This plugs a gap in the API where it currently provides no way of setting the current attack cooldown (without a lot of hackery, at least)
Not sure exactly what to call the methods in their current context. Keeping them similar to their related methods unless anyone can think of better names.
Representing the value as a long rather than an int in the event the underlying field changes to a long.
Useful when user want to detect "an entity collides with another entity using a trident" or what
Expected behavior
I'm not 100% sure this is a bug, but it doesn't seem to be the intended behaviour. We only noticed it after updating to version 1.21.7, so it wasn't like that before.
When using a spawn egg to summon a water creature, such as a squid or dolphin, for example, the entity will remain even when switching to spectator mode or moving away from it. However, as soon as there is more than one player on the server, the spawned entity will instantly despawn when switching to spectator mode, even if the spawn egg has been renamed using an anvil.
Observed/Actual behavior
The summoned creatures will not despawn, even with multiple players on the server.
Steps/models to reproduce
- Join with two accounts
- Move the two accounts far enough apart
- Use a dolphin spawn egg
- Switch to spectator mode
- Watch the dolphin disappear
Plugin and Datapack List
None
Paper version
This server is running Paper version 1.21.7-16-main@6e598f8 (2025-07-03T19:49:41Z...
[PaperMC/Paper] branch deleted: dev/1.21.6-dialog
I just tested this again, and it still persists on 1.21.5, I would assume it also "works" on .7 as well, I will spin up a PR sometimes soon, unless anyone else wants to do so.
It appears I am also encountering this bug, but with snow layers, when cancelling the teleport event triggered by them naturally stacking to 2 or more (with the game rule snowAccumulationHeight >1).
The same code can replicate the issue using snow layers:
Standing in a biome that snows and waiting for long enough (or increasing random tick speed) will cause you to teleport to twice your current position.
Fixes #12696, which happens when a player is teleported to a relative position, but the PlayerTeleportEvent is cancelled or the to field is changed. This issue is caused by the position being teleported to becoming an absolute value when getting it from the event.
To resolve this, all non-velocity relative flags are removed if the event is cancelled or modified.
This could also be fixed by converting the positions back to relative values, but that would add additional overhead and does not appear to give any benefit, as this is fairly late in teleportation processing.
[PaperMC/Paper] New branch created: feature/registry-trims
6c29db4 Add registry api for trim patterns and materials - Machine-Maker
I don't actually like this "solution" for creating inventories I mean it works, but I feel like it'd be infinitely smarter to just delegate to "SimpleContainer" than all that craft stuff
This PR adds a new method in DialogResponseView to get all available keys.
I don't know if there is any real-world usage with this, but in my case, I need a way to convert a response view to a simple String-Object map without reflection.
This PR adds a new method in DialogResponseView to get all available keys.
I don't know if there is any real-world usage with this, but in my case, I need a way to convert a response view to a simple String-Object map without reflection.
Can you use the adventure-nbt library? (Or any nbt library) and parse the BinaryTagHolder? I think that is the solution here for your specific usecase.
same issue same build even the one before 113, removed all plugins too and reset server settings
Try on latest 1.21.7, but also electronic's reply covers what to do: Enable debug in server.properties to get more info on disconnects.
https://mclo.gs/DHkc2S0
latest paper with 1.21.7 and enabled debug
I deleted the world which contains player data, basically a fresh server install + viaversion & viarewind
'[22:07:55 WARN]: io.netty.channel.StacklessClosedChannelException
[22:07:55 WARN]: at io.netty.channel.AbstractChannel.close(ChannelPromise)(Unknown Source)
[22:07:55 WARN]: io.netty.channel.StacklessClosedChannelException
[22:07:55 WARN]: at io.netty.channel.AbstractChannel.close(ChannelPromise)(Unknown Source)
[22:07:55 WARN]: io.netty.channel.StacklessClosedChannelException
[22:07:55 WARN]: at io.netty.channel.AbstractChannel.close(ChannelPromise)(Unknown Source)
[22:07:55 WARN]: io.netty.channel.StacklessClosedChannelException
[22:07:55 WARN]: at io.netty.channel.AbstractChannel.close(ChannelPromise)(Unknown Source)
[22:07:55 WARN]: io.netty.channel.StacklessClosedChannelException
[22:07:55 WARN]: at io.netty.channel.AbstractChannel.close(ChannelPromise)(Unknown Source)
[22:07:55 WARN]: io.netty.channel.StacklessClosedChannelException
[22:07:55 WARN]: at io.netty.channel.AbstractChannel.close(ChannelPromise)(Unknown Source)
[22:07:55 WARN]...
The log doesn't show the reported error, but, I think that due to the codec usage we don't really get told what packet is anymore, need to look into injecting that context back in; StacklessClosedChannelException generally means that something injected into the netty stack is broken and preventing the connection from actually closing
is there any way I could help?
Can you use the adventure-nbt library? (Or any nbt library) and parse the BinaryTagHolder? I think that is the solution here for your specific usecase.
I don't like to shade another library just to do this. Getting all keys and doing stuff with them is the better way. And since there is already CompoundTag in DialogResponseView, why not a method to get all the keys from the compound?
Because there is no guarantee that the value at that key can be parsed with any of the 3 get methods. I don't really want to expose keys that don't work with those methods. There is already no guarantee that the values that can be obtained via the 3 methods actually came from a dialog input.
Because there is no guarantee that the value at that key can be parsed with any of the 3 get methods. I don't really want to expose keys that don't work with those methods. There is already no guarantee that the values that can be obtained via the 3 methods actually came from a dialog input.
Since all getters in the View are Nullable, we don't really care about the guarantee. Even if we parse the inputs, we only care about the values that can be retrieved from the response.
At the moment, the values of the response are either from dialog inputs or the additions from Custom Action.
The fact that CompoundTag is used does imply that these values are expected. Unless there is an otherwise, the only case that the value cannot be retrieved from the 3 getters is that the additional values in Custom Action is not one of the 3 types.
The fact that we need a key in those getters means that we need to know the key of the dialog inputs before getting the input values. So I don't think there...
Interestingly, the response view already parses the payload to a compound tag, but we would need another NBT library to do the same without using reflections.
I already used reflections to get the underlying compound of the response view so this is not a big deal for me.
This is just about ease of use. I just need a way to get the available input keys in the view, without using reflections or another NBT library to parse the whole payload just to get the keys.
Cancelling PlayerToggleSneakEvent should prevent the player from sneaking server-side and for other clients. Since 1.21.6, cancelling PlayerToggleSneakEvent prevents server-side sneaking only until another movement key is pressed. The player then sneaks after pressing another movement key while still holding sneak. This is because net.minecraft.server.network.ServerGamePacketListenerImpl#handlePlayerInput only triggers the event if the shift input has changed this packet. Therefore, after another movement key is pressed, PlayerToggleSneakEvent is not fired, but the player's sneaking state is toggled anyways.
This PR changes the behaviour to only set the player's sneaking state if the shift input has changed in this packet and PlayerToggleSneakEvent has been triggered and not cancelled, fixing this regression.
Fixes a small grammatical javadoc mistake in Conversation#getState.
Fixes a small grammatical javadoc mistake in Conversation#getState.
Is your feature request related to a problem?
There is currently no way to get the loot table key that was run during the BlockDispenseLootEvent, the best you can do is look up the TrialSpawner configuration and filter by ominous/normal to get a list of weighted LootTables, which is not useful when wanting to check which loot table was run to replace it with other items.
Describe the solution you'd like.
I would like the LootTable used to initially generate the items in the BlockDispenseLootEvent to be exposed as a getLootTable in the event. Both places this event is called from (TrialSpawners and Vaults) currently have the NMS-equivalent LootTable readily available.
Describe alternatives you've considered.
Getting the trial spawner configurations and filtering based on the Map of weighted LootTables, but this isn't useful when wanting to check the exact loot table that was randomly picked to drop the items.
Other
No response
Expected behavior
TrialSpawners should not lose any data in any circumstances
Observed/Actual behavior
TrialSpawners lose the SpawnData/SpawnPotentials if a BlockTransformer has been registered for a structure placing it (vanilla structures affected: Trial chambers)
Steps/models to reproduce
- Create/Install a plugin that registers a BlockTransformer to the trial chambers structure
- Setup and start a server and search for a trial chamber
- Once a trial chamber is found you will see that the trial spawners have no SpanData or SpawnPotentials
Plugin and Datapack List
The test plugin that can be found in the spigot issue linked below
Paper version
Any version after the hardfork and before the hardfork since this spigot PR: https://hub.spigotmc.org/stash/projects/SPIGOT/repos/craftbukkit/pull-requests/1354/overview
Other
Please checkout this issue, it shows the bug in the spigot and its fix to it as it was introduced upstream before the hardfork: htt...
Expected behavior
Player can use headless piston destroy bedrock
Observed/Actual behavior
Player cannot successfully destroy the bedrock.
Steps/models to reproduce
https://www.bilibili.com/video/BV1qopoe6E4M?p=2
Plugin and Datapack List
no plugin and datapack
Paper version
This server is running Paper version 1.21.7-17-main@b4466ec (2025-07-06T18:59:07Z) (Implementing API version 1.21.7-R0.1-SNAPSHOT)
Other
config/paper-global.yml
unsupported-settings:
allow-headless-pistons: true
allow-permanent-block-break-exploits: true
My only question what was the rational behind adding this.player.hasClientLoaded())
The original call to this.player.setShiftKeyDown a few lines down was wrapped in an if (this.player.hasClientLoaded()), so I preserved that condition
Confirmed to be a placement issue, resolved
1.21.4 is not supported anymore and additionally this does not fix the issue, as this is a client side issue.
Is your feature request related to a problem?
Expanding on the new Dialog API.
Describe the solution you'd like.
Add a DialogClickEvent that will allow for the following:
- Detect the click type so that we can have multiple use buttons (left, right, middle, keyboard). Not sure if this is possible as I have not looked at what packets are sent.
- Detect which button was clicked so that we can run code when a button is pressed in addition to the action that was set in the dialog for that button. This will allow for making a Dialog that does things other than just customClick if we want to run code. For example, if I want to open another dialog when clicking on a button but still run code at the same time.
- Get the player doing the click.
- Get the action type of the button being clicked.
- Get the dialog that was clicked inside. This will be able to be compared to the dialog that the player has open.
I am sure there are more things that someone would want to be able to...
I can't see that PR but i can confirm this behavior which is already fixed in https://github.com/PaperMC/Paper/pull/12732
I think literally none of this is possible with the protocol. There arenโt any packets for this.
- No, nothing is sent for individual clicks. Just dialog actions which can be any of the options already available in the api.
- You can use the callback system to run code on button clicks.
- available in the callback and event already
- not possible.
- not possible. Itโs not possible to know if the custom click came from a dialog or from a click event on a text component. They are the same structure, same packet.
This is an updated version of the "/nspt" command from Yatopia. It shows the server tick times in nanoseconds.
Yatopia lol. Jokes aside, I personally see no point in such a command
Thank you for your contribution however we feel that spark already provides enough meaningful information for performance metrics.
I am unsure if this fixes the issue, one of the issues is that the copy constructor of some of the BloclStates is wrong which was also fixed on the mentioned PR. And the mentioned Paper PR which supposedly fixes the TrialSpawners still seems to have that flaw.
As long as an object is not immutable it should not be reassigned from one BlockState to another without actually copying it, otherwise you could modify one of the configs and it would affect all copies which is one of the reasons why this broke im the first place.
The rework might do something different which fixes the side effect but the main cause doesn't seem to be fixed.
Expected behavior
Hello.
In this plugin.yml, I declared the following libraries:
libraries:
- org.redisson:redisson:3.50.0
- com.zaxxer:HikariCP:5.1.0
- org.xerial:sqlite-jdbc:3.50.2.0
sqlite-jdbc downloads and works perfectly on: paper-1.21.5-114, spigot-latest 1.21.7
However, when running on paper-1.21.7-17, I get the following error, even though the JAR file exists at:
https://repo.maven.apache.org/maven2/org/xerial/sqlite-jdbc/3.50.2.0/sqlite-jdbc-3.50.2.0.jar
[12:48:36 INFO]: [SpigotLibraryLoader] [CoreTools] Loading 3 libraries... please wait
[12:48:37 ERROR]: [LegacyPluginLoadingStrategy] Could not load 'plugins\.paper-remapped\CoreTools-1.2-SNAPSHOT.jar' in folder 'plugins\.paper-remapped'
org.bukkit.plugin.InvalidPluginException: java.lang.RuntimeException: Error resolving libraries
at io.papermc.paper.plugin.provider.type.spigot.SpigotPluginProvider.createInstance(SpigotPluginProvider.java:129) ~[paper-1.21.7.jar:1.21.7-17-b4466ec]
at io.pap```...
The maven central mirror we're using is apparently missing some artifacts, we're looking into a means to resolve this at some point
Expected behavior
I would like my IDE to notify me of the min/max width/height of dialog objects.
Observed/Actual behavior
The annotation is missing in the source code, resulting in an error being thrown only on server start.
I noticed it on the DialogBody.item(ItemStack, PlainMessageDialogBody, boolean, boolean, int, int) static method. The builder methods of the item dialog body have the @Rangeannotation as expected.
Steps/models to reproduce
--
Plugin and Datapack List
--
Paper version
--
Other
No response
For those about to type "BUT WE HAVE Entity#isInvulnerable ALREADY!!", I know.
Entity#isInvulnerable does not return the invulnerability state set via Entity#setInvulnerable but whether the entity is immune to the GENERIC damage source, is dead OR set invulnerable via API.
This is generally speaking fine, but I need a way to get the actual state set with API.
Additionally, fixed two little happy accidents in the Javadocs
I feel that this just furthers the complexity. Do we consider adding a new method with a maybe more explicit name so that we can pair it with a has/is or whatever method? might be cleaner than just adding another vague method to an already confusing situation
The word duplicate makes sense, the second change in there doesn't
Do you have a new name in mind by any chance?
Maybe deprecating isInvulnerable adding isVulnerable (as the inverse of isInvulnerable) and isVulnerableTo(DamageType)
But about the set/getInvulnerable no idea
The word duplicate makes sense, the second change in there doesn't
Hi, I thought that it would match the writing of the other comments.
I reverted the line to the original one.
Just diagnosed an issue like this in a plugin, one thing I came across is that the behaviour regarding whitespace has apparently changed, which was causing some issues, as apparently I never really cared to factor that in in my own logic, because it was working
I am debugging an issue that I've been experiencing with rcon commands since we upgraded from 1.21.1 to 1.21.6/7.
Still in the investigation phase on my end - but will report back if I find something helpful.
Getting lots of Unknown or incomplete command, see below for error for a command that worked before the update.
At this point, my issue could be several different things, so I am simplifying it to see what is to be found.
I cannot say that my issue was the same as this issue, but I will share if it should help someone else. My particular issue had to do with the case sensitivity of commands.
Example. Say we had originally registered a command kickPlayer. That command is now being registered as kickplayer. And with modern commands following case sensitivity on that top command registration, kickPlayer is not a recognized command, despite being the actual value used in the code.
I resolved our issue by just fixing the command being ran to simply run the lowercased command (and also changing our code to not attempt to register mixed case commands).
where is player_ticket|_delayed in server files
Expected behavior
The "InhabitedTime" chunk field should be incremented each tick that a player is within a chunk.
Observed/Actual behavior
When the gamerule doMobSpawning is off, the inhabited time is not incremented.
Steps/models to reproduce
- Start Paper with any world, it shouldn't matter if it's existing or new.
- Disable the
doMobSpawninggamerule. - Restart the Paper server.
- Observe that the inhabited time is no longer incremented; this can be seen by debugging the
incrementInhabitedTimemethod, or by checking the NBT of new chunks and seeing the field be zero.
Plugin and Datapack List
This can be reproduced without any plugins.
Paper version
You are running a development version without access to version information
Previous version: 1.21.6-DEV (MC: 1.21.6)```
### Other
After debugging this issue, I found that the problem seems to...
I remembered a time when a friend of mine said that InventoryMoveItemEvent in Paper was causing a problem.
<img width="754" height="887" alt="image" src="https://github.com/user-attachments/assets/baf4f83c-ac03-4e08-ae68-0335fbfedb70" />
The ItemStack obtained by event.getItem() and the ItemStack obtained by event.getSource() that the block itself has refer to the same object.
My friend suggested that if you overwrite an item obtained with getSource(), the information in getItem() will be overwritten after the event.
I can't get in touch with him right now, so I can't ask him for more details.
I hope this will be of some help in solving this problem.
Discussion Category: Ideas
@BAMBAM2895U2985 PLAYER_TICKET_DELAYED is an internal thing. The delay-chunk-unloads-by option must be set to zero in config/paper-world-defaults.yml and you must be in 1.21.6+. If you have a different value in your per-world config it might mess it up also.
Still experiencing this on 1.21.4.
@UPSOKen commented:
Still experiencing this on
1.21.4.
Can you reproduce it on 1.21.7 without plugins? If so, please describe your method.
if im 1.21 will it work if i set delay-chunk-unload to 0. also what is the per-world config
[PaperMC/Paper] New branch created: offhand-desync
a649157 Fix offhand item desync on cancelling interact eve... - kennytv
Separate to the last commit because it changes more logic: the old code was checking against the wrong item, and in general re-resending all of that data for changed held items makes no sense. the actual inventory change will already be synced by the server as well
In Paper 1.21, no. It must be Paper 1.21.6 or greater.
See https://docs.papermc.io/paper/reference/world-configuration/
oh dang, well thanks for the help anyway
Hi, I don't know if this is still being worked on or not, but I would still love to see this added, as I'm at a really big roadblock in my soon-to-be-public server, because I am not able to (as far as I'm aware) use strict placement to paste my custom structure files. This is a really big issue for me. I hope this gets approved soon.
Plugins might be using threads provided by utilities like the common
fork join pool, which does not have the servers classloader around.
Previously this prevented the service loader from finding server
implementations for API types as the threads context class loader did
not point to the server or one of this child class loaders.
To prevent this, instead specify the class loader of the respective API
type, which itself is loaded by the servers class loader.
Add the vanilla error message to the precondition for DialogBaseImpl so the error is easier to understand and does not require opening up the server source to debug.
4076453 Specify the class loader when loading services (#1... - lynxplay
The maven central mirror we're using is apparently missing some artifacts, we're looking into a means to resolve this at some point
Recently, I encountered the same issue. I think it is preferable to use mirrors for downloading, but at the least, Maven Central Repository should be used as a fallback. I read Sonatype's article, and I don't think Paper is the 1% of organizations they defined.
MavenLibraryResolver downloads dependencies, its cached locally and will not be downloaded repeatedly.
The additional download requests caused by Paper plugin distribution are not caused by any specific organization, which is essentially no different from developers resolving dependencies in developing.
The current restrictions make MavenLibraryResolver somewhat useless, because it is difficult to intuitively know which dependencies exist in google's mirror, and it might be better to just use shadowjar for pack directly.
76fb506 Add vanilla error message to precondition for Dial... - partydev
and I don't think Paper is the 1% of organizations they defined.
We are not; entities like hosting providers, etc., are. Adding a feature that violated the ToS of a third-party entity was stupid in the first place. When we added our API, which replaces the built-in libraries section, we hoped that people would respect the ToS and host their own Maven repos for their artefacts.
We generally do not intend to return to violating the ToS; however, we do desire to set up a better solution for caching Maven Central requests that prevents us from harming a third-party service.
Expected behavior
success
Observed/Actual behavior
java.lang.NoSuchMethodError: 'void net.minecraft.server.network.ServerGamePacketListenerImpl.sendPacket(net.minecraft.network.protocol.Packet)'
Error in Minecraft 1.21.7: Method not found
Steps/models to reproduce
ClientboundAddEntityPacket entity = new ClientboundAddEntityPacket();
craftPlayer.getHandle().connection.sendPacket(entity);
spigot success
Plugin and Datapack List
none
Paper version
paper-1.21.7-22.jar
Other
No response
This PR exposes the hex color argument type.
It's a small change, but I believe it can be useful in many cases.
The method to send a packet is just ServerGamePacketListenerImpl#send(Packet<?> packet). #sendPacket is no longer a method which exists in 1.21.7. Therefore, this is working as intended
It's just an text color argument, not an argument for parsing it.
I've addressed all requested changes now.
Rebased to 1.21.7 and addressed requested changes
25d358c [ci skip] javadoc: Fix grammatical error for getSt... - LachCrafter
I agree with machine here, one major point of this interface was that it does not promise being authoritative in regards to its content. It is a minimal bare bone abstraction over what could be a dialog response for people to use.
Any method promising to know what actual data is contained in it is just misleading imo.
Including adventure-nbt in the API or maybe the server + compileOnly() on plugins might be something that can be discussed to make working with the binary tag holder easier but such a method imo is not something I want in this API.
Thank you anyway for the PR!
If you still believe there to be a need for this, we can iterate on this problem in a feature request instead, maybe there is something there but, as I said, just from the result the keys of the dialog are not something we can know/expose.
ba7c982 Add missing Range annotations to dialog types - Machine-Maker
The ability to configure the Velocity forwarding secret via the environment variable PAPER_VELOCITY_SECRET was introduced in #10127. However, since Velocity support is disabled by default, using this feature still requires manual modification of paper-global.yml.
To enable full automation of Velocity configuration via environment variables, this PR adds support for two additional env vars:
PAPER_VELOCITY_ENABLED- enables the Velocity proxy support (trueorfalse)PAPER_VELOCITY_ONLINE_MODE- sets theonline-modevalue (trueorfalse)
This ensures that all necessary Velocity settings can be configured via environment variables without manual intervention.
Note: paper-global.yml is currently not generated when using the --initSettings CLI flag, which limits the ability to preconfigure the server without a full startup. Unless that behavior changes, environment variables remain the only viable option for automating this configuration in containerized environments.
[PaperMC/Paper] New branch created: fix/SPIGOT-5989
e4bcc56 Don't consume anchor charge if loc changes - Machine-Maker
0286206 Make sure isAnchorSpawn is always correct - Machine-Maker
533d93c Don't consume anchor charge if loc changes (#12835... - Machine-Maker
[PaperMC/Paper] branch deleted: fix/SPIGOT-5989
Expected behavior
GrimAC is able to kick players without issue
Observed/Actual behavior
ConcurrentModificationException is thrown
Steps/models to reproduce
A player was kicked by GrimAC while riding a happy ghast
Plugin and Datapack List
Plugins: AnarchyExploitFixes, CookieSomnia, FreedomChat, GrimAC, HeadDrop, MiniMOTD, packetevents, RayTraceAntiXray
Datapacks: [vanilla (built-in)], [file/local (world)], [file/bukkit (world)], [file/imp-kit (world)], [file/local_loot (world)], [file/imp-death (world)], [file/imp-rules (world)], [paper (built-in)], [file/new-day (world)], [file/imp-motd-working (world)], [file/server-hints (world)]
Paper version
This server is running Paper version 1.21.7-26-main@533d93c (2025-07-12T19:13:10Z) (Implementing API version 1.21.7-R0.1-SNAPSHOT)
You are running the latest version
Previous version: 1.21.7-10-6ea679e (MC: 1.21.7)
Other
No response
I think you should first report this to GrimAC to confirm this is not an issue on their part before reporting this to Paper. The stack trace you provided us with also seems to be related to command dispatching instead of riding a Happy Ghast. Could you try to provide us with a step-by-step small reproduction for us to actually be able to test this consistently?
This might be an issue relating to legacy enderpearl configuration option
Expected behavior
Skeletons from skeleton spawners have bows.
Observed/Actual behavior
Skeletons from skeleton spawners do not have bows.
Steps/models to reproduce
- Updated server and plugins from 1.21.4 to 1.21.7
- Rendered both newly generated and previously generated skeleton spawners
- Observed that skeletons in the spawner block itself were missing bows, as were the skeletons that spawned from the spawner
Plugin and Datapack List
Plugins: AnarchyExploitFixes, CookieSomnia, FreedomChat, GrimAC, HeadDrop, MiniMOTD, packetevents, RayTraceAntiXray
Datapacks: [vanilla (built-in)], [file/local (world)], [file/bukkit (world)], [file/imp-kit (world)], [file/local_loot (world)], [file/imp-death (world)], [file/imp-rules (world)], [paper (built-in)], [file/new-day (world)], [file/imp-motd-working (world)], [file/server-hints (world)]
Paper version
This server is running Paper version 1.21.7-26-main@533d93c (2025-07-12T19:13:10Z) (Implementing API version 1....
@Strokkur424 I have confirmed with the GrimAC devs that it is not an issue on their end. I've given them a link to this issue so that they can elaborate on my behalf.
The issue is down to the legacy enderpearls setting config option
Will there be a fix for this? I would like to keep that option enabled.
I think you should first report this to GrimAC to confirm this is not an issue on their part before reporting this to Paper. The stack trace you provided us with also seems to be related to command dispatching instead of riding a Happy Ghast. Could you try to provide us with a step-by-step small reproduction for us to actually be able to test this consistently?
Hi I'm Axionize and I'm a Grim developer. Grim has a feature to execute commands as part of punishments for players the anticheat has detected as cheating. @SplatDaddyMC has his config setup to execute a command to kick players.
These commands are always scheduled to execute on the main thread and ultimately then call dispatchCommand();
If further confirmation that we follow the correct behavior for dispatching commands is required I can go through everything Grim does in regards to this task in further detail. If there's anything I can do to help please let meknow?
The issue is down to the legacy enderpearls setting co...
Because the legacy enderpearl behavior removes the owner from the pearl which causes it to be removed from the enderpearls tracked by players; I think we can just set the owner directly instead of using the method that causes the collection we're cleaning up to be mutated
This whole PR... I think what you would really want to do is create the necessary hooks for a plugin to implement some of this InventorySupport logic. But I also wonder to myself if that couldn't already be done within the existing API without such sweeping changes...
Idk, I guess a lot of it comes down to a dissatisfaction of the docs in InventorySupport to describe what is happening here. A regular plugin developer that opens that class and sees that InventorySupport "Adds inventory support to a {@link InventoryViewBuilder}." Are left wanting more...
There are some other things that need picked apart about this PR, but I am not convinced it is something I want.
I do not like this method. Not one bit. Let me try and give some constructive thoughts...
Having to give major disclosures of how the created inventory CANNOT be used is a huge red flag to me in terms of the API design. The sucky part is... that if one wanted to make this a thing. The correct way to do it would be to change-up the top-level inventory related interfaces to introduce the concept of a virtual unopenable container which doesn't align with any of the Menu Types. But that delves into a level of refactoring that needs a lot more intention behind. Best be done by the core team.
I understand the intention behind re-using the Inventory interface to piggyback on the existing methods... It just is wrong here...
If someone wanted to force through this change... Seems like a route to take would be to add a parent interface to Inventory to hold some of those methods (I can't think of a name)... And then this support-menu-inventory concept could extend that parent interface ins...
I think that's a fair association. I'm largely dissatisfied with this method myself, but a few points for discussion.
"I understand the intention behind re-using the Inventory interface to piggyback on the existing methods... It just is wrong here..."
I don't know if it's necessarily wrong, but I do agree it could be confusing given the long-standing nature of the API. Iโll admit, the javadocs could definitely use some work, and thatโs something Iโll try to improve, however, it's not my focus at the moment (my focus moreso on creating a easy to use and rational API). My rationale for using the Inventory here is that, conceptually, itโs not inherently flawed, though, as you pointed out, the getType() method does present issues about clarity and it muddles in the concepts of what is an Inventory, which a lot of people don't really understand to begin with seeing as the reality and the Bukkit concept are so far detatched.
The bigger issue is that the current Inventory system ha...
Is your feature request related to a problem?
The reason why I want this is because my friend is developing a datapack and occasionally has some trouble obviously.
Was wanting to log commands to them, as Minecraft doesn't seem to do this.
Describe the solution you'd like.
Described in issue title, but to reiterate.
When a command is executed by a datapack, fire an event that can be listened to. This could be part of ServerCommandEvent or a new event.
Describe alternatives you've considered.
I considered
- gamerules (doesn't exist)
- nms reflection (too hard)
- ignite (obv not paper solution)
- javaagents (want this to be a drag and drop plugin, not really anything to edit the server execution)
Other
original message in #paper-dev on the discord server: #paper-dev message a conversation was started there, so feel free to use that a reference.
Example function:
<img width="235" height="101" alt="image" src="https://github.com/user-attachments/assets/366e3e2d-4c6f-4e27-a001-53032e2b9a8b" />
Example code:
<img width="557" height="225" alt="image" src="https://github.com/user-attachments/assets/8e1adb3f-2bcb-4563-8f90-d8b530fc78b8" />
Result:
<img width="507" height="254" alt="image" src="https://github.com/user-attachments/assets/d9842fac-44c2-4f27-b144-7e9e73cb7eaa" />
This is my first time to commit in Paper, so I have some questions:
- Do I need to use "sources patch" instead of "feature patch"?
- Do I need to do something else?
A sources patch is more appropriate here as this doesn't modify multiple classes, this is a single file change.
I'm not a maintainer though.
Grateful of your effort regardless.
EntityRiptideAttackEvent given we call it riptiding in most other places
one paper start comment above the if statement is enough
Add a diff on change comment to where you got it from.
might be worth adding a LiquidSettings enum to the api so we won't have to do so later incase mojang adds some new option (like in #12162). Can't think of anything they would add here though just in case
Kinda rough this event is cancellable in the first place. considering it can't be synced with the player and secondary use still allows the player to sneak
[PaperMC/Paper] New branch created: cat/copy-pearls-list
ba72c2a Copy thrown pearls list - electronicboy
the legacy enderpearl configuration option removes the player from the pearl,
which updates the list of pearls tracked by player while it is being iterated.
Ideally we'd only clone as needed, but, this being per-dimension prevents us
from being able to do that
While writing tests for MavenLibraryResolver, it was discovered that the Paper API's transitive Maven resolver dependencies were not available at runtime.
This was due to maven-resolver-connector-basic and maven-resolver-transport-http being declared with the compileOnly.
<img width="1099" height="494" alt="Screenshot 2025-07-13 at 22 36 47" src="https://github.com/user-attachments/assets/0e572d64-d036-4757-8761-93284567a5d1" />
Useful when user want to detect "an entity collides with another entity using a trident" or what
one paper start comment above the if statement is enough
my repo was broken so I made a new pr #12842
Although this method implements event interception, it requires creating and calling event objects for each attack, which may cause performance loss. It is recommended to perform performance evaluation in high-frequency calling scenarios.
This event really isn't called frequently, thus we don't need to worry about performance
Although this method implements event interception, it requires creating and calling event objects for each attack, which may cause performance loss. It is recommended to perform performance evaluation in high-frequency calling scenarios.
I don't think it will have more performance impacts than events like move event
One way to "optimize" I can think is to return a mutable list of living entities or entities with getTouchedEntities and move cancellation ahead
Something else, could you add the setCommand method if possible? Present in ServerCommandEvent, but not this...
Something else, could you add the
setCommandmethod if possible? Present in ServerCommandEvent, but not this...
I've just added it, it should work but you have to be aware with the performance issue.
After you set the command the server will internally re-parse command, so it may cause lag.
Same error here with the "StacklessClosedChannelException" spam with a player disconnect.
This server is running Paper version 1.21.7-26-main@533d93c (2025-07-12T19:13:10Z) (Implementing API version 1.21.7-R0.1-SNAPSHOT)
I have same issue with it version server 1.21.7
d9b5003 Dried Ghast events and Happy Ghast spawn reason (#... - Brokkonaut
bda8406 [ci skip] fix typo in AttributeInstance (#12843) - Clexus
Expected behavior
In 1.21.7 the PlayerResourcePackStatusEvent was not fired for Server RessourcePacks that are configured in the server.properties
Observed/Actual behavior
The Output from:
player.sendMessage("HasResourcePack: " + player.hasResourcePack());
player.sendMessage("ResourcePackStatus: " + player.getResourcePackStatus());
Is:
HasResourcePack: false
ResourcePackStatus: null
Steps/models to reproduce
Add RessourcePack to server.properties
Implement Debug Command to check ResourcePackStatus or Event triggering
Plugin and Datapack List
Nothing
Paper version
This server is running Paper version 1.21.7-DEV-main@bda8406 (1970-01-01T00:00:00Z) (Implementing API version 1.21.7-R0.1-SNAPSHOT)
You are running the latest version
Other
Client Version 1.21.7
No Proxy
Code for calling PlayerResourcePackStatusEvent and setting the last pack status is only in ServerGamePacketListenerImpl and not in ServerConfigurationPacketListenerImpl or ServerCommonPacketListenerImpl. This is why none of this is triggered for resource packs sent in the configuration phase (such as the one configured in server.properties).
94d60e1 Copy thrown pearls list for removal (#12840) - electronicboy
[PaperMC/Paper] branch deleted: cat/copy-pearls-list
We should be able to drop the runtimeOnly definitions in the server then (as we are currently duplicating the definition there to actually include the library)
ty for notifying me as well.
Expected behavior
Regeneration should be working on a full 4 layer beacon when selected with a secondary beacon effect
Observed/Actual behavior
when powering a full 4 layer beacon, regeneration is added as an option, but when selected, only the secondary effect activates
Steps/models to reproduce
make beacon 4 layers
activate beacon
select regeneration and a secondary effect
place metal
activate effect
Plugin and Datapack List
nothing, i installed a fresh version of paper 1.20.5 to see if paper was the problem, and it was
Paper version
This server is running Paper version git-Paper-22 (MC: 1.20.5) (Implementing API version 1.20.5-R0.1-SNAPSHOT) (Git: 8f7ac62)
You are running the latest version
Other
No response
1.20.5 is no longer maintained ๐ If you can replicate this on 1.21.7, open a new issue for this!
setAttackStrengthTicks
getAttackStrengthTicks sounds better imo
use an access transformer instead of creating these methods
Its in ticks and not fractions of seconds so there isn't a way mojang could change this.
[PaperMC/Paper] New branch created: dev/1.21.8
Not substantially.
While Paper is now in a position to dictate how things work; the practicality of doing something still has to be considered, and this has not changed.
Discussion Category: Ideas
I'm saying that mojang could change it to a long rather than an integer in the future. Making the API methods use long means it won't break the API if mojang changes the field to a long.
What if getAttackStrengthTicks returned < 0?
Currently the ticker can overflow naturally (albeit after a long time, but possible with tickwarp)
Should I just clamp the value to a minimum of zero for both the getter and setter?