Compare commits

..
Author SHA1 Message Date
Jake Potrebic 17fbe152a6 Refactor early config loading
Now its still part of GlobalConfiguration which means
settings can live in their natural places instead of
a separate section.
2026-10-25 16:45:52 -07:00
Nassim Jahnke 8ac3459533 Add back commands.yml 2026-10-25 08:40:15 +01:00
Nassim Jahnke b72728d717 Copy in Geyser yaml loader code 2026-10-25 08:25:58 +01:00
Nassim JahnkeandJake Potrebic df17d86a37 Merge Spigot/Bukkit configs into Paper configs
Co-authored-by: Jake Potrebic <jake.m.potrebic@gmail.com>
2026-10-24 16:31:53 +02:00
517 changed files with 9294 additions and 8636 deletions

No files matched your search

+3 -37
View File
@@ -14,18 +14,11 @@
<property name="messageKey" value="annotation\.same\.line"/>
<property name="arguments" value="^(?!(${type_use_annotations}))"/>
</module>
<module name="io.papermc.checkstyle.filters.BetterSuppressionSingleFilter">
<!--Allows @deprecated on packages. Not in the javadoc spec (javadoc warns), but it is still rendered in the deprecation block and list-->
<property name="checks" value="InappropriateJavadocBlockTagsOnPackage"/>
<property name="messageKey" value="javadoc\.inappropriate\.tag"/>
<property name="arguments" value="^deprecated$"/>
</module>
<module name="SuppressWarningsFilter"/>
<!--Javadoc Comments-->
<module name="JavadocPackage"/>
<!--Misc-->
<module name="LineEnding"/>
<module name="NewlineAtEndOfFile"/>
<!--Whitespace-->
<module name="FileTabCharacter"/>
@@ -37,12 +30,6 @@
<property name="optional" value="false"/>
</module>
<module name="SuppressionCommentFilter"/>
<!--per-check variant: // CHECKSTYLE.OFF: CheckName ... // CHECKSTYLE.ON: CheckName-->
<module name="SuppressionCommentFilter">
<property name="offCommentFormat" value="CHECKSTYLE.OFF\: ([\w\|]+)"/>
<property name="onCommentFormat" value="CHECKSTYLE.ON\: ([\w\|]+)"/>
<property name="checkFormat" value="$1"/>
</module>
<!--Annotations-->
<module name="AnnotationOnSameLine">
@@ -51,7 +38,6 @@
</module>
<module name="AnnotationUseStyle"/>
<module name="MissingDeprecated"/>
<module name="MissingOverrideOnRecordAccessor"/>
<!--Block Checks-->
<module name="AvoidNestedBlocks"/>
@@ -69,9 +55,7 @@
<!--Coding-->
<module name="AvoidDoubleBraceInitialization"/>
<module name="AvoidNoArgumentSuperConstructorCall"/>
<module name="ConstructorsDeclarationGrouping">
<property name="orderByIncreasingParameterCount" value="true"/>
</module>
<module name="ConstructorsDeclarationGrouping"/>
<module name="CovariantEquals"/>
<module name="DeclarationOrder">
<property name="ignoreConstructors" value="true"/>
@@ -79,7 +63,6 @@
<module name="DefaultComesLast"/>
<module name="EmptyStatement"/>
<module name="EqualsHashCode"/>
<module name="ExpressionOverBlockLambda"/>
<module name="FallThrough"/>
<!-- Use non-final variables as an identifier of old code for now -->
<!--<module name="FinalLocalVariable">
@@ -99,12 +82,10 @@
<module name="UnnecessaryNullCheckWithInstanceOf"/>
<module name="UnnecessarySemicolonAfterOuterTypeDeclaration"/>
<module name="UnnecessarySemicolonAfterTypeMemberDeclaration"/>
<module name="UnnecessarySemicolonInEnumeration"/>
<module name="UnnecessarySemicolonInTryWithResources"/>
<module name="UnusedCatchParameterShouldBeUnnamed"/>
<module name="UnusedLocalVariable"/>
<module name="UnusedPrivateField"/>
<module name="UnusedTryResourceShouldBeUnnamed"/>
<module name="UseEnhancedSwitch"/>
<module name="WhenShouldBeUsed"/>
<!--Headers--> <!--N/A-->
@@ -133,13 +114,9 @@
<module name="AtclauseOrder">
<property name="tagOrder" value="@param, @return, @throws, @see, @deprecated, @hidden"/>
</module>
<module name="InappropriateJavadocBlockTagsOnField"/>
<module name="InappropriateJavadocBlockTagsOnPackage"/>
<module name="InappropriateJavadocBlockTagsOnType"/>
<module name="InvalidJavadocPosition"/>
<module name="JavadocBlockTagLocation"/>
<module name="JavadocContentLocation"/>
<module name="JavadocEndCommentDelimiter"/>
<module name="JavadocLeadingAsteriskAlign"/>
<module name="JavadocMethod">
<!--checks all, but doesn't require. If we have a doc, it should be valid-->
@@ -147,11 +124,11 @@
</module>
<module name="JavadocMissingLeadingAsterisk"/>
<module name="JavadocMissingWhitespaceAfterAsterisk"/>
<module name="JavadocStyle"/> <!--checks all, but doesn't require. If we have a doc, it should be valid-->
<module name="JavadocTagContinuationIndentation"/>
<module name="JavadocType"/> <!--checks all, but doesn't require. If we have a doc, it should be valid-->
<module name="NonEmptyAtclauseDescription"/>
<module name="RequireEmptyLineBeforeBlockTagGroup"/>
<module name="SummaryJavadoc"/> <!--checks all, but doesn't require. If we have a doc, it should be valid-->
<!--Metrics--> <!--N/A-->
@@ -159,21 +136,13 @@
<module name="ArrayTypeStyle"/>
<module name="AvoidEscapedUnicodeCharacters"/>
<module name="CommentsIndentation"/>
<module name="HexLiteralCase"/>
<!-- Overlaps with the configured FinalLocalVariable, but is more strict -->
<!--<module name="FinalParameters">
<property name="tokens" value="METHOD_DEF,CTOR_DEF,LITERAL_CATCH,FOR_EACH_CLAUSE,PATTERN_VARIABLE_DEF"/>
</module>-->
<module name="NoCodeInFile"/>
<module name="NumericalPrefixesInfixesSuffixesCharacterCase"/>
<module name="OuterTypeFilename"/>
<!--Leftover Paper/Spigot markers from when these sources were patches on top of upstream (suppressed for the patched paper-server/src/minecraft sources)-->
<module name="TodoComment">
<property name="id" value="PatchMarkerComment"/>
<property name="format" value="(^|//)\s*(Paper|Spigot)\b"/>
<message key="todo.match" value="Remove the leftover ''// Paper'' or ''// Spigot'' patch marker comment."/>
</module>
<module name="UpperEll"/>
<!--Modifiers-->
@@ -211,7 +180,6 @@
<!--Size Violations--> <!--N/A-->
<!--Whitespace-->
<module name="ArrayBracketNoWhitespace"/>
<module name="EmptyForInitializerPad"/>
<module name="EmptyForIteratorPad"/>
<module name="EmptyLineSeparator">
@@ -229,11 +197,9 @@
<module name="TypecastParenPad"/>
<module name="WhitespaceAfter"/>
<module name="WhitespaceAround"/>
<module name="WhitespaceBeforeEmptyBody"/>
<!--Custom-->
<module name="JavadocAlignParameterDescription"/>
<module name="JavadocParamTagOrder"/>
<module name="NullabilityAnnotations"/>
<module name="RedundantNullability"/>
<module name="UnnecessaryFullyQualifiedImport"/>
+1
View File
@@ -3,4 +3,5 @@
"https://checkstyle.org/dtds/suppressions_1_2.dtd">
<suppressions>
<suppress checks="MissingJavadoc.*" files="src[\\/]test[\\/]java[^\\/]*[\\/].*"/>
<suppress checks="JavadocPackage" files="src[\\/]test[\\/]java[^\\/]*[\\/].*"/>
</suppressions>
-3
View File
@@ -477,10 +477,8 @@ public net.minecraft.world.inventory.AbstractMountInventoryMenu mount
public net.minecraft.world.inventory.AnvilMenu cost
public net.minecraft.world.inventory.AnvilMenu itemName
public net.minecraft.world.inventory.AnvilMenu repairItemCountCost
public net.minecraft.world.inventory.BrewingStandMenu DATA_COUNT
public net.minecraft.world.inventory.BrewingStandMenu brewingStandData
public net.minecraft.world.inventory.CraftingMenu access
public net.minecraft.world.inventory.LecternMenu DATA_COUNT
public net.minecraft.world.inventory.MerchantContainer selectionHint
public net.minecraft.world.item.AdventureModePredicate predicates
public net.minecraft.world.item.CrossbowItem FIREWORK_POWER
@@ -585,7 +583,6 @@ public net.minecraft.world.level.block.entity.LecternBlockEntity bookAccess
public net.minecraft.world.level.block.entity.LecternBlockEntity setPage(I)V
public net.minecraft.world.level.block.entity.SculkCatalystBlockEntity$CatalystListener bloom(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/util/RandomSource;)V
public net.minecraft.world.level.block.entity.SculkShriekerBlockEntity warningLevel
public net.minecraft.world.level.block.entity.SignBlockEntity allowOpFeatures
public net.minecraft.world.level.block.entity.SkullBlockEntity customName
public net.minecraft.world.level.block.entity.SkullBlockEntity noteBlockSound
public net.minecraft.world.level.block.entity.SkullBlockEntity owner
+23 -3
View File
@@ -1,3 +1,5 @@
import io.papermc.paperweight.checkstyle.PaperCheckstyleExt
import io.papermc.paperweight.checkstyle.tasks.PaperCheckstyleTask
import org.gradle.api.tasks.testing.logging.TestExceptionFormat
import org.gradle.api.tasks.testing.logging.TestLogEvent
@@ -9,7 +11,6 @@ subprojects {
apply {
plugin("java-library")
plugin("maven-publish")
plugin("io.papermc.paperweight.paper-checkstyle")
}
extensions.configure<JavaPluginExtension> {
@@ -18,8 +19,27 @@ subprojects {
}
}
dependencies {
"checkstyle"(project(":paper-checkstyle"))
val tempDisabled = setOf("paper-server", "paper-generator", "test-plugin")
if (name !in tempDisabled) {
apply { plugin("io.papermc.paperweight.paper-checkstyle") }
extensions.configure<PaperCheckstyleExt> {
typeUseAnnotationsFile.set(rootProject.layout.projectDirectory.file(".checkstyle/type_use_annotations.txt"))
}
/*tasks.withType<PaperCheckstyleTask>().configureEach {
configDirectory = rootProject.layout.projectDirectory.dir(".checkstyle")
// configFile = layout.projectDirectory.file(".checkstyle/checkstyle.xml").asFile // use the base file if not overwritten
maxHeapSize = "2g"
reports {
xml.required = true
html.required = true
}
}*/
dependencies {
"checkstyle"(project(":paper-checkstyle"))
}
}
}
-5
View File
@@ -2,11 +2,6 @@
"-//Checkstyle//DTD Checkstyle Configuration 1.3//EN"
"https://checkstyle.org/dtds/configuration_1_3.dtd">
<module name="Checker">
<!--generated sources are written by the generator, so we don't control their format-->
<module name="BeforeExecutionExclusionFileFilter">
<property name="fileNamePattern" value="[\\/]paper-api[\\/]src[\\/]generated[\\/]"/>
</module>
<!--Single Suppression Filters-->
<module name="io.papermc.checkstyle.filters.BetterSuppressionSingleFilter">
<property name="checks" value="Javadoc(Method|Type)"/>
@@ -1,59 +1,121 @@
paper-api/src/generated/java/com/destroystokyo/paper/entity/ai/
paper-api/src/generated/java/io/papermc/paper/registry/keys/
paper-api/src/generated/java/io/papermc/paper/registry/keys/tags/
paper-api/src/main/java/co/aikar/timings/
paper-api/src/main/java/co/aikar/util/
paper-api/src/main/java/com/destroystokyo/paper/
paper-api/src/main/java/com/destroystokyo/paper/block/
paper-api/src/main/java/com/destroystokyo/paper/brigadier/
paper-api/src/main/java/com/destroystokyo/paper/entity/
paper-api/src/main/java/com/destroystokyo/paper/entity/ai/
paper-api/src/main/java/com/destroystokyo/paper/entity/villager/
paper-api/src/main/java/com/destroystokyo/paper/event/block/
paper-api/src/main/java/com/destroystokyo/paper/event/brigadier/
paper-api/src/main/java/com/destroystokyo/paper/event/entity/
paper-api/src/main/java/com/destroystokyo/paper/event/inventory/
paper-api/src/main/java/com/destroystokyo/paper/event/player/
paper-api/src/main/java/com/destroystokyo/paper/event/profile/
paper-api/src/main/java/com/destroystokyo/paper/event/server/
paper-api/src/main/java/com/destroystokyo/paper/exception/
paper-api/src/main/java/com/destroystokyo/paper/inventory/meta/
paper-api/src/main/java/com/destroystokyo/paper/loottable/
paper-api/src/main/java/com/destroystokyo/paper/network/
paper-api/src/main/java/com/destroystokyo/paper/profile/
paper-api/src/main/java/com/destroystokyo/paper/util/
paper-api/src/main/java/com/destroystokyo/paper/utils/
paper-api/src/main/java/io/papermc/paper/advancement/
paper-api/src/main/java/io/papermc/paper/annotation/
paper-api/src/main/java/io/papermc/paper/ban/
paper-api/src/main/java/io/papermc/paper/block/
paper-api/src/main/java/io/papermc/paper/block/bed/
paper-api/src/main/java/io/papermc/paper/block/fluid/
paper-api/src/main/java/io/papermc/paper/block/fluid/type/
paper-api/src/main/java/io/papermc/paper/brigadier/
paper-api/src/main/java/io/papermc/paper/chat/
paper-api/src/main/java/io/papermc/paper/command/
paper-api/src/main/java/io/papermc/paper/command/brigadier/
paper-api/src/main/java/io/papermc/paper/command/brigadier/argument/
paper-api/src/main/java/io/papermc/paper/command/brigadier/argument/position/
paper-api/src/main/java/io/papermc/paper/command/brigadier/argument/predicate/
paper-api/src/main/java/io/papermc/paper/command/brigadier/argument/range/
paper-api/src/main/java/io/papermc/paper/command/brigadier/argument/resolvers/
paper-api/src/main/java/io/papermc/paper/command/brigadier/argument/resolvers/selector/
paper-api/src/main/java/io/papermc/paper/configuration/
paper-api/src/main/java/io/papermc/paper/connection/
paper-api/src/main/java/io/papermc/paper/datacomponent/
paper-api/src/main/java/io/papermc/paper/datacomponent/item/
paper-api/src/main/java/io/papermc/paper/datacomponent/item/attribute/
paper-api/src/main/java/io/papermc/paper/datacomponent/item/blocksattacks/
paper-api/src/main/java/io/papermc/paper/datacomponent/item/consumable/
paper-api/src/main/java/io/papermc/paper/datapack/
paper-api/src/main/java/io/papermc/paper/dialog/
paper-api/src/main/java/io/papermc/paper/enchantments/
paper-api/src/main/java/io/papermc/paper/entity/
paper-api/src/main/java/io/papermc/paper/entity/poi/
paper-api/src/main/java/io/papermc/paper/event/block/
paper-api/src/main/java/io/papermc/paper/event/connection/
paper-api/src/main/java/io/papermc/paper/event/connection/configuration/
paper-api/src/main/java/io/papermc/paper/event/entity/
paper-api/src/main/java/io/papermc/paper/event/executor/
paper-api/src/main/java/io/papermc/paper/event/inventory/
paper-api/src/main/java/io/papermc/paper/event/packet/
paper-api/src/main/java/io/papermc/paper/event/player/
paper-api/src/main/java/io/papermc/paper/event/server/
paper-api/src/main/java/io/papermc/paper/event/world/
paper-api/src/main/java/io/papermc/paper/event/world/border/
paper-api/src/main/java/io/papermc/paper/generated/
paper-api/src/main/java/io/papermc/paper/inventory/
paper-api/src/main/java/io/papermc/paper/inventory/tooltip/
paper-api/src/main/java/io/papermc/paper/item/
paper-api/src/main/java/io/papermc/paper/persistence/
paper-api/src/main/java/io/papermc/paper/plugin/
paper-api/src/main/java/io/papermc/paper/plugin/bootstrap/
paper-api/src/main/java/io/papermc/paper/plugin/configuration/
paper-api/src/main/java/io/papermc/paper/plugin/lifecycle/event/
paper-api/src/main/java/io/papermc/paper/plugin/lifecycle/event/handler/
paper-api/src/main/java/io/papermc/paper/plugin/lifecycle/event/handler/configuration/
paper-api/src/main/java/io/papermc/paper/plugin/lifecycle/event/registrar/
paper-api/src/main/java/io/papermc/paper/plugin/lifecycle/event/types/
paper-api/src/main/java/io/papermc/paper/plugin/loader/
paper-api/src/main/java/io/papermc/paper/plugin/loader/library/
paper-api/src/main/java/io/papermc/paper/plugin/loader/library/impl/
paper-api/src/main/java/io/papermc/paper/plugin/provider/classloader/
paper-api/src/main/java/io/papermc/paper/plugin/provider/entrypoint/
paper-api/src/main/java/io/papermc/paper/plugin/provider/util/
paper-api/src/main/java/io/papermc/paper/potion/
paper-api/src/main/java/io/papermc/paper/raytracing/
paper-api/src/main/java/io/papermc/paper/registry/
paper-api/src/main/java/io/papermc/paper/registry/data/
paper-api/src/main/java/io/papermc/paper/registry/data/client/
paper-api/src/main/java/io/papermc/paper/registry/data/dialog/
paper-api/src/main/java/io/papermc/paper/registry/data/dialog/action/
paper-api/src/main/java/io/papermc/paper/registry/data/dialog/body/
paper-api/src/main/java/io/papermc/paper/registry/data/dialog/input/
paper-api/src/main/java/io/papermc/paper/registry/data/dialog/type/
paper-api/src/main/java/io/papermc/paper/registry/event/
paper-api/src/main/java/io/papermc/paper/registry/event/type/
paper-api/src/main/java/io/papermc/paper/registry/holder/
paper-api/src/main/java/io/papermc/paper/registry/set/
paper-api/src/main/java/io/papermc/paper/registry/tag/
paper-api/src/main/java/io/papermc/paper/scoreboard/numbers/
paper-api/src/main/java/io/papermc/paper/tag/
paper-api/src/main/java/io/papermc/paper/text/
paper-api/src/main/java/io/papermc/paper/threadedregions/
paper-api/src/main/java/io/papermc/paper/threadedregions/scheduler/
paper-api/src/main/java/io/papermc/paper/util/
paper-api/src/main/java/io/papermc/paper/world/
paper-api/src/main/java/io/papermc/paper/world/damagesource/
paper-api/src/main/java/io/papermc/paper/world/flag/
paper-api/src/main/java/org/bukkit/
paper-api/src/main/java/org/bukkit/advancement/
paper-api/src/main/java/org/bukkit/attribute/
paper-api/src/main/java/org/bukkit/ban/
paper-api/src/main/java/org/bukkit/block/
paper-api/src/main/java/org/bukkit/block/banner/
paper-api/src/main/java/org/bukkit/block/data/
paper-api/src/main/java/org/bukkit/block/data/type/
paper-api/src/main/java/org/bukkit/block/sign/
paper-api/src/main/java/org/bukkit/block/spawner/
paper-api/src/main/java/org/bukkit/block/structure/
paper-api/src/main/java/org/bukkit/boss/
paper-api/src/main/java/org/bukkit/command/
@@ -66,9 +128,12 @@ paper-api/src/main/java/org/bukkit/damage/
paper-api/src/main/java/org/bukkit/enchantments/
paper-api/src/main/java/org/bukkit/entity/
paper-api/src/main/java/org/bukkit/entity/boat/
paper-api/src/main/java/org/bukkit/entity/memory/
paper-api/src/main/java/org/bukkit/entity/minecart/
paper-api/src/main/java/org/bukkit/event/
paper-api/src/main/java/org/bukkit/event/block/
paper-api/src/main/java/org/bukkit/event/command/
paper-api/src/main/java/org/bukkit/event/enchantment/
paper-api/src/main/java/org/bukkit/event/entity/
paper-api/src/main/java/org/bukkit/event/hanging/
paper-api/src/main/java/org/bukkit/event/inventory/
@@ -86,28 +151,51 @@ paper-api/src/main/java/org/bukkit/inventory/meta/
paper-api/src/main/java/org/bukkit/inventory/meta/components/
paper-api/src/main/java/org/bukkit/inventory/meta/tags/
paper-api/src/main/java/org/bukkit/inventory/meta/trim/
paper-api/src/main/java/org/bukkit/inventory/recipe/
paper-api/src/main/java/org/bukkit/inventory/view/
paper-api/src/main/java/org/bukkit/inventory/view/builder/
paper-api/src/main/java/org/bukkit/loot/
paper-api/src/main/java/org/bukkit/map/
paper-api/src/main/java/org/bukkit/material/
paper-api/src/main/java/org/bukkit/material/types/
paper-api/src/main/java/org/bukkit/metadata/
paper-api/src/main/java/org/bukkit/packs/
paper-api/src/main/java/org/bukkit/permissions/
paper-api/src/main/java/org/bukkit/persistence/
paper-api/src/main/java/org/bukkit/plugin/
paper-api/src/main/java/org/bukkit/plugin/java/
paper-api/src/main/java/org/bukkit/plugin/messaging/
paper-api/src/main/java/org/bukkit/potion/
paper-api/src/main/java/org/bukkit/profile/
paper-api/src/main/java/org/bukkit/projectiles/
paper-api/src/main/java/org/bukkit/scheduler/
paper-api/src/main/java/org/bukkit/scoreboard/
paper-api/src/main/java/org/bukkit/spawner/
paper-api/src/main/java/org/bukkit/structure/
paper-api/src/main/java/org/bukkit/tag/
paper-api/src/main/java/org/bukkit/util/
paper-api/src/main/java/org/bukkit/util/io/
paper-api/src/main/java/org/bukkit/util/noise/
paper-api/src/main/java/org/bukkit/util/permissions/
paper-api/src/main/java/org/spigotmc/
paper-api/src/main/java/org/spigotmc/event/player/
paper-api/src/test/java/com/destroystokyo/paper/
paper-api/src/test/java/io/papermc/paper/adventure/
paper-api/src/test/java/io/papermc/paper/registry/
paper-api/src/test/java/io/papermc/paper/testing/
paper-api/src/test/java/io/papermc/paper/util/
paper-api/src/test/java/org/bukkit/
paper-api/src/test/java/org/bukkit/configuration/
paper-api/src/test/java/org/bukkit/configuration/file/
paper-api/src/test/java/org/bukkit/conversations/
paper-api/src/test/java/org/bukkit/event/
paper-api/src/test/java/org/bukkit/materials/
paper-api/src/test/java/org/bukkit/metadata/
paper-api/src/test/java/org/bukkit/plugin/
paper-api/src/test/java/org/bukkit/plugin/messaging/
paper-api/src/test/java/org/bukkit/scoreboard/
paper-api/src/test/java/org/bukkit/support/
paper-api/src/test/java/org/bukkit/support/provider/
paper-api/src/test/java/org/bukkit/support/test/
paper-api/src/test/java/org/bukkit/util/
paper-api/src/test/java/org/bukkit/util/io/
+5 -7
View File
@@ -183,10 +183,11 @@ val generateApiVersioningFile = tasks.register<GenerateApiVersioningFile>("gener
tasks.jar {
from(generateApiVersioningFile.flatMap { it.outputFile })
}
tasks.compileJava {
options.compilerArgs.addAll(listOf("--add-reads", "org.bukkit=ALL-UNNAMED"))
manifest {
attributes(
"Automatic-Module-Name" to "org.bukkit"
)
}
}
abstract class Services {
@@ -214,9 +215,6 @@ tasks.withType<Javadoc>().configureEach {
)
options.tags(projectCustomJavadocTags.map { it.toOptionString() })
modularity.inferModulePath = false
exclude("module-info.java")
inputs.files(javadocSourcepath).ignoreEmptyDirectories().withPropertyName(javadocSourcepath.name + "-configuration")
val javadocSourcepathElements = javadocSourcepath.elements
doFirst {
@@ -234,8 +234,7 @@ public class MaterialTags {
* Covers all music disc items.
*/
public static final MaterialSetTag MUSIC_DISCS = new MaterialSetTag(keyFor("music_discs"))
.startsWith("MUSIC_DISC_")
.ensureSize("MUSIC_DISCS", 22).lock();
.startsWith("MUSIC_DISC_").lock();
/**
* Covers all ores.
@@ -2,58 +2,63 @@ package com.destroystokyo.paper.block;
import org.bukkit.Sound;
import org.bukkit.block.Block;
import org.jetbrains.annotations.NotNull;
/**
* Represents the sounds that a {@link Block} makes in certain situations.
* Represents the sounds that a {@link Block} makes in certain situations
* <p>
* The sound group includes break, step, place, hit, and fall sounds.
*
* @deprecated use {@link org.bukkit.SoundGroup}
*/
@Deprecated(forRemoval = true, since = "1.18.2")
public interface BlockSoundGroup {
/**
* Gets the sound that plays when breaking this block.
* Gets the sound that plays when breaking this block
*
* @return The break sound
* @deprecated use {@link org.bukkit.SoundGroup#getBreakSound()}
*/
@NotNull
@Deprecated(forRemoval = true, since = "1.18.2")
Sound getBreakSound();
/**
* Gets the sound that plays when stepping on this block.
* Gets the sound that plays when stepping on this block
*
* @return The step sound
* @deprecated use {@link org.bukkit.SoundGroup#getStepSound()}
*/
@NotNull
@Deprecated(forRemoval = true, since = "1.18.2")
Sound getStepSound();
/**
* Gets the sound that plays when placing this block.
* Gets the sound that plays when placing this block
*
* @return The place sound
* @deprecated use {@link org.bukkit.SoundGroup#getPlaceSound()}
*/
@NotNull
@Deprecated(forRemoval = true, since = "1.18.2")
Sound getPlaceSound();
/**
* Gets the sound that plays when hitting this block.
* Gets the sound that plays when hitting this block
*
* @return The hit sound
* @deprecated use {@link org.bukkit.SoundGroup#getHitSound()}
*/
@NotNull
@Deprecated(forRemoval = true, since = "1.18.2")
Sound getHitSound();
/**
* Gets the sound that plays when this block falls.
* Gets the sound that plays when this block falls
*
* @return The fall sound
* @deprecated use {@link org.bukkit.SoundGroup#getFallSound()}
*/
@NotNull
@Deprecated(forRemoval = true, since = "1.18.2")
Sound getFallSound();
}
@@ -3,10 +3,10 @@ package com.destroystokyo.paper.block;
import org.bukkit.FluidCollisionMode;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.jetbrains.annotations.NotNull;
/**
* Represents information about a targeted block.
*
* Represents information about a targeted block
* @deprecated use {@link org.bukkit.util.RayTraceResult}
*/
@Deprecated(forRemoval = true, since = "1.19.3")
@@ -14,41 +14,42 @@ public class TargetBlockInfo {
private final Block block;
private final BlockFace blockFace;
public TargetBlockInfo(final Block block, final BlockFace blockFace) {
public TargetBlockInfo(@NotNull Block block, @NotNull BlockFace blockFace) {
this.block = block;
this.blockFace = blockFace;
}
/**
* Get the block that is targeted.
* Get the block that is targeted
*
* @return Targeted block
*/
@NotNull
public Block getBlock() {
return this.block;
return block;
}
/**
* Get the targeted BlockFace.
* Get the targeted BlockFace
*
* @return Targeted blockface
*/
@NotNull
public BlockFace getBlockFace() {
return this.blockFace;
return blockFace;
}
/**
* Get the relative Block to the targeted block on the side it is targeted at.
* Get the relative Block to the targeted block on the side it is targeted at
*
* @return Block relative to targeted block
*/
@NotNull
public Block getRelativeBlock() {
return this.block.getRelative(this.blockFace);
return block.getRelative(blockFace);
}
/**
* Determines whether fluids are considered when targeting a block.
*
* @deprecated use {@link org.bukkit.FluidCollisionMode}
*/
@Deprecated(forRemoval = true, since = "1.19.3")
@@ -59,7 +60,7 @@ public class TargetBlockInfo {
public final FluidCollisionMode bukkit;
FluidMode(final FluidCollisionMode bukkit) {
FluidMode(FluidCollisionMode bukkit) {
this.bukkit = bukkit;
}
}
@@ -1,7 +0,0 @@
/**
* Deprecated block API, replaced by {@link org.bukkit.SoundGroup} and {@link org.bukkit.util.RayTraceResult}.
*/
@NullMarked
package com.destroystokyo.paper.block;
import org.jspecify.annotations.NullMarked;
@@ -2,6 +2,7 @@ package com.destroystokyo.paper.brigadier;
import com.mojang.brigadier.Command;
import com.mojang.brigadier.suggestion.SuggestionProvider;
import java.util.function.Predicate;
/**
@@ -11,5 +12,5 @@ import java.util.function.Predicate;
* @deprecated For removal, see {@link io.papermc.paper.command.brigadier.Commands} on how to use the new Brigadier API.
*/
@Deprecated(forRemoval = true, since = "1.20.6")
public interface BukkitBrigadierCommand<S extends BukkitBrigadierCommandSource> extends Command<S>, Predicate<S>, SuggestionProvider<S> {
public interface BukkitBrigadierCommand <S extends BukkitBrigadierCommandSource> extends Command<S>, Predicate<S>, SuggestionProvider<S> {
}
@@ -4,21 +4,22 @@ import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Entity;
import org.jspecify.annotations.Nullable;
import org.jetbrains.annotations.Nullable;
/**
* A command source that exposes its Bukkit equivalents.
*
* @deprecated For removal, see {@link io.papermc.paper.command.brigadier.Commands} on how to use the new Brigadier API.
*/
@Deprecated(forRemoval = true)
public interface BukkitBrigadierCommandSource {
@Nullable Entity getBukkitEntity();
@Nullable
Entity getBukkitEntity();
@Nullable World getBukkitWorld();
@Nullable
World getBukkitWorld();
@Nullable Location getBukkitLocation();
@Nullable
Location getBukkitLocation();
CommandSender getBukkitSender();
}
@@ -1,7 +0,0 @@
/**
* Deprecated Brigadier integration, replaced by {@link io.papermc.paper.command.brigadier.Commands}.
*/
@NullMarked
package com.destroystokyo.paper.brigadier;
import org.jspecify.annotations.NullMarked;
@@ -2,39 +2,37 @@ package com.destroystokyo.paper.entity;
import java.util.List;
import org.bukkit.Location;
import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Mob;
import org.checkerframework.checker.index.qual.NonNegative;
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;
/**
* Handles pathfinding operations for an Entity.
* Handles pathfinding operations for an Entity
*/
@NullMarked
public interface Pathfinder {
/**
* Gets the entity that is controlled by this pathfinder.
*
* @return The entity that is controlled by this pathfinder
*/
Mob getEntity();
/**
* Instructs the Entity to stop trying to navigate to its current desired location.
* Instructs the Entity to stop trying to navigate to its current desired location
*/
void stopPathfinding();
/**
* If the entity is currently trying to navigate to a destination, this will return true.
* If the entity is currently trying to navigate to a destination, this will return true
*
* @return true if the entity is navigating to a destination
*/
boolean hasPath();
/**
* Gets the path the entity is currently following.
*
* @return The location the entity is trying to navigate to, or null if there is no destination
*/
@Nullable PathResult getCurrentPath();
@@ -46,7 +44,7 @@ public interface Pathfinder {
* @param loc Location to navigate to
* @return The closest Location the Entity can get to for this navigation, or null if no path could be calculated
*/
default @Nullable PathResult findPath(final Location loc) {
default @Nullable PathResult findPath(Location loc) {
return this.findPath(loc, 0);
}
@@ -54,12 +52,12 @@ public interface Pathfinder {
* Calculates a destination for the Entity to navigate to, but does not set it
* as the current target. Useful for calculating what would happen before setting it.
*
* @param loc Location to navigate to
* @param loc Location to navigate to
* @param reachRange The <a href="https://cp-algorithms.com/geometry/manhattan-distance.html">Manhattan-distance</a> threshold
* from the target position at which the path is considered reached, where {@code 0} requires the exact target position
* @return The closest Location the Entity can get to for this navigation, or null if no path could be calculated
*/
@Nullable PathResult findPath(Location loc, @NonNegative int reachRange);
@Nullable PathResult findPath(final Location loc, final @NonNegative int reachRange);
/**
* Calculates a destination for the Entity to navigate to reach the target entity,
@@ -74,7 +72,8 @@ public interface Pathfinder {
* @param target the Entity to navigate to
* @return The closest Location the Entity can get to for this navigation, or null if no path could be calculated
*/
default @Nullable PathResult findPath(final LivingEntity target) {
@Nullable
default PathResult findPath(LivingEntity target) {
return this.findPath((Entity) target);
}
@@ -91,7 +90,7 @@ public interface Pathfinder {
* @param target the Entity to navigate to
* @return The closest Location the Entity can get to for this navigation, or null if no path could be calculated
*/
default @Nullable PathResult findPath(final Entity target) {
default @Nullable PathResult findPath(Entity target) {
return this.findPath(target, 0);
}
@@ -105,12 +104,12 @@ public interface Pathfinder {
* <p>
* However, this behavior is not guaranteed, and is subject to the games behavior.
*
* @param target the Entity to navigate to
* @param target the Entity to navigate to
* @param reachRange The <a href="https://cp-algorithms.com/geometry/manhattan-distance.html">Manhattan-distance</a> threshold
* from the target position at which the path is considered reached, where {@code 0} requires the exact target position
* @return The closest Location the Entity can get to for this navigation, or null if no path could be calculated
*/
@Nullable PathResult findPath(Entity target, @NonNegative int reachRange);
@Nullable PathResult findPath(final Entity target, final @NonNegative int reachRange);
/**
* Calculates a destination for the Entity to navigate to, and sets it with default speed
@@ -119,7 +118,7 @@ public interface Pathfinder {
* @param loc Location to navigate to
* @return If the pathfinding was successfully started
*/
default boolean moveTo(final Location loc) {
default boolean moveTo(Location loc) {
return this.moveTo(loc, 1);
}
@@ -131,8 +130,8 @@ public interface Pathfinder {
* @param speed Speed multiplier to navigate at, where 1 is 'normal'
* @return If the pathfinding was successfully started
*/
default boolean moveTo(final Location loc, final double speed) {
final PathResult path = this.findPath(loc);
default boolean moveTo(Location loc, double speed) {
PathResult path = this.findPath(loc);
return path != null && this.moveTo(path, speed);
}
@@ -148,7 +147,7 @@ public interface Pathfinder {
* @param target the Entity to navigate to
* @return If the pathfinding was successfully started
*/
default boolean moveTo(final LivingEntity target) {
default boolean moveTo(LivingEntity target) {
return this.moveTo(target, 1);
}
@@ -165,7 +164,7 @@ public interface Pathfinder {
* @param speed Speed multiplier to navigate at, where 1 is 'normal'
* @return If the pathfinding was successfully started
*/
default boolean moveTo(final LivingEntity target, final double speed) {
default boolean moveTo(LivingEntity target, double speed) {
return this.moveTo((Entity) target, speed);
}
@@ -181,7 +180,7 @@ public interface Pathfinder {
* @param target the Entity to navigate to
* @return If the pathfinding was successfully started
*/
default boolean moveTo(final Entity target) {
default boolean moveTo(Entity target) {
return this.moveTo(target, 1);
}
@@ -198,8 +197,8 @@ public interface Pathfinder {
* @param speed Speed multiplier to navigate at, where 1 is 'normal'
* @return If the pathfinding was successfully started
*/
default boolean moveTo(final Entity target, final double speed) {
final PathResult path = this.findPath(target);
default boolean moveTo(Entity target, double speed) {
PathResult path = this.findPath(target);
return path != null && this.moveTo(path, speed);
}
@@ -210,13 +209,13 @@ public interface Pathfinder {
* @param path The Path to start following
* @return If the pathfinding was successfully started
*/
default boolean moveTo(final PathResult path) {
default boolean moveTo(PathResult path) {
return this.moveTo(path, 1);
}
/**
* Takes the result of a previous pathfinding calculation and sets it
* as the active pathfinding.
* as the active pathfinding,
*
* @param path The Path to start following
* @param speed Speed multiplier to navigate at, where 1 is 'normal'
@@ -232,7 +231,7 @@ public interface Pathfinder {
boolean canOpenDoors();
/**
* Allows this pathfinder to pass through closed doors, or not.
* Allows this pathfinder to pass through closed doors, or not
*
* @param canOpenDoors if the mob can pass through closed doors, or not
*/
@@ -246,33 +245,33 @@ public interface Pathfinder {
boolean canPassDoors();
/**
* Allows this pathfinder to pass through open doors, or not.
* Allows this pathfinder to pass through open doors, or not
*
* @param canPassDoors if the mob can pass through open doors, or not
*/
void setCanPassDoors(boolean canPassDoors);
/**
* Checks if this pathfinder assumes that the mob can float.
* Checks if this pathfinder assumes that the mob can float
*
* @return if this pathfinder assumes that the mob can float
*/
boolean canFloat();
/**
* Makes this pathfinder assume that the mob can float, or not.
* Makes this pathfinder assume that the mob can float, or not
*
* @param canFloat if the mob can float, or not
*/
void setCanFloat(boolean canFloat);
/**
* Represents the result of a pathfinding calculation.
* Represents the result of a pathfinding calculation
*/
interface PathResult {
/**
* All currently calculated points to follow along the path to reach the destination location.
* All currently calculated points to follow along the path to reach the destination location
* <p>
* Will return points the entity has already moved past, see {@link #getNextPointIndex()}
*
@@ -281,29 +280,23 @@ public interface Pathfinder {
List<Location> getPoints();
/**
* Gets the index of the current point along the points returned in {@link #getPoints()} the entity
* @return Returns the index of the current point along the points returned in {@link #getPoints()} the entity
* is trying to reach. This value will be higher than the maximum index of {@link #getPoints()} if this path finding is done.
*
* @return the index of the next point
*/
int getNextPointIndex();
/**
* Gets the next location in the path points the entity is trying to reach.
*
* @return The next location in the path points the entity is trying to reach, or null if there is no next point
*/
@Nullable Location getNextPoint();
/**
* Gets the closest point the path can get to the target location.
*
* @return The closest point the path can get to the target location
*/
@Nullable Location getFinalPoint();
/**
* Checks whether the final point can be reached.
* Checks whether the final point can be reached
*
* @return whether the final point can be reached
* @see #getFinalPoint()
@@ -2,12 +2,10 @@ package com.destroystokyo.paper.entity;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Mob;
import org.jspecify.annotations.NullMarked;
/**
* A mob that can perform ranged attacks.
*/
@NullMarked
public interface RangedEntity extends Mob {
/**
* Attack the specified entity using a ranged attack.
*
@@ -18,7 +16,7 @@ public interface RangedEntity extends Mob {
void rangedAttack(LivingEntity target, float charge);
/**
* Sets that the Entity is "charging" up an attack, by raising its hands.
* Sets that the Entity is "charging" up an attack, by raising its hands
*
* @param raiseHands Whether the entities hands are raised to charge attack
* @deprecated use {@link #setAggressive(boolean)}
@@ -27,8 +25,7 @@ public interface RangedEntity extends Mob {
void setChargingAttack(boolean raiseHands);
/**
* Alias to {@link LivingEntity#isHandRaised()}, if the entity is charging an attack.
*
* Alias to {@link LivingEntity#isHandRaised()}, if the entity is charging an attack
* @return If entities hands are raised
* @deprecated use {@link #isHandRaised()}
*/
@@ -2,10 +2,10 @@ package com.destroystokyo.paper.entity;
import org.bukkit.entity.Entity;
import org.bukkit.util.Vector;
import org.jetbrains.annotations.NotNull;
/**
* Represents information about a targeted entity.
*
* Represents information about a targeted entity
* @deprecated use {@link org.bukkit.util.RayTraceResult}
*/
@Deprecated(forRemoval = true, since = "1.19.3")
@@ -13,26 +13,28 @@ public class TargetEntityInfo {
private final Entity entity;
private final Vector hitVec;
public TargetEntityInfo(final Entity entity, final Vector hitVec) {
public TargetEntityInfo(@NotNull Entity entity, @NotNull Vector hitVec) {
this.entity = entity;
this.hitVec = hitVec;
}
/**
* Get the entity that is targeted.
* Get the entity that is targeted
*
* @return Targeted entity
*/
@NotNull
public Entity getEntity() {
return this.entity;
return entity;
}
/**
* Get the position the entity is targeted at.
* Get the position the entity is targeted at
*
* @return Targeted position
*/
@NotNull
public Vector getHitVector() {
return this.hitVec;
return hitVec;
}
}
@@ -1,7 +0,0 @@
/**
* Entity pathfinding, ranged attack and targeting API.
*/
@NullMarked
package com.destroystokyo.paper.entity;
import org.jspecify.annotations.NullMarked;
@@ -3,28 +3,20 @@ package com.destroystokyo.paper.entity.villager;
import com.google.common.base.Preconditions;
import java.util.EnumMap;
import java.util.Map;
import java.util.Set;
import org.jetbrains.annotations.Unmodifiable;
import org.jspecify.annotations.NullMarked;
/**
* A reputation score for a player on a villager.
*/
@NullMarked
public final class Reputation {
private final Map<ReputationType, Integer> reputation;
/**
* Creates an empty reputation.
*/
public Reputation() {
this(new EnumMap<>(ReputationType.class));
}
/**
* Creates a reputation backed by the given map, so changes to the reputation are made to the map.
*
* @param reputation the reputation values by type
*/
public Reputation(final Map<ReputationType, Integer> reputation) {
Preconditions.checkArgument(reputation != null, "reputation cannot be null");
this.reputation = reputation;
@@ -44,7 +36,7 @@ public final class Reputation {
/**
* Sets the reputation value for a specific {@link ReputationType}.
*
* @param type The {@link ReputationType type} of reputation to set.
* @param type The {@link ReputationType type} of reputation to set.
* @param value The value of the {@link ReputationType type}.
*/
public void setReputation(final ReputationType type, final int value) {
@@ -61,13 +53,4 @@ public final class Reputation {
public boolean hasReputationSet(final ReputationType type) {
return this.reputation.containsKey(type);
}
/**
* Gets a set of all {@link ReputationType types} that have a reputation value set.
*
* @return A set of {@link ReputationType types}.
*/
public @Unmodifiable Set<ReputationType> getReputationsSet() {
return Set.copyOf(this.reputation.keySet());
}
}
@@ -1,7 +0,0 @@
/**
* API for villagers.
*/
@NullMarked
package com.destroystokyo.paper.entity.villager;
import org.jspecify.annotations.NullMarked;
@@ -7,6 +7,7 @@ import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList;
import org.bukkit.event.player.PlayerEvent;
import org.jetbrains.annotations.ApiStatus;
import org.jspecify.annotations.NullMarked;
/**
* Fired any time a Brigadier RootCommandNode is generated for a player to inform the client of commands.
@@ -27,10 +28,9 @@ import org.jetbrains.annotations.ApiStatus;
* <p>If your logic is not safe to run asynchronously, only react to the synchronous version.</p>
*
* <p>This is a draft/experimental API and is subject to change.</p>
*
* @param <S> the type of the command source
*/
@ApiStatus.Experimental
@NullMarked
public class AsyncPlayerSendCommandsEvent<S extends CommandSourceStack> extends PlayerEvent {
private static final HandlerList HANDLER_LIST = new HandlerList();
@@ -7,6 +7,7 @@ import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList;
import org.bukkit.event.player.PlayerEvent;
import org.jetbrains.annotations.ApiStatus;
import org.jspecify.annotations.NullMarked;
/**
* Called when sending {@link Suggestions} to the client. Will be called asynchronously if a plugin
@@ -15,6 +16,7 @@ import org.jetbrains.annotations.ApiStatus;
* <p>
* If the suggestions are empty after this event has been called, nothing will be sent to the client.
*/
@NullMarked
public class AsyncPlayerSendSuggestionsEvent extends PlayerEvent implements Cancellable {
private static final HandlerList HANDLER_LIST = new HandlerList();
@@ -1,7 +1,6 @@
package com.destroystokyo.paper.event.brigadier;
import com.destroystokyo.paper.brigadier.BukkitBrigadierCommand;
import com.destroystokyo.paper.brigadier.BukkitBrigadierCommandSource;
import com.mojang.brigadier.tree.ArgumentCommandNode;
import com.mojang.brigadier.tree.LiteralCommandNode;
import com.mojang.brigadier.tree.RootCommandNode;
@@ -10,7 +9,7 @@ import org.bukkit.command.Command;
import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList;
import org.bukkit.event.server.ServerEvent;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
/**
* Fired anytime the server synchronizes Bukkit commands to Brigadier.
@@ -19,19 +18,18 @@ import org.jetbrains.annotations.ApiStatus;
* This is done at Plugin Enable time after commands have been registered, but may also
* run at a later point in the server lifetime due to plugins, a server reload, etc.</p>
*
* @param <S> the type of the command source
* @deprecated this event has been superseded by the Commands API and will be removed in a future release.
* Listen to {@link io.papermc.paper.plugin.lifecycle.event.types.LifecycleEvents#COMMANDS} instead
* Listen to {@link io.papermc.paper.plugin.lifecycle.event.types.LifecycleEvents#COMMANDS} instead
*/
@Deprecated(since = "1.20.6")
@Warning(value = true, propagate = false)
public class CommandRegisteredEvent<S extends BukkitBrigadierCommandSource> extends ServerEvent implements Cancellable {
public class CommandRegisteredEvent<S extends com.destroystokyo.paper.brigadier.BukkitBrigadierCommandSource> extends ServerEvent implements Cancellable {
private static final HandlerList HANDLER_LIST = new HandlerList();
private final String commandLabel;
private final Command command;
private final BukkitBrigadierCommand<S> brigadierCommand;
private final com.destroystokyo.paper.brigadier.BukkitBrigadierCommand<S> brigadierCommand;
private final RootCommandNode<S> root;
private final ArgumentCommandNode<S, String> defaultArgs;
private LiteralCommandNode<S> literal;
@@ -39,15 +37,7 @@ public class CommandRegisteredEvent<S extends BukkitBrigadierCommandSource> exte
private boolean cancelled;
@ApiStatus.Internal
public CommandRegisteredEvent(
final String commandLabel,
final BukkitBrigadierCommand<S> brigadierCommand,
final Command command,
final RootCommandNode<S> root,
final LiteralCommandNode<S> literal,
final ArgumentCommandNode<S, String> defaultArgs
) {
public CommandRegisteredEvent(String commandLabel, com.destroystokyo.paper.brigadier.BukkitBrigadierCommand<S> brigadierCommand, Command command, RootCommandNode<S> root, LiteralCommandNode<S> literal, ArgumentCommandNode<S, String> defaultArgs) {
this.commandLabel = commandLabel;
this.brigadierCommand = brigadierCommand;
this.command = command;
@@ -120,15 +110,15 @@ public class CommandRegisteredEvent<S extends BukkitBrigadierCommandSource> exte
*
* @param literal new node
*/
public void setLiteral(final LiteralCommandNode<S> literal) {
public void setLiteral(LiteralCommandNode<S> literal) {
this.literal = literal;
}
/**
* Gets whether this command should is treated as "raw".
*
* @return whether this command is treated as "raw"
* @see #setRawCommand(boolean)
* @return whether this command is treated as "raw"
*/
public boolean isRawCommand() {
return this.rawCommand;
@@ -162,15 +152,16 @@ public class CommandRegisteredEvent<S extends BukkitBrigadierCommandSource> exte
* {@inheritDoc}
*/
@Override
public void setCancelled(final boolean cancel) {
public void setCancelled(boolean cancel) {
this.cancelled = cancel;
}
@Override
@NotNull
public HandlerList getHandlers() {
return HANDLER_LIST;
}
@NotNull
public static HandlerList getHandlerList() {
return HANDLER_LIST;
}
@@ -1,7 +0,0 @@
/**
* Events relating to the Brigadier command tree, such as the commands and suggestions sent to clients.
*/
@NullMarked
package com.destroystokyo.paper.event.brigadier;
import org.jspecify.annotations.NullMarked;
@@ -5,10 +5,11 @@ import org.bukkit.inventory.GrindstoneInventory;
import org.bukkit.inventory.InventoryView;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.ApiStatus;
import org.jspecify.annotations.Nullable;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* Called when an item is put in a slot for grinding in a Grindstone.
* Called when an item is put in a slot for grinding in a Grindstone
*
* @deprecated use {@link org.bukkit.event.inventory.PrepareGrindstoneEvent}
*/
@@ -17,10 +18,11 @@ import org.jspecify.annotations.Nullable;
public class PrepareGrindstoneEvent extends PrepareResultEvent {
@ApiStatus.Internal
public PrepareGrindstoneEvent(final InventoryView inventory, final @Nullable ItemStack result) {
public PrepareGrindstoneEvent(@NotNull InventoryView inventory, @Nullable ItemStack result) {
super(inventory, result);
}
@NotNull
@Override
public GrindstoneInventory getInventory() {
return (GrindstoneInventory) super.getInventory();
@@ -4,11 +4,13 @@ import org.bukkit.event.inventory.PrepareInventoryResultEvent;
import org.bukkit.inventory.InventoryView;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.ApiStatus;
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;
/**
* Called when an item is put in an inventory containing a result slot.
* Called when an item is put in an inventory containing a result slot
*/
@NullMarked
public class PrepareResultEvent extends PrepareInventoryResultEvent {
// HandlerList on PrepareInventoryResultEvent to ensure api compat
@@ -1,7 +0,0 @@
/**
* Inventory events.
*/
@NullMarked
package com.destroystokyo.paper.event.inventory;
import org.jspecify.annotations.NullMarked;
@@ -2,78 +2,75 @@ package com.destroystokyo.paper.inventory.meta;
import org.bukkit.inventory.meta.ItemMeta;
/**
* Represents the meta of an armor stand item, which controls the armor stand that is spawned from it.
*/
public interface ArmorStandMeta extends ItemMeta {
/**
* Gets whether the ArmorStand should be invisible when spawned.
* Gets whether the ArmorStand should be invisible when spawned
*
* @return true if this should be invisible
*/
boolean isInvisible();
/**
* Gets whether this ArmorStand should have no base plate when spawned.
* Gets whether this ArmorStand should have no base plate when spawned
*
* @return true if it will not have a base plate
*/
boolean hasNoBasePlate();
/**
* Gets whether this ArmorStand should show arms when spawned.
* Gets whether this ArmorStand should show arms when spawned
*
* @return true if it will show arms
*/
boolean shouldShowArms();
/**
* Gets whether this ArmorStand will be small when spawned.
* Gets whether this ArmorStand will be small when spawned
*
* @return true if it will be small
*/
boolean isSmall();
/**
* Gets whether this ArmorStand will be a marker when spawned.
* The exact details of this flag are an implementation detail.
* Gets whether this ArmorStand will be a marker when spawned
* The exact details of this flag are an implementation detail
*
* @return true if it will be a marker
*/
boolean isMarker();
/**
* Sets that this ArmorStand should be invisible when spawned.
* Sets that this ArmorStand should be invisible when spawned
*
* @param invisible true if set invisible
*/
void setInvisible(boolean invisible);
/**
* Sets that this ArmorStand should have no base plate when spawned.
* Sets that this ArmorStand should have no base plate when spawned
*
* @param noBasePlate true if no base plate
*/
void setNoBasePlate(boolean noBasePlate);
/**
* Sets that this ArmorStand should show arms when spawned.
* Sets that this ArmorStand should show arms when spawned
*
* @param showArms true if show arms
*/
void setShowArms(boolean showArms);
/**
* Sets that this ArmorStand should be small when spawned.
* Sets that this ArmorStand should be small when spawned
*
* @param small true if small
*/
void setSmall(boolean small);
/**
* Sets that this ArmorStand should be a marker when spawned.
* The exact details of this flag are an implementation detail.
* Sets that this ArmorStand should be a marker when spawned
* The exact details of this flag are an implementation detail
*
* @param marker true if a marker
*/
@@ -1,7 +0,0 @@
/**
* Item meta types.
*/
@NullMarked
package com.destroystokyo.paper.inventory.meta;
import org.jspecify.annotations.NullMarked;
@@ -2,11 +2,13 @@ package com.destroystokyo.paper.network;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;
/**
* Represents a client connected to the server.
*/
@NullMarked
public interface NetworkClient {
/**
@@ -21,7 +23,7 @@ public interface NetworkClient {
* client's socket address.
*
* @return The client's {@link InetSocketAddress}, or the loopback address
* if this is a Unix domain socket connection
* if this is a Unix domain socket connection
*/
InetSocketAddress getAddress();
@@ -1,7 +0,0 @@
/**
* API for clients connecting to the server.
*/
@NullMarked
package com.destroystokyo.paper.network;
import org.jspecify.annotations.NullMarked;
@@ -8,6 +8,7 @@ import net.kyori.adventure.text.object.ObjectContents;
import net.kyori.adventure.text.object.ObjectContentsLike;
import net.kyori.adventure.text.object.PlayerHeadObjectContents;
import org.bukkit.profile.PlayerTextures;
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;
import static net.kyori.adventure.text.object.PlayerHeadObjectContents.property;
@@ -15,42 +16,40 @@ import static net.kyori.adventure.text.object.PlayerHeadObjectContents.property;
/**
* Represents a players profile for the game, such as UUID, Name, and textures.
*/
@NullMarked
public interface PlayerProfile extends org.bukkit.profile.PlayerProfile, PlayerHeadObjectContents.SkinSource, ObjectContentsLike {
/**
* Gets the name of this profile.
*
* @return The players name, if set
*/
@Override
@Nullable String getName();
@Nullable
String getName();
/**
* Sets this profiles Name.
* Sets this profiles Name
*
* @param name The new Name
* @return The previous Name
* @deprecated create a new profile with {@link org.bukkit.Server#createProfile(UUID, String)} instead
*/
@Deprecated(forRemoval = true, since = "1.18.1")
@Nullable String setName(@Nullable String name);
String setName(@Nullable String name);
/**
* Gets the unique identifier of this profile.
*
* @return The players unique identifier, if set
*/
@Nullable UUID getId();
@Nullable
UUID getId();
/**
* Sets this profiles UUID.
* Sets this profiles UUID
*
* @param uuid The new UUID
* @return The previous UUID
* @deprecated create a new profile with {@link org.bukkit.Server#createProfile(UUID, String)} instead
*/
@Deprecated(forRemoval = true, since = "1.18.1")
@Nullable UUID setId(@Nullable UUID uuid);
@Nullable
UUID setId(@Nullable UUID uuid);
/**
* Gets the {@link PlayerTextures} of this profile.
@@ -66,21 +65,19 @@ public interface PlayerProfile extends org.bukkit.profile.PlayerProfile, PlayerH
* Copies the given textures.
*
* @param textures the textures to copy, or {@code null} to clear the
* textures
* textures
*/
@Override
void setTextures(@Nullable PlayerTextures textures);
/**
* Gets the properties of this profile.
*
* @return A Mutable set of this player's properties, such as textures.
* Values specified here are subject to implementation details.
* Values specified here are subject to implementation details.
*/
Set<ProfileProperty> getProperties();
/**
* Check if the Profile has the specified property.
* Check if the Profile has the specified property
*
* @param property Property name to check
* @return If the property is set
@@ -88,7 +85,7 @@ public interface PlayerProfile extends org.bukkit.profile.PlayerProfile, PlayerH
boolean hasProperty(@Nullable String property);
/**
* Sets a property. If the property already exists, the previous one will be replaced.
* Sets a property. If the property already exists, the previous one will be replaced
*
* @param property Property to set.
* @throws IllegalArgumentException if setting the property results in more than 16 properties
@@ -96,7 +93,7 @@ public interface PlayerProfile extends org.bukkit.profile.PlayerProfile, PlayerH
void setProperty(ProfileProperty property);
/**
* Sets multiple properties. If any of the set properties already exist, it will be replaced.
* Sets multiple properties. If any of the set properties already exist, it will be replaced
*
* @param properties The properties to set
* @throws IllegalArgumentException if the number of properties exceeds 16
@@ -104,7 +101,7 @@ public interface PlayerProfile extends org.bukkit.profile.PlayerProfile, PlayerH
void setProperties(Collection<ProfileProperty> properties);
/**
* Removes a specific property from this profile.
* Removes a specific property from this profile
*
* @param property The property to remove
* @return If a property was removed
@@ -112,7 +109,7 @@ public interface PlayerProfile extends org.bukkit.profile.PlayerProfile, PlayerH
boolean removeProperty(@Nullable String property);
/**
* Removes a specific property from this profile.
* Removes a specific property from this profile
*
* @param property The property to remove
* @return If a property was removed
@@ -122,7 +119,7 @@ public interface PlayerProfile extends org.bukkit.profile.PlayerProfile, PlayerH
}
/**
* Removes all properties in the collection.
* Removes all properties in the collection
*
* @param properties The properties to remove
* @return If any property was removed
@@ -138,13 +135,11 @@ public interface PlayerProfile extends org.bukkit.profile.PlayerProfile, PlayerH
}
/**
* Clears all properties on this profile.
* Clears all properties on this profile
*/
void clearProperties();
/**
* Checks whether this profile has both a unique identifier and a name.
*
* @return If the profile is now complete (has UUID and Name)
*/
@Override
@@ -208,7 +203,7 @@ public interface PlayerProfile extends org.bukkit.profile.PlayerProfile, PlayerH
* <p>
* Optionally will also fill textures.
*
* @param textures controls if we should fill the profile with texture properties
* @param textures controls if we should fill the profile with texture properties
* @param onlineMode Treat this server as online mode or not
* @return If the profile is now complete (has UUID and Name) (if you get rate limited, this operation may fail)
*/
@@ -221,7 +216,7 @@ public interface PlayerProfile extends org.bukkit.profile.PlayerProfile, PlayerH
* properties (name, unique id, textures, etc.), and updates existing
* properties (e.g. name, textures, etc.) to their official and up-to-date
* values. This operation does not alter the current profile, but produces a
* new updated {@code PlayerProfile}.
* new updated {@link PlayerProfile}.
* <p>
* If no player exists for the unique id or name of this profile, this
* operation yields a profile that is equal to the current profile, which
@@ -246,7 +241,7 @@ public interface PlayerProfile extends org.bukkit.profile.PlayerProfile, PlayerH
CompletableFuture<PlayerProfile> update();
/**
* Whether this Profile has textures associated to it.
* Whether this Profile has textures associated to it
*
* @return If it has a textures property
*/
@@ -267,7 +262,6 @@ public interface PlayerProfile extends org.bukkit.profile.PlayerProfile, PlayerH
return ObjectContents.playerHead(this);
}
@SuppressWarnings("UnstableApiUsage")
@Override
default void applySkinToPlayerHeadContents(final PlayerHeadObjectContents.Builder builder) {
if (this.getProperties().isEmpty()) {
@@ -2,34 +2,23 @@ package com.destroystokyo.paper.profile;
import com.google.common.base.Preconditions;
import java.util.Objects;
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;
/**
* Represents a property on a {@link PlayerProfile}.
* Represents a property on a {@link PlayerProfile}
*/
@NullMarked
public final class ProfileProperty {
private final String name;
private final String value;
private final @Nullable String signature;
/**
* Creates an unsigned property.
*
* @param name the property name
* @param value the property value
*/
public ProfileProperty(final String name, final String value) {
this(name, value, null);
}
/**
* Creates a property.
*
* @param name the property name, at most 64 characters
* @param value the property value, at most 32767 characters
* @param signature the signature, at most 1024 characters, or {@code null} if unsigned
*/
public ProfileProperty(final String name, final String value, final @Nullable String signature) {
this.name = Preconditions.checkNotNull(name, "ProfileProperty name can not be null");
this.value = Preconditions.checkNotNull(value, "ProfileProperty value can not be null");
@@ -40,8 +29,6 @@ public final class ProfileProperty {
}
/**
* Gets the name of this property.
*
* @return The property name, ie "textures"
*/
public String getName() {
@@ -49,8 +36,6 @@ public final class ProfileProperty {
}
/**
* Gets the value of this property.
*
* @return The property value, likely to be base64 encoded
*/
public String getValue() {
@@ -58,17 +43,13 @@ public final class ProfileProperty {
}
/**
* Gets the signature of this property.
*
* @return A signature for signed properties
* @return A signature from Mojang for signed properties
*/
public @Nullable String getSignature() {
return this.signature;
}
/**
* Checks whether this property is signed.
*
* @return If this property has a signature or not
*/
public boolean isSigned() {
@@ -1,7 +0,0 @@
/**
* API for player profiles and their properties.
*/
@NullMarked
package com.destroystokyo.paper.profile;
import org.jspecify.annotations.NullMarked;
@@ -1,18 +1,15 @@
package com.destroystokyo.paper.util;
import org.jetbrains.annotations.ApiStatus;
import org.jspecify.annotations.NullMarked;
/**
* Rethrows checked exceptions without declaring them.
*
* @hidden
*/
@ApiStatus.Internal
@NullMarked
public final class SneakyThrow {
private SneakyThrow() {
}
public static void sneaky(final Throwable exception) {
SneakyThrow.throwSneaky(exception);
}
@@ -4,14 +4,13 @@ import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import org.bukkit.Bukkit;
import org.jetbrains.annotations.ApiStatus;
import org.jspecify.annotations.NullMarked;
/**
* Provides the message shown by the {@code /version} command about whether the server is up to date.
*/
@NullMarked
public interface VersionFetcher {
/**
* Amount of time to cache results for in milliseconds.
* Amount of time to cache results for in milliseconds
* <p>
* Negative values will never cache.
*
@@ -37,13 +36,11 @@ public interface VersionFetcher {
* @deprecated {@code serverVersion} is not required
*/
@Deprecated
default Component getVersionMessage(final String serverVersion) {
return this.getVersionMessage();
default Component getVersionMessage(String serverVersion) {
return getVersionMessage();
}
/**
* A version fetcher used when the server does not provide one.
*
* @hidden
*/
@ApiStatus.Internal
@@ -1,7 +0,0 @@
/**
* Miscellaneous Paper utilities.
*/
@NullMarked
package com.destroystokyo.paper.util;
import org.jspecify.annotations.NullMarked;
@@ -5,25 +5,19 @@ import java.util.logging.Level;
import java.util.logging.LogManager;
import java.util.logging.Logger;
import org.bukkit.plugin.PluginDescriptionFile;
import org.jspecify.annotations.NullMarked;
/**
* Prevents plugins (e.g. Essentials) from changing the parent of the plugin logger.
*/
public final class PaperPluginLogger extends Logger {
@NullMarked
public class PaperPluginLogger extends Logger {
@Deprecated(forRemoval = true)
public static Logger getLogger(final PluginDescriptionFile description) {
return getLogger((PluginMeta) description);
}
/**
* Creates a logger for the given plugin and registers it with the {@link LogManager}.
* <p>
* If a logger with the same name is already registered, that logger is returned instead.
*
* @param meta the meta of the plugin to create the logger for
* @return the logger for the plugin
*/
public static Logger getLogger(final PluginMeta meta) {
Logger logger = new PaperPluginLogger(meta);
if (!LogManager.getLogManager().addLogger(logger)) {
@@ -1,7 +0,0 @@
/**
* Miscellaneous Paper utilities.
*/
@NullMarked
package com.destroystokyo.paper.utils;
import org.jspecify.annotations.NullMarked;
@@ -10,7 +10,6 @@ import io.papermc.paper.plugin.lifecycle.event.LifecycleEventManager;
import io.papermc.paper.world.damagesource.CombatEntry;
import io.papermc.paper.world.damagesource.FallLocationType;
import java.io.IOException;
import java.util.ServiceLoader;
import java.util.Set;
import java.util.function.BooleanSupplier;
import java.util.function.Function;
@@ -57,11 +56,10 @@ public interface InternalAPIBridge {
* @return the instance.
*/
static InternalAPIBridge get() {
//<editor-fold defaultstate="collapsed" desc="Holder">
class Holder {
public static final InternalAPIBridge INSTANCE = Services.service(ServiceLoader.load(InternalAPIBridge.class), InternalAPIBridge.class).orElseThrow();
public static final InternalAPIBridge INSTANCE = Services.service(InternalAPIBridge.class).orElseThrow();
}
//</editor-fold>
return Holder.INSTANCE;
}
@@ -3,7 +3,6 @@ package io.papermc.paper;
import java.time.Instant;
import java.util.Optional;
import java.util.OptionalInt;
import java.util.ServiceLoader;
import net.kyori.adventure.key.Key;
import net.kyori.adventure.util.Services;
import org.jetbrains.annotations.ApiStatus;
@@ -26,7 +25,7 @@ public interface ServerBuildInfo {
static ServerBuildInfo buildInfo() {
//<editor-fold defaultstate="collapsed" desc="Holder">
final class Holder {
static final Optional<ServerBuildInfo> INSTANCE = Services.service(ServiceLoader.load(ServerBuildInfo.class), ServerBuildInfo.class);
static final Optional<ServerBuildInfo> INSTANCE = Services.service(ServerBuildInfo.class);
}
//</editor-fold>
@@ -7,6 +7,7 @@ import net.kyori.adventure.translation.Translatable;
import net.kyori.adventure.util.Index;
import org.bukkit.NamespacedKey;
import org.bukkit.inventory.ItemStack;
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;
/**
@@ -15,6 +16,7 @@ import org.jspecify.annotations.Nullable;
* The display is used in the chat, in the toast messages and the advancements
* screen.
*/
@NullMarked
public interface AdvancementDisplay {
/**
@@ -63,7 +65,7 @@ public interface AdvancementDisplay {
*
* @return {@code true} if a message should be sent
* @see org.bukkit.event.player.PlayerAdvancementDoneEvent#message() to edit
* the message
* the message
*/
boolean doesAnnounceToChat();
@@ -1,7 +0,0 @@
/**
* API for advancements.
*/
@NullMarked
package io.papermc.paper.advancement;
import org.jspecify.annotations.NullMarked;
@@ -1,7 +0,0 @@
/**
* Annotations that describe the API.
*/
@NullMarked
package io.papermc.paper.annotation;
import org.jspecify.annotations.NullMarked;
@@ -3,26 +3,26 @@ package io.papermc.paper.ban;
import org.bukkit.BanList;
import org.bukkit.ban.IpBanList;
import org.bukkit.ban.ProfileBanList;
import org.jspecify.annotations.NullMarked;
/**
* Represents a ban-type that a {@link BanList} may track.
* It enforces the correct return value at compile time.
*
* @param <T> the type of ban list
*/
@NullMarked
public interface BanListType<T> {
/**
* Banned IP addresses.
* Banned IP addresses
*/
BanListType<IpBanList> IP = new BanListTypeImpl<>(IpBanList.class);
/**
* Banned player profiles.
* Banned player profiles
*/
BanListType<ProfileBanList> PROFILE = new BanListTypeImpl<>(ProfileBanList.class);
/**
* Returns the type class of the ban list used generically.
* Returns the type class of the ban list used generically
*
* @return the type class
*/
@@ -1,7 +1,9 @@
package io.papermc.paper.ban;
import org.jetbrains.annotations.ApiStatus;
import org.jspecify.annotations.NullMarked;
@ApiStatus.Internal
@NullMarked
record BanListTypeImpl<T>(Class<T> typeClass) implements BanListType<T> {
}
@@ -1,7 +0,0 @@
/**
* Ban list API.
*/
@NullMarked
package io.papermc.paper.ban;
import org.jspecify.annotations.NullMarked;
@@ -4,11 +4,13 @@ import org.bukkit.Fluid;
import org.bukkit.Location;
import org.bukkit.util.Vector;
import org.jetbrains.annotations.Range;
import org.jspecify.annotations.NullMarked;
/**
* A representation of a fluid in a specific state of data.
* This type is not linked to a specific location and hence mostly resembles a {@link org.bukkit.block.data.BlockData}.
*/
@NullMarked
public interface FluidData extends Cloneable {
/**
@@ -42,7 +44,8 @@ public interface FluidData extends Cloneable {
*
* @return the amount as an integer, between 0 and 8
*/
@Range(from = 0, to = 8) int getLevel();
@Range(from = 0, to = 8)
int getLevel();
/**
* Computes the height of the fluid in the world.
@@ -54,10 +57,11 @@ public interface FluidData extends Cloneable {
* @param location the location at which to check the high of this fluid data.
* @return the height as a float value
*/
@Range(from = 0, to = 1) float computeHeight(Location location);
@Range(from = 0, to = 1)
float computeHeight(Location location);
/**
* Returns whether this fluid is a source block.
* Returns whether this fluid is a source block
*
* @return true if the fluid is a source block, false otherwise
*/
@@ -1,7 +0,0 @@
/**
* API for fluids and their data.
*/
@NullMarked
package io.papermc.paper.block.fluid;
import org.jspecify.annotations.NullMarked;
@@ -1,7 +0,0 @@
/**
* Specific types of {@link io.papermc.paper.block.fluid.FluidData}.
*/
@NullMarked
package io.papermc.paper.block.fluid.type;
import org.jspecify.annotations.NullMarked;
@@ -5,13 +5,14 @@ import io.papermc.paper.command.brigadier.MessageComponentSerializer;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.ComponentLike;
import net.kyori.adventure.text.TextComponent;
import org.checkerframework.checker.nullness.qual.NonNull;
/**
* Helper methods to bridge the gaps between Brigadier and Paper-MojangAPI.
*
* @deprecated for removal. See {@link MessageComponentSerializer} for a direct replacement of functionality found in
* this class.
* As a general entrypoint to brigadier on paper, see {@link io.papermc.paper.command.brigadier.Commands}.
* this class.
* As a general entrypoint to brigadier on paper, see {@link io.papermc.paper.command.brigadier.Commands}.
*/
@Deprecated(forRemoval = true, since = "1.20.6")
public final class PaperBrigadier {
@@ -27,7 +28,7 @@ public final class PaperBrigadier {
* @param componentLike The {@link ComponentLike} to use for the {@link Message} contents
* @return A new Brigadier {@link Message}
*/
public static Message message(final ComponentLike componentLike) {
public static @NonNull Message message(final @NonNull ComponentLike componentLike) {
return MessageComponentSerializer.message().serialize(componentLike.asComponent());
}
@@ -41,7 +42,7 @@ public final class PaperBrigadier {
* @param message The {@link Message} to create a {@link Component} from
* @return The created {@link Component}
*/
public static Component componentFromMessage(final Message message) {
public static @NonNull Component componentFromMessage(final @NonNull Message message) {
return MessageComponentSerializer.message().deserialize(message);
}
}
@@ -1,7 +0,0 @@
/**
* Deprecated helpers for bridging Brigadier and Paper.
*/
@NullMarked
package io.papermc.paper.brigadier;
import org.jspecify.annotations.NullMarked;
@@ -4,20 +4,22 @@ import net.kyori.adventure.audience.Audience;
import net.kyori.adventure.text.Component;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.ApiStatus;
import org.jspecify.annotations.NullMarked;
/**
* A chat renderer is responsible for rendering chat messages sent by {@link Player}s to the server.
*/
@NullMarked
@FunctionalInterface
public interface ChatRenderer {
/**
* Renders a chat message. This will be called once for each receiving {@link Audience}.
*
* @param source the message source
* @param source the message source
* @param sourceDisplayName the display name of the source player
* @param message the chat message
* @param viewer the receiving {@link Audience}
* @param message the chat message
* @param viewer the receiving {@link Audience}
* @return a rendered chat message
*/
@ApiStatus.OverrideOnly
@@ -57,9 +59,9 @@ public interface ChatRenderer {
/**
* Renders a chat message.
*
* @param source the message source
* @param source the message source
* @param sourceDisplayName the display name of the source player
* @param message the chat message
* @param message the chat message
* @return a rendered chat message
*/
@ApiStatus.OverrideOnly
@@ -4,8 +4,10 @@ import net.kyori.adventure.audience.Audience;
import net.kyori.adventure.text.Component;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.ApiStatus;
import org.jspecify.annotations.NullMarked;
@ApiStatus.Internal
@NullMarked
sealed class ViewerUnawareImpl implements ChatRenderer, ChatRenderer.ViewerUnaware permits ViewerUnawareImpl.Default {
private final ViewerUnaware unaware;
@@ -24,7 +26,7 @@ sealed class ViewerUnawareImpl implements ChatRenderer, ChatRenderer.ViewerUnawa
}
static final class Default extends ViewerUnawareImpl implements ChatRenderer.Default {
static final ViewerUnawareImpl.Default INSTANCE = new ViewerUnawareImpl.Default((_, sourceDisplayName, message) -> Component.translatable("chat.type.text", sourceDisplayName, message));
static final ViewerUnawareImpl.Default INSTANCE = new ViewerUnawareImpl.Default((source, sourceDisplayName, message) -> Component.translatable("chat.type.text", sourceDisplayName, message));
Default(final ViewerUnaware unaware) {
super(unaware);
@@ -1,7 +0,0 @@
/**
* API for rendering chat messages.
*/
@NullMarked
package io.papermc.paper.chat;
import org.jspecify.annotations.NullMarked;
@@ -1,14 +1,10 @@
package io.papermc.paper.command;
import net.kyori.adventure.text.Component;
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;
/**
* Represents something that holds and runs a command like a command block.
*
* @see org.bukkit.block.CommandBlock
* @see org.bukkit.entity.minecart.CommandMinecart
*/
@NullMarked
public interface CommandBlockHolder {
/**
@@ -45,17 +41,17 @@ public interface CommandBlockHolder {
/**
* Gets the success count from this command block.
* @see <a href="https://minecraft.wiki/wiki/Command_Block#Success_count">Command_Block#Success_count</a>
*
* @return the success count
* @see <a href="https://minecraft.wiki/wiki/Command_Block#Success_count">Command_Block#Success_count</a>
*/
int getSuccessCount();
/**
* Sets the success count from this command block.
* @see <a href="https://minecraft.wiki/wiki/Command_Block#Success_count">Command_Block#Success_count</a>
*
* @param successCount the success count
* @see <a href="https://minecraft.wiki/wiki/Command_Block#Success_count">Command_Block#Success_count</a>
*/
void setSuccessCount(int successCount);
}
@@ -1,14 +1,8 @@
package io.papermc.paper.command.brigadier;
import com.google.common.base.Preconditions;
import com.mojang.brigadier.RedirectModifier;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
import com.mojang.brigadier.tree.CommandNode;
import net.kyori.adventure.pointer.Pointered;
import net.kyori.adventure.text.ComponentLike;
import net.kyori.adventure.text.minimessage.MiniMessage;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.bukkit.GameRules;
import org.bukkit.Location;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Entity;
@@ -87,123 +81,4 @@ public interface CommandSourceStack {
* @see com.mojang.brigadier.builder.ArgumentBuilder#fork(CommandNode, RedirectModifier)
*/
CommandSourceStack withExecutor(Entity executor);
/**
* Sends a system message to the {@link #getExecutor()} if it is a {@link Player},
* otherwise sends a system message to the {@link #getSender()}.
*
* @param message the message to send
* @throws IllegalArgumentException if the message is null
*/
void sendReply(ComponentLike message);
/**
* Sends a system message with the MiniMessage format to the {@link #getExecutor()}
* if it is a {@link Player}, otherwise sends it to the {@link #getSender()}.
*
* <p>See <a href="https://docs.papermc.io/adventure/minimessage/">MiniMessage docs</a> and
* <a href="https://docs.papermc.io/adventure/minimessage/dynamic-replacements/">MiniMessage Placeholders docs</a>
* for more information on the format.</p>
*
* <p>This method provides the target of the system message as a {@link net.kyori.adventure.pointer.Pointered}
* to the MiniMessage {@link MiniMessage#deserialize(String, Pointered, TagResolver...)} method.</p>
*
* @param message the MiniMessage message to send
* @param resolvers resolvers to use
* @throws IllegalArgumentException if the message is null
*/
default void sendRichReply(final String message, final TagResolver... resolvers) {
Preconditions.checkArgument(message != null, "message cannot be null.");
this.sendReply(MiniMessage.miniMessage().deserialize(
message,
this.getExecutor() instanceof final Player player ? player : this.getSender(),
resolvers
));
}
/**
* Sends a system message to the {@link #getSender()}, admins, and console indicating successful command execution
* according to vanilla semantics.
*
* <p>This currently includes checking for environments with suppressed output,
* {@link GameRules#SEND_COMMAND_FEEDBACK}, and {@link GameRules#LOG_ADMIN_COMMANDS}.</p>
*
* @param message the message to send
* @param allowInformingAdmins whether admins and console may be informed of this success
* @throws IllegalArgumentException if the message is null
*/
void sendSuccess(ComponentLike message, boolean allowInformingAdmins);
/**
* Sends a system message to the {@link #getSender()}, admins, and console indicating successful command execution
* according to vanilla semantics. This method informs admins and the console of this success.
*
* <p>This currently includes checking for environments with suppressed output,
* {@link GameRules#SEND_COMMAND_FEEDBACK}, and {@link GameRules#LOG_ADMIN_COMMANDS}.</p>
*
* @param message the message to send
* @see #sendSuccess(ComponentLike, boolean) to disable if admins and console should be informed
* @throws IllegalArgumentException if the message is null
*/
default void sendSuccess(final ComponentLike message) {
this.sendSuccess(message, true);
}
/**
* Sends a system message with the MiniMessage format to the {@link #getSender()}, admins, and console indicating
* successful command execution according to vanilla semantics. This method informs admins and the console of
* this success.
*
* <p>This currently includes checking for environments with suppressed output,
* {@link GameRules#SEND_COMMAND_FEEDBACK}, and {@link GameRules#LOG_ADMIN_COMMANDS}.</p>
*
* <p>See <a href="https://docs.papermc.io/adventure/minimessage/">MiniMessage docs</a> and
* <a href="https://docs.papermc.io/adventure/minimessage/dynamic-replacements/">MiniMessage Placeholders docs</a>
* for more information on the format.</p>
*
* <p>This method provides the {@link CommandSender} of this command as a {@link net.kyori.adventure.pointer.Pointered}
* to the MiniMessage {@link MiniMessage#deserialize(String, Pointered, TagResolver...)} method.</p>
*
* @param message the MiniMessage message to send
* @param resolvers resolvers to use
* @see #sendSuccess(ComponentLike, boolean) to disable if admins and console should be informed
* @throws IllegalArgumentException if the message is null
*/
default void sendRichSuccess(final String message, final TagResolver... resolvers) {
Preconditions.checkArgument(message != null, "message cannot be null.");
this.sendSuccess(MiniMessage.miniMessage().deserialize(message, this.getSender(), resolvers), true);
}
/**
* Sends a system message indicating a failed command execution to the {@link #getSender()}.
* Does not apply red styling to the message as vanilla does to allow for custom failure message styling.
*
* <p>Respects vanilla semantics for accepting failure output and suppressed output environments.</p>
*
* @param message the message to send
* @throws IllegalArgumentException if the message is null
*/
void sendFailure(ComponentLike message);
/**
* Sends a system message with the MiniMessage format indicating a failed command execution to the{@link #getSender()}.
* Does not apply red styling to the message as vanilla does to allow for custom failure message styling.
*
* <p>Respects vanilla semantics for accepting failure output and suppressed output environments.</p>
*
* <p>See <a href="https://docs.papermc.io/adventure/minimessage/">MiniMessage docs</a> and
* <a href="https://docs.papermc.io/adventure/minimessage/dynamic-replacements/">MiniMessage Placeholders docs</a>
* for more information on the format.</p>
*
* <p>This method provides the {@link CommandSender} of this command as a {@link net.kyori.adventure.pointer.Pointered}
* to the MiniMessage {@link MiniMessage#deserialize(String, Pointered, TagResolver...)} method.</p>
*
* @param message the MiniMessage message to send
* @param resolvers resolvers to use
* @throws IllegalArgumentException if the message is null
*/
default void sendRichFailure(final String message, final TagResolver... resolvers) {
Preconditions.checkArgument(message != null, "message cannot be null.");
this.sendFailure(MiniMessage.miniMessage().deserialize(message, this.getSender(), resolvers));
}
}
@@ -3,11 +3,13 @@ package io.papermc.paper.command.brigadier.argument.position;
import io.papermc.paper.math.BlockPosition;
import io.papermc.paper.math.Position;
import org.jetbrains.annotations.ApiStatus;
import org.jspecify.annotations.NullMarked;
/**
* A block position, which does not have a y value.
*/
@ApiStatus.Experimental
@NullMarked
public interface ColumnBlockPosition {
/**
@@ -3,11 +3,13 @@ package io.papermc.paper.command.brigadier.argument.position;
import io.papermc.paper.math.FinePosition;
import io.papermc.paper.math.Position;
import org.jetbrains.annotations.ApiStatus;
import org.jspecify.annotations.NullMarked;
/**
* A fine position, which does not hold a y value.
*/
@ApiStatus.Experimental
@NullMarked
public interface ColumnFinePosition {
/**
@@ -1,7 +0,0 @@
/**
* Positions resolved from Brigadier arguments.
*/
@NullMarked
package io.papermc.paper.command.brigadier.argument.position;
import org.jspecify.annotations.NullMarked;
@@ -54,7 +54,8 @@ public interface BlockInWorldPredicate {
/**
* The block passed to the predicate was in an unloaded chunk and the {@code loadChunk} flag was false.
*/
UNLOADED_CHUNK;
UNLOADED_CHUNK,
;
/**
* Converts the result into an approximated boolean representation.
@@ -1,7 +0,0 @@
/**
* Command-related APIs.
*/
@NullMarked
package io.papermc.paper.command;
import org.jspecify.annotations.NullMarked;
@@ -1,7 +0,0 @@
/**
* API for reading selected server configuration settings.
*/
@NullMarked
package io.papermc.paper.configuration;
import org.jspecify.annotations.NullMarked;
@@ -70,7 +70,7 @@ public interface AttributeModifierDisplay {
interface OverrideText extends AttributeModifierDisplay {
/**
* Overridden text.
* Overridden text
*
* @return the overridden text
*/
@@ -3,16 +3,13 @@ package io.papermc.paper.datacomponent.item.attribute;
import java.util.Optional;
import java.util.ServiceLoader;
import net.kyori.adventure.text.ComponentLike;
import net.kyori.adventure.util.Services;
interface AttributeModifierDisplayBridge {
static AttributeModifierDisplayBridge bridge() {
final class Holder {
static final Optional<AttributeModifierDisplayBridge> BRIDGE = Services.service(ServiceLoader.load(AttributeModifierDisplayBridge.class), AttributeModifierDisplayBridge.class);
}
Optional<AttributeModifierDisplayBridge> BRIDGE = ServiceLoader.load(AttributeModifierDisplayBridge.class, AttributeModifierDisplayBridge.class.getClassLoader()).findFirst();
return Holder.BRIDGE.orElseThrow();
static AttributeModifierDisplayBridge bridge() {
return BRIDGE.orElseThrow();
}
AttributeModifierDisplay.Default reset();
@@ -1,6 +1,3 @@
/**
* Attribute modifier display API for the {@link io.papermc.paper.datacomponent.DataComponentTypes#ATTRIBUTE_MODIFIERS} data component.
*/
@NullMarked
@MinecraftVersionDependent
package io.papermc.paper.datacomponent.item.attribute;
@@ -45,22 +45,16 @@ public interface Dialog extends Keyed, DialogLike {
}
/**
* Gets the key of this dialog.
*
* @return the key of this dialog
* @deprecated use {@link Registry#getKey(Keyed)}, {@link RegistryAccess#getRegistry(RegistryKey)},
* and {@link RegistryKey#DIALOG}. Dialogs can exist without a key.
* @deprecated use {@link Registry#getKey(Keyed)}, {@link io.papermc.paper.registry.RegistryAccess#getRegistry(io.papermc.paper.registry.RegistryKey)},
* and {@link io.papermc.paper.registry.RegistryKey#DIALOG}. Dialogs can exist without a key.
*/
@Deprecated(since = "1.21.8", forRemoval = true)
@Override
NamespacedKey getKey();
/**
* Gets the key of this dialog.
*
* @return the key of this dialog
* @deprecated use {@link Registry#getKey(Keyed)}, {@link RegistryAccess#getRegistry(RegistryKey)},
* and {@link RegistryKey#DIALOG}. Dialogs can exist without a key.
* @deprecated use {@link Registry#getKey(Keyed)}, {@link io.papermc.paper.registry.RegistryAccess#getRegistry(io.papermc.paper.registry.RegistryKey)},
* and {@link io.papermc.paper.registry.RegistryKey#DIALOG}. Dialogs can exist without a key.
*/
@Deprecated(since = "1.21.8", forRemoval = true)
@Override
@@ -1,8 +1,6 @@
package io.papermc.paper.enchantments;
/**
* Represents the rarity of an enchantment.
*
* @deprecated Enchantments do not have a "rarity" since 1.20.5
*/
@Deprecated(forRemoval = true, since = "1.20.5")
@@ -15,7 +13,7 @@ public enum EnchantmentRarity {
private final int weight;
EnchantmentRarity(final int weight) {
EnchantmentRarity(int weight) {
this.weight = weight;
}
@@ -25,6 +23,6 @@ public enum EnchantmentRarity {
* @return the weight
*/
public int getWeight() {
return this.weight;
return weight;
}
}
@@ -1,7 +0,0 @@
/**
* Enchantment API.
*/
@NullMarked
package io.papermc.paper.enchantments;
import org.jspecify.annotations.NullMarked;
@@ -3,6 +3,7 @@ package io.papermc.paper.entity.poi;
import java.util.function.Predicate;
import org.bukkit.Location;
import org.bukkit.World;
import org.jspecify.annotations.NullMarked;
/**
* Holds the result of searching for a point of interest.
@@ -10,6 +11,7 @@ import org.bukkit.World;
* @see World#locateAllPoiInRange(Location, Predicate, int)
* @see World#locateAllPoiInRange(Location, Predicate, int, PoiType.Occupancy)
*/
@NullMarked
public interface PoiSearchResult {
/**
@@ -3,6 +3,7 @@ package io.papermc.paper.entity.poi;
import io.papermc.paper.InternalAPIBridge;
import org.bukkit.Keyed;
import org.bukkit.block.data.BlockData;
import org.jspecify.annotations.NullMarked;
/**
* Represents a point of interest (POI).
@@ -13,6 +14,7 @@ import org.bukkit.block.data.BlockData;
*
* @see PoiTypes
*/
@NullMarked
public interface PoiType extends Keyed {
/**
@@ -3,10 +3,12 @@ package io.papermc.paper.entity.poi;
import net.kyori.adventure.key.Key;
import net.kyori.adventure.key.KeyPattern;
import org.bukkit.Registry;
import org.jspecify.annotations.NullMarked;
/**
* All the built-in point of interest types.
*/
@NullMarked
public final class PoiTypes {
// Start generate - PoiTypes
@@ -1,7 +0,0 @@
/**
* Point of interest (POI) API.
*/
@NullMarked
package io.papermc.paper.entity.poi;
import org.jspecify.annotations.NullMarked;
@@ -46,7 +46,7 @@ public class PlayerConnectionValidateLoginEvent extends Event {
*
* @return connection
* @apiNote disconnecting the player through this connection
* or using any methods that may send packets is not supported
* or using any methods that may send packets is not supported
*/
public PlayerConnection getConnection() {
return this.connection;
@@ -61,7 +61,7 @@ public class PlayerConnectionValidateLoginEvent extends Event {
}
/**
* Disallows the player from logging in, with the given reason.
* Disallows the player from logging in, with the given reason
*
* @param message Kick message to display to the user
*/
@@ -1,91 +0,0 @@
package io.papermc.paper.event.entity;
import com.google.common.base.Preconditions;
import org.bukkit.block.Block;
import org.bukkit.entity.Entity;
import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList;
import org.bukkit.event.entity.EntityEvent;
import org.checkerframework.checker.index.qual.NonNegative;
import org.jetbrains.annotations.ApiStatus;
import org.jspecify.annotations.NullMarked;
/**
* Called when an {@link Entity} lands on the block after falling.
* This event is called before {@link org.bukkit.event.entity.EntityDamageEvent}, {@link org.bukkit.event.entity.EntityChangeBlockEvent}, {@link org.bukkit.event.player.PlayerInteractEvent}
* and {@link org.bukkit.event.entity.EntityInteractEvent}.
*/
@NullMarked
public class EntityLandEvent extends EntityEvent implements Cancellable {
private static final HandlerList HANDLER_LIST = new HandlerList();
private final Block block;
private boolean cancelled;
private double fallDistance;
@ApiStatus.Internal
public EntityLandEvent(final Entity entity, final Block block, final double fallDistance) {
super(entity);
this.block = block;
this.fallDistance = fallDistance;
}
@Override
public HandlerList getHandlers() {
return HANDLER_LIST;
}
public static HandlerList getHandlerList() {
return HANDLER_LIST;
}
/**
* {@return the block that the entity landed on}
*/
public Block getBlock() {
return this.block;
}
@Override
public boolean isCancelled() {
return this.cancelled;
}
/**
* Sets whether to cancel the landing, cancelling this event will prevent
* the entity from taking fall damage and interact with the block. (ex: break turtle egg)
*
* @param cancel true if the event should be cancelled, false otherwise
*/
@Override
public void setCancelled(final boolean cancel) {
this.cancelled = cancel;
}
/**
* Gets the fall distance of the entity before landing.
*
* @return the fall distance
*/
public double getFallDistance() {
return this.fallDistance;
}
/**
* Sets the fall distance of the entity before landing.
* Fall distance in the event is used to calculate fall damage and
* the chance of transforming {@link org.bukkit.Material#FARMLAND} to {@link org.bukkit.Material#DIRT} and
* the type of falling sound when the entity lands on {@link org.bukkit.Material#POWDER_SNOW}.
*
* @param fallDistance the fall distance
* @throws IllegalArgumentException if the fall distance is negative or not finite
*/
public void setFallDistance(final @NonNegative double fallDistance) {
Preconditions.checkArgument(
Double.isFinite(fallDistance) && fallDistance >= 0.0,
"Fall distance must be finite and non-negative"
);
this.fallDistance = fallDistance;
}
}
@@ -1,69 +0,0 @@
package io.papermc.paper.event.entity;
import org.bukkit.Location;
import org.bukkit.block.Block;
import org.bukkit.entity.Entity;
import org.bukkit.event.HandlerList;
import org.bukkit.event.entity.EntityEvent;
import org.bukkit.util.Vector;
import org.jetbrains.annotations.ApiStatus;
import org.jspecify.annotations.NullMarked;
/**
* Called when an entity is launched upward by a Potent Sulfur geyser.
*/
@NullMarked
public class EntityPotentSulfurLaunchEvent extends EntityEvent {
private static final HandlerList HANDLER_LIST = new HandlerList();
private final Block sulfurBlock;
private final Location sourceLocation;
private final Vector launchVelocity;
@ApiStatus.Internal
public EntityPotentSulfurLaunchEvent(
final Entity entity,
final Block sulfurBlock,
final Location sourceLocation,
final Vector launchVelocity
) {
super(entity);
this.sulfurBlock = sulfurBlock;
this.sourceLocation = sourceLocation;
this.launchVelocity = launchVelocity;
}
/**
* Gets the Potent Sulfur block.
*/
public Block getSulfurBlock() {
return this.sulfurBlock;
}
/**
* Gets the location where the geyser exits the water column.
*/
public Location getSourceLocation() {
return this.sourceLocation.clone();
}
/**
* Gets the velocity that will be added to the entity.
* <br>
* This value is read-only, changes made to it <b>will not</b> have any
* effect on the final launch velocity.
*/
public Vector getLaunchVelocity() {
return this.launchVelocity.clone();
}
@Override
public HandlerList getHandlers() {
return HANDLER_LIST;
}
public static HandlerList getHandlerList() {
return HANDLER_LIST;
}
}
@@ -1,5 +1,10 @@
package io.papermc.paper.event.executor;
import org.bukkit.event.Event;
import org.bukkit.event.Listener;
import org.bukkit.plugin.EventExecutor;
import org.jetbrains.annotations.ApiStatus;
import org.jspecify.annotations.NullMarked;
import java.io.IOException;
import java.io.InputStream;
import java.lang.constant.ConstantDescs;
@@ -10,19 +15,16 @@ import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.List;
import java.util.Objects;
import org.bukkit.event.Event;
import org.bukkit.event.Listener;
import org.bukkit.plugin.EventExecutor;
import org.jetbrains.annotations.ApiStatus;
@ApiStatus.Internal
@NullMarked
public final class EventExecutorFactory {
private static final byte[] TEMPLATE_CLASS_BYTES;
static {
try (InputStream is = EventExecutorFactory.class.getResourceAsStream("MethodHandleEventExecutorTemplate.class")) {
try (final InputStream is = EventExecutorFactory.class.getResourceAsStream("MethodHandleEventExecutorTemplate.class")) {
TEMPLATE_CLASS_BYTES = Objects.requireNonNull(is, "template class is missing").readAllBytes();
} catch (final IOException e) {
} catch (IOException e) {
throw new AssertionError(e);
}
}
@@ -32,19 +34,17 @@ public final class EventExecutorFactory {
}
/**
* Creates an {@link EventExecutor} implemented by a hidden class calling a method handle.
* {@return an {@link EventExecutor} implemented by a hidden class calling a method handle}
*
* @param method the method to be invoked by the created event executor
* @param eventClass the class of the event to handle
* @return the event executor
* @throws AssertionError if the hidden class cannot be defined or instantiated
*/
public static EventExecutor create(final Method method, final Class<? extends Event> eventClass) {
final List<?> classData = List.of(method, eventClass);
try {
final MethodHandles.Lookup newClass = MethodHandles.lookup().defineHiddenClassWithClassData(TEMPLATE_CLASS_BYTES, classData, true);
return newClass.lookupClass().asSubclass(EventExecutor.class).getDeclaredConstructor().newInstance();
} catch (final ReflectiveOperationException e) {
} catch (ReflectiveOperationException e) {
throw new AssertionError(e);
}
}
@@ -56,10 +56,6 @@ public final class EventExecutorFactory {
/**
* Extracts the class data and creates an adjusted MethodHandle directly usable by the lookup class.
* The logic is kept here to minimize memory usage per created class.
*
* @param lookup the lookup of the hidden class, which holds the class data
* @return the class data with a method handle adjusted to the event executor signature
* @throws AssertionError if the class data cannot be read or the method cannot be unreflected
*/
static ClassData classData(final MethodHandles.Lookup lookup) {
try {
@@ -71,7 +67,7 @@ public final class EventExecutorFactory {
mh = mh.asType(MethodType.methodType(void.class, Listener.class, Event.class));
final Class<?> eventClass = MethodHandles.classDataAt(lookup, ConstantDescs.DEFAULT_NAME, Class.class, 1);
return new ClassData(method, mh, eventClass.asSubclass(Event.class));
} catch (final ReflectiveOperationException e) {
} catch (ReflectiveOperationException e) {
throw new AssertionError(e);
}
}
@@ -1,14 +1,15 @@
package io.papermc.paper.event.executor;
import com.destroystokyo.paper.util.SneakyThrow;
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.reflect.Method;
import org.bukkit.event.Event;
import org.bukkit.event.EventException;
import org.bukkit.event.Listener;
import org.bukkit.plugin.EventExecutor;
import org.jetbrains.annotations.ApiStatus;
import org.jspecify.annotations.NullMarked;
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.reflect.Method;
/**
* This class is designed to be used as hidden class template.
@@ -24,6 +25,7 @@ import org.jetbrains.annotations.ApiStatus;
*/
@SuppressWarnings("unused")
@ApiStatus.Internal
@NullMarked
class MethodHandleEventExecutorTemplate implements EventExecutor {
private static final Method METHOD;
private static final MethodHandle HANDLE;
@@ -42,7 +44,7 @@ class MethodHandleEventExecutorTemplate implements EventExecutor {
if (!EVENT_CLASS.isInstance(event)) return;
try {
HANDLE.invokeExact(listener, event);
} catch (final Throwable t) {
} catch (Throwable t) {
SneakyThrow.sneaky(t);
}
}
@@ -1,9 +0,0 @@
/**
* Internal implementation of event executors.
*/
@NullMarked
@ApiStatus.Internal
package io.papermc.paper.event.executor;
import org.jetbrains.annotations.ApiStatus;
import org.jspecify.annotations.NullMarked;
@@ -5,10 +5,12 @@ import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.ApiStatus;
import org.jspecify.annotations.NullMarked;
/**
* Called when a player picks up a crafted item from the result slot of a crafting grid.
*/
@NullMarked
public class ItemCraftedEvent extends Event {
private static final HandlerList HANDLER_LIST = new HandlerList();
@@ -1,6 +1,5 @@
package io.papermc.paper.event.inventory;
import java.util.OptionalInt;
import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList;
import org.bukkit.event.inventory.InventoryClickEvent;
@@ -9,12 +8,15 @@ import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryView;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.ApiStatus;
import org.jspecify.annotations.NullMarked;
import java.util.OptionalInt;
/**
* Called when a {@link Player} selects an item inside a bundle.
*
* @apiNote This event does not fire for bundle item selections in creative mode player inventories.
*/
@NullMarked
public final class PlayerBundleItemSelectEvent extends InventoryEvent {
private static final HandlerList HANDLER_LIST = new HandlerList();
@@ -31,16 +33,7 @@ public final class PlayerBundleItemSelectEvent extends InventoryEvent {
private final Direction direction;
@ApiStatus.Internal
public PlayerBundleItemSelectEvent(
final InventoryView view,
final ItemStack bundle,
final int rawSlot,
final ItemStack previousItem,
final ItemStack selectedItem,
final int previousIndex,
final int selectedIndex,
final Direction direction
) {
public PlayerBundleItemSelectEvent(final InventoryView view, final ItemStack bundle, final int rawSlot, final ItemStack previousItem, final ItemStack selectedItem, final int previousIndex, final int selectedIndex, final Direction direction) {
super(view);
this.bundle = bundle;
@@ -132,8 +125,9 @@ public final class PlayerBundleItemSelectEvent extends InventoryEvent {
/**
* Gets the direction from the previous selection to the new one.
*
* @return the direction
* @apiNote The direction cannot be reliably determined if there are less than three item stacks inside the bundle, in which case this returns {@link Direction#UNKNOWN}.
*
* @return the direction
*/
public Direction getDirection() {
return this.direction;
@@ -6,6 +6,7 @@ import org.bukkit.event.HandlerList;
import org.bukkit.event.inventory.InventoryMoveItemEvent;
import org.bukkit.inventory.Inventory;
import org.jetbrains.annotations.ApiStatus;
import org.jspecify.annotations.NullMarked;
/**
* Called when a hopper or hopper minecart is about to choose an item to move,
@@ -14,14 +15,15 @@ import org.jetbrains.annotations.ApiStatus;
* The hopper treats disallowed slots of the source as if they do not exist, so
* a source with items only in disallowed slots is treated as empty.
*/
@NullMarked
public class PrepareHopperTransferEvent extends Event {
private static final HandlerList HANDLER_LIST = new HandlerList();
protected long disallowedSlots;
private final Inventory source;
private final Inventory destination;
private final boolean didSourceInitiate;
protected long disallowedSlots;
@ApiStatus.Internal
public PrepareHopperTransferEvent(final Inventory source, final Inventory destination, final boolean didSourceInitiate) {
@@ -31,7 +33,7 @@ public class PrepareHopperTransferEvent extends Event {
}
/**
* Gets the Inventory that items are being taken from.
* Gets the Inventory that items are being taken from
*
* @return Inventory that items are being taken from
*/
@@ -40,7 +42,7 @@ public class PrepareHopperTransferEvent extends Event {
}
/**
* Gets the Inventory that items are being put into.
* Gets the Inventory that items are being put into
*
* @return Inventory that items are being put into
*/
@@ -72,7 +74,7 @@ public class PrepareHopperTransferEvent extends Event {
/**
* Sets if the hopper is allowed to take items from a slot of {@link #getSource()}.
*
* @param slot the slot
* @param slot the slot
* @param allowed whether the slot is allowed
*/
public void setSlotAllowed(final int slot, final boolean allowed) {
@@ -1,7 +0,0 @@
/**
* {@link org.bukkit.event.Event Events} relating to inventories and the items in them.
*/
@NullMarked
package io.papermc.paper.event.inventory;
import org.jspecify.annotations.NullMarked;
@@ -7,6 +7,7 @@ import org.bukkit.Bukkit;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.ApiStatus;
import org.jspecify.annotations.NullMarked;
/**
* This event is emitted by the server when the data fixer is removing a block entity associated with a block
@@ -21,6 +22,7 @@ import org.jetbrains.annotations.ApiStatus;
* might be blocking on.
* Schedule large amount of work into separate thread pools.
*/
@NullMarked
public class AsyncServerDataFixerRemoveBlockEntityEvent extends Event {
private static final HandlerList HANDLER_LIST = new HandlerList();
@@ -45,40 +47,33 @@ public class AsyncServerDataFixerRemoveBlockEntityEvent extends Event {
}
/**
* Returns the key representing the no longer existing block entity type.
*
* @return the key representing the no longer existing block entity type
* {@return the key representing the no longer existing block entity type}
*/
public Key getBlockEntityType() {
return this.blockEntityType;
return blockEntityType;
}
/**
* Returns the key of the world this block entity was removed from.
* {@return the key of the world this block entity was removed from}
*
* @return the key of the world this block entity was removed from
* @see org.bukkit.Server#getWorld(Key)
*/
public Key getWorldKey() {
return this.worldKey;
return worldKey;
}
/**
* Returns the position of the block entity that was removed.
*
* @return the position of the block entity that was removed
* {@return the position of the block entity that was removed}
*/
public BlockPosition getBlockPosition() {
return this.blockPosition;
return blockPosition;
}
/**
* Returns an immutable view of the persistent data container that was attached to the removed block entity.
*
* @return an immutable view of the persistent data container that was attached to the removed block entity
* {@return an immutable view of the persistent data container that was attached to the removed block entity}
*/
public PersistentDataContainerView getPersistentDataContainerView() {
return this.persistentDataContainerView;
return persistentDataContainerView;
}
@Override
@@ -3,17 +3,16 @@ package io.papermc.paper.event.server;
import org.bukkit.event.HandlerList;
import org.bukkit.event.server.ServerEvent;
import org.jetbrains.annotations.ApiStatus;
import org.jspecify.annotations.NullMarked;
/**
* Called when resources such as datapacks are reloaded (e.g. /minecraft:reload).
* Called when resources such as datapacks are reloaded (e.g. /minecraft:reload)
* <p>
* Intended for use to re-register custom recipes, advancements that may be lost during a reload like this.
*/
@NullMarked
public class ServerResourcesReloadedEvent extends ServerEvent {
/**
* The handler list of this event.
*/
public static final HandlerList HANDLER_LIST = new HandlerList();
private final Cause cause;
@@ -41,17 +40,8 @@ public class ServerResourcesReloadedEvent extends ServerEvent {
return HANDLER_LIST;
}
/**
* The cause of a resource reload.
*/
public enum Cause {
/**
* The resources were reloaded by the {@code /minecraft:reload} command.
*/
COMMAND,
/**
* The resources were reloaded by a plugin.
*/
PLUGIN,
}
}
@@ -7,10 +7,12 @@ import org.bukkit.event.Cancellable;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.ApiStatus;
import org.jspecify.annotations.NullMarked;
/**
* This event gets called when the whitelist status of a player is changed.
* This event gets called when the whitelist status of a player is changed
*/
@NullMarked
public class WhitelistStateUpdateEvent extends Event implements Cancellable {
private static final HandlerList HANDLER_LIST = new HandlerList();
@@ -27,7 +29,7 @@ public class WhitelistStateUpdateEvent extends Event implements Cancellable {
}
/**
* Gets the player whose whitelist status is being changed.
* Gets the player whose whitelist status is being changed
*
* @return the player whose status is being changed
*/
@@ -36,7 +38,7 @@ public class WhitelistStateUpdateEvent extends Event implements Cancellable {
}
/**
* Gets the player profile whose whitelist status is being changed.
* Gets the player profile whose whitelist status is being changed
*
* @return the player profile whose status is being changed
*/
@@ -45,7 +47,7 @@ public class WhitelistStateUpdateEvent extends Event implements Cancellable {
}
/**
* Gets the status change of the player profile.
* Gets the status change of the player profile
*
* @return the whitelist status
*/
@@ -73,16 +75,9 @@ public class WhitelistStateUpdateEvent extends Event implements Cancellable {
}
/**
* Enum for the whitelist status changes.
* Enum for the whitelist status changes
*/
public enum WhitelistStatus {
/**
* The player was added to the whitelist.
*/
ADDED,
/**
* The player was removed from the whitelist.
*/
REMOVED
ADDED, REMOVED
}
}
@@ -1,7 +0,0 @@
/**
* {@link org.bukkit.event.Event Events} relating to the server.
*/
@NullMarked
package io.papermc.paper.event.server;
import org.jspecify.annotations.NullMarked;
@@ -12,6 +12,7 @@ import org.bukkit.generator.structure.Structure;
import org.bukkit.generator.structure.StructureType;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.UnmodifiableView;
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;
/**
@@ -27,6 +28,7 @@ import org.jspecify.annotations.Nullable;
* <li>{@link World#locateNearestStructure(Location, Structure, int, boolean)} is invoked.</li>
* </ul>
*/
@NullMarked
public class StructuresLocateEvent extends WorldEvent implements Cancellable {
private static final HandlerList HANDLER_LIST = new HandlerList();
@@ -163,9 +165,6 @@ public class StructuresLocateEvent extends WorldEvent implements Cancellable {
/**
* Result for {@link StructuresLocateEvent}.
*
* @param pos the position of the located structure
* @param structure the located structure
*/
public record Result(Position pos, Structure structure) {
@@ -6,6 +6,7 @@ import org.bukkit.World;
import org.bukkit.event.HandlerList;
import org.bukkit.event.world.WorldEvent;
import org.jetbrains.annotations.ApiStatus;
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;
/**
@@ -14,6 +15,7 @@ import org.jspecify.annotations.Nullable;
* If the world is in {@link World#isHardcore() hardcore}
* the resulting difficulty will always be {@link Difficulty#HARD}
*/
@NullMarked
public class WorldDifficultyChangeEvent extends WorldEvent {
private static final HandlerList HANDLER_LIST = new HandlerList();
@@ -7,19 +7,20 @@ import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList;
import org.bukkit.event.world.WorldEvent;
import org.jetbrains.annotations.ApiStatus;
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;
/**
* Called when a world's gamerule is changed, either by command, world options menu, or by api.
*
* @see <a href="https://minecraft.wiki/w/Game_rule#Modifying_game_rules">Modifying game rules - Minecraft wiki</a>
*/
@NullMarked
public class WorldGameRuleChangeEvent extends WorldEvent implements Cancellable {
private static final HandlerList HANDLER_LIST = new HandlerList();
protected final GameRule<?> gameRule;
private final @Nullable CommandSender commandSender;
protected final GameRule<?> gameRule;
private String value;
private boolean cancelled;
@@ -1,7 +0,0 @@
/**
* {@link org.bukkit.event.Event Events} relating to worlds.
*/
@NullMarked
package io.papermc.paper.event.world;
import org.jspecify.annotations.NullMarked;
@@ -2,10 +2,9 @@ package io.papermc.paper.inventory;
import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.format.TextColor;
import org.jetbrains.annotations.NotNull;
/**
* Represents the rarity of an item.
*
* @deprecated use {@link org.bukkit.inventory.ItemRarity} with {@link org.bukkit.inventory.meta.ItemMeta#getRarity()}
*/
@Deprecated(forRemoval = true, since = "1.20.5")
@@ -16,18 +15,18 @@ public enum ItemRarity {
RARE(NamedTextColor.AQUA),
EPIC(NamedTextColor.LIGHT_PURPLE);
private final TextColor color;
TextColor color;
ItemRarity(final TextColor color) {
ItemRarity(TextColor color) {
this.color = color;
}
/**
* Gets the color formatting associated with the rarity.
*
* @return the color of the rarity
* @return
*/
@NotNull
public TextColor getColor() {
return this.color;
return color;
}
}
@@ -1,7 +0,0 @@
/**
* Inventory API.
*/
@NullMarked
package io.papermc.paper.inventory;
import org.jspecify.annotations.NullMarked;
@@ -2,11 +2,13 @@ package io.papermc.paper.inventory.tooltip;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.Contract;
import org.jspecify.annotations.NullMarked;
/**
* Context for computing itemstack tooltips via
* {@link org.bukkit.inventory.ItemStack#computeTooltipLines(TooltipContext, Player)}.
* {@link org.bukkit.inventory.ItemStack#computeTooltipLines(TooltipContext, Player)}
*/
@NullMarked
public interface TooltipContext {
/**
@@ -1,6 +1,8 @@
package io.papermc.paper.inventory.tooltip;
import org.jspecify.annotations.NullMarked;
@NullMarked
record TooltipContextImpl(boolean isAdvanced, boolean isCreative) implements TooltipContext {
@Override
@@ -1,7 +0,0 @@
/**
* API for item tooltips.
*/
@NullMarked
package io.papermc.paper.inventory.tooltip;
import org.jspecify.annotations.NullMarked;
@@ -1,10 +1,5 @@
package io.papermc.paper.item;
/**
* Post-processing operations that are applied to a filled map when it is crafted.
*
* @see io.papermc.paper.datacomponent.DataComponentTypes#MAP_POST_PROCESSING
*/
public enum MapPostProcessing {
// Start generate - MapPostProcessing
LOCK,
@@ -1,7 +0,0 @@
/**
* Item API.
*/
@NullMarked
package io.papermc.paper.item;
import org.jspecify.annotations.NullMarked;
@@ -11,7 +11,7 @@ public interface Rotation {
* @param pitch the pitch component of the rotation, measured in degrees
* @return a new {@code Rotation} instance with the specified yaw and pitch
*/
static Rotation rotation(final float yaw, final float pitch) {
static Rotation rotation(float yaw, float pitch) {
return new RotationImpl(yaw, pitch);
}
@@ -1,15 +1,14 @@
package io.papermc.paper.persistence;
import com.google.common.base.Preconditions;
import java.io.IOException;
import java.util.Set;
import net.kyori.adventure.key.Key;
import com.google.common.base.Preconditions;
import org.bukkit.NamespacedKey;
import org.bukkit.persistence.PersistentDataAdapterContext;
import org.bukkit.persistence.PersistentDataContainer;
import org.bukkit.persistence.PersistentDataHolder;
import org.bukkit.persistence.PersistentDataType;
import org.jetbrains.annotations.ApiStatus;
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;
/**
@@ -18,6 +17,7 @@ import org.jspecify.annotations.Nullable;
*
* @see PersistentDataContainer
*/
@NullMarked
@ApiStatus.NonExtendable
public interface PersistentDataContainerView {
@@ -39,14 +39,14 @@ public interface PersistentDataContainerView {
* tags, like the display name, will not work as the values are stored
* using your namespace.
*
* @param key the key the value is stored under
* @param key the key the value is stored under
* @param type the type the primitive stored value has to match
* @param <P> the generic type of the stored primitive
* @param <C> the generic type of the eventually created complex object
* @param <P> the generic type of the stored primitive
* @param <C> the generic type of the eventually created complex object
* @return if a value with the provided key and type exists
* @throws IllegalArgumentException if the key to look up is null
* @throws IllegalArgumentException if the type to cast the found object to is
* null
* null
*/
<P, C> boolean has(NamespacedKey key, PersistentDataType<P, C> type);
@@ -97,20 +97,20 @@ public interface PersistentDataContainerView {
* Returns the metadata value that is stored on the
* {@link PersistentDataHolder} instance.
*
* @param key the key to look up in the custom tag map
* @param key the key to look up in the custom tag map
* @param type the type the value must have and will be cast to
* @param <P> the generic type of the stored primitive
* @param <C> the generic type of the eventually created complex object
* @param <P> the generic type of the stored primitive
* @param <C> the generic type of the eventually created complex object
* @return the value or {@code null} if no value was mapped under the given
* value
* value
* @throws IllegalArgumentException if the key to look up is null
* @throws IllegalArgumentException if the type to cast the found object to is
* null
* null
* @throws IllegalArgumentException if a value exists under the given key,
* but cannot be accessed using the given type
* but cannot be accessed using the given type
* @throws IllegalArgumentException if no suitable adapter was found for
* the {@link
* PersistentDataType#getPrimitiveType()}
* the {@link
* PersistentDataType#getPrimitiveType()}
*/
<P, C> @Nullable C get(NamespacedKey key, PersistentDataType<P, C> type);
@@ -119,21 +119,21 @@ public interface PersistentDataContainerView {
* {@link PersistentDataHolder} instance. If the value does not exist in the
* container, the default value provided is returned.
*
* @param key the key to look up in the custom tag map
* @param type the type the value must have and will be cast to
* @param key the key to look up in the custom tag map
* @param type the type the value must have and will be cast to
* @param defaultValue the default value to return if no value was found for
* the provided key
* @param <P> the generic type of the stored primitive
* @param <C> the generic type of the eventually created complex object
* the provided key
* @param <P> the generic type of the stored primitive
* @param <C> the generic type of the eventually created complex object
* @return the value or the default value if no value was mapped under the
* given key
* given key
* @throws IllegalArgumentException if the key to look up is null
* @throws IllegalArgumentException if the type to cast the found object to is
* null
* null
* @throws IllegalArgumentException if a value exists under the given key,
* but cannot be accessed using the given type
* but cannot be accessed using the given type
* @throws IllegalArgumentException if no suitable adapter was found for
* the {@link PersistentDataType#getPrimitiveType()}
* the {@link PersistentDataType#getPrimitiveType()}
*/
<P, C> C getOrDefault(NamespacedKey key, PersistentDataType<P, C> type, C defaultValue);
@@ -142,14 +142,14 @@ public interface PersistentDataContainerView {
* {@link PersistentDataHolder} instance.
*
* @param dataKey the data key to look up in the custom tag map
* @param <C> the generic type of the eventually created complex object
* @param <C> the generic type of the eventually created complex object
* @return the value or {@code null} if no value was mapped under the given
* value
* value
* @throws IllegalArgumentException if the data key to look up is null
* @throws IllegalArgumentException if a value exists under the given key,
* but cannot be accessed using the given type
* but cannot be accessed using the given type
* @throws IllegalArgumentException if no suitable adapter was found for
* the {@link PersistentDataType#getPrimitiveType()}
* the {@link PersistentDataType#getPrimitiveType()}
*/
default <C> @Nullable C get(final PersistentDataKey<C> dataKey) {
Preconditions.checkArgument(dataKey != null, "The data key cannot be null");
@@ -161,39 +161,22 @@ public interface PersistentDataContainerView {
* {@link PersistentDataHolder} instance. If the value does not exist in the
* container, the default value provided is returned.
*
* @param dataKey the data key to look up in the custom tag map
* @param dataKey the data key to look up in the custom tag map
* @param defaultValue the default value to return if no value was found for
* the provided key
* @param <C> the generic type of the eventually created complex object
* the provided key
* @param <C> the generic type of the eventually created complex object
* @return the value or the default value if no value was mapped under the given key
* @throws IllegalArgumentException if the data key to look up is null
* @throws IllegalArgumentException if a value exists under the given key,
* but cannot be accessed using the given type
* but cannot be accessed using the given type
* @throws IllegalArgumentException if no suitable adapter was found for
* the {@link PersistentDataType#getPrimitiveType()}
* the {@link PersistentDataType#getPrimitiveType()}
*/
default <C> C getOrDefault(final PersistentDataKey<C> dataKey, final C defaultValue) {
Preconditions.checkArgument(dataKey != null, "The data key cannot be null");
return this.getOrDefault(dataKey.key(), dataKey.dataType(), defaultValue);
}
/**
* Estimates the {@link PersistentDataType} of the value based on the primitive
* type that is stored for the given key.
* <br>
* <b>WARNING:</b> This method will only return data types
* defined in {@link PersistentDataType} which directly map to a specific
* nbt tag. The return value will be wrong if the data type is plugin
* specific or not represented by a specific nbt tag.
* Use {@link #has(NamespacedKey, PersistentDataType)} if you expect a
* specific data type.
*
* @param key the key to look up the value type of
* @return estimated data type or null if no value is present, the type is
* unknown or an empty list is encountered as value.
*/
@Nullable PersistentDataType<?, ?> getPrimitiveStorageType(Key key);
/**
* Get the set of keys present on this {@link PersistentDataContainer}
* instance.
@@ -220,7 +203,7 @@ public interface PersistentDataContainerView {
* This method only copies custom object keys. Existing tags, like the display
* name, will not be copied as the values are stored using your namespace.
*
* @param other the container to copy to
* @param other the container to copy to
* @param replace whether to replace any matching values in the target container
* @throws IllegalArgumentException if the other container is null
*/
@@ -238,14 +221,12 @@ public interface PersistentDataContainerView {
* byte array.
*
* @return a binary representation of this container
* @throws IOException if we fail to write this container to a byte array
* @throws java.io.IOException if we fail to write this container to a byte array
*/
byte[] serializeToBytes() throws IOException;
byte[] serializeToBytes() throws java.io.IOException;
/**
* Returns the size of the data container.
*
* @return the size of the data container
* {@return the size of the data container}
*/
int getSize();
}
Loaded 100 of 517 files, more files were not shown because too many files have changed in this diff. Show more