#paper

1 messages ยท Page 25 of 1

rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
#

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...

#

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.

rustic folioBOT
rustic folioBOT
rustic folioBOT
#
[PaperMC/Paper] branch deleted: feature/release-item-type-block-type
rustic folioBOT
#
[PaperMC/Paper] New branch created: feature/remove-more-experimentals
#

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
#
[PaperMC/Paper] New branch created: cleanup/command-dispatching
rustic folioBOT
#

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.

rustic folioBOT
#

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:

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>

rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
#

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.

rustic folioBOT
rustic folioBOT
rustic folioBOT
#

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?

rustic folioBOT
#

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

rustic folioBOT
#

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

rustic folioBOT
rustic folioBOT
#

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

rustic folioBOT
rustic folioBOT
#
[PaperMC/Paper] New branch created: fix/clickevent-edge-case
rustic folioBOT
#
[PaperMC/Paper] New branch created: feature/fill
rustic folioBOT
rustic folioBOT
rustic folioBOT
#

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]:```...
rustic folioBOT
#

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...

rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
#

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

  1. Leash one or mob mobs to a fence
  2. Create and load a plugin which cancels HangingPlaceEvent
  3. Attempt to leash further mobs to the fence
  4. 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
rustic folioBOT
rustic folioBOT
#

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```...
rustic folioBOT
rustic folioBOT
#
[PaperMC/Paper] New branch created: fix/entity-desync-issues
rustic folioBOT
#
[PaperMC/Paper] New branch created: fix/leash-knot-event
rustic folioBOT
#
[PaperMC/Paper] New branch created: fix/registry-access-in-blockentity
rustic folioBOT
#
[PaperMC/Paper] branch deleted: backport/12689
rustic folioBOT
rustic folioBOT
#

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
rustic folioBOT
#

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
2025-06-24_17 31 28

#

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

rustic folioBOT
#

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

rustic folioBOT
#

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

rustic folioBOT
#

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)

MirrorPylon v9.zip

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...

rustic folioBOT
#

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.

rustic folioBOT
#
[PaperMC/Paper] branch deleted: fix/registry-access-in-blockentity
rustic folioBOT
rustic folioBOT
#

Hi,
so I've dug a bit into the code and found the error:

  1. the getOwner method returns null, if the player is offline.
  2. the setOwner method sets the uuid to null (and some other stuff too, but that doesn't matter...) as an addition by paper
  3. the deflect method calls setOwner with its owner argument.
  4. 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.

rustic folioBOT
rustic folioBOT
#

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.

Image

Steps/models to reproduce

Here's a video of me reproducing it.

  1. Ensure you have allow-flight set to false in server.properties, and you are in survival mode.
  2. Sit on your horse.
  3. Ride your horse to the Happy Ghast on it's head.
  4. Wait a few seconds.
  5. 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```...
rustic folioBOT
#

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...

rustic folioBOT
rustic folioBOT
rustic folioBOT
#

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....

rustic folioBOT
#

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```...
rustic folioBOT
rustic folioBOT
#

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?

rustic folioBOT
#

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.

rustic folioBOT
#

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

rustic folioBOT
#
[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:

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>

rustic folioBOT
#

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.

rustic folioBOT
#

https://github.com/PaperMC/Paper/blob/d7510efc16a586a732f6718963b555f649181a9b/paper-server/patches/sources/net/minecraft/world/entity/projectile/Projectile.java.patch#L157

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

rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
#
[PaperMC/Paper] branch deleted: feat/better-mc4-fix
rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
#

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 (...

rustic folioBOT
#

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...

rustic folioBOT
#
rustic folioBOT
#
[PaperMC/Paper] New branch created: cat/use-dropped-stacks-for-stats
rustic folioBOT
#
[PaperMC/Paper] branch deleted: cat/use-dropped-stacks-for-stats
rustic folioBOT
#
[PaperMC/Paper] branch deleted: feat/config-api
rustic folioBOT
rustic folioBOT
rustic folioBOT
#

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?

rustic folioBOT
rustic folioBOT
#

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.

Image
Entities should not collide, like in vanilla, with cramming rule killing excess entities instead.

Image
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

  1. Set up a PaperMC server with the latest version.
  2. Enable fix-cl...
rustic folioBOT
#

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...

rustic folioBOT
#

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 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 @.***
(2025-06-09T10:15:42Z) (Implementing API version 1.21.4-R0.1-SNAPSHOT)

(we had to restore from backup)
Ot************...

rustic folioBOT
#

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...

rustic folioBOT
#

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)

rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
#

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....

rustic folioBOT
rustic folioBOT
#

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.

#

Stack trace

https://mclo.gs/XtdkdPx

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

rustic folioBOT
#

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_```...
rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
#

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.

rustic folioBOT
#

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.

#

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

#
[PaperMC/Paper] branch deleted: feature/remove-more-experimentals
rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
#

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...

rustic folioBOT
#

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

rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
#

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

#

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)

#

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

rustic folioBOT
#

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...

#

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.

#

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:

  1. 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.
  2. Just because you want to support this, does not mean it is a generally supported mechanism. Bukkit's /reload is 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 the PluginLoader or PluginBootstrap, 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.
  3. (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...
#

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.

rustic folioBOT
rustic folioBOT
#

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:

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>

rustic folioBOT
#

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...

rustic folioBOT
#

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

rustic folioBOT
rustic folioBOT
#
[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

  1. Befriend wolf
  2. Put wolf armor on wolf
  3. Shear the wolf

Plugin and Datapack List

Bolt, Luckperms

Paper version

1.21.6 Build 46

Other

No response

rustic folioBOT
#
[PaperMC/Paper] New branch created: misc/enable-reobf
#
[PaperMC/Paper] branch deleted: misc/enable-reobf
rustic folioBOT
rustic folioBOT
rustic folioBOT
#

Expected behavior

methods overriding onPluginMessageReceived work.

Observed/Actual behavior

any methods overriding onPluginMessageReceived don't run at all

Steps/models to reproduce

  1. Make a test plugin that uses PluginMessageListener somewhere (make sure to put "Bukkit.getMessenger().registerIncomingPluginChannel(this, "minecraft:brand", new ClientDetection());" in onEnable() as well)
  2. 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,...

rustic folioBOT
rustic folioBOT
#
[PaperMC/Paper] New branch created: feat/config-messaging
#

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

  1. Create a world in 1.20.4 (or earlier)
  2. Place a command block with the command
    /give @p book{display:{Name:'{"text":"Test"}'}} 1
  3. Stop the server
  4. Drop the 1.21.7 jar in and start the server with that version
  5. Inspect the command block, notice no change.

Compared to 1.21.4 (previous stable)

  1. Create a world in 1.20.4 (or earlier)
  2. 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:

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>

rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
#
[PaperMC/Paper] New tag created: 1.21.6
rustic folioBOT
#

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

  1. Get trident with riptide
  2. Go in water, hold down right click
  3. 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

https://github.com/PaperMC/Paper/issues/11676

rustic folioBOT
rustic folioBOT
#
[PaperMC/Paper] branch deleted: feat/config-messaging
rustic folioBOT
rustic folioBOT
#

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

511222436_1549263803125218_5186593274239383573_n

after: https://spark.lucko.me/08hDQO2qRV

514605952_1085057596880562_1567761830096061681_n

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...

rustic folioBOT
rustic folioBOT
#
[PaperMC/Paper] New branch created: impr/reduce-ple-nag
rustic folioBOT
rustic folioBOT
languid raptor
#

okay shut up I know I didn't finish the description

rustic folioBOT
#
[PaperMC/Paper] branch deleted: impr/reduce-ple-nag
rustic folioBOT
#
[PaperMC/Paper] New branch created: fix/leavemessage
#

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

#
[PaperMC/Paper] branch deleted: fix/leavemessage
rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
#

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.

rustic folioBOT
#

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```...
rustic folioBOT
#

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

rustic folioBOT
rustic folioBOT
rustic folioBOT
#

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

rustic folioBOT
rustic folioBOT
#

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 stung
  • setTimeSinceSting(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 stung
  • setTimeSinceSting(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

rustic folioBOT
#

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 stung
  • setTimeSinceSting(int time) - Sets the number of ticks since the bee last stung

Closes #12719

rustic folioBOT
rustic folioBOT
#

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?

ใ€ŒThe getPushableEntities is using EntitySelector.pushableBy, which is always passing a false to isCollidableใ€


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?

The getPushableEntities is using EntitySelector.pushableBy, which is always passing a false to isCollidable
IMG...

rustic folioBOT
#

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 pushableBy method:

There should be no reason to even have a pushableBy(Entity, boolean) method with the ignoreClimbing parameter (as it is never set to anything but false) 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 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.

rustic folioBOT
rustic folioBOT
rustic folioBOT
#
[PaperMC/Paper] New branch created: fix/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

#
[PaperMC/Paper] branch deleted: fix/12043
rustic folioBOT
#

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...

rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
#

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```...
rustic folioBOT
rustic folioBOT
#

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 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 @.***
(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 c************...

rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
#

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.

Fixes https://github.com/PaperMC/Paper/issues/10720

rustic folioBOT
#

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...

rustic folioBOT
#

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);```...
rustic folioBOT
rustic folioBOT
rustic folioBOT
#

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" />

rustic folioBOT
#

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.

rustic folioBOT
rustic folioBOT
#

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

  1. Join with two accounts
  2. Move the two accounts far enough apart
  3. Use a dolphin spawn egg
  4. Switch to spectator mode
  5. 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...

rustic folioBOT
#
[PaperMC/Paper] branch deleted: dev/1.21.6-dialog
rustic folioBOT
#

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:

Image

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.

rustic folioBOT
#

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.

rustic folioBOT
#
[PaperMC/Paper] New branch created: feature/registry-trims
rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
#

'[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]...

rustic folioBOT
rustic folioBOT
rustic folioBOT
#

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...

rustic folioBOT
rustic folioBOT
#

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.

rustic folioBOT
#

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

rustic folioBOT
#

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

  1. Create/Install a plugin that registers a BlockTransformer to the trial chambers structure
  2. Setup and start a server and search for a trial chamber
  3. 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...

rustic folioBOT
#

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
rustic folioBOT
#

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:

  1. 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.
  2. 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.
  3. Get the player doing the click.
  4. Get the action type of the button being clicked.
  5. 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...

rustic folioBOT
#

I think literally none of this is possible with the protocol. There arenโ€™t any packets for this.

  1. No, nothing is sent for individual clicks. Just dialog actions which can be any of the options already available in the api.
  2. You can use the callback system to run code on button clicks.
  3. available in the callback and event already
  4. not possible.
  5. 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.
rustic folioBOT
rustic folioBOT
rustic folioBOT
#

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.

rustic folioBOT
#

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```...
rustic folioBOT
#

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

rustic folioBOT
#

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

rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
#

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.

rustic folioBOT
#

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).

rustic folioBOT
#

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 doMobSpawning gamerule.
  • Restart the Paper server.
  • Observe that the inhabited time is no longer incremented; this can be seen by debugging the incrementInhabitedTime method, 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...
rustic folioBOT
#

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.

rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
#
[PaperMC/Paper] New branch created: offhand-desync
rustic folioBOT
rustic folioBOT
rustic folioBOT
#

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.

rustic folioBOT
#

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.

rustic folioBOT
#

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.

rustic folioBOT
#

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

rustic folioBOT
rustic folioBOT
#

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.

rustic folioBOT
#

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 (true or false)
  • PAPER_VELOCITY_ONLINE_MODE - sets the online-mode value (true or false)

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.

rustic folioBOT
#

Expected behavior

GrimAC is able to kick players without issue

Observed/Actual behavior

ConcurrentModificationException is thrown

grim-kick-bug.txt

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

rustic folioBOT
#

Expected behavior

Skeletons from skeleton spawners have bows.

Observed/Actual behavior

Skeletons from skeleton spawners do not have bows.

Steps/models to reproduce

  1. Updated server and plugins from 1.21.4 to 1.21.7
  2. Rendered both newly generated and previously generated skeleton spawners
  3. 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....

rustic folioBOT
rustic folioBOT
#

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...

rustic folioBOT
rustic folioBOT
#

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...

rustic folioBOT
#

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...

rustic folioBOT
#

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

  1. gamerules (doesn't exist)
  2. nms reflection (too hard)
  3. ignite (obv not paper solution)
  4. 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.

rustic folioBOT
#

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:

  1. Do I need to use "sources patch" instead of "feature patch"?
  2. Do I need to do something else?
rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
#
[PaperMC/Paper] New branch created: cat/copy-pearls-list
#

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" />

rustic folioBOT
rustic folioBOT
#

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

rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
#

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

rustic folioBOT
rustic folioBOT
#
[PaperMC/Paper] branch deleted: cat/copy-pearls-list
rustic folioBOT
rustic folioBOT
#

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

rustic folioBOT
#
[PaperMC/Paper] New branch created: dev/1.21.8
rustic folioBOT
#
[PaperMC/Paper] New branch created: chore/gradle-fill-update