Dots at the end of jd bodies.
Goes for the rest of this PR too.
#paper
1 messages ยท Page 24 of 1
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".
Experimental the living shit out of all of these types.
Here and everywhere else, HANDLERS, or HANDLER_LIST.
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...
If the same issue is present when you run the component through the translator manually you should open this issue on Adventure.
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).
Was there anything else that needed to be added or is it just waiting for a review?
The data converter is not finished, this is why 1.21.5 is experimental and not stable. If you want to use your old maps, run the version updater in the minecraft 1.21.5 client first. then add the map to your server
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
- Save items in 1.21.1 with a plugin that uses
ConfigurationSerializable.serialize()andConfigurationSerialization.deserializeObject(). (for example Shopkeepers, ItemEdit, ExcellentCrates or playerkits2) - Update to ...
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...
No spaces please.
Also use
new io.papermc.paper.event.player.PlayerMapFilledEvent((org.bukkit.entity.Player) player.getBukkitEntity(), emptyMap, result).callEvent()
Move these getters down, use this.X
I think original item may better here?
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.
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 ...
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
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.
Is there any chance you can reproduce this issue consistently and instead open an issue so that the actual exception gets fixed?
and also doesn't particularly help with diagnosing the issue.
It does help by providing the plugin name whose class loader point to a closed jar.
Also the fix is usually inside the plugins, not the server (an example would be that the plugin randomly disabled itself), this just helps figuring out faster which plugin it is
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.
Nice spot! Fixed in https://github.com/KyoriPowered/adventure/pull/1232 so this PR is blocking on Adventure 4.22.0.
99% of the time I've seen this error, it's generally because some plugin died during init and its still in the classloader env
Bumping because it is still not working in 1.21.5 :3
I have looked over it but since the only reliable way I could see of getting last being through the list of all entries, I wasn't sure if they stored in the order of being added enabling
CombatTracker#getCombatEntries().getLast()
you can try but i remember is added in order.
This PR fix bad style in the use of link reference in javadocs adding extra {}
This take a TODO task for check the content of a page in book, this is used by adventure and currently already check the title rules, this just add the check for page content based in the same check used in the Paper Componente API
Could this item setting instead use the paper api? That way we don't need to repeat this
Could this item setting instead use the paper api? That way we don't need to repeat this
how? i mean i feel lost with the item setting.
okay many changes later this PR now reduce to use one behaviour for open the book also improvement how now a written book its based in component and not just the Material
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.
- 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.
- 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?
ca8d416 Always run signed argument decoding on the same... - kennytv
[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.
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
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 examplegeneric.attack_damage). In new versions the prefix is missing. - at least in some plugins the slot for
handwas saved asmainhand.
Chat plugins that use AsyncChatEvent didn't displayed messages in console
jmp mentioned in discord it might've been a misplaced return, seems like it was
Before:
After:
b70bca6 Revert "fix: Don't hardcode checks for translat... - kennytv
Thanks for the PR, but for now we have reverted the commit entirely and will be addressing it with more changes with the next adventure update/separately https://github.com/PaperMC/Paper/commit/b70bca6b698cfc172891d7bfa149649160d08ba2
We are using this pr build on our server for some days now and it fixed all player data loading issues for us.
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.
Hey, guys! Since it's been around 3 weeks since any developments occurred, I'm just popping up to ask whether anything's wrong with this PR. Since the pipeline didn't run again, I admit I became slightly concerned. Can I do something differently?
Stay safe.
The changes from ServerLevel are not in-tree, the field set was moved
I would not override this. The behavior is a bit different here in that it resolves the book item.
Your improvement to openBook on adventure is fine tho, but I would keep this the same.
Calling openItemGui is a bit different, so this should be kept the same, only adventure book should be changed.
I do want to note that the CRITICAL_HIT thing is obviously completely misleading in what it actually represents, but fixing that is outside of the PR scope.
220b57a Fixs and Improvements for EndermanEscapeEvent (... - Doc94
I do want to note that the CRITICAL_HIT thing is obviously completely misleading in what it actually represents, but fixing that is outside of the PR scope.
Yeah.. for future reference maybe can be just a "other" because not sure in what case now can throw
How diff is? I test the two methods and show the book then not sure what can be a noticed diff behaviour.
above method javadocs say "copy of" and this one does not, despite also being a copy
Missing space between desc and param
Ports the follow commits from spigot to paper.
All credits to go the respective commit authors listed below.
CraftBukkit: 3b4fd5b321f4440a2b3a67f3945739b45e6e687f
By: md_5 git@md-5.net
Resolves: #12426
Closing this in favour of #12588 to properly credit md as commit author.
b8fe22c Do not call EntityRemoveEvent during worldgen (... - lynxplay
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)
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
i feel this can be moved to a method in PaperVersionFetcher because you use things like urls already defined in that class
this can have a better name.. maybe "checkVersionOnServerStart" or not sure... but a thing most self-explaining than printWarning
Yeah you're right will move this
I feel like printedWarning is good enough, it's just used as a ref if the later logic should run
The issue is that we still want that to technically still be there if people are using the "latest" version of lets say 1.20.6, as even tho they are on the latest they obviously still should be encouraged to update.
return CraftSound.minecraftHolderToBukkit(settings.getSoundEvent());
maybe mention the cases for throws?
return this.effects.getAmbientLoopSoundEvent().map(CraftSound::minecraftHolderToBukkit);
Missing preconditions for nulls
@Owen1212055 what about adding a note even if it returns latest to check the build page if there is a new minecraft version and download it? implementing logic to check all that would be kinda complicated
"It's still recommended you check the build page in case a new minecraft version has been released" something in these lines
Most getters here, like translationKey() or key, are already without the get prefix
Are there any updates on this? Now that paper became a hard fork this would be something cool to implement.
Discussion Category: Ideas
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.
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
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...
You test this same designe in vanilla?
Also you can share the map?
Because come from the adventure style (?
Maybe more comments (from others) about these... But feel strange this type of class with that style
Example outputs for latest as of now
outdated ->
outdated and new minecraft ver ->
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
Obviously thought about when we initially created the lifecycle API entries for enchantments.
It is that kind of bit that is so very split across types and so verbose to setup, it has generally not been much of a priority.
[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...
If we are checking for player removal, I do not think that we should be calling it this far down?
Cause that event is being fired still.
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...
I don't follow. How would I do this manually? It's specifically in the hover event that this fails.
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...
Delete the .paper-remapped folder from the plugins folder
We have started a new PaperMC server moved from a vanilla server and indeed villagers are kinda broken now. Sometimes they just donยดt find nearby beds or get stuck in novel ways even though they managed to perfectly find beds/stations in the vanilla instance.
Now you have a different error due to a broken paper global config file, please use the discord for support
All of a sudden I'm seeing this sometimes with Paper version 1.21.4-231-ver/1.21.4@09e9afd when a non-whitelisted player attempts and fails to join. There seems to be some timing-related criteria as to whether it happens or not.
I just tested this in a single player world and noticed this same behavior (golems are spawning in walls), sorry for not checking this earlier. when I googled on golems spawning inside the walls I found an already raised issue in paper mc. And since I was also using the same server. I assumed it had to be a server issue. Also I am new here, what do you mean by sharing the map?
then is the vanilla behaviour currently (if is a bug or not depends if exista a valid report in MOJIRA)
for share map was in case this not happen in vanillla and a way to check this is welll the map where this happen.. or try to replicate that build...
Pretty sure that this is the fairly well known issue where entities load with the initial AABB and it isn't updated until they tick which creates some positioning risks when they load; We used to have a fix for that but it was dropped when trying to chase down some other issue
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.
If you want to control the server to display and send TAB-completable commands to players, you can check this out.
This can also control the commands you allow players to use.
https://github.com/YouHaveTrouble/CommandWhitelist
Note: if your server is only unique because of its plugin list, your server is not unique.
Focus your time on making your server appealing to users and don't stress about people knowing you run luckperms.
Expected behavior
Formatted colour code behave properly like below
Observed/Actual behavior
The colour code haven't been transferred like below
Steps/models to reproduce
write a customized plugin, then run paper
Plugin and Datapack List
Only my customized plugin
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
The logger doesn't support using minecraft formatting colors, use the component logger
The logger doesn't support using minecraft formatting colors, use the component logger
ok, thanks for your response
e6b4d47 Improve error messages when PluginRemapper fail... - jpenilla
[PaperMC/Paper] New branch created: jmp/plugin-remapper-errors
d4de675 also catch JsonSyntaxException - jpenilla
Have there been any more internal discussions regarding this? It seems to be more and more important with the waves of people who have been switching to Brigadier lately
4765010 Improve error messages when PluginRemapper fail... - jpenilla
[PaperMC/Paper] branch deleted: jmp/plugin-remapper-errors
jerome approved
Discussion Category: Ideas
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
I can verify this behavior. What I did was the following configuration in the commands.yml:
aliases:
givetest:
- give @s 1h1l:cooking_board
- give @s bowl
- give @s beetroot 64
adult: age 21
Both /give and /age are commands registered by myself. /givetest works fine, but it refuses to register /adult.
Fixed #12600.
This PR relocates the CommandMap#registerServerAliases() call to be after the lifecycle events for COMMANDS has been run to accommodate for commands registered during a plugin's onEnable method.
So since this is not a paper issue ig we can close it?
We are seeing the same on ours. This is breaking many machines and farms.
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, ...
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
TagKeyusingRegistry#getTag(...). - Resolve the
TagKeyusing the sameRegistry.
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);
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
- ...
shouldSpreadFire sounds to me more like a setter than a getter. Perhaps renaming to getSpreadsFire() would be better for clarity reasons?
Stack trace
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
well in the cases where the "should" is used is for get, and for set its like setShould...
Having the same problem. A lot of players are complaining about their kelp farms (specifically) not working properly.
Just a general thought
It would be more consistent to make the PlacementOptions class an interface
That way the random instance doesn't have to be passed or exposed and could be moved to the internals unless that is intentionally expised
We are seeing it with Bamboo, Sugarcane. Cactus, oddly seems fine.
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...
Hi paper any update on merging this?
This PR fixs https://github.com/PaperMC/Paper/issues/12606 where the Craft class for stats use material and just ignore the type of material then i just make use of the ItemType/BlockType where necesary and make the valid checks for avoid pass a block material for set stats where its only items are valid.
9f7c9f8 Fix compile issues: - Owen1212055
5594a68 Merge branch 'dev/1.21.6' of https://github.com... - Owen1212055
These functions are super helpful when creating a plugin to disable the AI of the Villager as they're needed to ensure stock and demand are still calculated like Vanilla.
Restock could always be done manually through the API but demand wasn't possible before this. Tested it with my lobotomizing plugin and it works :)
First time doing an API PR so let me know if it's wrong lol
Please don't oneline this stuff, it's just highly inconcistent for no reason
Intellij trolled me, thought I was lol
Ah yeah from where I just copy pasted the method's work.
extra import needs yeeting but, not going to not-approve on something somebody can clean up
Might benefit from some minecraft.wiki curveballs, like https://minecraft.wiki/w/Villager#Supply_and_demand.
updateDemand specifically. Or maybe a bit of an "intro" as to what demands are.
Can be good mention this also call the internal updateDemand and also mention this can trigger an VillagerReplenishTradeEvent
Yeah, lemme make the docs a bit more clearer.
I would flip it around so it's dragon-spawn-attempt..., maybe
I'm not a huge fan of that name, what about getTagValues?
Yeah I agree with you. That fixes the super weird naming of "attempt [...] performance improvements".
I renamed it to getTagValues()
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
- Cancel PlayerDropItemEvent
- 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
Fixes #12609
Cancelling PlayerDropItemEvent would cause items from /give to be duplicated
Fixes #12609
Cancelling PlayerDropItemEvent would cause items from /give to be duplicated
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...
reading the event and this make sense not call the event then the only thing you need is override the two calls here
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...
This PR try to manage a few things related to the Warden and target (thanks memory)
- Call EntityTargetEvent when target is set
- Override the setTarget in Warden class to use the memory method and not the legacy field what its not used for this
Expected behavior
It should load
Observed/Actual behavior
Exception: https://cpaste.de/talupafune.css
Steps/models to reproduce
- Add this player data to your server: https://webinterface.cubeside.de/temp/ce31ef71-5622-477b-a450-50e2461d7d83.dat
- 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
This fix https://github.com/PaperMC/Paper/issues/12612 where the damager used is the causing and not the direct, also include the damagesource for allow the past behaviour and also get more information for the reason related to damage.
I hope that fixes the itemStack and itemStack1 issue.
Please let me know if further changes are needed :D
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...
Paper start/end comments aren't necessary for a one line change, you can just put a comment at the end of the line. I think the comment itself should also be changed to better describe the change, something along the lines of not firing the drop item event for the give command.
I updated the comments to follow Paper's formatting guidelines.
Let me know if there's anything else I should improve.
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...
9d0aef3 Backport fix for MC-296337 (Fixes #12617) - electronicboy
[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...
Looks like we can just switch to calling getMemoryInternal
WrittenBookContent.resolveForItem(stack, this.createCommandSourceStack(), this) is called.
ok then rollback a use the same behaviour for "item" and "adventure book creating a item"
This message is not accurate it's not the material that should have the component but the item stack alone.
You can import types in this class too no need to keep FQN around.
0c3879a track block for lava/conduit damage - Lulu13022002
Why not have this be on itemstack
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:
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...
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?
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...
This potentially could affect performance, and obviously affects visuals aswell
Just found out, the grass only breaks when the snow is stacked 2x.
https://minecraft.wiki/w/Snow#Cover
Thicker layers of snow causes the grass block to revert to plain dirt when the block receives a random tick, similar to regular grass when covered by an opaque block.
That's just how the game works?
it is??
ive never noticed, thats why i thought it was a bug...
i set snowAccumulationHeight to 1 since it looks ugly as dirt under it
i also never knew accumulation could be set
You can already just use GenericGameEvent with GameEvent.PRIME_FUSE.
Thanks that does work for my use case. Although, I think an event could still be useful for canceling swelling
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...
if you used AI to generate this, please don't;
Advancements are on the todo list of stuff that would be nice to expose but is blocked by a bunch of other things which need to be done first; This API will not be "safe" as it's exposing raw underlying mojang data stuff which is subject to change and frequently changes, so there would be 0 safety assurance attached to it across versions
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!
ChatGPT spewed a whole bunch of text formatted in a manner which is hard to read, if this wasn't already a known desire, this would likely have just been closed for the sake of it being a mess to read.
ยฏโ \โ _โ (โ ใโ )โ _โ /โ ยฏ
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)
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.
I can not replicate this with the given reproduction steps on 1.21.5, efficiency is working fine.
- anything below 1.21.4 is unsupported
- sounds more like a client issue if the enchantment is actually properly applied
- anything below 1.21.4 is unsupported
- sounds more like a client issue if the enchantment is actually properly applied
this issue isnt a client issue, we applied through anvils, through commands, and all that, i have a video demonstrating as well https://streamable.com/u4jlmx
I can not replicate this with the given reproduction steps on 1.21.5, efficiency is working fine.
because it works fine on modern versions of minecraft, but from 1.20.1 to the base version of 1.21 im seeming to have this weird issue, even with fresh installs of paper https://streamable.com/u4jlmx
As already mentioned, those version are not supported anymore. Update your server
well i found the issue if anyone still cares and runs their servers on these versions
if u downgrade to before this update to the paper build (Add BlockBreakProgressUpdateEvent #474)
the efficiency enchants works again just fine, its some update that was added that just completely broke the mining speed, for some reason this just goes un-noticed, i have no clue how
only took like 11 hours total of trial and error lol
I'm not sure removing an emergency brake from a car is the proper response to having a habit of randomly pulling that emergency brake..
Uh.. it is when its ALSO the thing that copies selected text...
having ctrl+c as a shutdown shortcut would be the same as having ctrl+v a computer restart shortcut when no textbox is selected.
its dumb and a would be, but in this case it IS a HUGE oversight.
A solution has already been provided for people unfamiliar with how this sort of stuff works, @GrenFlem : https://github.com/PaperMC/Paper/issues/1152#issuecomment-398623691
This was provided many, many years ago. Please be sure to read issues in full before responding - there is no rush! ๐
it should be considered that merging it to the branch ver/1.21.5
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...
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 ...
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.
I only deprecated the old MSPT command since I thought there might be plugins out there that access the eval or getColor methods or check for the class name existence or other intelligent stuff
I wonder, couldn't we actually just fallback to spark's /spark tps command? That one displays far more useful information, which makes the classic Bukkit-style /tps command basically obsolete. Or is there actually a good use case for the Bukkit one?
I totally agree but iirc there was a reason for the TPS command not being replaced with the spark TPS command, but that's better off being answered by a staff member.
The information conveyed by the spark TPS command is not only more detailed but also much more readable, so I would be in favor of replacing TPS and MSPT completely.
The brigadier version also makes use of the SERVER_ONLY command flag, which doesn't send the command to the client.
Wouldn't this be deleted anyway in 1.21.6 as it would use the new custom click event?
Did I miss something? What custom click event? Isn't that dialog only?
Okay yeah can probably close this but let's see what staff thinks about this.
One downside to using proper arguments is that special characters have to be escaped which I do for topic suggestions
I would appreciate some input on setFallbackCommands should I remove the method entirely or keep it as deprecated?
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.
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...
[PaperMC/Paper] New branch created: feature/RegistryRetriever
b6548f0 Add RegistryRetriever for future use in registr... - Machine-Maker
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 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.
While not official, I do believe it's a good idea to start on Paper.
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...
Adventure v4.20.0 introduced TranslationStore interface as a replacement for the old TranslationRegistry, so Paper's platform flattener needs to account for that as well to render translatable components properly.
TranslationRegistry now extends TranslationStore, so this change is fully backwards-compitable with plugins that still use TranslationRegistry.
4eda045 Backport fix for MC-296337 (Fixes #12617) (#12619) - electronicboy
[PaperMC/Paper] branch deleted: fix/MC-296337-minecarts
[PaperMC/Paper] New branch created: shane/fix/api-memory-access
f13e268 Do not blow up accessing unregistered memories ... - electronicboy
This is not a proper fix, it should be using the new canTranslate methods - needs to basically be my previous PR #12571
94fefb8 [ci skip] fix classpath split on Windows for ge... - Lulu13022002
This is not a proper fix, it should be using the new canTranslate methods - needs to basically be my previous PR #12571
No idea why, but your PR #12571 was reverted: https://github.com/PaperMC/Paper/commit/b70bca6b698cfc172891d7bfa149649160d08ba2
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
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
Use access transformer for that. See build-data/paper.at
public net.minecraft.server.dialog.action.ParsedTemplate parse(Ljava/lang/String;)Lcom/mojang/serialization/DataResult;
Instead implement MinecraftServer#handleCustomClickAction(ResourceLocation id, Optional<Tag> payload)
and ensure that ResourceLocation / NamespacedKey / Adventure Key is added to the dialog events, so that the plugin can differentiate.
memory is an optional, so I expect it to never be null or did you find a case where null instead of an instance of optional is returned?
I don't feel there's any need to keep the old MSPT command... its not in the API at all.
replacing the output of the tps command was a concern due to various things reading the output of that, I've long also generally considered tps to be a useless metric and would defer to the mspt values instead; For as worthless as the tps is, it made little sense to care about randomly changing the format of the command and dealing with the consequences of that
I tried, and it did work, however I could not get the player that clicked on the event. Do you know of a way to do that?
I finished all of the main formats for the Dialog, so I changed the checklist. Now an overview of all of the Dialog formats are checked off, and the remainder tasks are ones I planned to do before.
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...
94f2903 Do not blow up accessing unregistered memories ... - electronicboy
[PaperMC/Paper] branch deleted: shane/fix/api-memory-access
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! :)
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!
All good, thanks again for your understanding!
73d218c Improve command permission lookups - Owen1212055
7c2ffd5 Prune the api version suffix - Owen1212055
c609d6d Remove SERVER_ONLY command flag functionality - Owen1212055
3594d24 Properly send over SADDLE and BODY equipment it... - Owen1212055
720e63f Remove craft flying - Owen1212055
1e44102 Removed inlined art api - Owen1212055
adb5aef Add api for shear equippable logic - Owen1212055
[PaperMC/Paper] New branch created: dev/1.21.6-dialog
5ec4588 initial work on registry dialog api - Machine-Maker
Stack trace
https://mclo.gs/6m2Pi05
https://mclo.gs/TaXioYK
Plugin and Datapack List
Plugin i usee:
Axgrave,betterchairs,invsee+,packetevents,skinrestore,spawn,tablistping,vanish,worldedit
Version 1.21.5
Actions to reproduce (if known)
No response
Paper version
.
Other
.
Please use our discord for support when you encounter an issue you're not sure about, our issue tracker is more for bugs with proper reproduction steps.
03efecf Do not fire PlayerDropItemEvent for /give command - Rodald
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.
3527ccd feat: expose updateDemand and restock on Villag... - mja00
This is so dumb. What's the point of using Optionals if the Optional ref. can be null, Mojang?
Missing end comment after this line
- 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.
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...
This is true for all classes, not only this one. But instead of adding the @NotNull annotation everywhere, you should instead just annotate the class as @NullMarked (imported from jspecify). All of the jetbrains @NotNull and @Nullable should also be replaced with their jspecify equivalents, since that is what we are aiming to switch to.
Please don't forget the // Paper start comments
I kinda dislike these being fields called 'logical states'. Maybe instead just call them (old|new)CreatingHeartState?
Again here, please don't forget the // Paper start comments
// Paper Begin -> // Paper start
You are running an outdated version of paper together with offline mode, neither of which we support. If you can replicate the issue on a supported version and can provide reproduction steps, feel free to open a new issue.
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...
18c950b allow typed key creation only for addable/writa... - Lulu13022002
Have you reproduced this without any plugins, how are you certain that this is a paper bug?
in fact this enum already exists under CreakingHeart$State not sure why it has been duplicated here
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
All registry types now wrap Holder
Can reproduce on paper, and it's not a vanilla bug
Wait, doesn't this mess with the block list in the sponge event then?
48e94e8 fix sponge absorb resetting block entity data of w... - Lulu13022002
There was some discussion of that brought up after I'd hit merge, kinda weary on leaving some griefing potentials around this available
I have test without plugins too,
When there are a lot of players on the server, along with the villager, the mobs around him also despawn
For the EyeblossomTransformEvent: This should also be called when a potted eyeblossom opens/closes - FlowerPotBlock around line 163 or so
The point was really just to decouple NMS internals from API logic.
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...
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`...
SO, i reportet this on the mojang bug tracker, but if this won't get fixed this would be a ncie paper fix haha!
This generally sounds like a subjective behavioral thing in which you could maybe argue either way? We would need the mc bug report and to see what mojang determines here
I encountered this NPE after dying in a world, unloading that specific world, and another plugin trying to access the last death location,
getLevel returns nullable but toBukkit doesnt allow null values
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.
Thanks a lot for all the suggestions and feedback! I really appreciate the thorough reviews. Weโll address each of the points as soon as we can. Thanks again for taking the time to go through the changes!
Converted to draft for now, since this will cause an IllegalArgumentException when getting the world a converted location
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...
95565e0 Add missing attribute serialization updater - Machine-Maker
We'll still need some reproduction steps, the behavior you are describing and have shown so far could only be caused by a plugin and not by paper.
Its same problem to the 1.21.4
The issue tracker is for reporting bugs in paper, your issue is that your server has from a 2 second glances deadlocked due to something, probably a plugin, stalling out the network pipeline.
For support with supported versions of paper, please use the discord or the forums.
Do you have any idea about the plugin?
Please read the reply above your last message.
I doesn't work for some reason ? Both TH break at the same time and none remain, I only get three
Adds support for private constructors in plugin main classes, using Constructor#setAccessible(boolean), allowing for better encapsulation.
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.
Fixes inventory state id desync with high ping causing inventory to be "buggy" (ghost items, items jumping to/from cursor, etc)
Without patch: https://youtu.be/hOXt3Rpkgtg
With patch: https://youtu.be/MtOYD7uieS4
Fixes inventory state id desync with high ping causing inventory to be "buggy" (ghost items, items jumping to/from cursor, etc)
Without patch: https://youtu.be/hOXt3Rpkgtg
With patch: https://youtu.be/MtOYD7uieS4
We don't need this abstract event. Just pull the one field up to the parent events.
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.
I feel like this event, and PlayerConnectionInitialConfigureEvent can be compiled with just an enum "cause" or something. They are just both fired right before switching to configuration phase, from either login or from game. Just a PlayerEnterConfigurationPhaseEvent or something with a cause?
Isn't this event a little redundant? It seems to just fire right after the PlayerConnectionValidateLoginEvent. Any way these can be condensed into one? If not, the javadoc comments probably need to talk about the difference between the two.
Can someone please test & merge this PR? it fixes very annoying server crash
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
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-...
Adding permissions for these sorts of thing creates major issues around exposability to plugins and their own ability to interact with and against these operations, many of which already offer more flexible options of control here.
allow-flight is generally just best disabled and replaced with a competent anti-cheat plugin as mojangs solution typically sucks.
(You really are farming free PRs smh)
Wouldn't it make sense to also clarify that this clears all registered permissions? Since this comes from #paper-dev with the exact question about this.
(You really are farming free PRs smh)
Wouldn't it make sense to also clarify that this clears all registered permissions? Since this comes from #paper-dev with the exact question about this.
free PR are free PR :)
but yeah add the "all"
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 suppose you have a point about the "allow-flight" setting.
As for the spawn protection and "force-gamemode" setting, could you elaborate upon how a permission node would affect exposability to plugins? I've yet to see any plugins that interact with the vanilla spawn protection/"force-gamemode" setting directly.
What is the benefit of allowing private constructors to be used?
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
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.
Doesn't creating a new javaplugin instance result in an exception already? I thought it did...
What Strokkur said is pretty much what I was thinking. Iโll admit I wasnโt aware of an Exception when making new JavaPlugin instances, but even so, I donโt think it would hurt to prevent it at compile time.
The reason why I made this separate is because both are treated very differently.
Basically I felt like differenciating that this player is going to be held forever in config phase vs they are going through the config phase as normal was an important enough disctinction.
Yep, I think you are correct.
But in both cases, doesn't the player just automatically go through the tasks in the configuration phase?
In plain vanilla, if you call that function to kick the player back to config phase, won't they just come right back in as if they had just logged in? Or do you have to somehow trigger something to let them back in?
I think its probably fine to allow this
I would like to suggest adding a permission node for the "/callback" command ("bukkit.command.callback").
I'm aware of the command's purpose. However, it's courteous to allow people to have a choice. A permission node would give server owners the freedom to disable access to the command if they wish to do so.
I would like to suggest adding a permission node for the "/callback" command ("bukkit.command.callback").
I'm aware of the command's purpose. However, it's courteous to allow people to have a choice. A permission node would give server owners the freedom to disable access to the command if they wish to do so.
I am a bit concerned about this, as its API functionality. A plugin would expect its clickable text to work properly, without checking for permissions first.
Additionally the command can be replaced in 1.21.6 anyways, as Mojang added a way of adding custom click events that does not rely on commands.
Would setting the permission node to "true" by default for all players prevent that issue? A number of other permissions are already set to true by default, such as "bukkit.broadcast".
I don't like this at all. Why would a server want to disable this command for anyone? It just is going to end up breaking plugins that use it.
96d739c rename RegistryFreezeEvent to RegistryComposeEvent - Machine-Maker
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.
Fair enough. I was not aware of the change in 1.21.6.
No, in reconfiguration the tasks are not run. This causes the player to just be stuck in the stage until released.
startConfiguration is only called when login packet is received, so there are no "tasks" that are being executed.
You have to "somehow" trigger to let them back in.
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
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`...
For now as a draft without docs and stuff...
I am not sure whether add an universal API for Holders, for now I created one specifically for SoundEvents... Would love some input on that...
When ready I will probably retarget to master, since dev/1.21.6 will probably be there...
[PaperMC/Paper] Pull request review comment: #12541 Expose certain scoreboard related argument types
@lynxplay do you perhaps have any idea what I could rename the Operation class to so that it makes more sense, even on a top level? I thought about IntegerOperation, ScoreOperation, or even CommandOperation, but all of these sounds misleading, so I am not fully happy about that yet
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```...
Fix #11849
By replacing the entity's loot table with an empty one, we ensure that the entity will not drop any items when killed, fixing the issue related to "clearLootTable" not working as expected.
Signed-off-by: Tiago Ferreira tiago.a.p.ferreira@tecnico.ulisboa.pt
If is using a vanilla loot table then can a datapack override that for make that loot return a thing?
I think its better just expose an LootTable.EMPTY custom
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...
Damn, can't launch my server for 3 weeks because of this issue. May someone merge it please?
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
-
Install the datapck added
right_click_bug_test.zip_ -
give yourself a consumable item
-
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...
Confirmed in 1.21.5 this is caused by a check when the RELEASE_USE_ITEM player action if the item change... in this case the item change with a new component then skip the call of release causing the issue.
Try to fix #12667 by change the check currently this check the item is the same what cause an ignore for every change in item being released.. im sure this was added for a reason but not sure the impact of this change or is even necesary that check.
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...
Just for the record, does this configuration work as intended in Vanilla?
Just for the record, does this way of linking portals work as intended in Vanilla?
I tested this method in vanilla, and it works.
Just for the record, does this way of linking portals work as intended in Vanilla?
Do you perhaps know a working method for PaperMC?
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.
Should be able to just drop this. Mojang fixed this is 1.21.5-pre3 and if we want to support this kind of same tick modifications, their check in #releaseUsingItem should be fine enough.
Should be able to just drop this. Mojang fixed this is 1.21.5-pre3 and if we want to support this kind of same tick modifications, their check in #releaseUsingItem should be fine enough.
ok was for possible bug. take note and making changes.
889d78a Add registry builders for SoundEvent and JukeboxSo... - Machine-Maker
6fddc93 keep original generics on now-deprecated freeze - Machine-Maker
Extracted from #12501
We have encountered the same issue.
That API is awful in general
A new one is already W.I.P #11834
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.
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...
Discussion Category: Ideas
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```...
Discussion Category: Ideas
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.
Discussion Category: Ideas
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
Expected behavior
A vector of the arrow's velocity
Observed/Actual behavior
Steps/models to reproduce
- Start a fresh or existing Paper server
- Register a listener for EntityShootBowEvent that logs event.getProjectile().getVelocity()
- Spawn a skeleton, wait for skeleton to shoot at a target
- 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...
[PaperMC/Paper] Pull request opened: #12676 Throw exception for CraftMagicNumbers#getMappingsVersion
after hard fork it makes no sense to have this. devs can use ServerBuildInfo#minecraftVersionId if they need a string that will change every version
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.
Yea, I have since been able to verify this ๐
Looking at this some more, there is an option that ideally could fix this (setting delay-chunk-unloads-by to 0), but as described in issue #8731, this option currently does nothing, and when entering nether portals there is always a 100-tick delay.
Would be great to have this in for 1.21.6, so that plugin devs can properly fallback.
- added a method and field to CraftItemEvent
- made them used in ResultSlot
- ServerGamePacketListenerImpl, the class calling CraftItemEvent sets ResultSlot's static list
- added a method and field to CraftItemEvent
- made them used in ResultSlot
- ServerGamePacketListenerImpl, the class calling CraftItemEvent, sets ResultSlot's static list
You don't have to add // Paper comments in API code
And same here, no need for // Paper comments
I think it would be good if you could add some JavaDocs here to explain what "crafting remainders" actually means, because from just looking at the name, I can only guess
You also seem to have made your NMS changes a feature patch. The changes you introduced there are more fitting to be added as a file patch. Please change that
Good evening, we've addressed the suggested changes โ thank you all for the thorough feedback and helpful reviews!
Let us know if there's anything else we should take a look at. Really appreciate the guidance!
Please make sure to not put methods on a single line like this
Constructors in the API are usually annotated with @ApiStatus.Internal. You should do so here as well
Not a big deal, but following English grammar, you would usually write creaking heart in all lowercase
Here as well, please add the @ApiStatus.Internal annotation
And here rename to getNewCreakingHeartState
Seems right. We will change our solution to that. Thanks
Thanks for the feedback @Strokkur424 ๐
Please disregard the latest version. That version has missing code. We will push a new, corrected version, in a few minutes.
The latest requested changes have been executed. Thanks again, and in advance, for your support.
I didn't test the changes, but they look fine code-wise
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
in the configuration file, that way server owners can configure it
39203a6 [ci skip] Publish PR API and dev bundles (#12672) - jpenilla
[PaperMC/Paper] branch deleted: feat/pr-publishing
153080f Allow cache writes on main and dev branches - jpenilla
9dcbf0a Throw exception for CraftMagicNumbers#getMappingsV... - JRoy
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:
- :package:
io.papermc.paper:dev-bundle:1.21.6-R0.1-SNAPSHOT - :package:
io.papermc.paper:paper-api:1.21.6-R0.1-SNAPSHOT
Repository Declaration
In order to use the artifacts published by the PR, add the following repository to your buildscript:
repositories {
maven("https://maven-prs.papermc.io/Paper/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>
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.
[PaperMC/Paper] New tag created: 1.21.5
457a0a6 Bump version string and protocol version to 1.21.6... - kennytv
[PaperMC/Paper] branch deleted: dev/1.21.6
I think I misunderstood your question, I first interpreted it as you only wanted to remove the "following" entities.
I assume you are talking about the "LookAtPlayerGoal", I think the only way is currently to get the nms entity and remove the goal by the Mob#removeAllGoals method, where you can check if the goal is instanceof LookAtPlayerGoal.
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
We (generally) don't fire events for changes made via API because our design philosophy is that if a plugin does something that should be preventable, the plugin itself should offer API for that.
Will leave this issue open for some discussion though.
A hard reset and cherry-pick from https://github.com/PaperMC/Paper/pull/11925 because the target branch boom.
This PR close https://github.com/PaperMC/Paper/issues/11978 by adding a way to register new MusicInstruments, for the expose of methods that was make in another PR.
The team will get there when it does :+1:
Removing a comment that points towards the other place this needs to be updated in is exactly the reason such PRs are something the team will do :+1:
reset and remake for 1.21.6
rebased ontop of 1.21.6 ๐
Rebased onto 1.21.6
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...
You can get the default attributes using EntityType#getDefaultAttributes. Is that not working correctly for player walk speed?
This message really isn't useful at all. Just remove it in my opinion. The message that says if the server is actually out of date is the only useful one.
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...
Discussion Category: Ideas
Still happening on 1.21.6 build 9.
Still happening on 1.21.6 build 9.
Just use smth else instead of paper/purpur
e4d7178a3c7cfc28a13d345d29e79a5040ebd9f5
5613ed6 Provide env environment variable and copy spigots... - electronicboy
[PaperMC/Paper] New branch created: ver/1.21.5
a1b3058 Provide env environment variable and copy spigots... - electronicboy
If you are creating a click callback using e.g. ChronoUnit.FOREVER.getDuration() this code will throw an ArithmeticException because toNanos overflows. The only way toNanos throws this exception is if the nanos overflow, so we can just safely cap it here as the max value for a long.
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).
Closes #12675
This is a regression since 1.21.2, also fix the wrong hand/used item by those event calls.
bf4997c Default LibraryLoader to Google's Maven Central mi... - jpenilla
[PaperMC/Paper] New branch created: feat/maven-central-tos
Default LibraryLoader to Google's Maven Central mirror, add MavenLibraryResolver.MAVEN_CENTRAL_DEFAULT_MIRROR, and warn on use of Maven Central with MavenLibraryResolver
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?
272a386 Account for both Maven Central URLs - jpenilla
[PaperMC/Paper] branch deleted: feat/maven-central-tos
62b7f86 Avoid and discourage use of Maven Central as a CDN... - jpenilla
Better to do it earlier before someone needs it and pull a bunch of unrelated changes in their PR.
138ffcc Avoid and discourage use of Maven Central as a CDN... - jpenilla
[PaperMC/Paper] New branch created: backport/12689
-
Default LibraryLoader to Google's Maven Central mirror, add MavenLibraryResolver.MAVEN_CENTRAL_DEFAULT_MIRROR, and warn on use of Maven Central with MavenLibraryResolver
-
Account for both Maven Central URLs
-
Update Javadoc
(cherry picked from commit 62b7f86dae659deb2fc450285452d7c1439f92dc)
Log4j Javadocs were recently fixed (https://github.com/apache/logging-log4j2/issues/3753), so they can be included in generation again.
would prefer not to have ci-skip so the docs update and we can make sure it's actually working, could you force push the branch to get CI to run? (can git commit --amend with no changes and then force push)
Ah, you're right. Done did.
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:
- :package:
io.papermc.paper:dev-bundle:1.21.6-R0.1-SNAPSHOT - :package:
io.papermc.paper:paper-api:1.21.6-R0.1-SNAPSHOT
Repository Declaration
In order to use the artifacts published by the PR, add the following repository to your buildscript:
repositories {
maven("https://maven-prs.papermc.io/Paper/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>
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:
- :package:
io.papermc.paper:dev-bundle:1.21.6-R0.1-SNAPSHOT - :package:
io.papermc.paper:paper-api:1.21.6-R0.1-SNAPSHOT
Repository Declaration
In order to use the artifacts published by the PR, add the following repository to your buildscript:
repositories {
maven("https://maven-prs.papermc.io/Paper/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>
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?
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
- Make a dummy plugin which cancels PlayerTeleportEvent
- Give yourself a farmland block
- 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...
Can't confirm that the player immediately dies, but the behavior is definitely not correct either
https://github.com/user-attachments/assets/d7b1f173-bff9-450e-8ad6-fe1f1bc88b47
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)
The position I am teleported to is not consistent in x and z axis but pretty much always around 100 blocks above the previous y position
Also happens on 1.21.6, it seems like x and z get exponentially bigger. After a few attempts, the server crashed.
Interesting, the reason I said players were immediately dying is because it was teleporting them into void, instead of the air like it teleported you, but definitely this behavior isn't correct either way.
Duplicate of #10655
This is working as intended. To hide something, something needs to be added first. Vanilla behavior since 1.20.5
working as of spigot 1.21.4. this is a paper specific issue
This has been resolved in 1.21.5 and onwards.
It is also to note that the spigot "fix" for this behaviour results in items with all their attributes locked, e.g. won't be updated if mojang changes the default attribute modifiers of the stacks base item.
This has been resolved in 1.21.5 and onwards. It is also to note that the spigot "fix" for this behaviour results in items with all their attributes locked, e.g. won't be updated if mojang changes the default attribute modifiers of the stacks base item.
well darn!
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)
There appears to be quite a few formatting issues ive noticed; some code isnt indented from its if statement while some is, some if statements have braces while others dont, some code is duplicated inside an if when it could just extract one part of it
If these variables are needed only inside if, then why are you initializing them outside if?
What about ability to disable that "automatic update check"?
You can get the default attributes using EntityType#getDefaultAttributes. Is that not working correctly for player walk speed?
how about getAttributes()
There appears to be quite a few formatting issues ive noticed; some code isnt indented from its if statement while some is, some if statements have braces while others dont, some code is duplicated inside an if when it could just extract one part of it
Reformatted and added back the system property ๐
the SIMPLE_LOGGER is used to avoid printing [PaperVersionFetcher] and the COMPONENT_LOGGER is for avoiding + formatted component messages; can probably put both under the COMPONENT_LOGGER
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...
Introduced PlayerRequestStatsEvent to allow handling when a player opens the statistics menu.
Cancellable event prevents stat updates.
Erm, there might be some overlap with the event in the better stats API pr (that got auto closed, need to reopen) https://github.com/PaperMC/Paper/pull/11834
"However" Can be dropped here. It doesn't particularly add to the log statement
Is it really necessary to log if someone is on the latest version?
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.
"Also note that a new" can be dropped as well a simple "A new Minecraft version has been released", though I do have the same problem with this as above considering experimental releases etc.
B is defo out of question since i was asked to have a message of some sort if theres a new minecraft release available, however as for A there is no endpoint (yet) to see if the version is experimental or not but there is a way that would involve grabbing the latest build for that ver to check if its experimental so im going to try to do that
I feel like However should stay here, it makes the information flow better
Might be nice to let them know but also unnecessary
Will redo the wording on this one
there is a way to check if its experimental, projects/paper/versions/<ver>/builds provides a list of builds and what channel they are on
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.
@Y2Kwastaken would you mind reviewing once again now?
I cannot replicate this. Can you share your world configuration?
If the maxLeashDistance was changed, this could explain this behaviour.
You can add the (unless it is experimental) back unless you genuinely plan to check if the version is experimental or not
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.
even this where you're saying hey a new version is available, that is fine unless you are ensuring there is a non experimental upgrade.
If you check i added handling to the method which checks for newer versions which ensures the version has to have a stable build
This and line 108 have two different ways of saying the same thing might be worth joining them to be more similar. This is more of another question is there any reason a distance of 5 has a separate branch compared to all other distances?
I chose 5 builds as a middleground between "it's recommended to update" and "update asap" but that number can be changed
for context that sends a message for only 5 builds out of date, as soon as you hit 6 builds out of date the default is hit again.
It should just tell you how many builds outdated you are, trying to provide recommendations based on # of builds is somewhat silly; numbers mean nothing when the build after the one you're on fixes some high risk crash
oh yeah... gonna have to fix that xD
It should just tell you how many builds outdated you are, trying to provide recommendations based on # of builds is somewhat silly; numbers mean nothing when the build after the one you're on fixes some high risk crash
github hid this from me, guess i need to make a yet another commit
Addresses issues #12056 and #8731 by reimplementing the delay-chunk-unloads-by option.
For #12056 server owners who want vanilla-like fishing rod stasis chamber behavior can now set delay-chunk-unloads-by to 0 as described in the wiki.
should be prโd into moonrise; changes to the moonrise patch are not accepted afaik
I guess I'm not too familiar with the relation between moonrise and paper. Is there a system that automatically transfers changes over?
No, that is done manually, but, any changes done directly here would be lost during an update
This didn't end up getting implemented in the DataComponent PR, is there still a current plan to implement this or was the ability to affect ItemFrame visibility / fixed state on an item level (as well as the other CraftMetaEntityTag items)? @Owen1212055
The issue is that there is no current means of representing an entity tag in the API, and the desire to deal with this while mojang is heavily churning how they represent data in the server is ultra low
Gotcha, makes sense, glad it's on the radar at least. Will work around the API gap in the meantime
Sure, these should be them!
World config:
https://drive.google.com/file/d/1gSTa2HCaDCePl3ZbZynXU7AZprWOhHUc/view?usp=drive_link
Global config:
https://drive.google.com/file/d/1aoORuRZD84eljuCCkTEzW5mQfkGYDFfn/view?usp=drive_link
Both seem to be a paper-global.yml.
Generally, I am interested in this config value: https://docs.papermc.io/paper/reference/world-configuration/#misc_max_leash_distance
A fix before PaperMC/asm-utils#48 is merged and Paper update asm-utils to 0.0.4.
Added missing reflection rewrite rules for overloaded Class.forName methods:
Class.forName(String, boolean, ClassLoader)Class.forName(Module, String)
The redirected methods are existed in AbstractDefaultRulesReflectionProxy as of 0.0.3, but rules are not added yet.
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.
ed4fc54 Don't mutate the position of Items for MC-4 Fix - Owen1212055
[PaperMC/Paper] New branch created: feat/better-mc4-fix
Fix item entities glitching out ontop of happy ghasts Fixes certain command selectors not working with items due to position being changed
771c5db expand wildcards to RegistryEvents - Lulu13022002
[PaperMC/Paper] New branch created: fix/pos-desync-untracked-entities
3bc9cc0 Add fix for Fix MC-44654 - Owen1212055
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)
LGTM. This defo looks like a vanilla oversight since this code path is normally not reached, but obviously possible due to us manually putting that item in.
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.
This seems fine, although i'd argue that maybe this should be something better done in adventure api to indicate it should never expire instead of an "arbitrary" size.
a7dd263 Enable spigot obfuscation support (#12695) - lynxplay
[PaperMC/Paper] New branch created: fix/tnt-water-desync
This option should probably be removed as its a descendant of an option that allows "old tnt cannon" behavior before ~1.9 But this improves the fix so properly update the velocity/position rather than the questionable way it was doing it before.
[PaperMC/Paper] branch deleted: fix/tnt-water-desync
[PaperMC/Paper] New branch created: fix/negative-explosions
7ce6926 Adds support for vanilla negative explosions. - Owen1212055
0645714 Remove dangling craftbukkit comment - Owen1212055
This also fixes yield being infinity with zero sized explosions.
Fixes #10460
6e629ff Fix another edge case. - Owen1212055
[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.
76ab559 Fixup the diff, it should be inverted. - Owen1212055
[PaperMC/Paper] branch deleted: fix/raider-cannot-pickup
Yep, gonna close this and have the other stats pr supercede it.
Thanks for your contribution regardless! ๐
Yep LGTM, this was added for an exploit which is no longer needed.
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.
Discussion Category: Ideas
Its possible using datapacks to override the dolphin_located tag to an empty list, meaning no structures will be located.
Discussion Category: Ideas
Or a plugin can empty the tag using the tag lifecycle event.
Discussion Category: Ideas
25db5ac Release ItemType and BlockType - Machine-Maker
[PaperMC/Paper] New branch created: feature/release-item-type-block-type
After playing around with this a bit, I am not sure about it really. This does require alot of moving around and possible duplication that I am not fully sure is worth it.
Additionally, its a bit of an odd situation, as I am not sure in what cases you'd be casting like this in the first place.
I agree here. But, I am not sure as the current standard has been to silently fail in many places.
So we could very much add some validation, but it all ends up nooping.
Abstracted out. Thanks for this
idk what this means? ;-;
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:
- :package:
io.papermc.paper:dev-bundle:1.21.6-R0.1-SNAPSHOT - :package:
io.papermc.paper:paper-api:1.21.6-R0.1-SNAPSHOT
Repository Declaration
In order to use the artifacts published by the PR, add the following repository to your buildscript:
repositories {
maven("https://maven-prs.papermc.io/Paper/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>
You will need to configure the chunk unload delay in the world config, as only Moonrise has its config set to mirror Vanilla.
71b0c76 Adds support for vanilla negative explosions (#127... - Owen1212055
[PaperMC/Paper] branch deleted: fix/negative-explosions
3750927 [ci skip] Fix PermissionManager#clearPermissions()... - Doc94
We need to figure out how to properly attribute this
@Lulu13022002 probably should figure out how to generate this stuff
Remove the diff at bottom otherwise lgtm.
However, can you also please update ProviderUtil#loadClass?
This way this applies to paper plugins too.
I agree with the decision above. Theres no really good point in converting this since there isnt a nice argument type yet in order to resolve this. For the time being, I believe we should keep it as a bukkit command.
Yeah, I agree, going to close this for now.
This delay-chunk-unloads-by option has been implemented again with 219f86e, and in my testing dying follows the specified unload delay, so I think this should be closed.