#paper

1 messages ยท Page 24 of 1

rustic folioBOT
#

This, similar to #enterConfiguration poses the interesting issue of "ah, you just requested what is basically a destruction of this connection state, what happens to this instance".

Calling #clearChat after this is illegal.
Getters might be fine. But we should look into a proper way to signal, "you destroyed this connection instance".

rustic folioBOT
#

Expected behavior

After placing the fourth end crystal the ender dragon respawns and the BlockPlaceEvent is not being called because of the end portal regeneration.

Observed/Actual behavior

After placing the fourth end crystal to respawn the ender dragon while also having the following listener enabled, it gets really strange. The player gets back one end crystal because a BlockPlacEvent was triggerd due to end portal regeneration.

public class BlockPlaceListener implements Listener {

    @EventHandler
    public void onBlockPlace(BlockPlaceEvent event) {
        final Player player = event.getPlayer();

        if (player.getGameMode() != GameMode.CREATIVE && event.getBlock().getType() == Material.BEDROCK) {
            event.setCancelled(true);
        }
    }
}

Steps/models to reproduce

Register the following listener in your plugin.

public class BlockPlaceListener implements Listener {

    @EventHandler
    public void onBlockPlace(BlockPl...
rustic folioBOT
#

I spotted this recently on PaperMC (somewhere in 1.21.4 builds), but looking at the bug report on Mojang site, it was a thing in 1.21.2 (down to 1.14), and seems to still be the case from one occurence I got in Vanilla 1.21.5.

Somehow, it seems exacerbated within Paper (it happen way more often) + villagers forget to close the door sometimes (which is quite tricky at night, for them ๐Ÿคฃ ).

So yeah, if an option to "fix" that was possible inside Paper, it would be nice in my opinion (as Mojang isn't quick in fixing it itself).

rustic folioBOT
rustic folioBOT
rustic folioBOT
#

Expected behavior

When updating from 1.21.1 to 1.21.4 or 1.21.5 item meta serialization should automatically change from the old serialization to new one. All item attributes / components should be kept

Observed/Actual behavior

Updating from 1.21.1 to 1.21.4 or 1.21.5 breaks all item attributes of saved item meta when serializing in 1.21.1 with ConfigurationSerializable.serialize() and deserializing with ConfigurationSerialization.deserializeObject()

I did not test the methods, I looked them up on Shopkeepers source here where the item attributes are lost on conversion.

Steps/models to reproduce

  1. Save items in 1.21.1 with a plugin that uses ConfigurationSerializable.serialize() and ConfigurationSerialization.deserializeObject(). (for example Shopkeepers, ItemEdit, ExcellentCrates or playerkits2)
  2. Update to ...
rustic folioBOT
#

Seems like exceptions get thrown when accessing pointers that don't exist, this is me clicking on a drowned.

@EventHandler
    public void interact(PlayerInteractEntityEvent e) {
        System.out.println(e.getRightClicked().pointers().get(Identity.UUID).orElse(null));
        System.out.println(e.getRightClicked().pointers().supports(Identity.UUID));

        System.out.println(e.getRightClicked().pointers().get(Identity.NAME).orElse(null));
        System.out.println(e.getRightClicked().pointers().supports(Identity.NAME));
    }
[15:18:59 INFO]: ba39d1da-de62-431a-ba8d-9d85f44502aa
[15:18:59 INFO]: true

java.lang.NullPointerException: Cannot invoke "net.kyori.adventure.pointer.PointersSupplier.resolver(net.kyori.adventure.pointer.Pointer)" because the return value of "net.kyori.adventure.pointer.PointersSupplierImpl.access$300(net.kyori.adventure.pointer.PointersSupplierImpl)" is null
	at net.kyori.adventure.pointer.PointersSupplierImpl$Forw...
rustic folioBOT
rustic folioBOT
#

Is your feature request related to a problem?

Yes. When writing custom Paper commands using Brigadier, there is no simple way to match how vanilla Minecraft suppresses command output when run via functions (mcfunction), command blocks, or when sendCommandFeedback is disabled.

For example, if I run a vanilla command like /time set day in chat, I get feedback in game chat:
Set the time to 1000

But if I call the same command inside a function:
/function namespace:day
Then Set the time to 1000 is not shown at all.

This means that individual commands in the function do not send feedback to the sender (player who ran the function).

If I create a custom command that uses:

ctx.getSource().getSender().sendMessage("My custom command set it to day");
and run it via a function, the feedback is always shown, regardless of context or gamerules. This breaks parity with vanilla behavior.

There is no clear way in the current API to handle command output suppression the same way ...

rustic folioBOT
#

Recently, some users began reporting an annoying classloading bug, where "IllegalStateException: zip file closed" would travel across plugin boundaries. Here are some examples:

This PR does NOT solve any bugs itself. It merely makes it easier to determine which plugin was the source of "zip file closed" in a complex plugin environment where bugs happen sporadically.

That such bugs can cross plugin boundaries at all is reason for this PR

rustic folioBOT
#

This doesn't solve anything at all and also doesn't particularly help with diagnosing the issue. I think you should instead try and figure out what the cause of the zip file closing is and PR a fix for that.

Zip file errors can happen for potentially many reasons.

The bug I'm currently investigating is hard to track down, and it is not consistently reproducible. The bug itself is technically not even my responsibility -- it comes from another plugin, and I have no way of knowing which plugin it is without applying a patch like this PR. However, server owners frequently update their server software, and because the bug is hard to reproduce, it quickly becomes lost among the wilderness.

So while this PR is motivated by solving a particular instance of zip file closed, it is much more helpful than that. This PR will help any plugin developer -- like myself, and others in the future -- track down zip file errors coming from other plugins.

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

Expected behavior

Changes made to the paper-config and paper-world-default files (when paper is stopped) persist once paper starts up

Observed/Actual behavior

As part of its starting process, the paper server seems to overwrite these files with the default files.

Steps/models to reproduce

I have observed this behavior in two separate deployments.

  1. On a ubuntu 24 server, having downloaded the paper-1.21.4.jar file and running it with the base command java -Xms4G -Xmx4G -jar paper.jar --nogui

The first time this is run all files will generate per normal. Then the server down and edit the paper-defaults.yml. When the server is started again with the same command, the changes to the paper-defaults are wiped.

  1. Within a docker container from itzg/docker-minecraft-server (see the discussion there https://github.com/itzg/docker-minecraft-server/issues/3461 ). Same deal, when changes are made and the container is restarted the changes disappear.

Plugin and Datap...

#

Additionally, it will even overwrite the files if nothing has been changed. If i make the config files read-only with chmod i get the following error on startup

[00:23:38 WARN]: [Configurations] Could not save config/paper-global.yml: Paper could not persist the full set of configuration settings in the configuration file. Any setting missing from the configuration file will be set with its default value in memory. Admins should make sure to review the configuration documentation at https://docs.papermc.io/paper/configuration for more details.
org.spongepowered.configurate.ConfigurateException: []: java.nio.file.AccessDeniedException: /data/config/.674620409881305588455paper-global.yml.tmp
at org.spongepowered.configurate.loader.AbstractConfigurationLoader.save(AbstractConfigurationLoader.java:211) ~[configurate-core-4.2.0-20250225.064233-204.jar:?]
at io.papermc.paper.configuration.Configurations.trySaveFileNode(Configurations.java:112) ~[paper-1.21.4.jar:1.21.4-231-09e9afd]
...

#

configuration files are loaded and their passed through a transformer to deal with populating missing things and applying transformations to the files, we don't know if any such transformations or additions have occurred and so, we just save the file back, as it's generally of 0 concern.

Losing stuff is something we've had one or two reports of, but, we've yet to be able to reproduce this, I'd guess, can you provide a configuration file with the tweaks you're wanting to make?

rustic folioBOT
#
[PaperMC/Paper] New branch created: fix/signed-command-order
#

Adding to the chat chain from two different threads could in rare occasions lead to chat chain breakage; chat being on the netty event loop while signed commands were pushed off to main. While this moves the preprocess event slightly back, the behavior and contract stay the same, only that the arguments are decoded first on the netty event loop before everything else is pushed to main.

Eventually we might want to create an async pre-process event, though this does not seem necessary for now.

rustic folioBOT
#

Is your feature request related to a problem?

Currently the PlayerEditBookEvent pass the BookMeta for allow modify the content but not make use of the new Paper Components

Describe the solution you'd like.

Add the same methods for old/new/set but for the Components.
not sure if based in the event the component is the writtable or written

Describe alternatives you've considered.

Just use ItemMeta

Other

No response

rustic folioBOT
rustic folioBOT
#

ItemMeta has pretty much never properly dealt with upgrades; this is one of many reasons as to we switched format. We also no longer support serialising ItemMeta. If you have data that isn't migrating, we can look into it. However, IM data upgrades are basically nonexistent.

The data differs from plugin to plugin, since they have slightly different ways in storing and migrating data. I don't really need help for the data migration myself, since I can probably avoid it, but it would be great if it could be automatically migrated.

If someone is interested:

I first created an issue at Shopkeepers' GitHub where there should be the example data of the issues that could occur: https://github.com/Shopkeepers/Shopkeepers/issues/962.

These could be the issues:

  • all attributes in 1.21.1 had a prefix generic. (for example generic.attack_damage). In new versions the prefix is missing.
  • at least in some plugins the slot for hand was saved as mainhand.
rustic folioBOT
rustic folioBOT
rustic folioBOT
#

When CraftPlayer.unregisterEntity is given a player, it will check to see if it should send a player info remove packet. However this check is only for whether the player being unregistered has received the player list.

This check is not sufficient; when a player is hidden from a newly joining player in PlayerJoinEvent a remove packet will be sent to the joining player, even though they have not yet received the player list. This will reveal the presence of the hidden player on the server.

Changing the check to require both players to have received the player list resolves this.

rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
#

This pull request improves the outdated build check by querying the api if an update is actually available

Example output: (has been modified since the screenshot but the general idea stays the same)

image

The message that happens after two weeks has been changed to instead say to check further logs and then after the server is finished loading we query the api asynchronously and return the build info (for example 1 build behind, with 5 builds and more behind throwing errors instead of warns, and in case you are running the latest ver it says to disregard the warn on startup)

Would love some feedback on this

rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
#
[PaperMC/Paper] branch deleted: fix/player-name-datafixer
rustic folioBOT
rustic folioBOT
#

Expected behavior

Iron golems to spawn naturally in free space available.

Observed/Actual behavior

Iron golems spawn keep spawning inside the walls, or walk into blocks after spawning, causing them suffocate and die.

Image

Image

Steps/models to reproduce

Building a simple Iron farm where iron golems spawn on the top of villagers

Plugin and Datapack List

I have only Geyser mc plugin

Image

Paper version

[14:46:09 INFO]: This server is running Paper version 1.21.5-87-main@fa360aa (2025-05-18T22:35:50Z) (Implementing API version 1.21.5-R0.1-SNAPSHOT)
You are 14 version(s) behind
Download the new version at: https://papermc.io/downloads/paper

Other

I have seen that this was also found in #5236 but I d...

rustic folioBOT
rustic folioBOT
rustic folioBOT
#

Is your feature request related to a problem?

Currently you cannot override the effects for vanillla enchantments or make use of them for custom enchantments created by the Lifecycle API

Describe the solution you'd like.

Support for use the enchantment effects

Describe alternatives you've considered.

Datapack or mess with NMS in the lifecycle

Other

No response

rustic folioBOT
rustic folioBOT
#
[PaperMC/Paper] New branch created: feat/chat-type-renderer
#

Allows to utilize the Vanilla ChatType rendering API to render chat messages natively on the client rather than using the RAW chat type. This most notably improves the experience for those using chat narration. This utilizes inlined ChatTypes, which we currently cannot nicely use our registry api due to adventure having its own implemented ChatType.

The ChatProcessor has also been refactored a bit to support per player bound chat types which is needed for this api.

private static final ChatType BEE_TYPE = ChatTypeRenderer.vanillaChatType("%s: %s", "%s loudly exclaims %s", Style.style(NamedTextColor.WHITE), List.of(ChatTypeParameter.SENDER, ChatTypeParameter.CONTENT));
    private static final ChatRenderer renderer = ChatRenderer.chatTypeRendererViewerUnaware(new ChatTypeRenderer.ViewerUnaware() {
        @Override
        public ChatTypeRenderResult render(final Player source, final Component sourceDisplayName, final Component message) {
            return ChatTyp...
rustic folioBOT
rustic folioBOT
#

Expected behavior

Since the PlayerStonecutterRecipeSelectEvent has a getStonecutterInventory method that returns a StonecutterInventory instance which has a setResult(ItemStack) method, I expect the result to be correctly set.

Observed/Actual behavior

The result is not set.

Steps/models to reproduce

Create a simple plugin with the PlayerStonecutterRecipeSelectEvent in use like this:

@EventHandler
public void onStoneCutter(PlayerStonecutterRecipeSelectEvent event) {
    StonecutterInventory inventory = event.getStonecutterInventory();
    StonecuttingRecipe recipe = event.getStonecuttingRecipe();
    ItemStack result = recipe.getResult();
    ItemStack newResult = result.withType(Material.BARRIER);
    inventory.setResult(newResult);
}

Notice that the result does not change.

Plugin and Datapack List

Just the plugin I am currently making, no datapacks.

Paper version

This server is running Paper version 1.21.5-101-main@a033e3b (2025-0...

rustic folioBOT
rustic folioBOT
#

Expected behavior

I expected to see:
My server running, and all my plugins etc running properly.

Observed/Actual behavior

First of all, i got

`
C:\Users\Blue\Desktop\Minecraft>java -Xmx28G -jar paper.jar nogui
Starting org.bukkit.craftbukkit.Main
[05:56:50 INFO]: [bootstrap] Running Java 21 (OpenJDK 64-Bit Server VM 21.0.7+6-LTS; Eclipse Adoptium Temurin-21.0.7+6) on Windows 10 10.0 (amd64)
[05:56:50 INFO]: [bootstrap] Loading Paper 1.21.5-101-main@a033e3b (2025-05-25T07:31:15Z) for Minecraft 1.21.5
[05:56:50 INFO]: [PluginInitializerManager] Initializing plugins...
[05:56:50 ERROR]: Failed to start the minecraft server
com.google.gson.JsonSyntaxException: java.nio.charset.MalformedInputException: Input length = 1
at com.google.gson.Gson.fromJson(Gson.java:1375) ~[gson-2.11.0.jar:?]
at com.google.gson.Gson.fromJson(Gson.java:1262) ~[gson-2.11.0.jar:?]
at com.google.gson.Gson.fromJson(Gson.java:1199) ~[gson-2.11.0.jar:?]
at io.papermc.paper...

rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
#

Expected behavior

I found one mod that allows you to see the list of plugins on the Paper core. I think this can be considered a very serious problem on the PAPER core side.

Here is the plugin code itself: https://github.com/tmquan2508/server-info-command-rewritten

Observed/Actual behavior

serious problem

Steps/models to reproduce

none

Plugin and Datapack List

Bukkit plugins

Paper version

1.21.1

Other

No response

#

The thing just basically asks the server for command suggestions, there isn't much we can do about this which isn't behaviorally breaking hacks, you could probably try to be harder on limiting namespaced commands being able to completed, but, it's not something we're inclined to spend hours on fighting with a proper solution for this, this is just how brigadier and the fact that the server registers fallback commands behaves.

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

Expected behavior

Formatted colour code behave properly like below

Image

Observed/Actual behavior

The colour code haven't been transferred like below

Image

Steps/models to reproduce

write a customized plugin, then run paper

Plugin and Datapack List

Only my customized plugin

Image

Paper version

This server is running Paper version 1.21.4-231-ver/1.21.4@09e9afd (2025-05-19T17:59:36Z) (Implementing API version 1.21.4-R0.1-SNAPSHOT)

Other

code is here

Image

Image

rustic folioBOT
rustic folioBOT
#
[PaperMC/Paper] New branch created: jmp/plugin-remapper-errors
#
[PaperMC/Paper] branch deleted: jmp/plugin-remapper-errors
rustic folioBOT
rustic folioBOT
#

Expected behavior

When hiding an entity by using entity.setVisibleByDefault(false); and showing it to a player with player.showEntity(plugin, entity); the entity remains visible to the player in question even after teleporting the entity across dimensions (basically teleporting it after the player teleports himself across dimensions).

Observed/Actual behavior

When teleporting across large distances in the same dimension, the entity remains visible, but once a teleport is performed across dimensions, the entity is no longer visible to the player and player.canSee(entity); reflects that.

I just noticed this happening when testing my plugin on 1.21.5, but it was introduced somewhere between 1.21.1-133 and 1.21.3-83.

Steps/models to reproduce

Using the following code, run /create and then /create 0, you will see the armorstand at your location,
then teleport into another dimension (/execute in minecraft:the_nether run tp ~ 129 ~) and see that the armorstand...

#

Expected behavior

Aliases registered in commands.yml should work with all server commands.

Observed/Actual behavior

When making an alias that maps to a plugin-registered Brigadier command, the alias system fails to find the plugin command. Aliases work for Bukkit commands and vanilla Brigadier commands, but not for plugin-registered Brig commands. On startup, the server will print Could not register alias <alias> because it contains commands that do not exist: <brig command>

Steps/models to reproduce

Create a Brigadier command in a plugin. Create an alias that maps to that command.

Plugin and Datapack List

Just the plugin to register the Brig command.

Paper version

This server is running Paper version 1.21.5-102-main@4765010 (2025-05-28T19:40:17Z) (Implementing API version 1.21.5-R0.1-SNAPSHOT)
You are running the latest version

Other

No response

rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
#

When making an semi-automatic dragon farm, it is common to push end crystals into place and trigger the end spawn sequence with a fifth end crystal, which isn't placed on the portal. Paper changes this behavior by checking the location of any end crystal, resulting in the breakage of certain farms which rely on that mechanic.

This PR adds a new option to the paper-world(-defaults).yml file:

misc:
  attempt-dragon-spawn-performance-improvements: true

(I am open to changes to the config value's name. I couldn't really think of something fitting.)

If this value is set to true, which is the default, the performance improvement takes effect and causes dragons to not spawn in the above mentioned scenario:

<details>
<summary><code>attempt-dragon-spawn-performance-improvements: true</code></summary>

https://github.com/user-attachments/assets/40b73521-5646-482b-920b-52b49823b74d

</details>

When setting this value to false, it returns to Vanilla behavior, ...

rustic folioBOT
rustic folioBOT
#

Currently, if you want to retrieve all entries from a registry with a tag, you have to do these steps:

  • Retrieve the Registry.
  • Retrieve the TagKey using Registry#getTag(...).
  • Resolve the TagKey using the same Registry.

This double-use of the registry feels counter-intuitive. Therefore, I have added a new method, #getTagAndResolve(...), which does the last two steps automatically, resolving in the following, new steps:

  • Retrieve the Registry.
  • Retrieve all tagged entries using Registry#getTagAndResolve(...)
// The current way
Collection<ItemType> manualResolve = Registry.ITEM
    .getTag(ItemTypeTagKeys.LOGS_THAT_BURN)
    .resolve(Registry.ITEM);

// The new way
Collection<ItemType> quickResolve = Registry.ITEM
    .getTagAndResolve(ItemTypeTagKeys.LOGS_THAT_BURN);
rustic folioBOT
#

Adds a new method to ItemType which allows for retrieving an item's burn duration in a furnace.

The following prints out all burnable item's burn durations:

String burnTimes = String.join("\n- ", Registry.ITEM.stream()
    .filter(ItemType::isFuel)
    .map(type -> type.key().value() + ": " + type.burnDuration())
    .toList());
getComponentLogger().info("All items' burn times: \n- {}", burnTimes);

Output (truncated):

[15:40:24 INFO]: [Paper-Test-Plugin] Enabling Paper-Test-Plugin v1.0.0-SNAPSHOT
[15:40:24 INFO]: [Paper-Test-Plugin] All items' burn times: 
- charcoal: 1600
- dark_oak_button: 100
- cherry_sapling: 100
- pale_oak_door: 200
- red_wool: 100
- stripped_dark_oak_wood: 300
- ...
rustic folioBOT
rustic folioBOT
rustic folioBOT
#

Stack trace

https://pastebin.com/H81MtyMF

Plugin and Datapack List

Luckperms, Litebans

Actions to reproduce (if known)

This has randomly happened a few times, I guess when players are flying into chunks, but I have prevent-movement-into-unloded chunks enabled, so players shouldn't be able to do this?

Paper version

1.21.4 228

Other

this has happened a few times, mybe once a week, i have 15 players and good hardware, server is like 20mspt average

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

Stack trace

[19:11:01 ERROR]: Encountered an unexpected exception
java.lang.IllegalStateException: Unregistered holder in ResourceKey[minecraft:root / minecraft:item]: Direct{null}
        at com.mojang.serialization.DataResult$Error.getOrThrow(DataResult.java:287) ~[datafixerupper-8.0.16.jar:?]
        at com.mojang.serialization.DataResult.getOrThrow(DataResult.java:81) ~[datafixerupper-8.0.16.jar:?]
        at net.minecraft.stats.ServerStatsCounter.toJson(ServerStatsCounter.java:135) ~[paper-1.21.5.jar:1.21.5-103-2ba1675]
        at net.minecraft.stats.ServerStatsCounter.save(ServerStatsCounter.java:89) ~[paper-1.21.5.jar:1.21.5-103-2ba1675]
        at net.minecraft.server.players.PlayerList.save(PlayerList.java:493) ~[paper-1.21.5.jar:1.21.5-103-2ba1675]
        at net.minecraft.server.players.PlayerList.remove(PlayerList.java:540) ~[paper-1.21.5.jar:1.21.5-103-2ba1675]
        at net.minecraft.server.players.PlayerList.remove(PlayerList.java:504) ~[paper-1.21.5.jar:1.2...
rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
#

Expected behavior

When a plugin cancels PlayerDropItemEvent, the item should not be duplicated

Observed/Actual behavior

Using /give on a player whose PlayerDropItemEvent is cancelled causes the player to receive double the items.

Steps/models to reproduce

  1. Cancel PlayerDropItemEvent
  2. use /give

Plugin and Datapack List

none

Paper version

[01:23:45 INFO]: Checking version, please wait...
[01:23:45 INFO]: This server is running Paper version 1.21.5-103-main@2ba1675 (2025-05-29T12:14:46Z) (Implementing API version 1.21.5-R0.1-SNAPSHOT)
You are running the latest version
Previous version: 1.21-91-3c8a7fe (MC: 1.21)

Other

No response

rustic folioBOT
#

this broke how that works you replace two drop calls one with itemStack and another with itemStack1 for a method where only itemStack1 is used.

better modify the current calls for add the other params and include the // Paper

but im unsure if the fix is avoid the event or improvement the fallback what sounds a little hard because the method dont know from where come the drop...

rustic folioBOT
#

Expected behavior

When TNT breaks a hanging entity such as a painting or item frame, HangingBreakByEntityEvent#getRemover should return the TNT entity that caused the hanging entities to break.

Observed/Actual behavior

If TNT is primed by a player and breaks a hanging entity, HangingBreakByEntityEvent#getRemover will get the Player who primed the TNT instead of the TNT itself.

Steps/models to reproduce

@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
    public void onHangingBreakByEntity(HangingBreakByEntityEvent event) {
        Bukkit.broadcastMessage(event.getRemover() + "")
    }

Place a TNT down and a painting or item frame next to it. Light it with a flint and steel and watch in chat.

Place TNT down again, near a painting or item frame, but this time light it indirectly with redstone (or just summon it with the summon command). Watch in chat

Plugin and Datapack List

Custom plugin

Paper version

This server is running...

rustic folioBOT
#

Expected behavior

It should load

Observed/Actual behavior

Exception: https://cpaste.de/talupafune.css

Steps/models to reproduce

  1. Add this player data to your server: https://webinterface.cubeside.de/temp/ce31ef71-5622-477b-a450-50e2461d7d83.dat
  2. Start a plugin with the following test code (in onEnable or whereever)
        OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(UUID.fromString("ce31ef71-5622-477b-a450-50e2461d7d83"));
        offlinePlayer.getName();

Plugin and Datapack List

just a test plugin

Paper version

Paper version 1.21.5-103-main@2ba1675 (2025-05-29T12:14:46Z) (Implementing API version 1.21.5-R0.1-SNAPSHOT)

Other

Similar to this https://github.com/PaperMC/Paper/issues/12565 but now with other players

rustic folioBOT
rustic folioBOT
rustic folioBOT
#

Fixes an UOE error when the consumer/predicate generateTree methods are used with the pale oak tree type. I'm not sure if there's something inherently wrong with implementing getLevel here, but otherwise it could be fixed by passing only the generator along to the PaleMossDecorator.

java.lang.UnsupportedOperationException: Not supported yet.
	at org.bukkit.craftbukkit.util.DummyGeneratorAccess.getLevel(DummyGeneratorAccess.java:58) ~[main/:?]
	at net.minecraft.world.level.levelgen.feature.treedecorators.PaleMossDecorator.lambda$place$6(PaleMossDecorator.java:61) ~[main/:?]
	at java.base/java.util.Optional.ifPresent(Optional.java:178) ~[?:?]
	at net.minecraft.world.level.levelgen.feature.treedecorators.PaleMossDecorator.place(PaleMossDecorator.java:59) ~[main/:?]
	at net.minecraft.world.level.levelgen.feature.TreeFeature.lambda$place$8(TreeFeature.java:155) ~[main/:?]
	at java.base/java.lang.Iterable.forEach(Iterable.java:75) ~[?:?]
	at net.minecraft.world.level.levelg...
rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
#

Expected behavior

Normal memory usage of minecarts.

Observed/Actual behavior

Bug

Since 1.21.5 (25w09a), there's an issue with minecarts (particularly with Minecart Hoppers) that create a memory leak after a long time. This bug was fixed in 25w21a (1.21.6 snapshot).

Here's the bug report from Mojang (by Andy):
Minecarts cause memory usage increases and crashes
https://report.bugs.mojang.com/servicedesk/customer/portal/2/MC-296337

Report from MAT

30 instances of ยซโ€…net.minecraft.world.entity.vehicle.MinecartHopperโ€…ยป, loaded by ยซโ€…java.net.URLClassLoader @ 0x6a6ec0810โ€…ยป occupy 667โ€ฏ998โ€ฏ056 (38,10 %) bytes. 

Biggest instances:
โ€ขnet.minecraft.world.entity.vehicle.MinecartHopper @ 0x677fb7928 - 37โ€ฏ871โ€ฏ592 (2,16 %) bytes. 

Most of these instances are referenced from one instance of ยซโ€…net.minecraft.world.entity.Entity[]โ€…ยป, loaded by ยซโ€…java.net.URLClassLoader @ 0x6a6ec0810โ€…ยป, which occupies 16โ€ฏ400 (0,00 %) bytes. 

Thread ยซโ€…ca.spottedleaf.moonrise.common.util.TickTh...
rustic folioBOT
#
[PaperMC/Paper] New branch created: fix/MC-296337-minecarts
#

Expected behavior

As per the javadocs, when retrieving an unregistered memory, it should return null.
<img width="596" alt="Image" src="https://github.com/user-attachments/assets/c0847907-abc5-42f4-ab0d-184855c6b36c" />

Observed/Actual behavior

When getting an unregistered Memory from an entity (said entity doesn't have that memory module), IllegalStateException is throw.

I have an addon for Skript, and someone just reported this to me.

<img width="957" alt="Image" src="https://github.com/user-attachments/assets/a54ccc1e-9d83-4fff-8bd2-3dddf454a803" />
See issue on my plugin here https://github.com/ShaneBeee/SkBee/issues/803 for more info.

Steps/models to reproduce

Simple code to test:

Location memory = somePigEntity.getMemory(MemoryKey.JOB_SITE);

Plugin and Datapack List

[17:38:57 INFO]: โ„น Server Plugins (9):
[17:38:57 INFO]: Paper Plugins (1):
[17:38:57 INFO]:  - CorePlugin
[17:38:57 INFO]: Bukkit Plugins (8):
[17:38:57 INFO]:  - BeerPlugin...
rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
#

The burn duration is technically not dependent on an individual ItemStack, is it? If there is a data component or something else, then it would make sense to put it onto the ItemStack, but I think it is more fitting to be on the ItemType, seeing as #isFuel is also on the ItemType.

If you want to, I can also add the method to the ItemStack, but seeing as #isFuel is also not exposed on the ItemStack, I'd add that one as well.

The reason why it creates an nms ItemStack here is because the FuelValues technically require an nms ItemStack for retrieving the value. I don't think there is a different reason, but don't quote me on that :+1:

rustic folioBOT
#

Is your feature request related to a problem?

There's currently no easy way to generally tell when a Creeper begins swelling/expanding with the Paper API. I want to play a custom sound when a Creeper is about to explode without having to override the vanilla fuse.ogg sound, since TNT also uses that same sound.

Describe the solution you'd like.

I would like an event that is called right before Creepers begin swelling/expanding, with a method to get the Creeper entity that is about to swell, and with or without the ability to cancel the event.

Describe alternatives you've considered.

I considered CreeperIgniteEvent, but it only fires if you manually ignite a Creeper using a flint and steel or fire charge, or programmatically with Creeper#ignite or Creeper#setIgnited(boolean). A Creeper swelling due to proximity with a player does not fire this event.

EntityExplodeEvent only fires immediately before the Creeper explodes, not before the beginning of the swelling proces...

rustic folioBOT
#

Expected behavior

The snow layers form on top of gras blocks, giving it a snowy texture

Observed/Actual behavior

Instead, they form, and ethe grass is eventually made into dirt?

Image

Image

Steps/models to reproduce

Start game, let it snow, the grass turns into dirt

Plugin and Datapack List

AxGraves, Chunky, CommandAPI, ConsoleSpamFixReborn, CoreProtect, CustomAnvil, CustomizablePlayerModels, DiscordSRV, EasyArmorStands, Essentials
[19:02:37 INFO]: FastXPPickup, floodgate, Geyser-Spigot, GeyserSkinManager, GriefPrevention, InteractiveChat, InventoryStacks, InvSeePlusPlus, LuckPerms, NoChatReports
[19:02:37 INFO]: PlaceholderAPI, PlayerWarps, ProtocolLib, PvPManager, ShapedPortals, Shieldfix, Shopkeepers, SimpleVoiceChatAdmin, SkBee, SkQuery
[19:02:37 INFO]: Skript, SpecialArrow, SuperVanish...

rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
#

Is your feature request related to a problem?

Yes, this request is related to the lack of a safe and stable way to create and manage custom advancements at runtime in the current API.

Currently, the only available method is UnsafeValues#loadAdvancement, which:

Is marked as unsafe and not guaranteed to work across versions.

May break due to implementation changes.

Requires raw JSON strings, making dynamic or programmatic usage cumbersome.

Is not designed for public, long-term plugin use.

This makes it very difficult for plugin developers to:

Dynamically create progression systems, tutorials, or achievements.

Build gameplay mechanics that integrate with the advancement UI (toasts, tabs, etc.).

Offer flexible and immersive experiences without relying on datapacks or manual advancement files.

A dedicated public API would solve this by allowing safe, readable, and version-resilient management of advancements, improving developer experience and enabling richer gameplay fe...

#

I totally understand where you're coming from. I'm a developer myself and fully aware that this area is technically complex and built on top of raw Mojang internals that change frequently.

I used ChatGPT just to help me write things out more clearly and thoroughly, not because I donโ€™t understand what Iโ€™m asking for. I simply didnโ€™t feel like spending a bunch of time manually wording everything when I already know what I mean and what I need. The request itself is genuine, and I do understand the implications as someone who would actually use the API.

Appreciate the context and the fact that it's on the todo list!

rustic folioBOT
rustic folioBOT
#

this PR adds two events: BlockPreUseEvent and BlockUsedEvent.

  • BlockPreUseEvent - called before vanilla block use logic, allows to override the result and skip it. (useful when making custom blocks with e.g. noteblocks, allows to proceed to place the block on it)
  • BlockUsedEvent - called after vanilla block use logic, allows to get the final interaction result. (useful when manually placing custom blocks with non-block items, allows to check if the used block already consumed the action, e.g. opened the door)
rustic folioBOT
#

Expected behavior

efficiency on a diamond pickaxe mining faster than a normal diamond pickaxe

Observed/Actual behavior

it was mining the same speed as the unenchanted diamond pickaxe

Steps/models to reproduce

it was on the latest versions from 1.20.1-1.20.6 (i reccommend trying 1.20.6)

enchant your pickaxe with efficiency 5 and compare it to a normal diamond pickaxe

Plugin and Datapack List

none, we did clean installs of the server

Paper version

1.20.1-1.20.6

Other

i've tested on versions of modern paper 1.20.1-1.21 and it seems when you try to mine with efficiency, even on FRESH installs of paper, the enchantment just... doesnt work, you still mine at normal speed.

this issue is really frustrating and is haulting the release of my entire server because of one small unfixable issue.

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

Is your feature request related to a problem?

When creating systems such as vanish or minigames where you want to hide spectators from other players, you are as it is right now faced with the issue that entities that look at players still will look at players that are vanished or spectating.
Right now there are only methods to make entities look at other entities, not an event or such that lets you cancel the act.

Describe the solution you'd like.

Essentially I want a way to toggle or cancel what entities look at what players (or other entities). This could for example be done through an event:

It would be a "EntityLookAtEntityEvent" or something along those lines, that lets you access the entity that tries to look, and the entity that it tries to look at, and then have it be cancellable.

Describe alternatives you've considered.

I've considered putting the players in spectator-mode, causing the entities to not look at players, but it would be very neat if something...

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

Is your feature request related to a problem?

io_uring is a transport type available under linux and can provide some performance improvements.
It has been an incubator for a long time in netty and is now out of incubator in netty 4.2.x

Describe the solution you'd like.

Upgrade netty to the latest 4.2.x version.
It might require to follow the migrating guide and adapt some changes.
It could be locked behind a system property.

Also, following recent issues observed with the new netty allocator present in netty 4.2 it should set it manually and make it also behind a system property.

Describe alternatives you've considered.

Keep netty 4.1.x and add the incubator module which has been archived.

Other

[Discord discussion](#paper-dev message) between @electronicboy ...

rustic folioBOT
rustic folioBOT
rustic folioBOT
#

Expected behavior

I've currently got an issue where there's a chunk refusing to generate in the world.

The bug started when someone used Phoenix616/RandomTeleport to get to the overworld from another dimension. Not sure if the plugin is relevant though.

Observed/Actual behavior

MCA and debugchunks:
chunk debug.zip

This issue corrected itself after a restart.

Steps/models to reproduce

_

Plugin and Datapack List

Plugins:

AdvancedPortals, AntiRaidFarm, ArmorStandEditor, BannerMaker, BuycraftX, client-crasher, CommandBlocker, CoreProtect, DeluxeMenus, DeluxeTags
DiscordSRV, DrMap, EntityDetection, Essentials, EssentialsFixesPlugin, EssentialsSpawn, ExcellentCrates, FastAsyncWorldEdit, floodgate, Geyser-Spigot
GpWgCompat, GriefPrevention, GrimAC, GSit, HeadDatabase, InvSeePlusPlus, JumpPads, KaBoom, LiteBans, LuckPerms
Minesuiteus, MiniMOTD, MoDispenserMechanics, Multiverse-Core, Placeho...
#

Expected behavior

When generateStructures is set to true, I expect all structures, including strongholds, to generate in custom worlds

Observed/Actual behavior

All other structures except for strongholds generate

Steps/models to reproduce

build this plugin and launch a 1.21.5 server: https://github.com/BluebirdYT/BorderHoarder
run the command "/startbordergame"
run the command "/locate structure minecraft:stronghold"
there is no stronghold despite other structures generating

Plugin and Datapack List

https://github.com/BluebirdYT/BorderHoarder

Paper version

This server is running Paper version 1.21.5-103-main@2ba1675 (2025-05-29T12:14:46Z) (Implementing API version 1.21.5-R0.1-SNAPSHOT)
You are running the latest version

Other

Might be a spigot bug but paper hard forked anyways.
I have read docs and searched online and found nothing.

rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
#

Needing to escape help topics with non-ASCII names is a pretty big and breaking change, especially for users who configured a custom help using the help.yml system.
The help command is aimed especially at clueless new users if used that way, and those will struggle with needing to type their topic a certain way.

For that reason alone I would not migrate the help command to Brigadier for the time being.

rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
#

o/

Purpose

I'm creating this (draft) PR to attempt to create a Dialog API for PaperMC.

Currently, the scope of this PR is to create an API that allows you to:

  • Build dialogs (in a syntax similar to how Item Components are built)
  • Send built dialogs to players

I decided to give trying it a start since I have a lot of time on my hands (summer vacation!). I am aware that 1.21.6 is in pre-release, so the Dialog API is due for frequent change. Don't worry, I should be able to keep up with this. I'll turn this into an official PR when I finish covering the Dialog's API, and 1.21.6 comes into official release.

Progress Checklist

Dialog Types

  • [x] Shared features
  • [x] Notice
  • [ ] Confirmation
  • [ ] Multi Action
  • [ ] Server Links
  • [ ] Dialog List

Body Formats

  • [x] Shared features
  • [x] Plain Message
  • [x] Item

Input Controls

  • [ ] Shared features
  • [ ] Text Input
  • [ ] Boolean Input
  • [ ] Single Option Input
  • [ ] Number Range

A...

rustic folioBOT
#
[PaperMC/Paper] New branch created: feature/RegistryRetriever
rustic folioBOT
#

Is your feature request related to a problem?

While Creating custom loot table would imply a major rewrite on the codebase, allowing this direct acess would not, while creating an easy way for plugins to have "custom lootTable" of sorts

Describe the solution you'd like.

A solution that changes as little of the codebase as possible.

Describe alternatives you've considered.

Updating LootContext to become usable by Plugins

Other

No response

#

I suggest adding that as an adventure like module, so that it can be used in Velocity as well, as Dialogs are basically protocol only stuff.

I think that's a good idea aswell, however previous maintainers of PaperMC have expressed wishes to develop it in Paper first.
image

While not official, I do believe it's a good idea to start on Paper.
image
This is the version history for Dialogs so far, and it is pretty substantial how unstable it is.

Additionally, we can always migrate these APIs to Adventure later, and I'm trying to keep the style similar so migration is easy and fits in with the pre-existing Adventure APIs.

Also, your comment made me realize Kezz is working on a Dialog API for Adventure.
https://github.com/KyoriPowered/adventure/pull/1238
I might try to work with them on this aswell if I c...

rustic folioBOT
#
[PaperMC/Paper] branch deleted: fix/MC-296337-minecarts
#
[PaperMC/Paper] New branch created: shane/fix/api-memory-access
rustic folioBOT
rustic folioBOT
#

Also, I did see kenny's comment on why #12586 was closed, I don't think you should delay fixing this to an undefined point in the future, as plugins that target Adventure 4.20+ (i.e. use TranslationStore instead of the old deprected TranslationRegistry) now have broken plain text serializer,.

i.e. this test would fail when it shouldn't:

String actualPlainText = PlainTextComponentSerializer.plainText().serialize(
    Component.translatable(
        "some.translation.key.registered.with.new.translation-store.class", // This is {0} translation: {1}
        Component.text("potato"),
        Component.text("throw some translatable component args at it")
    )
);

assertEquals("This is a potato translation: throw some translatable component args at it", actualPlainText); // fails
rustic folioBOT
#

Expected behavior

The potion not allow use GUNPOWDER because dont exists that mix for the added PotionMix

Observed/Actual behavior

The brewing consume the GUNPOWDER and the potion still the same unless you register a new PotionMix for this case

Steps/models to reproduce

  • Create a potion mix for create a potion with haste
  • Register the potion mix
  • Using the brewing stand put the ingredients
  • With the generated potion try to put GUNPOWDER

Plugin and Datapack List

N/A

Paper version

This server is running Paper version 1.21.5-104-main@4eda045 (2025-06-06T18:22:42Z) (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

I think this issue is just because the vanilla PotionMix just check if the below item is potion and not if can generate the result

rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
#

Hey, thank you for the time and effort you put into this PR. After an internal conversation weโ€™ve decided we will be closing this.

The dialogue system that we are going to be introducing has to be strictly tied to our registry API lifecycle so that dialogues can be fully utilized on PaperMC. This includes bootstrap registration to support quick-action support amongst other things. This in itself has a number changes that will be required, as our API does not nicely support mutating ItemStacks during bootstrapping, so some decisions are still being figured out as to the best path to go for that is. Because of all of this, continuing with this exact implementation would likely duplicate effort and fall out of sync quickly, as additionally we are having to plan a bit with adventure in order to make sure that the new click types are properly implemented.

Your contribution is still much appreciated, and weโ€™d love to see you still involved in Paper. If youโ€™d like to help there, plea...

#
[PaperMC/Paper] branch deleted: shane/fix/api-memory-access
rustic folioBOT
#

Hey, thank you for the time and effort you put into this PR. After an internal conversation weโ€™ve decided we will be closing this.

The dialogue system that we are going to be introducing has to be strictly tied to our registry API lifecycle so that dialogues can be fully utilized on Paper. This includes bootstrap registration to support quick-action support amongst other things. This in itself has a number changes that will be required, as our API does not nicely support mutating ItemStacks during bootstrapping, so some decisions are still being figured out as to the best path to go for that is. Because of all of this, continuing with this exact implementation would likely duplicate effort and fall out of sync quickly, as additionally we are having to plan a bit with adventure in order to make sure that the new click types are properly implemented.

No worries, I was somewhat expecting this anyways. I figured I'd try anyways, it was worth a shot. Had fun making it!

Y...

#

Mostly in #paper-dev, if you are wanting to talk about stuff there are plenty of people who are interested in contributing to Paper who also talk in there. Feel free to ping me if you are thinking about adding anything in particular and we can chat about it! :)

Thank you! :) I'm gonna be busy over these next few days, so I might not be able to do much for a little while, but after I'll see what I can do!

rustic folioBOT
rustic folioBOT
#
[PaperMC/Paper] New branch created: dev/1.21.6-dialog
rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
#
  • Introduced CreakingHeartTransformEvent and EyeblossomTransformEvent to the API, enabling plugins to monitor and control state transitions of Creaking Heart and Eyeblossom blocks.
  • Ensured all state changes for Creaking Heart (AWAKE, DORMANT, UPROOTED) and Eyeblossom (OPEN, CLOSED) are routed through their respective events, preventing untracked transitions.
  • Added CreakingHeartState enum to the API for stable plugin-side state referencing, decoupling plugin logic from NMS internals.
  • Implemented CreakingHeartProtectorChangeEvent to allow plugins to intercept protector (Creaking mob) spawn and removal.
  • Updated server-side logic to convert NMS state enums to API enums before firing events, ensuring API consistency.

These changes enhance plugin interoperability, event-driven extensibility, and long-term maintainability of custom block behaviors.

rustic folioBOT
#

Stack trace

https://mclo.gs/Qhmuu0I

Plugin and Datapack List

[16:23:46 INFO]: Paper Plugins: (1):
[16:23:46 INFO]:  - BKCommonLib
[16:23:46 INFO]: Bukkit Plugins: (65):
[16:23:46 INFO]:  - AdvancedRegionMarket, AntiCrasher, AzLink, BetterHud, BigDoors, BungeeGuard, Citizens, EcoStats, Elevators, EndoAutoDoor
[16:23:46 INFO]:  EndoBuildSecurity, EndoCrochet, EndoPhone, EndoPlanAPI, EndoPlayerNPC, EndoTrafficLight, EndoTram, EndoUtilities, Essentials, FastAsyncWorldEdit
[16:23:46 INFO]:  GarageVehicule, GSit, *HideNametags, IAFurnitureBreakRestricter, ItemsAdder, LoneLibs, LootableCorpses, LuckPerms, MechanicsCore, ModelEngine
[16:23:46 INFO]:  MythicMobs, NBTAPI, NoteBlockAPI, PhysicsToggle, PlaceholderAPI, Plan, PlugManX, ProtocolLib, QualityArmory, Sentinel
[16:23:46 INFO]:  SkBee, Skellett, SkEndoCraft, SkinAPI, SkinsRestorer, SkQuery, skRayFall, Skript, skript-gui, skript-yaml
[16:23:46 INFO]:  *skUtilities, spark, SystemChat, TCCoasters, ThirstBar, Train_C...
rustic folioBOT
#

Expected behavior

The village suddenly despawns at some time and so do the mobs around it

Observed/Actual behavior

suddenly disappears at some time

Steps/models to reproduce

https://github.com/user-attachments/assets/06cd7560-490e-43b8-a96b-449a916d5926

Plugin and Datapack List

[17:51:28 INFO]: - EconomyShopGUI, FancyHolograms, nightcore
[17:51:28 INFO]: - ajLeaderboards, AxAFKZone, AxVaults, BanItem, BetterRTP, BetterTeams, ChatColor2, ChatManager, Chunky, Citizens
[17:51:28 INFO]: FastAsyncWorldEdit, FreedomChat, GSit, GUITrashCan, HamsterAPI, Infiniteannouncements, InteractiveBooks, ItemEdit, ItemsAdder, Jobs
[17:51:28 INFO]: LifestealCore, Lottery, LPC, LuckPerms, MineKotH, ModernHome, Multiverse-Core, NBTAPI, NDailyRewards, packetevents
[17:51:28 INFO]: PlaceholderAPI, PlayerKits2, PlayerPoints, PlugManX, ProtocolLib, PvPManager, RedstoneLimiter, ServerTutorialPlus, SetSpawn, SkinsRestorer
[17:51:28 INFO]: Skript, TAB, Vault, ViaBackwards, ViaVe...

rustic folioBOT
rustic folioBOT
rustic folioBOT
#

Expected behavior

I expect my items inside the chest to still be there.

Observed/Actual behavior

Items inside the chest disappear whenever you use a sponge next to an underwater chest(must be waterlogged).

Steps/models to reproduce

  • Put down a chest(must be waterlogged) underwater
  • Put items inside the chest
  • Use a sponge right next to the chest

https://github.com/user-attachments/assets/c73ba0eb-4804-4e6b-bcf2-03062a7bb2f5

Plugin and Datapack List

Plugins
[20:11:29 INFO]: โ„น Server Plugins (0):

Datapack list
[20:11:32 INFO]: There are 3 data pack(s) enabled: [vanilla (built-in)], [file/bukkit (world)], [paper (built-in)]
[20:11:32 INFO]: There are no more data packs available

Paper version

[20:11:34 INFO]: Checking version, please wait...
[20:11:34 INFO]: This server is running Paper version 1.21.5-109-main@3527ccd (2025-06-07T10:52:23Z) (Implementing API version 1.21.5-R0.1-SNAPSHOT)
You are running the latest version

Other

N/A

rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
#

Is your feature request related to a problem?

I recently discovered that attribute swapping is hugely nerfed by paper. As someone in the mace community, the fact that this change is enabled by default with no choice to disable it greatly annoys me. I think its laughable that you're choosing to patch out this largely useful feature, not just for mace, but for plenty of different areas.

Describe the solution you'd like.

In my opinion, the best solution would be to create a setting allowing you to disable attribute swapping, but preferably leaving it on by default. that way, paper retains further parity to standard versions, but if server owners decide that it's too overpowered, they can choose to disable it.

Describe alternatives you've considered.

there isn't really an alternative to this as far as i can tell, you either decide to give server owners the choice where to allow attribute swapping, something that is a huge factor in several pvp kits, such as SMP and mace, o...

rustic folioBOT
#

Expected behavior

So in mc, when you have a sword that can block but doesnt block all damage you wont take knockback, though it should do that since these lines exist in hurtServer
`if (flag1) {
BlocksAttacks blocksAttacks = (BlocksAttacks)this.getUseItem().get(DataComponents.BLOCKS_ATTACKS);
if (flag && blocksAttacks != null) {
blocksAttacks.onBlocked(level, this);
} else {
level.broadcastDamageEvent(this, damageSource);
}

                if (!damageSource.is(DamageTypeTags.NO_IMPACT) && !flag) {
                    this.markHurt();
                }

                if (!damageSource.is(DamageTypeTags.NO_KNOCKBACK)) {
                    double d = (double)0.0F;
                    double d1 = (double)0.0F;
                    Entity var15 = damageSource.getDirectEntity();
                    if (var15 instanceof Projecti`...
rustic folioBOT
rustic folioBOT
#

side note maybe improvement a little the "getWorld" in the Location method because not sure if is just me but the descriptions is like for this case i can still get the world but with the "IllegalArgumentException" but no, because that location comes after the location was created, unless i get that when player dies and use later when the world was unloaded.

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

Expected behavior

Laggy player joins, they keep on falling (in the void) till their game caught up and get teleported to their actual location.

Observed/Actual behavior

Laggy player joins, they keep on falling and eventually get killed with the message "fell out of the world".

Steps/models to reproduce

Have a very laggy player join, sit back and watch.
Sometimes it can take a few disconnects for it to kill them with the message "fell out of the world".

Plugin and Datapack List

Bukkit Plugins:

  • AuraSkills, Bolt, ChestShop, ChestShopNotifier, Citizens, CleanroomGenerator, CMI, CMILib, CommandPanels, CoreProtect, DiscordSRV, DiscordSRV-Staff-Chat, EndPortalEntityExitRelocate, ExtraContexts, FarmControl, floodgate, Geyser-Spigot, GrimAC, Jobs, KeepChunks, LuckPerms, MobArena, Multiverse-Core, Multiverse-Inventories, Multiverse-NetherPortals, Parkour, PlaceholderAPI, RHLeafDecay, Vault, Votifier, VotingPlugin, WorldBorder, WorldEdit, WorldGuard

Paper version

pa...

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

I can confirm that this is an issue that also affects 1.21.5. Items flowing within a water stream quickly lose positional accuracy outside of a short distance from the player. This significantly interferes with basic item moving mechanics and disrupts even simple machines. An option to disable/alter this EAR behavior to restore item movement consistency would be very appreciated.

rustic folioBOT
#

It would be really good if the hierarchy of types here was adjusted so this class could be sealed and permit the two API interfaces. Would make switching on it nicer, especially in events where you only have the PlayerConnection, and to know what type it is, you do a switch pattern match. It's not a super simple change, because of the impl CommonCookeConnection abstract class, but things could def be moved around.

rustic folioBOT
rustic folioBOT
#

Is your feature request related to a problem?

For example, you can't reset basevalue to the correct value that set when entity is created. Like walking speed is 0.1 for a player, but is 0.7 by default

Describe the solution you'd like.

getAttributes(), so you don't need to iterate the registry to get them one by one
resetBaseValue and getBaseValue

Describe alternatives you've considered.

not related

Other

No response

rustic folioBOT
rustic folioBOT
rustic folioBOT
#

Is your feature request related to a problem?

There are a number of vanilla features which do not have a bypass permission node. This includes, but is not limited to: spawn protection, the "force-gamemode" setting, the "allow-flight" setting, the player limit, and the whitelist.

The lack of permission nodes for these features makes it more difficult to control who is and isn't affected by them. This can be especially problematic for certain configurations. For example, if a server uses "force-gamemode", there is no way to prevent certain users from being affected by it.

Describe the solution you'd like.

Adding permission nodes for these features would be very helpful.

A permission node for bypassing spawn protection would allow server owners to give staff members the ability to be exempt from it. The lack of a permission node for spawn protection has been an issue since Bukkit; I even found a forum post about it from back in 2014: https://bukkit.org/threads/permission-to-...

rustic folioBOT
#

Is your feature request related to a problem?

Paper already has permission nodes for Command Blocks and Debug Sticks (https://docs.papermc.io/paper/reference/permissions/). However, a number of utility blocks/items still do not have a permission node, such as Structure Blocks, Jigsaw Blocks, and Test Blocks/Test Instance Blocks. This makes it impossible to give users access to them without giving them operator access.

Describe the solution you'd like.

Adding permission nodes for these blocks/items would be helpful.

Structure Blocks/Jigsaw Blocks are typically used as tools for content creation. Permission nodes for these would allow server owners to grant access to people that need them.

Test Instance Blocks/Test Blocks are a somewhat new feature that is used with the "/test" command. Permission nodes for these would allow server owners to give staff members the ability to use them with the "/test" command.

Describe alternatives you've considered.

I have asked forks...

#

I generally thought that you more intended this as a wider discussion rather than a "here's three things I want perms for";

I'd guess there is no real harm in perms for these, assuming no plugins are expecting to get events for stuff like the gamemode change in order to override it; The reality is that those three things are generally much better handled by fairly common plugins that there is just little desire/care into putting the effort into such requests

rustic folioBOT
#

What is the benefit of allowing private constructors to be used?

The only benefit I can think of would be that it makes sure people, who use your plugin's API, which may come with internal classes exposed, cannot accidentally create an instance of your plugin's main class.

A potential solution to this is making the constructor package-private and creating the plugin instance with a plugin bootstrapper, but I can see how this might be non-ideal.

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

Would setting the permission node to "true" by default for all players prevent that issue?

That would essentially be a requirement, otherwise API would be completely broken unless server owners explicitly give permissions for it.

But I don't really think its worth adding this.
1.21.6 is releasing soon, and the custom click action and its dedicated packet are a much better way of implementing the callback functionality than the command. I would expect the command to get removed as soon as Adventure updates the ClickCallback to that, essentially solving this issue.
And just adding this for 1.21.5/.4 which will soon be unsupported really seems a bit useless.

rustic folioBOT
rustic folioBOT
#

Expected behavior

I am trying to set itemstacks at the player's equipment slots using player.getInventory().setChestplate() and such..

Observed/Actual behavior

Using those methods doesn't seem to work, I have tried the simple way of setting by index ( player.getInventory().setItem(39, itemstack); ) and it does seem to solve the problem.

Steps/models to reproduce

//

Plugin and Datapack List

//

Paper version

1.21.5, latest build

Other

No response

rustic folioBOT
rustic folioBOT
rustic folioBOT
#

Expected behavior

In 1.21.4, running BlockGrowEvent.getNewState().getBlock().breakNaturally() inside runTask (running it after the event happened) caused the new grown part of cactuses to get broken.

Observed/Actual behavior

In 1.21.5, running the same code, the root part of cactus gets broken.

Steps/models to reproduce

I have tested using Skript because of lack of resources at the moment but a testing code would look like
`@EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST)
public void onGrow(BlockGrowEvent event) {
Block block = event.getBlock();
BlockState blockState = event.getNewState();

    Bukkit.getScheduler().runTask(plugin, () -> {
        Bukkit.broadcastMessage(
                "BLOCK LOC: " + block.getLocation().getX() + " " + block.getLocation().getY() + " " + block.getLocation().getZ());
        Bukkit.broadcastMessage(
                "STATE BLOCK LOC: " + blockState.getBlock().getLocation().g`...
rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
#

This PR aims to expose the following argument types:

  • [x] Angle
  • [x] Swizzle
  • [x] Block predicate
  • [ ] Particle (custom data is currently broken)
  • [x] Vec2 (in form of a new Vec2FinePosition)

The code to test it currently committed under TestPlugin.java, please remove that on merge.
For documentation purposes, the current state of the testing code (which includes example usage) is this:

<details>
<summary><code>TestPlugin.java</code></summary>

package io.papermc.testplugin;

import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import io.papermc.paper.command.brigadier.CommandSourceStack;
import io.papermc.paper.command.brigadier.Commands;
import io.papermc.paper.command.brigadier.argument.ArgumentTypes;
import io.papermc.paper.command.brigadier.argument.predicate.BlockPredicate;
import io.papermc.paper.command.brigadier.argument.resolvers.AngleResolver;
import io.papermc.paper.command.brigadier.argument.resolvers.BlockPositionResolver;
import```...
rustic folioBOT
rustic folioBOT
rustic folioBOT
#

Yes, it is possible to make that loot return something, if a plugin changes what the Player loot table drops (this one is empty by default, that's why I used it). This initially sounds like a huge problem, however, it's rare to change the player's loot table.

Unfortunately, there is no LootTable.EMPTY (removed from vanilla a few updates ago), and making a custom one would involve a lot more work than it seems, since Paper does not have in-API support for creating custom loot tables. So that you know, this was information I gathered from a few other contributors on the Discord.

#

not so rare.. a basic example are datapacks for get player heads that use the player loot table for allow that.

about the custom yeah exists things like.

        new LootTable() {
            @Override
            public @NotNull Collection<ItemStack> populateLoot(@Nullable Random random, @NotNull LootContext context) {
                return Collections.emptyList();
            }

            @Override
            public void fillInventory(@NotNull Inventory inventory, @Nullable Random random, @NotNull LootContext context) {

            }

            @Override
            public @NotNull NamespacedKey getKey() {
                return new NamespacedKey(PLUGIN_INSTANCE, "loot_empty");
            }
        };

but not sure if is a good way for this...

rustic folioBOT
rustic folioBOT
#

Expected behavior

The expected behaviour is for the using_item advancement to stop triggering after letting down the using_item action key( "right_click"), even if you change the item data using item_modify in the same tick.

Observed/Actual behavior

If the advancement triggers a function and in the same function you update your holding item data the advancement will continue triggering even if u enter chat or press E or right click again. the trigger stops only after it passed the time it takes to consume the item, or change your hotbar slot.

Steps/models to reproduce

  1. Install the datapck added
    right_click_bug_test.zip_

  2. give yourself a consumable item

  3. right click once and you will see the function output right_click at x gametime run every tick for the duration of consume_seconds component of the item, or until you change item slot.

Plugin and Datapack List

No plugins or other datapack used to recreate this bug.

Paper version

This server is running Paper ver...

rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
#

Expected behavior

When building and linking Nether portals manually in the Overworld and Nether according to the 1:8 coordinate rule (and taking portal facing into account), each Overworld portal should link to its distinct Nether counterpart and vice versa.

Example from the test scenario:

  • Overworld P1 at (100, 100, 100) should link to Nether P3 at (~100/8, ~, 100/8) and back.
  • Nether P3 should link back to Overworld P2 when entering P3 (at the proper coordinates), not back to P1.
  • Overworld P2 at (100, 65, 200) should link to Nether P4 at (~100/8, ~, 200/8) and back.
  • Nether P4 should link back to Overworld P2 only.
    In short: P1 โ†’ P3 โ†’ P2 โ†’ P4 โ†’ P2 (roundtrip as expected), without any collisions.

Observed/Actual behavior

Instead, both Overworld portals end up linking to the same Nether portal:

  • P1 โ†’ P3 (correct for first link)
  • But entering P3 returns to P1 (instead of to P2)
  • P2 โ†’ P3 as well (instead of P4)
  • P4 โ†’ P2 (only this link works correctly)

Thus two di...

#

The question was more because we know that there are issues with "linking" portals in vanilla too; portals don't really 'link', it's more of a scan each time you use them (unless you're using them fast enough to take advantage of the short lived cache), and there are various caveats around that search; I don't see anything that immediatly springs out, but, some of the changes for plugins/configs make stuff interesting

#

The question was more because we know that there are issues with "linking" portals in vanilla too; portals don't really 'link', it's more of a scan each time you use them (unless you're using them fast enough to take advantage of the short lived cache), and there are various caveats around that search; I don't see anything that immediatly springs out, but, some of the changes for plugins/configs make stuff interesting

Do you perhaps know a working method for linking portals? Or maybe it has already been mentioned somewhere? Iโ€™m not the server owner, so unfortunately I canโ€™t provide details about configs or plugins.

rustic folioBOT
rustic folioBOT
rustic folioBOT
#
[PaperMC/Paper] New branch created: feat/pr-publishing
rustic folioBOT
#

Uhm, I see. That interaction was already on my mind when I was writing the code. However, the biggest problem with this bug is that there seems to be no perfect solution.

Would the creation of a new empty LootTable be a better solution? Probably. But then again, from what I gathered with other contributors was to not mess with the LootTables themselves too much, since that is kind of outside Paper.

rustic folioBOT
#

I'm developing an item storage plugin.
I apologize if there are any errors in the translation as it has been passed through a translation software.

I agree with this person's opinion.
My plugin is affected by the current IMIE implementation, so I have to maintain both Spigot and Paper.
It is because Paper's IMIE implementation is "broken" and the item export process cannot be realized.

I previously asked if this was a bug and was told that it was by design.
https://github.com/PaperMC/Paper/issues/10433

As of now, Paper is significantly diverging from Spigot in terms of implementation due to the impact of the Hardfork.
In fact, a great deal of effort was required to develop the 1.21.5 plugins in order to support both Spigot and Paper.
Nevertheless, we believe that leaving this issue as it is would be a great disadvantage for future plugin developers.
Once hopper operation is implemented, I plan to switch to supporting Paper only.

Now is the perfect time to consider ma...

#

It's not by design it's for performance reasons. But IMO behavior should be reverted to match one from Spigot, so the server admin can turn off IMIE or have it fired for all slots.

Reasoning behind that would be, anything done with IMIE is more or less useless now since it's not fired for all items and amounts are not reliable, at this point one could ask what's the point of IMIE? Protection plugins could already use HopperInventorySearchEvent instead which is fired before inventory operations are done.

And if one were to use IMIE event to try to do inventory operations it would have to include delayed tasks which introduces more overhead, cancelling IMIE which causes issues with cooldowns not being respected and hoppers going out of Sync (since they 1 tick delayed - at least).

Personally I couldn't find any other way so I ended up patching Paper.

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
Date: Tue, 18 Feb 2025 22:27:13 +0100
Subject: [PATC```...
rustic folioBOT
#

The event should fire for all actual attempts of transfering an item, so long as you actually check the item; otherwise it assumes that you don't care about the stack in qyuestion and just care to prevent the operation from occuring more widely;

The amount thing can likely be reverted now, given that cloning items is cheap. I would welcome a PR to prevent the cloning and messing of the source stack size; anything else, at this moment, I'm not sure what the real issue here is. This event is stupidly deep in hot territory, and we get lambasted for the performance of this, so, any win we get here is nice.

rustic folioBOT
rustic folioBOT
#

Is your feature request related to a problem?

If you need a RegistryKeySet object, you have to create it using RegistrySet.keySet. This is nicely documented in form of JavaDocs on the RegistrySet, but in the place where most people would look in the JavaDocs, the RegistryKeySet interface, that information is lacking.

Describe the solution you'd like.

Just a quick copy-paste of the JavaDocs from the RegistrySet onto the RegistryKeySet would be nice.

Describe alternatives you've considered.

--

Other

No response

rustic folioBOT
#

Expected behavior

A vector of the arrow's velocity

Observed/Actual behavior

Image

Steps/models to reproduce

  1. Start a fresh or existing Paper server
  2. Register a listener for EntityShootBowEvent that logs event.getProjectile().getVelocity()
  3. Spawn a skeleton, wait for skeleton to shoot at a target
  4. Observe the logged velocity of the arrow

Plugin and Datapack List

Just a test plugin, with this handler

static final class BowListener implements Listener { @EventHandler(priority = EventPriority.MONITOR,ignoreCancelled = true) private void onShootBow(final EntityShootBowEvent event) { LivingEntity entity = event.getEntity(); if (entity instanceof Player) { return; } Bukkit.broadcast(Component.text(event.getProjectile().getVelocity().toString())); } }

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

rustic folioBOT
#

I have also tested this. Fishing rod stasis chambers work on vanilla but not on paper.

@lynxplay To clarify some confusion 15 second ticket occurs when you enter a dimension, but not when you leave it. It also only creates a 3x3 area of fully-ticked chunks, with a ring of redstone-only chunks around it.

The following is from my comment on (https://github.com/Tuinity/Moonrise/issues/115#issuecomment-2974745611)

This is due to the delayed unloading of chunks with the PLAYER_TICKET_DELAYED ticket in RegionizedPlayerChunkLoader.java

In vanilla, chunks are unloaded immediately, so the fishing rod bobber never is ticked again after the player passes through the portal, thus preventing it from disappearing.

With Moonrise, the bobber is ticked so it realizes the player is in another dimension and thus disappears, prematurely activating the stasis chamber.

To be identical to vanilla, this entire delay unloading system needs to be removed.

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

Hi @Owen1212055,

Apologies for the delay in getting back to you โ€” a few other things came up that unfortunately prevented me from dedicating the necessary time to debug this code earlier.

In the meantime, Iโ€™ve gone over your last comment again and had a quick question regarding the configuration option you mentioned. When you say "configuration," are you referring to adding a proper boolean flag in WorldConfiguration.java (e.g., zombifiedPiglinsForgiveBeyondVanillaRange), or would a local boolean variable in the class itself suffice?

Just want to make sure Iโ€™m aligned with your expectations before proceeding with the change.

Thanks again for the thorough feedback and guidance!

Best regards,
Guilherme Corvelo

rustic folioBOT
#

Last updated for: 9dcbf0a6fdd49e5e0070b2933c5dfb6f4fad068b.

Download the Paperclip jar for this pull request: paper-12679.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/pr12679") {
        name = "Maven for PR #12679" // https://github.com/PaperMC/Paper/pull/12679
        mavenContent {
            includeModule("io.papermc.paper", "dev-bundle")
            includeModule("io.papermc.paper", "paper-api")
        }
    }
}

</details>

rustic folioBOT
rustic folioBOT
#

https://jd.papermc.io/paper/1.21.5/org/bukkit/event/entity/EntityTargetEvent.html

That event doesn't have any control over the look functionality of mobs, as far as i know.

But it would definitely be a plausible approach to incorporate the look into that event, so it can be cancelled etc.

If you don't want the players to be followed by the entity, just cancel the event, and check so target it's the right player.

If a player were to enter spectator mode when they already have an entity following them, you could just go through nearby entities, and set target to null, if the entity has the player as target.

rustic folioBOT
#
[PaperMC/Paper] New tag created: 1.21.5
#
[PaperMC/Paper] branch deleted: dev/1.21.6
rustic folioBOT
rustic folioBOT
#

Is your feature request related to a problem?

A plugin sets the color and prefix of a player in the tab list. To display a status behind the name using another plugin, I need to know when the name changes

Describe the solution you'd like.

The event will be triggered if a plugin changes a player's player-list-name

Describe alternatives you've considered.

Other

No response

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

Expected behavior

The tracking bar should show the correct position.

Observed/Actual behavior

When near a player, the tracking bar does not focus on the player's position.
It appears to be the position of the center of the chunk the player is in.

I remember fiddling around with Lynx's early snapshot builds, and I remember this being a moonrise issue.

Steps/models to reproduce

Log in 2 players, stand near each other, and notice the bar isn't facing the player:

<img width="966" alt="Image" src="https://github.com/user-attachments/assets/f5f91eab-f7c0-4863-8e07-9f9fd914475b" />

It appears to be focusing on the center of the chunk:

<img width="966" alt="Image" src="https://github.com/user-attachments/assets/c7492fc0-7a42-40a9-ab3a-50d42f1d51b0" />

Plugin and Datapack List

pl
[14:45:35 INFO]: โ„น Server Plugins (9):
[14:45:35 INFO]: Paper Plugins (1):
[14:45:35 INFO]: - CorePlugin
[14:45:35 INFO]: Bukkit Plugins (8):
[14:45:35 INFO]: - BeeConomy, BeerPlugin, Per...

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

The event should fire for all actual attempts of transfering an item, so long as you actually check the item; otherwise it assumes that you don't care about the stack in qyuestion and just care to prevent the operation from occuring more widely;

The amount thing can likely be reverted now, given that cloning items is cheap. I would welcome a PR to prevent the cloning and messing of the source stack size; anything else, at this moment, I'm not sure what the real issue here is. This event is stupidly deep in hot territory, and we get lambasted for the performance of this, so, any win we get here is nice.

Actually now that I think about it some more, it's not just amount issue. InventoryMoveItemEvent is stopping Item transfer after first InventoryMoveItemEvent is cancelled, it's not trying to move items until exhaustion regardless of cancelled InventoryMoveItemEvents?

Say Hopper is trying to move item into another Hopper, plugins implementing for example HopperFilters could...

rustic folioBOT
rustic folioBOT
rustic folioBOT
#

Closes https://github.com/PaperMC/Paper/issues/12325

This makes it consistent with vanilla and adventure, it's weird that it's allowed by the game but i think it's easier to do that
rather than cover all the place and just ignore some data. And with adventure there's no justification that a key could be converted to a namespaced key in method like Registry#get.
The implementation is roughly based on adventure (minus one bug).

rustic folioBOT
rustic folioBOT
#
[PaperMC/Paper] New branch created: feat/maven-central-tos
#

This PR does the following:

  • Updates to Adventure 4.23
  • Includes #12572 (use pointers supplier instead of pointers instance, kinda lower memory usage not really but w/e)
  • Implements the new UI sound source
  • Applies a nesting limit to the component flattener
  • Includes a working version of #12571 (stop hardcoding translation registry checks to allow new translators like the mm translator to work)
  • Re-implements the click event callback system using the new custom click event
  • Codecs for new click event (bar dialog, that can come in a dialog pr)

Still two bits todo:

  • [ ] Implement a codec for BinaryTagHolder (didn't really know where to start here, pointers welcome!)
  • [ ] Decide what to do about the arbitrary nesting limit for the component flattener, should probably be configurable?
#
[PaperMC/Paper] branch deleted: feat/maven-central-tos
#
[PaperMC/Paper] New branch created: backport/12689
rustic folioBOT
rustic folioBOT
rustic folioBOT
#

Last updated for: 0b5753fde72f3293e3244d2735c3e892fb69a85a.

Download the Paperclip jar for this pull request: paper-12693.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/pr12693") {
        name = "Maven for PR #12693" // https://github.com/PaperMC/Paper/pull/12693
        mavenContent {
            includeModule("io.papermc.paper", "dev-bundle")
            includeModule("io.papermc.paper", "paper-api")
        }
    }
}

</details>

rustic folioBOT
#

Last updated for: a3b672d9458c3dd5dd6f2bd8d379dc14940f13c2.

Download the Paperclip jar for this pull request: paper-12671.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/pr12671") {
        name = "Maven for PR #12671" // https://github.com/PaperMC/Paper/pull/12671
        mavenContent {
            includeModule("io.papermc.paper", "dev-bundle")
            includeModule("io.papermc.paper", "paper-api")
        }
    }
}

</details>

rustic folioBOT
rustic folioBOT
rustic folioBOT
rustic folioBOT
#

Something we need to decide is how to handle the "custom all" dialog action. This is the action that sends a full CompoundTag of all the input values back to the server using the new packet. Right now, there's no way to listen for these.

Do we just add an event for both config/game phase that includes the player its from, the id of the payload, and the BinaryTagHolder payload? Or do we do smth like adventure click callback provider?

rustic folioBOT
#

Expected behavior

When farmland block converts to a dirt block and a player is standing on it, cancelling PlayerTeleportEvent shouldn't cause the player to instantly die, but instead either not fire the PlayerTeleportEvent at all when pushing the player up or add another teleport cause (as right now the teleport cause is unknown) and make it so it cannot be cancelled (or just make it so the player doesn't die if cancelled).

Observed/Actual behavior

When farmland block converts to a dirt block and a player is standing on it and the PlayerTeleportEvent gets cancelled the player instantly dies (teleports in void?).

Steps/models to reproduce

  1. Make a dummy plugin which cancels PlayerTeleportEvent
  2. Give yourself a farmland block
  3. Jump on it

Plugin and Datapack List

Dummy plugin for cancelling the PlayerTeleportEvent

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

rustic folioBOT
rustic folioBOT
rustic folioBOT
#

Can confirm, issue is in https://github.com/PaperMC/Paper/blob/4781d28b4b23839c125075c6f0d323e9585338e6/paper-server/patches/sources/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch#L1029-L1035 the game passes all relative flags when teleporting up from farmland, so the PositionMoveRotation's position is actually a delta. When cancelling the event, the previous position is used as the new position, and with the relative position flags it means the position as a vector is added, so the result is the player is teleported away (twice the current distance to 0,0,0)

rustic folioBOT
rustic folioBOT
rustic folioBOT
#

Expected behavior

Guiding a happy ghast and or ghastling using a leash to move the mob to another location without the leash breaking; happy ghasts and ghastlings staying secured to fence posts when leashed.

https://github.com/user-attachments/assets/3a8d9517-352c-4366-a730-5dfa8c255ae7

Observed/Actual behavior

Attempting to guiding and move a happy ghast resulted in the mob breaking the lead instantly when I traveled 10 blocks or so. The happy ghast ignored the direction in which I intended to guide it in, continuing to wander through the air.

https://github.com/user-attachments/assets/dd92d93d-7308-468a-8fb7-0a47e5dab0b0

Steps/models to reproduce

Obtain happy ghast spawn egg, lead, and any fence post item from creative mode.
Place fence and spawn happy ghast.
Lead happy ghast and pull it away in another direction from the direction it is headed in.
Guide happy ghast a distance of 30 blocks and attach it to a fence post using a leash.

Plugin and Datapack List...

rustic folioBOT
rustic folioBOT
#

My comments are a bit nitpicky, so I just wanted to clarify the reasoning behind them. First off, this is a great change, the old two week notice definitely feels due for an update now that Paper provides a proper downloads API.

The language suggestions are mainly with accessibility in mind. For users who may not be fluent in English. Keeping logging messages concise and free of filler words can really help keep the message is clear and easy to understand, even in translation.

Also important to note I'm not a maintainer just trying to open up some discussion here and suggest some things I see that could be improved.

#

I think this line could be confusing. I'm also not entirely sure about the reminder in general. If someone is using an up-to-date stable version like 1.21.4, it might be annoying to receive warnings about newer versions that are still experimental, like 1.21.5 or 1.21.6.

I'd personally suggesst:
A. Implement a way to detect and exclude experimental versions from triggering this message, or
B. Consider removing this else block entirely.

#

Considering you were asked to I'd prefer a better solution to check if its experimental then, considering there is no endpoint not much you can do here. My personal opinion is that these messages should be direct.
e.g.
good: "You should update to the new minecraft version"
bad: "You should update to the new minecraft version, unless the build is experimental"
The former cuts down on any possible confusion that could arise.

rustic folioBOT
#

I mean a lot of your diff is changing what was really fine. My main point is that you should check for experimental instead of just blindly recommending and upgrade. I'd argue a lot of this could be reverted. Explicitly saying hey a new stable Minecraft version is available is fine, what I personally think is not fine is nagging for experimental releases.

rustic folioBOT
rustic folioBOT
rustic folioBOT
#

Do we just add an event for both config/game phase that includes the player its from, the id of the payload, and the BinaryTagHolder payload? Or do we do smth like adventure click callback provider?

I personally would prefer to at least have an event if that allows listening to arbitrary dialogs too but a way to directly react on some form of callback directly from the code that creates the dialog in a plugin would be nice too but I feel the event would be more important.

rustic folioBOT
#
[PaperMC/Paper] New branch created: feat/better-mc4-fix
rustic folioBOT
#
[PaperMC/Paper] New branch created: fix/pos-desync-untracked-entities
#

This more properly implement spigot's fix for teleportation area effect clouds, now however supporting many other entity types specified in this bug report.

Currently, this is not an issue for hanging blocks since they have a fix identical to this inside of setPos.

(This fixes spigots fix to more properly include all the other entities and prevent erroneous updates)

rustic folioBOT
rustic folioBOT
#
[PaperMC/Paper] branch deleted: fix/pos-desync-untracked-entities
rustic folioBOT
#

This is a bit of an invasive change, with requiring the resultslot change looking very hacky. The only reason I am a little iffy about introducing api here is that it possibly looks like this may be reworked a bit in the future.

craftingRemainingItem is one of the last manually defined fields that aren't backed by components anymore, which is indicative to me that this may be on some kind of future cleanup list on Mojang's end. Issue is obviously overriding the leftovers like this is a bit tricky with what is currently given api wise.

rustic folioBOT
rustic folioBOT
#
[PaperMC/Paper] New branch created: fix/tnt-water-desync
#
[PaperMC/Paper] branch deleted: fix/tnt-water-desync
#
[PaperMC/Paper] New branch created: fix/negative-explosions
#
[PaperMC/Paper] New branch created: fix/raider-cannot-pickup
#

This is a rather aggressive behavior change and is mostly an issue with canPickUpLoot. Normally entities that are able to pickup items have this set to true but this is not the case for raiders. Further changing this behavior will cause even more vanilla deviation, so it's better to just undo this change until vanilla properly fixes it.

#
[PaperMC/Paper] branch deleted: fix/raider-cannot-pickup
rustic folioBOT
#

Is your feature request related to a problem?

The task of dolphins searching for treasure may still be somewhat demanding and can occur more frequently.

Describe the solution you'd like.

Add a configuration option to disable dolphin treasure hunting, and since the behavior is similar, it could perhaps be categorized under the treasure-maps option.
It feels like a simple feature, and it's also quite appropriate to categorize it into the paper settings.

Describe alternatives you've considered.

null

Other

Although MC-249136 has been fixed, it may not be completely resolved. It would be great if an option to prohibit dolphins from treasure hunting could be added.

rustic folioBOT
rustic folioBOT
#

Last updated for: 07c1a591cf5c9dc9551e6621ae7d2322598c1e3e.

Download the Paperclip jar for this pull request: paper-12301.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/pr12301") {
        name = "Maven for PR #12301" // https://github.com/PaperMC/Paper/pull/12301
        mavenContent {
            includeModule("io.papermc.paper", "dev-bundle")
            includeModule("io.papermc.paper", "paper-api")
        }
    }
}

</details>

rustic folioBOT
#
[PaperMC/Paper] branch deleted: fix/negative-explosions