Co-authored-by: Bjarne Koll <git@lynxplay.dev>
Co-authored-by: Jake Potrebic <jake.m.potrebic@gmail.com>
Co-authored-by: Lulu13022002 <41980282+Lulu13022002@users.noreply.github.com>
Co-authored-by: MiniDigger | Martin <admin@minidigger.dev>
Co-authored-by: Nassim Jahnke <nassim@njahnke.dev>
Co-authored-by: Noah van der Aa <ndvdaa@gmail.com>
Co-authored-by: Owen1212055 <23108066+Owen1212055@users.noreply.github.com>
Co-authored-by: Shane Freeder <theboyetronic@gmail.com>
Co-authored-by: Spottedleaf <Spottedleaf@users.noreply.github.com>
Co-authored-by: Tamion <70228790+notTamion@users.noreply.github.com>
Co-authored-by: Warrior <50800980+Warriorrrr@users.noreply.github.com>
This commit is contained in:
Nassim Jahnke
2025-04-12 17:26:44 +02:00
parent 0767902699
commit f00727c57e
2092 changed files with 50551 additions and 48729 deletions

View File

@@ -289,7 +289,7 @@ public class TimingHistory {
final TicksRecord ticksRecord = new TicksRecord();
final PingRecord pingRecord = new PingRecord();
final TimingData fst = TimingsManager.FULL_SERVER_TICK.minuteData.clone();
final double tps = 1E9 / ( System.nanoTime() - lastMinuteTime ) * ticksRecord.timed;
final double tps = 1E9 / (System.nanoTime() - lastMinuteTime) * ticksRecord.timed;
final double usedMemory = TimingsManager.FULL_SERVER_TICK.avgUsedMemory;
final double freeMemory = TimingsManager.FULL_SERVER_TICK.avgFreeMemory;
final double loadAvg = ManagementFactory.getOperatingSystemMXBean().getSystemLoadAverage();

View File

@@ -153,9 +153,9 @@ public final class TimingsManager {
public static Timing getCommandTiming(@Nullable String pluginName, @NotNull Command command) {
Plugin plugin = null;
final Server server = Bukkit.getServer();
if (!( server == null || pluginName == null ||
"minecraft".equals(pluginName) || "bukkit".equals(pluginName) ||
"spigot".equalsIgnoreCase(pluginName) || "paper".equals(pluginName)
if (!(server == null || pluginName == null ||
"minecraft".equals(pluginName) || "bukkit".equals(pluginName) ||
"spigot".equalsIgnoreCase(pluginName) || "paper".equals(pluginName)
)) {
plugin = server.getPluginManager().getPlugin(pluginName);
}

View File

@@ -32,10 +32,10 @@ public final class NamespacedTag implements com.destroystokyo.paper.Namespaced {
* compatibility measures.
*/
public static final String BUKKIT = "bukkit";
//
private static final Pattern VALID_NAMESPACE = Pattern.compile("[a-z0-9._-]+");
private static final Pattern VALID_KEY = Pattern.compile("[a-z0-9/._-]+");
//
private final String namespace;
private final String key;

View File

@@ -1,6 +1,6 @@
package com.destroystokyo.paper.entity.ai;
import com.google.common.base.Objects;
import java.util.Objects;
import java.util.StringJoiner;
import org.bukkit.NamespacedKey;
import org.bukkit.entity.Mob;
@@ -36,13 +36,13 @@ public final class GoalKey<T extends Mob> {
if (this == o) return true;
if (o == null || this.getClass() != o.getClass()) return false;
GoalKey<?> goalKey = (GoalKey<?>) o;
return Objects.equal(this.entityClass, goalKey.entityClass) &&
Objects.equal(this.namespacedKey, goalKey.namespacedKey);
return Objects.equals(this.entityClass, goalKey.entityClass) &&
Objects.equals(this.namespacedKey, goalKey.namespacedKey);
}
@Override
public int hashCode() {
return Objects.hashCode(this.entityClass, this.namespacedKey);
return Objects.hash(this.entityClass, this.namespacedKey);
}
@Override

View File

@@ -24,8 +24,8 @@ public class BeaconEffectEvent extends BlockEvent implements Cancellable {
private boolean cancelled;
@ApiStatus.Internal
public BeaconEffectEvent(final Block block, final PotionEffect effect, final Player player, final boolean primary) {
super(block);
public BeaconEffectEvent(final Block beacon, final PotionEffect effect, final Player player, final boolean primary) {
super(beacon);
this.effect = effect;
this.player = player;
this.primary = primary;

View File

@@ -11,7 +11,7 @@ import org.jspecify.annotations.NullMarked;
/**
* Fired anytime the server intends to 'destroy' a block through some triggering reason.
* This does not fire anytime a block is set to air, but only with more direct triggers such
* as physics updates, pistons, Entities changing blocks, commands set to "Destroy".
* as physics updates, pistons, entities changing blocks, commands set to "Destroy".
* <p>
* This event is associated with the game playing a sound effect at the block in question, when
* something can be described as "intend to destroy what is there",
@@ -39,7 +39,7 @@ public class BlockDestroyEvent extends BlockExpEvent implements Cancellable {
}
/**
* Get the effect that will be played when the block is broken.
* Gets the effect that will be played when the block is broken.
*
* @return block break effect
*/

View File

@@ -33,8 +33,8 @@ public class TNTPrimeEvent extends BlockEvent implements Cancellable {
private boolean cancelled;
@ApiStatus.Internal
public TNTPrimeEvent(@NotNull Block theBlock, @NotNull PrimeReason reason, @Nullable Entity primerEntity) {
super(theBlock);
public TNTPrimeEvent(@NotNull Block block, @NotNull PrimeReason reason, @Nullable Entity primerEntity) {
super(block);
this.reason = reason;
this.primerEntity = primerEntity;
}

View File

@@ -50,32 +50,6 @@ public class PlayerHandshakeEvent extends Event implements Cancellable {
this.cancelled = cancelled;
}
/**
* Determines if this event is cancelled.
* <p>
* When this event is cancelled, custom handshake logic will not
* be processed.
*
* @return {@code true} if this event is cancelled, {@code false} otherwise
*/
@Override
public boolean isCancelled() {
return this.cancelled;
}
/**
* Sets if this event is cancelled.
* <p>
* When this event is cancelled, custom handshake logic will not
* be processed.
*
* @param cancel {@code true} if this event is cancelled, {@code false} otherwise
*/
@Override
public void setCancelled(final boolean cancel) {
this.cancelled = cancel;
}
/**
* Gets the original handshake string.
*
@@ -246,6 +220,32 @@ public class PlayerHandshakeEvent extends Event implements Cancellable {
this.failMessage(LegacyComponentSerializer.legacySection().deserialize(failMessage));
}
/**
* Determines if this event is cancelled.
* <p>
* When this event is cancelled, custom handshake logic will not
* be processed.
*
* @return {@code true} if this event is cancelled, {@code false} otherwise
*/
@Override
public boolean isCancelled() {
return this.cancelled;
}
/**
* Sets if this event is cancelled.
* <p>
* When this event is cancelled, custom handshake logic will not
* be processed.
*
* @param cancel {@code true} if this event is cancelled, {@code false} otherwise
*/
@Override
public void setCancelled(final boolean cancel) {
this.cancelled = cancel;
}
@Override
public HandlerList getHandlers() {
return HANDLER_LIST;

View File

@@ -37,7 +37,7 @@ public class PlayerJumpEvent extends PlayerEvent implements Cancellable {
/**
* {@inheritDoc}
* <p>
* If a jump event is cancelled, the player will be moved or
* If this event is cancelled, the player will be moved or
* teleported back to the Location as defined by {@link #getFrom()}. This will not
* fire an event
*
@@ -51,7 +51,7 @@ public class PlayerJumpEvent extends PlayerEvent implements Cancellable {
/**
* {@inheritDoc}
* <p>
* If a jump event is cancelled, the player will be moved or
* If this event is cancelled, the player will be moved or
* teleported back to the Location as defined by {@link #getFrom()}. This will not
* fire an event
*

View File

@@ -109,7 +109,7 @@ public class PlayerSetSpawnEvent extends PlayerEvent implements Cancellable {
/**
* Gets the notification message that will be sent to the player
* if {@link #willNotifyPlayer()} returns true.
* if {@link #willNotifyPlayer()} returns {@code true}.
*
* @return {@code null} if no notification
*/

View File

@@ -21,7 +21,7 @@ public interface NetworkClient {
* Returns the protocol version of the client.
*
* @return The client's protocol version, or {@code -1} if unknown
* @see <a href="http://wiki.vg/Protocol_version_numbers">List of protocol
* @see <a href="https://minecraft.wiki/w/Minecraft_Wiki:Projects/wiki.vg_merge/Protocol_version_numbers">List of protocol
* version numbers</a>
*/
int getProtocolVersion();

View File

@@ -1,6 +1,7 @@
package io.papermc.paper;
import net.kyori.adventure.util.Services;
import org.bukkit.block.Biome;
import org.bukkit.damage.DamageEffect;
import org.jetbrains.annotations.ApiStatus;
import org.jspecify.annotations.NullMarked;
@@ -35,5 +36,14 @@ public interface InternalAPIBridge {
* @return the damage effect.
*/
DamageEffect getDamageEffect(String key);
/**
* Constructs the legacy custom biome instance for the biome enum.
*
* @return the created biome.
*/
@Deprecated(forRemoval = true, since = "1.21.5")
@ApiStatus.ScheduledForRemoval(inVersion = "1.22")
Biome constructLegacyCustomBiome();
}

View File

@@ -5,7 +5,7 @@ import org.bukkit.block.Lockable;
import org.bukkit.block.TileState;
/**
* Interface for tile entities that are lockable.
* Interface for block entities that are lockable.
*/
public interface LockableTileState extends TileState, Lockable, Nameable {
}

View File

@@ -9,6 +9,7 @@ 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}.

View File

@@ -0,0 +1,48 @@
package io.papermc.paper.datacomponent;
import org.bukkit.Utility;
import org.bukkit.persistence.PersistentDataContainer;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
import org.jspecify.annotations.NullMarked;
/**
* This represents an object capable of holding and mutating data components.
*
* @see PersistentDataContainer
*/
@NullMarked
@ApiStatus.NonExtendable
public interface DataComponentHolder extends DataComponentView {
/**
* Sets the value of the data component type for this holder.
*
* @param type the data component type
* @param valueBuilder value builder
* @param <T> value type
*/
@Utility
@org.jetbrains.annotations.ApiStatus.Experimental
public <T> void setData(final io.papermc.paper.datacomponent.DataComponentType.@NotNull Valued<T> type, final @NotNull io.papermc.paper.datacomponent.DataComponentBuilder<T> valueBuilder);
/**
* Sets the value of the data component type for this holder.
*
* @param type the data component type
* @param value value to set
* @param <T> value type
*/
@org.jetbrains.annotations.ApiStatus.Experimental
public <T> void setData(final io.papermc.paper.datacomponent.DataComponentType.@NotNull Valued<T> type, final @NotNull T value);
/**
* Marks this non-valued data component type as present in this itemstack.
*
* @param type the data component type
*/
@org.jetbrains.annotations.ApiStatus.Experimental
public void setData(final io.papermc.paper.datacomponent.DataComponentType.@NotNull NonValued type);
// TODO: Do we even want to have the concept of overriding here? Not sure what is going on with entity components
}

View File

@@ -2,6 +2,7 @@ package io.papermc.paper.datacomponent;
import io.papermc.paper.datacomponent.item.BannerPatternLayers;
import io.papermc.paper.datacomponent.item.BlockItemDataProperties;
import io.papermc.paper.datacomponent.item.BlocksAttacks;
import io.papermc.paper.datacomponent.item.BundleContents;
import io.papermc.paper.datacomponent.item.ChargedProjectiles;
import io.papermc.paper.datacomponent.item.Consumable;
@@ -32,21 +33,42 @@ import io.papermc.paper.datacomponent.item.ResolvableProfile;
import io.papermc.paper.datacomponent.item.SeededContainerLoot;
import io.papermc.paper.datacomponent.item.SuspiciousStewEffects;
import io.papermc.paper.datacomponent.item.Tool;
import io.papermc.paper.datacomponent.item.Unbreakable;
import io.papermc.paper.datacomponent.item.TooltipDisplay;
import io.papermc.paper.datacomponent.item.UseCooldown;
import io.papermc.paper.datacomponent.item.UseRemainder;
import io.papermc.paper.datacomponent.item.Weapon;
import io.papermc.paper.datacomponent.item.WritableBookContent;
import io.papermc.paper.datacomponent.item.WrittenBookContent;
import io.papermc.paper.item.MapPostProcessing;
import java.util.List;
import io.papermc.paper.registry.tag.TagKey;
import net.kyori.adventure.key.Key;
import net.kyori.adventure.text.Component;
import org.bukkit.Art;
import org.bukkit.DyeColor;
import org.bukkit.FireworkEffect;
import org.bukkit.MusicInstrument;
import org.bukkit.NamespacedKey;
import org.bukkit.Registry;
import org.bukkit.block.banner.PatternType;
import org.bukkit.entity.Axolotl;
import org.bukkit.entity.Cat;
import org.bukkit.entity.Chicken;
import org.bukkit.entity.Cow;
import org.bukkit.entity.Fox;
import org.bukkit.entity.Frog;
import org.bukkit.entity.Horse;
import org.bukkit.entity.Llama;
import org.bukkit.entity.MushroomCow;
import org.bukkit.entity.Parrot;
import org.bukkit.entity.Pig;
import org.bukkit.entity.Rabbit;
import org.bukkit.entity.Salmon;
import org.bukkit.entity.TropicalFish;
import org.bukkit.entity.Villager;
import org.bukkit.entity.Wolf;
import org.bukkit.inventory.ItemRarity;
import org.bukkit.inventory.meta.trim.TrimMaterial;
import org.checkerframework.checker.index.qual.NonNegative;
import org.checkerframework.checker.index.qual.Positive;
import org.checkerframework.common.value.qual.IntRange;
@@ -88,7 +110,7 @@ public final class DataComponentTypes {
/**
* If set, the item will not lose any durability when used.
*/
public static final DataComponentType.Valued<Unbreakable> UNBREAKABLE = valued("unbreakable");
public static final DataComponentType.NonValued UNBREAKABLE = unvalued("unbreakable");
/**
* Custom name override for an item (as set by renaming with an Anvil).
*
@@ -144,15 +166,7 @@ public final class DataComponentTypes {
* Controls the minecraft:custom_model_data property in the item model.
*/
public static final DataComponentType.Valued<CustomModelData> CUSTOM_MODEL_DATA = valued("custom_model_data");
/**
* If set, disables 'additional' tooltip part which comes from the item type
* (e.g. content of a shulker).
*/
public static final DataComponentType.NonValued HIDE_ADDITIONAL_TOOLTIP = unvalued("hide_additional_tooltip");
/**
* If set, it will completely hide whole item tooltip (that includes item name).
*/
public static final DataComponentType.NonValued HIDE_TOOLTIP = unvalued("hide_tooltip");
public static final DataComponentType.Valued<TooltipDisplay> TOOLTIP_DISPLAY = valued("tooltip_display");
/**
* The additional experience cost required to modify an item in an Anvil.
* If not present, has an implicit default value of: {@code 0}.
@@ -188,12 +202,14 @@ public final class DataComponentTypes {
* Controls the behavior of the item as a tool.
*/
public static final DataComponentType.Valued<Tool> TOOL = valued("tool");
public static final DataComponentType.Valued<Weapon> WEAPON = valued("weapon");
public static final DataComponentType.Valued<Enchantable> ENCHANTABLE = valued("enchantable");
public static final DataComponentType.Valued<Equippable> EQUIPPABLE = valued("equippable");
public static final DataComponentType.Valued<Repairable> REPAIRABLE = valued("repairable");
public static final DataComponentType.NonValued GLIDER = unvalued("glider");
public static final DataComponentType.Valued<Key> TOOLTIP_STYLE = valued("tooltip_style");
public static final DataComponentType.Valued<DeathProtection> DEATH_PROTECTION = valued("death_protection");
public static final DataComponentType.Valued<BlocksAttacks> BLOCKS_ATTACKS = valued("blocks_attacks");
/**
* Stores list of enchantments and their levels for an Enchanted Book.
* Unlike {@link #ENCHANTMENTS}, the effects provided by enchantments
@@ -243,6 +259,7 @@ public final class DataComponentTypes {
* or potion applied to a Tipped Arrow.
*/
public static final DataComponentType.Valued<PotionContents> POTION_CONTENTS = valued("potion_contents");
public static final DataComponentType.Valued<Float> POTION_DURATION_SCALE = valued("potion_duration_scale");
/**
* Holds the effects that will be applied when consuming Suspicious Stew.
*/
@@ -267,11 +284,14 @@ public final class DataComponentTypes {
* Holds the instrument type used by a Goat Horn.
*/
public static final DataComponentType.Valued<MusicInstrument> INSTRUMENT = valued("instrument");
// this is a either holder, but due to legacy item loading
public static final DataComponentType.Valued<TrimMaterial> PROVIDES_TRIM_MATERIAL = valued("provides_trim_material");
/**
* Controls the amplifier amount for an Ominous Bottle's Bad Omen effect.
*/
public static final DataComponentType.Valued<OminousBottleAmplifier> OMINOUS_BOTTLE_AMPLIFIER = valued("ominous_bottle_amplifier");
public static final DataComponentType.Valued<JukeboxPlayable> JUKEBOX_PLAYABLE = valued("jukebox_playable");
public static final DataComponentType.Valued<TagKey<PatternType>> PROVIDES_BANNER_PATTERNS = valued("provides_banner_patterns");
/**
* List of recipes that should be unlocked when using the Knowledge Book item.
*/
@@ -329,14 +349,50 @@ public final class DataComponentTypes {
* Holds the unresolved loot table and seed of a container-like block.
*/
public static final DataComponentType.Valued<SeededContainerLoot> CONTAINER_LOOT = valued("container_loot");
public static final DataComponentType.Valued<Key> BREAK_SOUND = valued("break_sound");
public static final DataComponentType.Valued<Villager.Type> VILLAGER_VARIANT = valued("villager/variant");
public static final DataComponentType.Valued<Wolf.Variant> WOLF_VARIANT = valued("wolf/variant");
public static final DataComponentType.Valued<Wolf.SoundVariant> WOLF_SOUND_VARIANT = valued("wolf/sound_variant");
public static final DataComponentType.Valued<DyeColor> WOLF_COLLAR = valued("wolf/collar");
public static final DataComponentType.Valued<Fox.Type> FOX_VARIANT = valued("fox/variant");
public static final DataComponentType.Valued<Salmon.Variant> SALMON_SIZE = valued("salmon/size");
public static final DataComponentType.Valued<Parrot.Variant> PARROT_VARIANT = valued("parrot/variant");
public static final DataComponentType.Valued<TropicalFish.Pattern> TROPICAL_FISH_PATTERN = valued("tropical_fish/pattern");
public static final DataComponentType.Valued<DyeColor> TROPICAL_FISH_BASE_COLOR = valued("tropical_fish/base_color");
public static final DataComponentType.Valued<DyeColor> TROPICAL_FISH_PATTERN_COLOR = valued("tropical_fish/pattern_color");
public static final DataComponentType.Valued<MushroomCow.Variant> MOOSHROOM_VARIANT = valued("mooshroom/variant");
public static final DataComponentType.Valued<Rabbit.Type> RABBIT_VARIANT = valued("rabbit/variant");
public static final DataComponentType.Valued<Pig.Variant> PIG_VARIANT = valued("pig/variant");
public static final DataComponentType.Valued<Cow.Variant> COW_VARIANT = valued("cow/variant");
// TODO: This is a eitherholder? Why specifically the chicken?? Oh wait this is prolly for chicken egg cause legacy item loading
public static final DataComponentType.Valued<Chicken.Variant> CHICKEN_VARIANT = valued("chicken/variant");
public static final DataComponentType.Valued<Frog.Variant> FROG_VARIANT = valued("frog/variant");
public static final DataComponentType.Valued<Horse.Style> HORSE_VARIANT = valued("horse/variant");
public static final DataComponentType.Valued<Art> PAINTING_VARIANT = valued("painting/variant");
public static final DataComponentType.Valued<Llama.Color> LLAMA_VARIANT = valued("llama/variant");
public static final DataComponentType.Valued<Axolotl.Variant> AXOLOTL_VARIANT = valued("axolotl/variant");
public static final DataComponentType.Valued<Cat.Type> CAT_VARIANT = valued("cat/variant");
public static final DataComponentType.Valued<DyeColor> CAT_COLLAR = valued("cat/collar");
public static final DataComponentType.Valued<DyeColor> SHEEP_COLOR = valued("sheep/color");
public static final DataComponentType.Valued<DyeColor> SHULKER_COLOR = valued("shulker/color");
private static DataComponentType.NonValued unvalued(final String name) {
return (DataComponentType.NonValued) requireNonNull(Registry.DATA_COMPONENT_TYPE.get(NamespacedKey.minecraft(name)), name + " unvalued data component type couldn't be found, this is a bug.");
final DataComponentType dataComponentType = requireNonNull(Registry.DATA_COMPONENT_TYPE.get(NamespacedKey.minecraft(name)), name + " unvalued data component type couldn't be found, this is a bug.");
if (dataComponentType instanceof DataComponentType.NonValued) {
return (DataComponentType.NonValued) dataComponentType;
}
throw new IllegalStateException(name + " is not a valid unvalued type, it is a " + dataComponentType.getClass().getTypeName());
}
@SuppressWarnings("unchecked")
private static <T> DataComponentType.Valued<T> valued(final String name) {
return (DataComponentType.Valued<T>) requireNonNull(Registry.DATA_COMPONENT_TYPE.get(NamespacedKey.minecraft(name)), name + " valued data component type couldn't be found, this is a bug.");
DataComponentType dataComponentType = requireNonNull(Registry.DATA_COMPONENT_TYPE.get(NamespacedKey.minecraft(name)), name + " valued data component type couldn't be found, this is a bug.");
if (dataComponentType instanceof DataComponentType.Valued) {
return (DataComponentType.Valued<T>) dataComponentType;
}
throw new IllegalStateException(name + " is not a valid valued type, it is a " + dataComponentType.getClass().getTypeName());
}
private DataComponentTypes() {

View File

@@ -0,0 +1,65 @@
package io.papermc.paper.datacomponent;
import org.bukkit.Utility;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jspecify.annotations.NullMarked;
/**
* This represents a view of a data component holder. No
* methods on this interface mutate the holder.
*
* @see DataComponentHolder
*/
@NullMarked
@ApiStatus.NonExtendable
public interface DataComponentView {
// Paper start - data component API
/**
* Gets the value for the data component type on this stack.
*
* @param type the data component type
* @param <T> the value type
* @return the value for the data component type, or {@code null} if not set or marked as removed
* @see #hasData(io.papermc.paper.datacomponent.DataComponentType) for DataComponentType.NonValued
*/
@Contract(pure = true)
@ApiStatus.Experimental
public <T> @Nullable T getData(final DataComponentType.@NotNull Valued<T> type);
/**
* Gets the value for the data component type on this holder with
* a fallback value.
*
* @param type the data component type
* @param fallback the fallback value if the value isn't present
* @param <T> the value type
* @return the value for the data component type or the fallback value
*/
@Utility
@Contract(value = "_, !null -> !null", pure = true)
@ApiStatus.Experimental
public <T> @Nullable T getDataOrDefault(final DataComponentType.@NotNull Valued<? extends T> type, final @Nullable T fallback);
/**
* Checks if the data component type is set on this holder.
*
* @param type the data component type
* @return {@code true} if set, {@code false} otherwise
*/
@Contract(pure = true)
@ApiStatus.Experimental
boolean hasData(final io.papermc.paper.datacomponent.@NotNull DataComponentType type);
// Not applicable to entities
// /**
// * Gets all the data component types set on this holder.
// *
// * @return an immutable set of data component types
// */
// @Contract("-> new")
// @ApiStatus.Experimental
// java.util.@Unmodifiable Set<io.papermc.paper.datacomponent.@NotNull DataComponentType> getDataTypes();
}

View File

@@ -0,0 +1,68 @@
package io.papermc.paper.datacomponent.item;
import io.papermc.paper.datacomponent.DataComponentBuilder;
import io.papermc.paper.registry.tag.TagKey;
import net.kyori.adventure.key.Key;
import org.bukkit.damage.DamageType;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.Contract;
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;
// TODO
@NullMarked
@ApiStatus.Experimental
@ApiStatus.NonExtendable
public interface BlocksAttacks {
@Contract(value = "-> new", pure = true)
static Builder blocksAttacks() {
return ItemComponentTypesBridge.bridge().blocksAttacks();
}
float blockDelaySeconds();
float disableCooldownScale();
//List<DamageReduction> damageReductions();
//ItemDamageFunction itemDamage();
@Nullable TagKey<DamageType> bypassedBy();
@Nullable Key blockSound();
@Nullable Key disableSound();
/**
* Builder for {@link BlocksAttacks}.
*/
@ApiStatus.Experimental
@ApiStatus.NonExtendable
interface Builder extends DataComponentBuilder<BlocksAttacks> {
@Contract(value = "_ -> this", mutates = "this")
Builder blockDelaySeconds(float delay);
@Contract(value = "_ -> this", mutates = "this")
Builder disableCooldownScale(float scale);
//@Contract(value = "_ -> this", mutates = "this")
//Builder addDamageReduction(DamageReduction reduction);
//@Contract(value = "_ -> this", mutates = "this")
//Builder damageReductions(List<DamageReduction> reductions);
//@Contract(value = "_ -> this", mutates = "this")
//Builder itemDamage(ItemDamageFunction function);
@Contract(value = "_ -> this", mutates = "this")
Builder bypassedBy(@Nullable TagKey<DamageType> bypassedBy);
@Contract(value = "_ -> this", mutates = "this")
Builder blockSound(@Nullable Key sound);
@Contract(value = "_ -> this", mutates = "this")
Builder disableSound(@Nullable Key sound);
}
}

View File

@@ -13,11 +13,11 @@ import org.jspecify.annotations.NullMarked;
@NullMarked
@ApiStatus.Experimental
@ApiStatus.NonExtendable
public interface DyedItemColor extends ShownInTooltip<DyedItemColor> {
public interface DyedItemColor {
@Contract(value = "_, _ -> new", pure = true)
static DyedItemColor dyedItemColor(final Color color, final boolean showInTooltip) {
return dyedItemColor().color(color).showInTooltip(showInTooltip).build();
static DyedItemColor dyedItemColor(final Color color) {
return dyedItemColor().color(color).build();
}
@Contract(value = "-> new", pure = true)
@@ -38,7 +38,7 @@ public interface DyedItemColor extends ShownInTooltip<DyedItemColor> {
*/
@ApiStatus.Experimental
@ApiStatus.NonExtendable
interface Builder extends ShownInTooltip.Builder<Builder>, DataComponentBuilder<DyedItemColor> {
interface Builder extends DataComponentBuilder<DyedItemColor> {
/**
* Sets the color of this builder.

View File

@@ -96,6 +96,14 @@ public interface Equippable extends BuildableDataComponent<Equippable, Equippabl
@Contract(pure = true)
boolean damageOnHurt();
/**
* Checks if the item should be equipped when interacting with an entity.
*
* @return true if it equips on interact, false otherwise
*/
@Contract(pure = true)
boolean equipOnInteract();
/**
* Builder for {@link Equippable}.
*/
@@ -165,5 +173,14 @@ public interface Equippable extends BuildableDataComponent<Equippable, Equippabl
*/
@Contract(value = "_ -> this", mutates = "this")
Builder damageOnHurt(boolean damageOnHurt);
/**
* Sets whether the item should be equipped when interacting with an entity.
*
* @param equipOnInteract true if it equips on interact
* @return the builder for chaining
*/
@Contract(value = "_ -> this", mutates = "this")
Builder equipOnInteract(boolean equipOnInteract);
}
}

View File

@@ -1,6 +1,7 @@
package io.papermc.paper.datacomponent.item;
import io.papermc.paper.block.BlockPredicate;
import io.papermc.paper.datacomponent.BuildableDataComponent;
import io.papermc.paper.datacomponent.DataComponentBuilder;
import java.util.List;
import org.jetbrains.annotations.ApiStatus;
@@ -16,7 +17,7 @@ import org.jspecify.annotations.NullMarked;
@NullMarked
@ApiStatus.Experimental
@ApiStatus.NonExtendable
public interface ItemAdventurePredicate extends ShownInTooltip<ItemAdventurePredicate> {
public interface ItemAdventurePredicate {
@Contract(value = "_ -> new", pure = true)
static ItemAdventurePredicate itemAdventurePredicate(final List<BlockPredicate> predicates) {
@@ -41,7 +42,7 @@ public interface ItemAdventurePredicate extends ShownInTooltip<ItemAdventurePred
*/
@ApiStatus.Experimental
@ApiStatus.NonExtendable
interface Builder extends ShownInTooltip.Builder<Builder>, DataComponentBuilder<ItemAdventurePredicate> {
interface Builder extends DataComponentBuilder<ItemAdventurePredicate> {
/**
* Adds a block predicate to this builder.
*

View File

@@ -13,12 +13,7 @@ import org.jspecify.annotations.NullMarked;
@NullMarked
@ApiStatus.Experimental
@ApiStatus.NonExtendable
public interface ItemArmorTrim extends ShownInTooltip<ItemArmorTrim> {
@Contract(value = "_, _ -> new", pure = true)
static ItemArmorTrim itemArmorTrim(final ArmorTrim armorTrim, final boolean showInTooltip) {
return itemArmorTrim(armorTrim).showInTooltip(showInTooltip).build();
}
public interface ItemArmorTrim {
@Contract(value = "_ -> new", pure = true)
static ItemArmorTrim.Builder itemArmorTrim(final ArmorTrim armorTrim) {
@@ -38,7 +33,7 @@ public interface ItemArmorTrim extends ShownInTooltip<ItemArmorTrim> {
*/
@ApiStatus.Experimental
@ApiStatus.NonExtendable
interface Builder extends ShownInTooltip.Builder<Builder>, DataComponentBuilder<ItemArmorTrim> {
interface Builder extends DataComponentBuilder<ItemArmorTrim> {
/**
* Sets the armor trim for this builder.

View File

@@ -17,7 +17,7 @@ import org.jspecify.annotations.NullMarked;
@NullMarked
@ApiStatus.Experimental
@ApiStatus.NonExtendable
public interface ItemAttributeModifiers extends ShownInTooltip<ItemAttributeModifiers> {
public interface ItemAttributeModifiers {
@Contract(value = "-> new", pure = true)
static ItemAttributeModifiers.Builder itemAttributes() {
@@ -69,7 +69,7 @@ public interface ItemAttributeModifiers extends ShownInTooltip<ItemAttributeModi
*/
@ApiStatus.Experimental
@ApiStatus.NonExtendable
interface Builder extends ShownInTooltip.Builder<Builder>, DataComponentBuilder<ItemAttributeModifiers> {
interface Builder extends DataComponentBuilder<ItemAttributeModifiers> {
/**
* Adds a modifier to this builder.

View File

@@ -34,8 +34,6 @@ interface ItemComponentTypesBridge {
PotDecorations.Builder potDecorations();
Unbreakable.Builder unbreakable();
ItemLore.Builder lore();
ItemEnchantments.Builder enchantments();
@@ -109,4 +107,10 @@ interface ItemComponentTypesBridge {
DeathProtection.Builder deathProtection();
OminousBottleAmplifier ominousBottleAmplifier(int amplifier);
BlocksAttacks.Builder blocksAttacks();
TooltipDisplay.Builder tooltipDisplay();
Weapon.Builder weapon();
}

View File

@@ -17,11 +17,11 @@ import org.jspecify.annotations.NullMarked;
@NullMarked
@ApiStatus.Experimental
@ApiStatus.NonExtendable
public interface ItemEnchantments extends ShownInTooltip<ItemEnchantments> {
public interface ItemEnchantments {
@Contract(value = "_, _ -> new", pure = true)
static ItemEnchantments itemEnchantments(final Map<Enchantment, @IntRange(from = 1, to = 255) Integer> enchantments, final boolean showInTooltip) {
return itemEnchantments().addAll(enchantments).showInTooltip(showInTooltip).build();
static ItemEnchantments itemEnchantments(final Map<Enchantment, @IntRange(from = 1, to = 255) Integer> enchantments) {
return itemEnchantments().addAll(enchantments).build();
}
@Contract(value = "-> new", pure = true)
@@ -42,7 +42,7 @@ public interface ItemEnchantments extends ShownInTooltip<ItemEnchantments> {
*/
@ApiStatus.Experimental
@ApiStatus.NonExtendable
interface Builder extends ShownInTooltip.Builder<Builder>, DataComponentBuilder<ItemEnchantments> {
interface Builder extends DataComponentBuilder<ItemEnchantments> {
/**
* Adds an enchantment with the given level to this component.

View File

@@ -13,7 +13,7 @@ import org.jspecify.annotations.NullMarked;
@NullMarked
@ApiStatus.Experimental
@ApiStatus.NonExtendable
public interface JukeboxPlayable extends ShownInTooltip<JukeboxPlayable> {
public interface JukeboxPlayable {
@Contract(value = "_ -> new", pure = true)
static JukeboxPlayable.Builder jukeboxPlayable(final JukeboxSong song) {
@@ -28,7 +28,7 @@ public interface JukeboxPlayable extends ShownInTooltip<JukeboxPlayable> {
*/
@ApiStatus.Experimental
@ApiStatus.NonExtendable
interface Builder extends ShownInTooltip.Builder<JukeboxPlayable.Builder>, DataComponentBuilder<JukeboxPlayable> {
interface Builder extends DataComponentBuilder<JukeboxPlayable> {
/**
* Sets the jukebox song.

View File

@@ -1,55 +0,0 @@
package io.papermc.paper.datacomponent.item;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.Contract;
import org.jspecify.annotations.NullMarked;
/**
* Holds the state of whether a data component should be shown
* in an item's tooltip.
*
* @param <T> the data component type
*/
@NullMarked
@ApiStatus.Experimental
@ApiStatus.NonExtendable
public interface ShownInTooltip<T> {
/**
* Gets if the data component should be shown in the item's tooltip.
*
* @return {@code true} to show in the tooltip
*/
@Contract(pure = true)
boolean showInTooltip();
/**
* Returns a copy of this data component with the specified
* show-in-tooltip state.
*
* @param showInTooltip {@code true} to show in the tooltip
* @return the new data component
*/
@Contract(value = "_ -> new", pure = true)
T showInTooltip(boolean showInTooltip);
/**
* A builder for creating a {@link ShownInTooltip} data component.
*
* @param <B> builder type
*/
@ApiStatus.Experimental
@ApiStatus.NonExtendable
interface Builder<B> {
/**
* Sets if the data component should be shown in the item's tooltip.
*
* @param showInTooltip {@code true} to show in the tooltip
* @return the builder for chaining
* @see #showInTooltip()
*/
@Contract(value = "_ -> this", mutates = "this")
B showInTooltip(boolean showInTooltip);
}
}

View File

@@ -71,6 +71,14 @@ public interface Tool {
@Contract(pure = true)
@Unmodifiable List<Tool.Rule> rules();
/**
* Whether this tool can destroy blocks in creative mode.
*
* @return whether this tool can destroy blocks in creative mode
*/
@Contract(pure = true)
boolean canDestroyBlocksInCreative();
@ApiStatus.Experimental
@ApiStatus.NonExtendable
interface Rule {
@@ -136,6 +144,16 @@ public interface Tool {
@Contract(value = "_ -> this", mutates = "this")
Builder addRule(Rule rule);
/**
* Controls whether this tool can destroy blocks in creative mode.
*
* @param canDestroyBlocksInCreative whether this tool can destroy blocks in creative mode
* @return the builder for chaining
* @see #canDestroyBlocksInCreative()
*/
@Contract(value = "_ -> this", mutates = "this")
Builder canDestroyBlocksInCreative(boolean canDestroyBlocksInCreative);
/**
* Adds rules to the tool that control the breaking speed / damage per block if matched.
*

View File

@@ -0,0 +1,46 @@
package io.papermc.paper.datacomponent.item;
import io.papermc.paper.datacomponent.DataComponentBuilder;
import io.papermc.paper.datacomponent.DataComponentType;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.Contract;
import org.jspecify.annotations.NullMarked;
import java.util.Set;
@NullMarked
@ApiStatus.Experimental
@ApiStatus.NonExtendable
public interface TooltipDisplay {
/**
* Returns a new builder for creating a TooltipDisplay.
*
* @return a builder
*/
@Contract(value = "-> new", pure = true)
static Builder tooltipDisplay() {
return ItemComponentTypesBridge.bridge().tooltipDisplay();
}
boolean hideTooltip();
Set<DataComponentType> hiddenComponents();
/**
* Builder for {@link TooltipDisplay}.
*/
@ApiStatus.Experimental
@ApiStatus.NonExtendable
interface Builder extends DataComponentBuilder<TooltipDisplay> {
@Contract(value = "_ -> this", mutates = "this")
Builder hideTooltip(boolean hide);
@Contract(value = "_ -> this", mutates = "this")
Builder addHiddenComponents(DataComponentType... components);
@Contract(value = "_ -> this", mutates = "this")
Builder hiddenComponents(Set<DataComponentType> components);
}
}

View File

@@ -1,34 +0,0 @@
package io.papermc.paper.datacomponent.item;
import io.papermc.paper.datacomponent.DataComponentBuilder;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.Contract;
import org.jspecify.annotations.NullMarked;
/**
* If set, the item will not lose any durability when used.
* @see io.papermc.paper.datacomponent.DataComponentTypes#UNBREAKABLE
*/
@NullMarked
@ApiStatus.Experimental
@ApiStatus.NonExtendable
public interface Unbreakable extends ShownInTooltip<Unbreakable> {
@Contract(value = "_ -> new", pure = true)
static Unbreakable unbreakable(final boolean showInTooltip) {
return unbreakable().showInTooltip(showInTooltip).build();
}
@Contract(value = "-> new", pure = true)
static Unbreakable.Builder unbreakable() {
return ItemComponentTypesBridge.bridge().unbreakable();
}
/**
* Builder for {@link Unbreakable}.
*/
@ApiStatus.Experimental
@ApiStatus.NonExtendable
interface Builder extends ShownInTooltip.Builder<Builder>, DataComponentBuilder<Unbreakable> {
}
}

View File

@@ -0,0 +1,54 @@
package io.papermc.paper.datacomponent.item;
import io.papermc.paper.datacomponent.DataComponentBuilder;
import org.jetbrains.annotations.ApiStatus;
import org.jspecify.annotations.NullMarked;
@NullMarked
@ApiStatus.Experimental
@ApiStatus.NonExtendable
public interface Weapon {
/**
* Returns a new builder for creating a Weapon.
*
* @return a builder instance.
*/
static Builder weapon() {
return ItemComponentTypesBridge.bridge().weapon();
}
/**
* The damage that the weapon deals per attack.
*/
int itemDamagePerAttack();
/**
* The number of seconds that blocking is disabled.
*/
float disableBlockingForSeconds();
/**
* Builder for {@link Weapon}.
*/
@ApiStatus.Experimental
@ApiStatus.NonExtendable
interface Builder extends DataComponentBuilder<Weapon> {
/**
* Sets the damage per attack.
*
* @param damage the damage value.
* @return the builder for chaining.
*/
Builder itemDamagePerAttack(int damage);
/**
* Sets the disable blocking duration (in seconds).
*
* @param seconds the duration in seconds.
* @return the builder for chaining.
*/
Builder disableBlockingForSeconds(float seconds);
}
}

View File

@@ -4,6 +4,8 @@ package io.papermc.paper.datacomponent.item.consumable;
* Represents the hand animation that is used when a player is consuming this item.
*/
public enum ItemUseAnimation {
// Start generate - ItemUseAnimation
// @GeneratedFrom 1.21.5
NONE,
EAT,
DRINK,
@@ -14,5 +16,6 @@ public enum ItemUseAnimation {
SPYGLASS,
TOOT_HORN,
BRUSH,
BUNDLE
BUNDLE;
// End generate - ItemUseAnimation
}

View File

@@ -17,8 +17,8 @@ public class BeaconActivatedEvent extends BlockEvent {
private static final HandlerList HANDLER_LIST = new HandlerList();
@ApiStatus.Internal
public BeaconActivatedEvent(final Block block) {
super(block);
public BeaconActivatedEvent(final Block beacon) {
super(beacon);
}
/**

View File

@@ -18,8 +18,8 @@ public class BeaconDeactivatedEvent extends BlockEvent {
private static final HandlerList HANDLER_LIST = new HandlerList();
@ApiStatus.Internal
public BeaconDeactivatedEvent(final Block block) {
super(block);
public BeaconDeactivatedEvent(final Block beacon) {
super(beacon);
}
/**

View File

@@ -22,8 +22,8 @@ public class BellRevealRaiderEvent extends BlockEvent implements Cancellable {
private boolean cancelled;
@ApiStatus.Internal
public BellRevealRaiderEvent(@NotNull Block theBlock, @NotNull Raider raider) {
super(theBlock);
public BellRevealRaiderEvent(@NotNull Block bell, @NotNull Raider raider) {
super(bell);
this.raider = raider;
}

View File

@@ -17,8 +17,8 @@ public class BlockFailedDispenseEvent extends BlockEvent {
private boolean shouldPlayEffect = true;
@ApiStatus.Internal
public BlockFailedDispenseEvent(final Block theBlock) {
super(theBlock);
public BlockFailedDispenseEvent(final Block block) {
super(block);
}
/**

View File

@@ -31,7 +31,6 @@ public class EntityFertilizeEggEvent extends EntityEvent implements Cancellable
private static final HandlerList HANDLER_LIST = new HandlerList();
private final LivingEntity mother;
private final LivingEntity father;
private final @Nullable Player breeder;
private final @Nullable ItemStack bredWith;
@@ -42,7 +41,6 @@ public class EntityFertilizeEggEvent extends EntityEvent implements Cancellable
@ApiStatus.Internal
public EntityFertilizeEggEvent(final LivingEntity mother, final LivingEntity father, final @Nullable Player breeder, final @Nullable ItemStack bredWith, final int experience) {
super(mother);
this.mother = mother;
this.father = father;
this.breeder = breeder;
this.bredWith = bredWith;
@@ -61,7 +59,7 @@ public class EntityFertilizeEggEvent extends EntityEvent implements Cancellable
* @return The "mother" entity.
*/
public LivingEntity getMother() {
return this.mother;
return this.getEntity();
}
/**

View File

@@ -39,9 +39,9 @@ public abstract class AbstractChatEvent extends PlayerEvent implements Cancellab
/**
* Gets a set of {@link Audience audiences} that this chat message will be displayed to.
*
* <p>The set returned may auto-populate on access. Any listener accessing the returned set should be aware that
* it may reduce performance for a lazy set implementation.</p>
* <p>
* The set returned may auto-populate on access. Any listener accessing the returned set should be aware that
* it may reduce performance for a lazy set implementation.
*
* @return a mutable set of {@link Audience audiences} who will receive the chat message
*/

View File

@@ -42,7 +42,7 @@ public class AsyncChatDecorateEvent extends ServerEvent implements Cancellable {
* Gets the player (if available) associated with this event.
* <p>
* Certain commands request decorations without a player context
* which is why this is possibly null.
* which is why this is possibly {@code null}.
*
* @return the player or {@code null}
*/

View File

@@ -20,8 +20,8 @@ public class PlayerClientLoadedWorldEvent extends PlayerEvent {
private final boolean timeout;
@ApiStatus.Internal
public PlayerClientLoadedWorldEvent(final Player who, final boolean timeout) {
super(who);
public PlayerClientLoadedWorldEvent(final Player player, final boolean timeout) {
super(player);
this.timeout = timeout;
}

View File

@@ -19,8 +19,11 @@ import org.bukkit.block.banner.PatternType;
import org.bukkit.damage.DamageType;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Cat;
import org.bukkit.entity.Chicken;
import org.bukkit.entity.Cow;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Frog;
import org.bukkit.entity.Pig;
import org.bukkit.entity.Villager;
import org.bukkit.entity.Wolf;
import org.bukkit.entity.memory.MemoryKey;
@@ -79,20 +82,11 @@ public sealed interface RegistryKey<T> extends Keyed permits RegistryKeyImpl {
RegistryKey<BlockType> BLOCK = create("block");
/**
* @apiNote use preferably only in the context of registry entries.
* @see io.papermc.paper.registry.data
* @see io.papermc.paper.registry.keys.ItemTypeKeys
*/
@ApiStatus.Experimental // Paper - already required for registry builders
RegistryKey<ItemType> ITEM = create("item");
/**
* Built-in registry for cat variants.
* @see io.papermc.paper.registry.keys.CatVariantKeys
*/
RegistryKey<Cat.Type> CAT_VARIANT = create("cat_variant");
/**
* Built-in registry for frog variants.
* @see io.papermc.paper.registry.keys.FrogVariantKeys
*/
RegistryKey<Frog.Variant> FROG_VARIANT = create("frog_variant");
/**
* Built-in registry for villager professions.
* @see io.papermc.paper.registry.keys.VillagerProfessionKeys
@@ -130,7 +124,7 @@ public sealed interface RegistryKey<T> extends Keyed permits RegistryKeyImpl {
RegistryKey<Sound> SOUND_EVENT = create("sound_event");
/**
* Built-in registry for data component types.
* <!-- @see io.papermc.paper.registry.keys.DataComponentTypeKeys -->
* @see io.papermc.paper.registry.keys.DataComponentTypeKeys
*/
RegistryKey<DataComponentType> DATA_COMPONENT_TYPE = create("data_component_type");
@@ -169,6 +163,11 @@ public sealed interface RegistryKey<T> extends Keyed permits RegistryKeyImpl {
* @see io.papermc.paper.registry.keys.WolfVariantKeys
*/
RegistryKey<Wolf.Variant> WOLF_VARIANT = create("wolf_variant");
/**
* Data-driven registry for wolf sound variants.
* @see io.papermc.paper.registry.keys.WolfSoundVariantKeys
*/
RegistryKey<Wolf.SoundVariant> WOLF_SOUND_VARIANT = create("wolf_sound_variant");
/**
* Data-driven registry for enchantments.
* @see io.papermc.paper.registry.keys.EnchantmentKeys
@@ -194,6 +193,32 @@ public sealed interface RegistryKey<T> extends Keyed permits RegistryKeyImpl {
* @see io.papermc.paper.registry.keys.InstrumentKeys
*/
RegistryKey<MusicInstrument> INSTRUMENT = create("instrument");
/**
* Data-driven registry for cat variants.
* @see io.papermc.paper.registry.keys.CatVariantKeys
*/
RegistryKey<Cat.Type> CAT_VARIANT = create("cat_variant");
/**
* Data-driven registry for frog variants.
* @see io.papermc.paper.registry.keys.FrogVariantKeys
*/
RegistryKey<Frog.Variant> FROG_VARIANT = create("frog_variant");
/**
* Data-driven registry for chicken variants.
* @see io.papermc.paper.registry.keys.ChickenVariantKeys
*/
RegistryKey<Chicken.Variant> CHICKEN_VARIANT = create("chicken_variant");
/**
* Data-driven registry for cow variants.
* @see io.papermc.paper.registry.keys.CowVariantKeys
*/
RegistryKey<Cow.Variant> COW_VARIANT = create("cow_variant");
/**
* Data-driven registry for pig variants.
* @see io.papermc.paper.registry.keys.PigVariantKeys
*/
RegistryKey<Pig.Variant> PIG_VARIANT = create("pig_variant");
/* ******************* *

View File

@@ -24,11 +24,14 @@ import static io.papermc.paper.registry.event.RegistryEventProviderImpl.create;
@NullMarked
public final class RegistryEvents {
// Start generate - RegistryEvents
// @GeneratedFrom 1.21.5
public static final RegistryEventProvider<GameEvent, GameEventRegistryEntry.Builder> GAME_EVENT = create(RegistryKey.GAME_EVENT);
public static final RegistryEventProvider<Enchantment, EnchantmentRegistryEntry.Builder> ENCHANTMENT = create(RegistryKey.ENCHANTMENT);
public static final RegistryEventProvider<Art, PaintingVariantRegistryEntry.Builder> PAINTING_VARIANT = create(RegistryKey.PAINTING_VARIANT);
public static final RegistryEventProvider<PatternType, BannerPatternRegistryEntry.Builder> BANNER_PATTERN = create(RegistryKey.BANNER_PATTERN);
public static final RegistryEventProvider<DamageType, DamageTypeRegistryEntry.Builder> DAMAGE_TYPE = create(RegistryKey.DAMAGE_TYPE);
public static final RegistryEventProvider<Enchantment, EnchantmentRegistryEntry.Builder> ENCHANTMENT = create(RegistryKey.ENCHANTMENT);
public static final RegistryEventProvider<PatternType, BannerPatternRegistryEntry.Builder> BANNER_PATTERN = create(RegistryKey.BANNER_PATTERN);
public static final RegistryEventProvider<Art, PaintingVariantRegistryEntry.Builder> PAINTING_VARIANT = create(RegistryKey.PAINTING_VARIANT);
// End generate - RegistryEvents
private RegistryEvents() {
}

View File

@@ -35,57 +35,109 @@ public interface Art extends OldEnum<Art>, Keyed {
return InlinedRegistryBuilderProvider.instance().createPaintingVariant(value);
}
Art KEBAB = getArt("kebab");
Art AZTEC = getArt("aztec");
// Start generate - Art
// @GeneratedFrom 1.21.5
Art ALBAN = getArt("alban");
Art AZTEC = getArt("aztec");
Art AZTEC2 = getArt("aztec2");
Art BOMB = getArt("bomb");
Art PLANT = getArt("plant");
Art WASTELAND = getArt("wasteland");
Art POOL = getArt("pool");
Art COURBET = getArt("courbet");
Art SEA = getArt("sea");
Art SUNSET = getArt("sunset");
Art CREEBET = getArt("creebet");
Art WANDERER = getArt("wanderer");
Art GRAHAM = getArt("graham");
Art MATCH = getArt("match");
Art BUST = getArt("bust");
Art STAGE = getArt("stage");
Art VOID = getArt("void");
Art SKULL_AND_ROSES = getArt("skull_and_roses");
Art WITHER = getArt("wither");
Art FIGHTERS = getArt("fighters");
Art POINTER = getArt("pointer");
Art PIGSCENE = getArt("pigscene");
Art BURNING_SKULL = getArt("burning_skull");
Art SKELETON = getArt("skeleton");
Art DONKEY_KONG = getArt("donkey_kong");
Art EARTH = getArt("earth");
Art WIND = getArt("wind");
Art WATER = getArt("water");
Art FIRE = getArt("fire");
Art BAROQUE = getArt("baroque");
Art HUMBLE = getArt("humble");
Art MEDITATIVE = getArt("meditative");
Art PRAIRIE_RIDE = getArt("prairie_ride");
Art UNPACKED = getArt("unpacked");
Art BACKYARD = getArt("backyard");
Art BAROQUE = getArt("baroque");
Art BOMB = getArt("bomb");
Art BOUQUET = getArt("bouquet");
Art BURNING_SKULL = getArt("burning_skull");
Art BUST = getArt("bust");
Art CAVEBIRD = getArt("cavebird");
Art CHANGING = getArt("changing");
Art COTAN = getArt("cotan");
Art COURBET = getArt("courbet");
Art CREEBET = getArt("creebet");
Art DONKEY_KONG = getArt("donkey_kong");
Art EARTH = getArt("earth");
Art ENDBOSS = getArt("endboss");
Art FERN = getArt("fern");
Art FIGHTERS = getArt("fighters");
Art FINDING = getArt("finding");
Art FIRE = getArt("fire");
Art GRAHAM = getArt("graham");
Art HUMBLE = getArt("humble");
Art KEBAB = getArt("kebab");
Art LOWMIST = getArt("lowmist");
Art MATCH = getArt("match");
Art MEDITATIVE = getArt("meditative");
Art ORB = getArt("orb");
Art OWLEMONS = getArt("owlemons");
Art PASSAGE = getArt("passage");
Art PIGSCENE = getArt("pigscene");
Art PLANT = getArt("plant");
Art POINTER = getArt("pointer");
Art POND = getArt("pond");
Art POOL = getArt("pool");
Art PRAIRIE_RIDE = getArt("prairie_ride");
Art SEA = getArt("sea");
Art SKELETON = getArt("skeleton");
Art SKULL_AND_ROSES = getArt("skull_and_roses");
Art STAGE = getArt("stage");
Art SUNFLOWERS = getArt("sunflowers");
Art SUNSET = getArt("sunset");
Art TIDES = getArt("tides");
Art UNPACKED = getArt("unpacked");
Art VOID = getArt("void");
Art WANDERER = getArt("wanderer");
Art WASTELAND = getArt("wasteland");
Art WATER = getArt("water");
Art WIND = getArt("wind");
Art WITHER = getArt("wither");
// End generate - Art
@NotNull
private static Art getArt(@NotNull String key) {
return RegistryAccess.registryAccess().getRegistry(RegistryKey.PAINTING_VARIANT).getOrThrow(NamespacedKey.minecraft(key));

View File

@@ -14,6 +14,7 @@ import java.util.Set;
import java.util.UUID;
import java.util.function.Consumer;
import java.util.logging.Logger;
import net.kyori.adventure.text.Component;
import org.bukkit.Warning.WarningState;
import org.bukkit.advancement.Advancement;
import org.bukkit.block.data.BlockData;
@@ -189,8 +190,8 @@ public final class Bukkit {
* uses. Normal and immediate iterator use without consequences that
* affect the collection are fully supported. The effects following
* (non-exhaustive) {@link Entity#teleport(Location) teleportation},
* {@link Player#setHealth(double) death}, and {@link Player#kickPlayer(
* String) kicking} are undefined. Any use of this collection from
* {@link Player#setHealth(double) death}, and {@link Player#kick(
* Component) kicking} are undefined. Any use of this collection from
* asynchronous threads is unsafe.
* <p>
* For safe consequential iteration or mimicking the old array behavior,
@@ -468,7 +469,7 @@ public final class Bukkit {
*
* @param message the message
* @return the number of players
* @deprecated in favour of {@link Server#broadcast(net.kyori.adventure.text.Component)}
* @deprecated in favour of {@link Server#broadcast(Component)}
*/
@Deprecated // Paper
public static int broadcastMessage(@NotNull String message) {
@@ -480,7 +481,7 @@ public final class Bukkit {
* Sends the component to all online players.
*
* @param component the component to send
* @deprecated use {@code sendMessage} methods on {@link #getServer()} that accept {@link net.kyori.adventure.text.Component}
* @deprecated use {@code sendMessage} methods on {@link #getServer()} that accept {@link Component}
*/
@Deprecated
public static void broadcast(@NotNull net.md_5.bungee.api.chat.BaseComponent component) {
@@ -491,7 +492,7 @@ public final class Bukkit {
* Sends an array of components as a single message to all online players.
*
* @param components the components to send
* @deprecated use {@code sendMessage} methods on {@link #getServer()} that accept {@link net.kyori.adventure.text.Component}
* @deprecated use {@code sendMessage} methods on {@link #getServer()} that accept {@link Component}
*/
@Deprecated
public static void broadcast(@NotNull net.md_5.bungee.api.chat.BaseComponent... components) {
@@ -1463,7 +1464,7 @@ public final class Bukkit {
/**
* Broadcast a message to all players.
* <p>
* This is the same as calling {@link #broadcast(net.kyori.adventure.text.Component,
* This is the same as calling {@link #broadcast(Component,
* java.lang.String)} with the {@link Server#BROADCAST_CHANNEL_USERS} permission.
*
* @param message the message
@@ -1493,7 +1494,7 @@ public final class Bukkit {
* @param permission the required permission {@link Permissible
* permissibles} must have to receive the broadcast
* @return number of message recipients
* @deprecated in favour of {@link #broadcast(net.kyori.adventure.text.Component, String)}
* @deprecated in favour of {@link #broadcast(Component, String)}
*/
@Deprecated // Paper
public static int broadcast(@NotNull String message, @NotNull String permission) {
@@ -1740,7 +1741,7 @@ public final class Bukkit {
* @return a command sender
*/
@NotNull
public static CommandSender createCommandSender(final @NotNull java.util.function.Consumer<? super net.kyori.adventure.text.Component> feedback) {
public static CommandSender createCommandSender(final @NotNull java.util.function.Consumer<? super Component> feedback) {
return server.createCommandSender(feedback);
}
// Paper end
@@ -1864,7 +1865,7 @@ public final class Bukkit {
* @return The new inventory.
* @throws IllegalArgumentException if the {@link InventoryType} cannot be
* viewed.
* @deprecated in favour of {@link #createInventory(InventoryHolder, InventoryType, net.kyori.adventure.text.Component)}
* @deprecated in favour of {@link #createInventory(InventoryHolder, InventoryType, Component)}
*
* @see InventoryType#isCreatable()
*/
@@ -1916,7 +1917,7 @@ public final class Bukkit {
* viewed
* @return a new inventory
* @throws IllegalArgumentException if the size is not a multiple of 9
* @deprecated in favour of {@link #createInventory(InventoryHolder, InventoryType, net.kyori.adventure.text.Component)}
* @deprecated in favour of {@link #createInventory(InventoryHolder, InventoryType, Component)}
*/
@Deprecated // Paper
@NotNull
@@ -1945,7 +1946,7 @@ public final class Bukkit {
* @param title the title of the corresponding merchant inventory, displayed
* when the merchant inventory is viewed
* @return a new merchant
* @deprecated in favour of {@link #createMerchant(net.kyori.adventure.text.Component)}. The title parameter is
* @deprecated in favour of {@link #createMerchant(Component)}. The title parameter is
* no-longer needed when used with {@link MenuType#MERCHANT} and {@link MenuType.Typed#builder()}
*/
@NotNull
@@ -2082,7 +2083,7 @@ public final class Bukkit {
*
* @return the server's MOTD
*/
@NotNull public static net.kyori.adventure.text.Component motd() {
@NotNull public static Component motd() {
return server.motd();
}
@@ -2121,7 +2122,7 @@ public final class Bukkit {
* Set the message that is displayed on the server list.
*
* @param motd The message to be displayed
* @deprecated in favour of {@link #motd(net.kyori.adventure.text.Component)}
* @deprecated in favour of {@link #motd(Component)}
*/
@Deprecated // Paper
public static void setMotd(@NotNull String motd) {
@@ -2695,7 +2696,7 @@ public final class Bukkit {
* @return the default message
*/
@NotNull
public static net.kyori.adventure.text.Component permissionMessage() {
public static Component permissionMessage() {
return server.permissionMessage();
}

View File

@@ -136,9 +136,9 @@ public interface Chunk extends PersistentDataHolder {
@NotNull Entity @NotNull [] getEntities();
/**
* Get a list of all tile entities in the chunk.
* Get a list of all block entities in the chunk.
*
* @return The tile entities.
* @return The block entities.
*/
@NotNull
// Paper start
@@ -147,20 +147,20 @@ public interface Chunk extends PersistentDataHolder {
}
/**
* Get a list of all tile entities in the chunk.
* Get a list of all block entities in the chunk.
*
* @param useSnapshot Take snapshots or direct references
* @return The tile entities.
* @return The block entities.
*/
@NotNull
BlockState @NotNull [] getTileEntities(boolean useSnapshot);
/**
* Get a list of all tile entities that match a given predicate in the chunk.
* Get a list of all block entities that match a given predicate in the chunk.
*
* @param blockPredicate The predicate of blocks to return tile entities for
* @param blockPredicate The predicate of blocks to return block entities for
* @param useSnapshot Take snapshots or direct references
* @return The tile entities.
* @return The block entities.
*/
@NotNull
Collection<BlockState> getTileEntities(java.util.function.@NotNull Predicate<? super Block> blockPredicate, boolean useSnapshot);

View File

@@ -146,7 +146,7 @@ public final class Color implements ConfigurationSerializable {
* @param blue integer from 0-255
* @param green integer from 0-255
* @param red integer from 0-255
* @return a new Color object for the red, green, blue
* @return a new Color object for the blue, green, red
* @throws IllegalArgumentException if any value is strictly {@literal >255 or <0}
*/
@NotNull
@@ -225,7 +225,7 @@ public final class Color implements ConfigurationSerializable {
* Creates a new Color object with specified component
*
* @param alpha the alpha component, from 0 to 255
* @return a new color object with the red component
* @return a new color object with the alpha component
*/
@NotNull
public Color setAlpha(int alpha) {
@@ -264,8 +264,8 @@ public final class Color implements ConfigurationSerializable {
/**
* Creates a new Color object with specified component
*
* @param green the red component, from 0 to 255
* @return a new color object with the red component
* @param green the green component, from 0 to 255
* @return a new color object with the green component
*/
@NotNull
public Color setGreen(int green) {
@@ -284,8 +284,8 @@ public final class Color implements ConfigurationSerializable {
/**
* Creates a new Color object with specified component
*
* @param blue the red component, from 0 to 255
* @return a new color object with the red component
* @param blue the blue component, from 0 to 255
* @return a new color object with the blue component
*/
@NotNull
public Color setBlue(int blue) {

View File

@@ -247,11 +247,17 @@ public enum EntityEffect {
// 22-28 player internal flags
/**
* Shield blocks attack.
*
* @deprecated replaced by the {@code blocks_attacks} item data component
*/
@Deprecated(since = "1.21.5", forRemoval = true)
SHIELD_BLOCK(29, LivingEntity.class),
/**
* Shield breaks.
*
* @deprecated replaced by the {@code blocks_attacks} item data component
*/
@Deprecated(since = "1.21.5", forRemoval = true)
SHIELD_BREAK(30, LivingEntity.class),
// 31 - unused
/**
@@ -359,7 +365,7 @@ public enum EntityEffect {
*/
BREAK_EQUIPMENT_MAIN_HAND(47, LivingEntity.class),
/**
* Entity breaks item in off hand.
* Entity breaks item in off-hand.
*
* @see org.bukkit.inventory.EquipmentSlot#OFF_HAND
*/
@@ -458,11 +464,19 @@ public enum EntityEffect {
*/
BREAK_EQUIPMENT_BODY(65, LivingEntity.class),
/**
* A creaking transient shaking when being hit.
* Does not apply to plain creaking entities as they are not invulnerable like the transient ones spawned by the
* creaking heart.
* A creaking shaking when being hit.
*/
SHAKE(66, Creaking.class);
SHAKE(66, Creaking.class),
/**
* Drown particles for entities.
*/
DROWN_PARTICLES(67, LivingEntity.class),
/**
* Entity breaks item in saddle slot.
*
* @see org.bukkit.inventory.EquipmentSlot#SADDLE
*/
BREAK_EQUIPMENT_SADDLE(68, LivingEntity.class);
private final byte data;
private final Set<Class<? extends Entity>> applicableClasses;

View File

@@ -14,19 +14,19 @@ import org.jetbrains.annotations.ApiStatus;
*/
public interface FeatureFlag extends Keyed {
// Paper start - overhaul FeatureFlag API
/**
* The {@code vanilla} feature flag.
*/
FeatureFlag VANILLA = create("vanilla");
// Start generate - FeatureFlag
// @GeneratedFrom 1.21.5
@ApiStatus.Experimental
FeatureFlag MINECART_IMPROVEMENTS = create("minecart_improvements");
/**
* <strong>AVAILABLE BETWEEN VERSIONS:</strong> 1.19.3 - 1.21.1
*
* @deprecated not available since 1.21.2
*/
@Deprecated(since = "1.21.2")
FeatureFlag BUNDLE = deprecated("bundle");
@ApiStatus.Experimental
FeatureFlag REDSTONE_EXPERIMENTS = create("redstone_experiments");
@ApiStatus.Experimental
FeatureFlag TRADE_REBALANCE = create("trade_rebalance");
FeatureFlag VANILLA = create("vanilla");
// End generate - FeatureFlag
/**
* <strong>AVAILABLE BETWEEN VERSIONS:</strong> 1.19 - 1.19.4
@@ -37,9 +37,6 @@ public interface FeatureFlag extends Keyed {
@Deprecated(since = "1.20")
FeatureFlag UPDATE_1_20 = deprecated("update_1_20");
@ApiStatus.Experimental // Paper - add missing annotation
FeatureFlag TRADE_REBALANCE = create("trade_rebalance");
/**
* <strong>AVAILABLE BETWEEN VERSIONS:</strong> 1.20.5 - 1.20.6
*
@@ -48,6 +45,14 @@ public interface FeatureFlag extends Keyed {
@Deprecated(since = "1.21")
FeatureFlag UPDATE_121 = deprecated("update_1_21");
/**
* <strong>AVAILABLE BETWEEN VERSIONS:</strong> 1.19.3 - 1.21.1
*
* @deprecated not available since 1.21.2
*/
@Deprecated(since = "1.21.2")
FeatureFlag BUNDLE = deprecated("bundle");
/**
* <strong>AVAILABLE BETWEEN VERSIONS:</strong> 1.21.2 - 1.21.3
*
@@ -56,12 +61,6 @@ public interface FeatureFlag extends Keyed {
@Deprecated(since = "1.21.4")
FeatureFlag WINTER_DROP = deprecated("winter_drop");
@ApiStatus.Experimental // Paper - add missing annotation
FeatureFlag REDSTONE_EXPERIMENTS = create("redstone_experiments");
@ApiStatus.Experimental // Paper - add missing annotation
FeatureFlag MINECART_IMPROVEMENTS = create("minecart_improvements");
/**
* An index of all feature flags.
*/

View File

@@ -12,27 +12,19 @@ import org.jetbrains.annotations.NotNull;
*/
public interface Fluid extends OldEnum<Fluid>, Keyed {
/**
* No fluid.
*/
// Start generate - Fluid
// @GeneratedFrom 1.21.5
Fluid EMPTY = getFluid("empty");
/**
* Stationary water.
*/
Fluid WATER = getFluid("water");
/**
* Flowing water.
*/
Fluid FLOWING_WATER = getFluid("flowing_water");
/**
* Stationary lava.
*/
Fluid LAVA = getFluid("lava");
/**
* Flowing lava.
*/
Fluid FLOWING_LAVA = getFluid("flowing_lava");
Fluid FLOWING_WATER = getFluid("flowing_water");
Fluid LAVA = getFluid("lava");
Fluid WATER = getFluid("water");
// End generate - Fluid
@NotNull
private static Fluid getFluid(@NotNull String key) {
return Registry.FLUID.getOrThrow(NamespacedKey.minecraft(key));

View File

@@ -11,107 +11,229 @@ import org.jetbrains.annotations.Nullable;
*/
public abstract class GameEvent implements Keyed {
// Start generate - GameEvent
// @GeneratedFrom 1.21.5
public static final GameEvent BLOCK_ACTIVATE = getEvent("block_activate");
public static final GameEvent BLOCK_ATTACH = getEvent("block_attach");
public static final GameEvent BLOCK_CHANGE = getEvent("block_change");
public static final GameEvent BLOCK_CLOSE = getEvent("block_close");
public static final GameEvent BLOCK_DEACTIVATE = getEvent("block_deactivate");
public static final GameEvent BLOCK_DESTROY = getEvent("block_destroy");
public static final GameEvent BLOCK_DETACH = getEvent("block_detach");
public static final GameEvent BLOCK_OPEN = getEvent("block_open");
public static final GameEvent BLOCK_PLACE = getEvent("block_place");
@Deprecated(since = "1.19")
public static final GameEvent BLOCK_PRESS = getEvent("block_activate");
@Deprecated(since = "1.19")
public static final GameEvent BLOCK_SWITCH = getEvent("block_activate");
@Deprecated(since = "1.19")
public static final GameEvent BLOCK_UNPRESS = getEvent("block_deactivate");
@Deprecated(since = "1.19")
public static final GameEvent BLOCK_UNSWITCH = getEvent("block_deactivate");
public static final GameEvent CONTAINER_CLOSE = getEvent("container_close");
public static final GameEvent CONTAINER_OPEN = getEvent("container_open");
@Deprecated(since = "1.20")
public static final GameEvent DISPENSE_FAIL = getEvent("block_activate");
public static final GameEvent DRINK = getEvent("drink");
@Deprecated(since = "1.19")
public static final GameEvent DRINKING_FINISH = getEvent("drink");
public static final GameEvent EAT = getEvent("eat");
@Deprecated(since = "1.19")
public static final GameEvent ELYTRA_FREE_FALL = getEvent("elytra_glide");
public static final GameEvent ELYTRA_GLIDE = getEvent("elytra_glide");
public static final GameEvent ENTITY_DAMAGE = getEvent("entity_damage");
@Deprecated(since = "1.19")
public static final GameEvent ENTITY_DAMAGED = getEvent("entity_damage");
public static final GameEvent ENTITY_DIE = getEvent("entity_die");
public static final GameEvent ENTITY_DISMOUNT = getEvent("entity_dismount");
@Deprecated(since = "1.19")
public static final GameEvent ENTITY_DYING = getEvent("entity_die");
public static final GameEvent ENTITY_INTERACT = getEvent("entity_interact");
public static final GameEvent ENTITY_MOUNT = getEvent("entity_mount");
@Deprecated(since = "1.19")
public static final GameEvent ENTITY_KILLED = getEvent("entity_die");
public static final GameEvent ENTITY_PLACE = getEvent("entity_place");
public static final GameEvent ENTITY_ACTION = getEvent("entity_action");
@Deprecated(since = "1.20.2")
public static final GameEvent ENTITY_ROAR = getEvent("entity_action");
@Deprecated(since = "1.20.2")
public static final GameEvent ENTITY_SHAKE = getEvent("entity_action");
public static final GameEvent ENTITY_DAMAGE = getEvent("entity_damage");
public static final GameEvent ENTITY_DIE = getEvent("entity_die");
public static final GameEvent ENTITY_DISMOUNT = getEvent("entity_dismount");
public static final GameEvent ENTITY_INTERACT = getEvent("entity_interact");
public static final GameEvent ENTITY_MOUNT = getEvent("entity_mount");
public static final GameEvent ENTITY_PLACE = getEvent("entity_place");
public static final GameEvent EQUIP = getEvent("equip");
public static final GameEvent EXPLODE = getEvent("explode");
public static final GameEvent FLAP = getEvent("flap");
public static final GameEvent FLUID_PICKUP = getEvent("fluid_pickup");
public static final GameEvent FLUID_PLACE = getEvent("fluid_place");
public static final GameEvent HIT_GROUND = getEvent("hit_ground");
public static final GameEvent INSTRUMENT_PLAY = getEvent("instrument_play");
public static final GameEvent ITEM_INTERACT_FINISH = getEvent("item_interact_finish");
public static final GameEvent ITEM_INTERACT_START = getEvent("item_interact_start");
public static final GameEvent JUKEBOX_PLAY = getEvent("jukebox_play");
public static final GameEvent JUKEBOX_STOP_PLAY = getEvent("jukebox_stop_play");
public static final GameEvent LIGHTNING_STRIKE = getEvent("lightning_strike");
@Deprecated(since = "1.19")
public static final GameEvent MOB_INTERACT = getEvent("entity_interact");
public static final GameEvent NOTE_BLOCK_PLAY = getEvent("note_block_play");
@Deprecated(since = "1.20")
public static final GameEvent PISTON_CONTRACT = getEvent("block_deactivate");
@Deprecated(since = "1.20")
public static final GameEvent PISTON_EXTEND = getEvent("block_activate");
public static final GameEvent PRIME_FUSE = getEvent("prime_fuse");
public static final GameEvent PROJECTILE_LAND = getEvent("projectile_land");
public static final GameEvent PROJECTILE_SHOOT = getEvent("projectile_shoot");
@Deprecated(since = "1.19")
public static final GameEvent RAVAGER_ROAR = getEvent("entity_action");
@Deprecated(since = "1.19")
public static final GameEvent RING_BELL = getEvent("block_change");
public static final GameEvent SCULK_SENSOR_TENDRILS_CLICKING = getEvent("sculk_sensor_tendrils_clicking");
public static final GameEvent SHEAR = getEvent("shear");
public static final GameEvent SHRIEK = getEvent("shriek");
@Deprecated(since = "1.19")
public static final GameEvent SHULKER_CLOSE = getEvent("container_close");
@Deprecated(since = "1.19")
public static final GameEvent SHULKER_OPEN = getEvent("container_open");
public static final GameEvent SPLASH = getEvent("splash");
public static final GameEvent STEP = getEvent("step");
public static final GameEvent SWIM = getEvent("swim");
public static final GameEvent TELEPORT = getEvent("teleport");
public static final GameEvent UNEQUIP = getEvent("unequip");
@Deprecated(since = "1.19")
public static final GameEvent WOLF_SHAKING = getEvent("entity_action");
public static final GameEvent RESONATE_1 = getEvent("resonate_1");
public static final GameEvent RESONATE_2 = getEvent("resonate_2");
public static final GameEvent RESONATE_3 = getEvent("resonate_3");
public static final GameEvent RESONATE_4 = getEvent("resonate_4");
public static final GameEvent RESONATE_5 = getEvent("resonate_5");
public static final GameEvent RESONATE_6 = getEvent("resonate_6");
public static final GameEvent RESONATE_7 = getEvent("resonate_7");
public static final GameEvent RESONATE_8 = getEvent("resonate_8");
public static final GameEvent RESONATE_9 = getEvent("resonate_9");
public static final GameEvent RESONATE_10 = getEvent("resonate_10");
public static final GameEvent RESONATE_11 = getEvent("resonate_11");
public static final GameEvent RESONATE_12 = getEvent("resonate_12");
public static final GameEvent RESONATE_13 = getEvent("resonate_13");
public static final GameEvent RESONATE_14 = getEvent("resonate_14");
public static final GameEvent RESONATE_15 = getEvent("resonate_15");
public static final GameEvent SCULK_SENSOR_TENDRILS_CLICKING = getEvent("sculk_sensor_tendrils_clicking");
public static final GameEvent SHEAR = getEvent("shear");
public static final GameEvent SHRIEK = getEvent("shriek");
public static final GameEvent SPLASH = getEvent("splash");
public static final GameEvent STEP = getEvent("step");
public static final GameEvent SWIM = getEvent("swim");
public static final GameEvent TELEPORT = getEvent("teleport");
public static final GameEvent UNEQUIP = getEvent("unequip");
// End generate - GameEvent
/**
* @deprecated in favor of {@link #BLOCK_ACTIVATE}
*/
@Deprecated(since = "1.19")
public static final GameEvent BLOCK_PRESS = BLOCK_ACTIVATE;
/**
* @deprecated in favor of {@link #BLOCK_ACTIVATE}
*/
@Deprecated(since = "1.19")
public static final GameEvent BLOCK_SWITCH = BLOCK_ACTIVATE;
/**
* @deprecated in favor of {@link #BLOCK_DEACTIVATE}
*/
@Deprecated(since = "1.19")
public static final GameEvent BLOCK_UNPRESS = BLOCK_DEACTIVATE;
/**
* @deprecated in favor of {@link #BLOCK_DEACTIVATE}
*/
@Deprecated(since = "1.19")
public static final GameEvent BLOCK_UNSWITCH = BLOCK_DEACTIVATE;
/**
* @deprecated in favor of {@link #BLOCK_ACTIVATE}
*/
@Deprecated(since = "1.20")
public static final GameEvent DISPENSE_FAIL = BLOCK_ACTIVATE;
/**
* @deprecated in favor of {@link #DRINK}
*/
@Deprecated(since = "1.19")
public static final GameEvent DRINKING_FINISH = DRINK;
/**
* @deprecated in favor of {@link #ELYTRA_GLIDE}
*/
@Deprecated(since = "1.19")
public static final GameEvent ELYTRA_FREE_FALL = ELYTRA_GLIDE;
/**
* @deprecated in favor of {@link #ENTITY_DAMAGE}
*/
@Deprecated(since = "1.19")
public static final GameEvent ENTITY_DAMAGED = ENTITY_DAMAGE;
/**
* @deprecated in favor of {@link #ENTITY_DIE}
*/
@Deprecated(since = "1.19")
public static final GameEvent ENTITY_DYING = ENTITY_DIE;
/**
* @deprecated in favor of {@link #ENTITY_DIE}
*/
@Deprecated(since = "1.19")
public static final GameEvent ENTITY_KILLED = ENTITY_DIE;
/**
* @deprecated in favor of {@link #ENTITY_ACTION}
*/
@Deprecated(since = "1.20.2")
public static final GameEvent ENTITY_ROAR = ENTITY_ACTION;
/**
* @deprecated in favor of {@link #ENTITY_ACTION}
*/
@Deprecated(since = "1.20.2")
public static final GameEvent ENTITY_SHAKE = ENTITY_ACTION;
/**
* @deprecated in favor of {@link #ENTITY_INTERACT}
*/
@Deprecated(since = "1.19")
public static final GameEvent MOB_INTERACT = ENTITY_INTERACT;
/**
* @deprecated in favor of {@link #BLOCK_DEACTIVATE}
*/
@Deprecated(since = "1.20")
public static final GameEvent PISTON_CONTRACT = BLOCK_DEACTIVATE;
/**
* @deprecated in favor of {@link #BLOCK_ACTIVATE}
*/
@Deprecated(since = "1.20")
public static final GameEvent PISTON_EXTEND = BLOCK_ACTIVATE;
/**
* @deprecated in favor of {@link #ENTITY_ACTION}
*/
@Deprecated(since = "1.19")
public static final GameEvent RAVAGER_ROAR = ENTITY_ACTION;
/**
* @deprecated in favor of {@link #BLOCK_CHANGE}
*/
@Deprecated(since = "1.19")
public static final GameEvent RING_BELL = BLOCK_CHANGE;
/**
* @deprecated in favor of {@link #CONTAINER_CLOSE}
*/
@Deprecated(since = "1.19")
public static final GameEvent SHULKER_CLOSE = CONTAINER_CLOSE;
/**
* @deprecated in favor of {@link #CONTAINER_OPEN}
*/
@Deprecated(since = "1.19")
public static final GameEvent SHULKER_OPEN = CONTAINER_OPEN;
/**
* @deprecated in favor of {@link #ENTITY_ACTION}
*/
@Deprecated(since = "1.19")
public static final GameEvent WOLF_SHAKING = ENTITY_ACTION;
/**
* Returns a {@link GameEvent} by a {@link NamespacedKey}.
*

View File

@@ -220,6 +220,14 @@ public final class GameRule<T> implements net.kyori.adventure.translation.Transl
* Whether ender pearls will vanish on player death.
*/
public static final GameRule<Boolean> ENDER_PEARLS_VANISH_ON_DEATH = new GameRule<>("enderPearlsVanishOnDeath", Boolean.class);
/**
* Whether fire will still propagate far away from players (8 chunks).
*/
public static final GameRule<Boolean> ALLOW_FIRE_TICKS_AWAY_FROM_PLAYER = new GameRule<>("allowFireTicksAwayFromPlayer", Boolean.class);
/**
* Whether primed tnt explodes.
*/
public static final GameRule<Boolean> TNT_EXPLODES = new GameRule<>("tntExplodes", Boolean.class);
// Numerical rules
/**

View File

@@ -11,25 +11,46 @@ import org.jetbrains.annotations.NotNull;
@ApiStatus.Experimental
public interface JukeboxSong extends Keyed, Translatable {
public static final JukeboxSong THIRTEEN = get("13");
public static final JukeboxSong CAT = get("cat");
public static final JukeboxSong BLOCKS = get("blocks");
public static final JukeboxSong CHIRP = get("chirp");
public static final JukeboxSong FAR = get("far");
public static final JukeboxSong MALL = get("mall");
public static final JukeboxSong MELLOHI = get("mellohi");
public static final JukeboxSong STAL = get("stal");
public static final JukeboxSong STRAD = get("strad");
public static final JukeboxSong WARD = get("ward");
public static final JukeboxSong ELEVEN = get("11");
public static final JukeboxSong WAIT = get("wait");
public static final JukeboxSong PIGSTEP = get("pigstep");
public static final JukeboxSong OTHERSIDE = get("otherside");
public static final JukeboxSong FIVE = get("5");
public static final JukeboxSong RELIC = get("relic");
public static final JukeboxSong PRECIPICE = get("precipice");
public static final JukeboxSong CREATOR = get("creator");
public static final JukeboxSong CREATOR_MUSIC_BOX = get("creator_music_box");
// Start generate - JukeboxSong
// @GeneratedFrom 1.21.5
JukeboxSong ELEVEN = get("11");
JukeboxSong THIRTEEN = get("13");
JukeboxSong FIVE = get("5");
JukeboxSong BLOCKS = get("blocks");
JukeboxSong CAT = get("cat");
JukeboxSong CHIRP = get("chirp");
JukeboxSong CREATOR = get("creator");
JukeboxSong CREATOR_MUSIC_BOX = get("creator_music_box");
JukeboxSong FAR = get("far");
JukeboxSong MALL = get("mall");
JukeboxSong MELLOHI = get("mellohi");
JukeboxSong OTHERSIDE = get("otherside");
JukeboxSong PIGSTEP = get("pigstep");
JukeboxSong PRECIPICE = get("precipice");
JukeboxSong RELIC = get("relic");
JukeboxSong STAL = get("stal");
JukeboxSong STRAD = get("strad");
JukeboxSong WAIT = get("wait");
JukeboxSong WARD = get("ward");
// End generate - JukeboxSong
@NotNull
private static JukeboxSong get(@NotNull String key) {

File diff suppressed because it is too large Load Diff

View File

@@ -10,15 +10,25 @@ import org.jetbrains.annotations.Nullable;
public abstract class MusicInstrument implements Keyed, net.kyori.adventure.translation.Translatable { // Paper - translation keys
public static final MusicInstrument PONDER_GOAT_HORN = getInstrument("ponder_goat_horn");
public static final MusicInstrument SING_GOAT_HORN = getInstrument("sing_goat_horn");
public static final MusicInstrument SEEK_GOAT_HORN = getInstrument("seek_goat_horn");
public static final MusicInstrument FEEL_GOAT_HORN = getInstrument("feel_goat_horn");
// Start generate - MusicInstrument
// @GeneratedFrom 1.21.5
public static final MusicInstrument ADMIRE_GOAT_HORN = getInstrument("admire_goat_horn");
public static final MusicInstrument CALL_GOAT_HORN = getInstrument("call_goat_horn");
public static final MusicInstrument YEARN_GOAT_HORN = getInstrument("yearn_goat_horn");
public static final MusicInstrument DREAM_GOAT_HORN = getInstrument("dream_goat_horn");
public static final MusicInstrument FEEL_GOAT_HORN = getInstrument("feel_goat_horn");
public static final MusicInstrument PONDER_GOAT_HORN = getInstrument("ponder_goat_horn");
public static final MusicInstrument SEEK_GOAT_HORN = getInstrument("seek_goat_horn");
public static final MusicInstrument SING_GOAT_HORN = getInstrument("sing_goat_horn");
public static final MusicInstrument YEARN_GOAT_HORN = getInstrument("yearn_goat_horn");
// End generate - MusicInstrument
/**
* Returns a {@link MusicInstrument} by a {@link NamespacedKey}.
*

View File

@@ -7,7 +7,6 @@ import org.jetbrains.annotations.Nullable;
*/
public interface Nameable {
// Paper start
/**
* Gets the custom name.
*
@@ -29,7 +28,6 @@ public interface Nameable {
* @param customName the custom name to set
*/
void customName(final net.kyori.adventure.text.@Nullable Component customName);
// Paper end
/**
* Gets the custom name on a mob or block. If there is no name this method

View File

@@ -30,7 +30,7 @@ public final class NamespacedKey implements net.kyori.adventure.key.Key, com.des
* compatibility measures.
*/
public static final String BUKKIT = "bukkit";
//
private final String namespace;
private final String key;

View File

@@ -257,7 +257,10 @@ public interface OfflinePlayer extends ServerOperator, AnimalTamer, Configuratio
*/
@Nullable
@Deprecated(since = "1.20.4")
public Location getBedSpawnLocation();
default Location getBedSpawnLocation() {
return this.getRespawnLocation();
}
// Paper start
/**
* Gets the last date and time that this player logged into the server.

View File

@@ -3,7 +3,6 @@ package org.bukkit;
import com.google.common.base.Preconditions;
import org.bukkit.block.data.BlockData;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
public enum Particle implements Keyed {
@@ -22,7 +21,7 @@ public enum Particle implements Keyed {
EFFECT("effect"),
INSTANT_EFFECT("instant_effect"),
/**
* Uses {@link Color} as DataType
* Uses {@link Color} as DataType (with alpha support)
*/
ENTITY_EFFECT("entity_effect", Color.class),
WITCH("witch"),
@@ -117,16 +116,20 @@ public enum Particle implements Keyed {
SONIC_BOOM("sonic_boom"),
SCULK_SOUL("sculk_soul"),
/**
* Use {@link Float} as DataType
* Uses {@link Float} as DataType
*/
SCULK_CHARGE("sculk_charge", Float.class),
SCULK_CHARGE_POP("sculk_charge_pop"),
/**
* Use {@link Integer} as DataType
* Uses {@link Integer} as DataType
*/
SHRIEK("shriek", Integer.class),
CHERRY_LEAVES("cherry_leaves"),
PALE_OAK_LEAVES("pale_oak_leaves"),
/**
* Uses {@link Color} as DataType (with alpha support)
*/
TINTED_LEAVES("tinted_leaves", Color.class),
EGG_CRACK("egg_crack"),
DUST_PLUME("dust_plume"),
WHITE_SMOKE("white_smoke"),
@@ -147,6 +150,7 @@ public enum Particle implements Keyed {
* Uses {@link BlockData} as DataType
*/
BLOCK_CRUMBLE("block_crumble", BlockData.class),
FIREFLY("firefly"),
/**
* Uses {@link Trail} as DataType
*/

View File

@@ -137,7 +137,10 @@ public interface Raid extends org.bukkit.persistence.PersistentDataHolder { // P
* Gets the id of this raid.
*
* @return the raid id
* @deprecated Raid identifiers are magic internal values and may or may not be present.
* -1 is returned for raids without an assigned id.
*/
@Deprecated(forRemoval = true, since = "1.21.5")
int getId();
/**

View File

@@ -148,8 +148,10 @@ public interface Registry<T extends Keyed> extends Iterable<T> {
* Server cat types.
*
* @see Cat.Type
* @deprecated use {@link RegistryAccess#getRegistry(RegistryKey)} with {@link RegistryKey#CAT_VARIANT}
*/
Registry<Cat.Type> CAT_VARIANT = registryFor(RegistryKey.CAT_VARIANT);
@Deprecated(since = "1.21.5")
Registry<Cat.Type> CAT_VARIANT = legacyRegistryFor(Cat.Type.class);
/**
* Server enchantments.
*
@@ -291,10 +293,10 @@ public interface Registry<T extends Keyed> extends Iterable<T> {
*
* @see MemoryKey
*/
Registry<MemoryKey> MEMORY_MODULE_TYPE = new NotARegistry<>() {
Registry<MemoryKey<?>> MEMORY_MODULE_TYPE = new NotARegistry<>() {
@Override
public Iterator iterator() {
public Iterator<MemoryKey<?>> iterator() {
return MemoryKey.values().iterator();
}
@@ -304,7 +306,7 @@ public interface Registry<T extends Keyed> extends Iterable<T> {
}
@Override
public @Nullable MemoryKey get(final NamespacedKey key) {
public @Nullable MemoryKey<?> get(final NamespacedKey key) {
return MemoryKey.getByKey(key);
}
};
@@ -318,8 +320,10 @@ public interface Registry<T extends Keyed> extends Iterable<T> {
* Frog variants.
*
* @see Frog.Variant
* @deprecated use {@link RegistryAccess#getRegistry(RegistryKey)} with {@link RegistryKey#FROG_VARIANT}
*/
Registry<Frog.Variant> FROG_VARIANT = registryFor(RegistryKey.FROG_VARIANT);
@Deprecated(since = "1.21.5")
Registry<Frog.Variant> FROG_VARIANT = legacyRegistryFor(Frog.Variant.class);
/**
* Wolf variants.
*

View File

@@ -151,8 +151,8 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
* uses. Normal and immediate iterator use without consequences that
* affect the collection are fully supported. The effects following
* (non-exhaustive) {@link Entity#teleport(Location) teleportation},
* {@link Player#setHealth(double) death}, and {@link Player#kickPlayer(
* String) kicking} are undefined. Any use of this collection from
* {@link Player#setHealth(double) death}, and {@link Player#kick(
* Component) kicking} are undefined. Any use of this collection from
* asynchronous threads is unsafe.
* <p>
* For safe consequential iteration or mimicking the old array behavior,
@@ -387,7 +387,9 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
* @deprecated use {@link #broadcast(net.kyori.adventure.text.Component)}
*/
@Deprecated // Paper
public int broadcastMessage(@NotNull String message);
default int broadcastMessage(@NotNull String message) {
return this.broadcast(message, BROADCAST_CHANNEL_USERS);
}
// Paper start
/**
@@ -1296,7 +1298,10 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
* @deprecated in favour of {@link #broadcast(net.kyori.adventure.text.Component, String)}
*/
@Deprecated // Paper
public int broadcast(@NotNull String message, @NotNull String permission);
default int broadcast(@NotNull String message, @NotNull String permission) {
return this.broadcast(net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection().deserialize(message), permission);
}
// Paper start
/**
* Broadcast a message to all players.
@@ -1307,7 +1312,9 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
* @param message the message
* @return the number of players
*/
int broadcast(net.kyori.adventure.text.@NotNull Component message);
default int broadcast(net.kyori.adventure.text.@NotNull Component message) {
return this.broadcast(message, BROADCAST_CHANNEL_USERS);
}
/**
* Broadcasts the specified message to every user with the given

File diff suppressed because it is too large Load Diff

View File

@@ -7,92 +7,95 @@ import org.jetbrains.annotations.NotNull;
* Represents a countable statistic, which is tracked by the server.
*/
public enum Statistic implements Keyed {
DAMAGE_DEALT,
DAMAGE_TAKEN,
DEATHS,
MOB_KILLS,
PLAYER_KILLS,
FISH_CAUGHT,
// Start generate - StatisticCustom
// @GeneratedFrom 1.21.5
ANIMALS_BRED,
LEAVE_GAME,
JUMP,
DROP_COUNT,
DROP(Type.ITEM),
PICKUP(Type.ITEM),
/**
* Name is misleading, actually records ticks played.
*/
PLAY_ONE_MINUTE,
TOTAL_WORLD_TIME,
WALK_ONE_CM,
WALK_ON_WATER_ONE_CM,
FALL_ONE_CM,
SNEAK_TIME,
CLIMB_ONE_CM,
FLY_ONE_CM,
WALK_UNDER_WATER_ONE_CM,
MINECART_ONE_CM,
BOAT_ONE_CM,
PIG_ONE_CM,
HORSE_ONE_CM,
SPRINT_ONE_CM,
CROUCH_ONE_CM,
AVIATE_ONE_CM,
MINE_BLOCK(Type.BLOCK),
USE_ITEM(Type.ITEM),
BREAK_ITEM(Type.ITEM),
CRAFT_ITEM(Type.ITEM),
KILL_ENTITY(Type.ENTITY),
ENTITY_KILLED_BY(Type.ENTITY),
TIME_SINCE_DEATH,
TALKED_TO_VILLAGER,
TRADED_WITH_VILLAGER,
CAKE_SLICES_EATEN,
CAULDRON_FILLED,
CAULDRON_USED,
BELL_RING,
BOAT_ONE_CM,
ARMOR_CLEANED,
BANNER_CLEANED,
BREWINGSTAND_INTERACTION,
BEACON_INTERACTION,
DROPPER_INSPECTED,
HOPPER_INSPECTED,
DISPENSER_INSPECTED,
NOTEBLOCK_PLAYED,
NOTEBLOCK_TUNED,
FLOWER_POTTED,
TRAPPED_CHEST_TRIGGERED,
ENDERCHEST_OPENED,
ITEM_ENCHANTED,
RECORD_PLAYED,
FURNACE_INTERACTION,
CRAFTING_TABLE_INTERACTION,
CHEST_OPENED,
SLEEP_IN_BED,
SHULKER_BOX_OPENED,
TIME_SINCE_REST,
SWIM_ONE_CM,
CLEAN_SHULKER_BOX,
CLIMB_ONE_CM,
CROUCH_ONE_CM,
DAMAGE_ABSORBED,
DAMAGE_BLOCKED_BY_SHIELD,
DAMAGE_DEALT,
DAMAGE_DEALT_ABSORBED,
DAMAGE_DEALT_RESISTED,
DAMAGE_BLOCKED_BY_SHIELD,
DAMAGE_ABSORBED,
DAMAGE_RESISTED,
CLEAN_SHULKER_BOX,
OPEN_BARREL,
DAMAGE_TAKEN,
DEATHS,
DROP_COUNT,
CAKE_SLICES_EATEN,
ITEM_ENCHANTED,
FALL_ONE_CM,
CAULDRON_FILLED,
FISH_CAUGHT,
FLY_ONE_CM,
HORSE_ONE_CM,
DISPENSER_INSPECTED,
DROPPER_INSPECTED,
HOPPER_INSPECTED,
INTERACT_WITH_ANVIL,
BEACON_INTERACTION,
INTERACT_WITH_BLAST_FURNACE,
INTERACT_WITH_SMOKER,
INTERACT_WITH_LECTERN,
BREWINGSTAND_INTERACTION,
INTERACT_WITH_CAMPFIRE,
INTERACT_WITH_CARTOGRAPHY_TABLE,
CRAFTING_TABLE_INTERACTION,
FURNACE_INTERACTION,
INTERACT_WITH_GRINDSTONE,
INTERACT_WITH_LECTERN,
INTERACT_WITH_LOOM,
INTERACT_WITH_SMITHING_TABLE,
INTERACT_WITH_SMOKER,
INTERACT_WITH_STONECUTTER,
BELL_RING,
JUMP,
LEAVE_GAME,
MINECART_ONE_CM,
MOB_KILLS,
OPEN_BARREL,
CHEST_OPENED,
ENDERCHEST_OPENED,
SHULKER_BOX_OPENED,
PIG_ONE_CM,
NOTEBLOCK_PLAYED,
RECORD_PLAYED,
PLAY_ONE_MINUTE,
PLAYER_KILLS,
FLOWER_POTTED,
RAID_TRIGGER,
RAID_WIN,
INTERACT_WITH_ANVIL,
INTERACT_WITH_GRINDSTONE,
SLEEP_IN_BED,
SNEAK_TIME,
SPRINT_ONE_CM,
STRIDER_ONE_CM,
SWIM_ONE_CM,
TALKED_TO_VILLAGER,
TARGET_HIT,
INTERACT_WITH_SMITHING_TABLE,
STRIDER_ONE_CM;
TIME_SINCE_DEATH,
TIME_SINCE_REST,
TOTAL_WORLD_TIME,
TRADED_WITH_VILLAGER,
TRAPPED_CHEST_TRIGGERED,
NOTEBLOCK_TUNED,
CAULDRON_USED,
WALK_ON_WATER_ONE_CM,
WALK_ONE_CM,
WALK_UNDER_WATER_ONE_CM,
// End generate - StatisticCustom
// Start generate - StatisticType
// @GeneratedFrom 1.21.5
BREAK_ITEM(Type.ITEM),
CRAFT_ITEM(Type.ITEM),
DROP(Type.ITEM),
KILL_ENTITY(Type.ENTITY),
ENTITY_KILLED_BY(Type.ENTITY),
MINE_BLOCK(Type.BLOCK),
PICKUP(Type.ITEM),
USE_ITEM(Type.ITEM);
// End generate - StatisticType
private final Type type;
private final NamespacedKey key;

File diff suppressed because it is too large Load Diff

View File

@@ -23,6 +23,7 @@ import org.bukkit.potion.PotionType;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Map;
/**
* This interface provides value conversions that may be specific to a
@@ -142,9 +143,6 @@ public interface UnsafeValues {
@ApiStatus.Internal
<B extends Keyed> B get(RegistryKey<B> registry, NamespacedKey key);
@ApiStatus.Internal
Biome getCustomBiome();
// Paper start
@Deprecated(forRemoval = true)
boolean isSupportedApiVersion(String apiVersion);
@@ -382,4 +380,8 @@ public interface UnsafeValues {
@NotNull java.util.List<net.kyori.adventure.text.Component> computeTooltipLines(@NotNull ItemStack itemStack, @NotNull io.papermc.paper.inventory.tooltip.TooltipContext tooltipContext, @Nullable org.bukkit.entity.Player player); // Paper - expose itemstack tooltip lines
ItemStack createEmptyStack(); // Paper - proxy ItemStack
@NotNull Map<String, Object> serializeStack(ItemStack itemStack);
@NotNull ItemStack deserializeStack(@NotNull Map<String, Object> args);
}

View File

@@ -67,7 +67,7 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
void setVoidDamageEnabled(boolean enabled);
/**
* Gets the damage applied to the player when they are in the void in this world.
* Gets the damage applied to the entities when they are in the void in this world.
* Check {@link #isVoidDamageEnabled()} to see if void damage is enabled.
*
* @return amount of damage to apply
@@ -76,7 +76,7 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
float getVoidDamageAmount();
/**
* Sets the damage applied to the player when they are in the void in this world.
* Sets the damage applied to the entities when they are in the void in this world.
* Check {@link #isVoidDamageEnabled()} to see if void damage is enabled.
*
* @param voidDamageAmount amount of damage to apply
@@ -101,27 +101,27 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
// Paper start
/**
* @return The amount of Entities in this world
* @return The amount of entities in this world
*/
int getEntityCount();
/**
* @return The amount of Tile Entities in this world
* @return The amount of block entities in this world
*/
int getTileEntityCount();
/**
* @return The amount of Tickable Tile Entities in this world
* @return The amount of tickable block entities in this world
*/
int getTickableTileEntityCount();
/**
* @return The amount of Chunks in this world
* @return The amount of chunks in this world
*/
int getChunkCount();
/**
* @return The amount of Players in this world
* @return The amount of players in this world
*/
int getPlayerCount();
// Paper end
@@ -741,7 +741,7 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
* this method
* @return true if the tree was created successfully, otherwise false
* @see #generateTree(org.bukkit.Location, java.util.Random, org.bukkit.TreeType, java.util.function.Consumer)
* @deprecated this method does not handle tile entities (bee nests)
* @deprecated this method does not handle block entities (bee nests)
*/
@Deprecated(since = "1.17.1")
public boolean generateTree(@NotNull Location loc, @NotNull TreeType type, @NotNull BlockChangeDelegate delegate);

View File

@@ -130,7 +130,6 @@ public class AttributeModifier implements ConfigurationSerializable, Keyed {
*/
@Nullable
@Deprecated(since = "1.20.5")
@io.papermc.paper.annotation.DoNotUse // Paper
public EquipmentSlot getSlot() {
return slot == EquipmentSlotGroup.ANY ? null : slot.getExample();
}

View File

@@ -26,7 +26,9 @@ public interface Bell extends TileState {
* @param entity the entity ringing the bell
* @return true if rung successfully, false if the event was cancelled
*/
public boolean ring(@Nullable Entity entity);
default boolean ring(@Nullable Entity entity) {
return this.ring(entity, null);
}
/**
* Ring this bell. This will call a {@link BellRingEvent}.
@@ -35,7 +37,9 @@ public interface Bell extends TileState {
* ring in the direction that the bell is facing
* @return true if rung successfully, false if the event was cancelled
*/
public boolean ring(@Nullable BlockFace direction);
default boolean ring(@Nullable BlockFace direction) {
return this.ring(null, direction);
}
/**
* Ring this bell in the direction that the bell is facing. This will call a
@@ -43,7 +47,9 @@ public interface Bell extends TileState {
*
* @return true if rung successfully, false if the event was cancelled
*/
public boolean ring();
default boolean ring() {
return this.ring(null, null);
}
/**
* Check whether or not this bell is shaking. A bell is considered to be

View File

@@ -2,6 +2,7 @@ package org.bukkit.block;
import com.google.common.base.Preconditions;
import com.google.common.collect.Lists;
import io.papermc.paper.InternalAPIBridge;
import io.papermc.paper.registry.RegistryAccess;
import io.papermc.paper.registry.RegistryKey;
import java.util.Locale;
@@ -23,79 +24,146 @@ import org.jetbrains.annotations.NotNull;
*/
public interface Biome extends OldEnum<Biome>, Keyed, net.kyori.adventure.translation.Translatable { // Paper - Adventure translations
Biome OCEAN = getBiome("ocean");
Biome PLAINS = getBiome("plains");
Biome DESERT = getBiome("desert");
Biome WINDSWEPT_HILLS = getBiome("windswept_hills");
Biome FOREST = getBiome("forest");
Biome TAIGA = getBiome("taiga");
Biome SWAMP = getBiome("swamp");
Biome MANGROVE_SWAMP = getBiome("mangrove_swamp");
Biome RIVER = getBiome("river");
Biome NETHER_WASTES = getBiome("nether_wastes");
Biome THE_END = getBiome("the_end");
Biome FROZEN_OCEAN = getBiome("frozen_ocean");
Biome FROZEN_RIVER = getBiome("frozen_river");
Biome SNOWY_PLAINS = getBiome("snowy_plains");
Biome MUSHROOM_FIELDS = getBiome("mushroom_fields");
Biome BEACH = getBiome("beach");
Biome JUNGLE = getBiome("jungle");
Biome SPARSE_JUNGLE = getBiome("sparse_jungle");
Biome DEEP_OCEAN = getBiome("deep_ocean");
Biome STONY_SHORE = getBiome("stony_shore");
Biome SNOWY_BEACH = getBiome("snowy_beach");
Biome BIRCH_FOREST = getBiome("birch_forest");
Biome DARK_FOREST = getBiome("dark_forest");
Biome PALE_GARDEN = getBiome("pale_garden");
Biome SNOWY_TAIGA = getBiome("snowy_taiga");
Biome OLD_GROWTH_PINE_TAIGA = getBiome("old_growth_pine_taiga");
Biome WINDSWEPT_FOREST = getBiome("windswept_forest");
Biome SAVANNA = getBiome("savanna");
Biome SAVANNA_PLATEAU = getBiome("savanna_plateau");
// Start generate - Biome
// @GeneratedFrom 1.21.5
Biome BADLANDS = getBiome("badlands");
Biome WOODED_BADLANDS = getBiome("wooded_badlands");
Biome SMALL_END_ISLANDS = getBiome("small_end_islands");
Biome END_MIDLANDS = getBiome("end_midlands");
Biome END_HIGHLANDS = getBiome("end_highlands");
Biome END_BARRENS = getBiome("end_barrens");
Biome WARM_OCEAN = getBiome("warm_ocean");
Biome LUKEWARM_OCEAN = getBiome("lukewarm_ocean");
Biome COLD_OCEAN = getBiome("cold_ocean");
Biome DEEP_LUKEWARM_OCEAN = getBiome("deep_lukewarm_ocean");
Biome DEEP_COLD_OCEAN = getBiome("deep_cold_ocean");
Biome DEEP_FROZEN_OCEAN = getBiome("deep_frozen_ocean");
Biome THE_VOID = getBiome("the_void");
Biome SUNFLOWER_PLAINS = getBiome("sunflower_plains");
Biome WINDSWEPT_GRAVELLY_HILLS = getBiome("windswept_gravelly_hills");
Biome FLOWER_FOREST = getBiome("flower_forest");
Biome ICE_SPIKES = getBiome("ice_spikes");
Biome OLD_GROWTH_BIRCH_FOREST = getBiome("old_growth_birch_forest");
Biome OLD_GROWTH_SPRUCE_TAIGA = getBiome("old_growth_spruce_taiga");
Biome WINDSWEPT_SAVANNA = getBiome("windswept_savanna");
Biome ERODED_BADLANDS = getBiome("eroded_badlands");
Biome BAMBOO_JUNGLE = getBiome("bamboo_jungle");
Biome SOUL_SAND_VALLEY = getBiome("soul_sand_valley");
Biome CRIMSON_FOREST = getBiome("crimson_forest");
Biome WARPED_FOREST = getBiome("warped_forest");
Biome BASALT_DELTAS = getBiome("basalt_deltas");
Biome DRIPSTONE_CAVES = getBiome("dripstone_caves");
Biome LUSH_CAVES = getBiome("lush_caves");
Biome DEEP_DARK = getBiome("deep_dark");
Biome MEADOW = getBiome("meadow");
Biome GROVE = getBiome("grove");
Biome SNOWY_SLOPES = getBiome("snowy_slopes");
Biome FROZEN_PEAKS = getBiome("frozen_peaks");
Biome JAGGED_PEAKS = getBiome("jagged_peaks");
Biome STONY_PEAKS = getBiome("stony_peaks");
Biome BEACH = getBiome("beach");
Biome BIRCH_FOREST = getBiome("birch_forest");
Biome CHERRY_GROVE = getBiome("cherry_grove");
Biome COLD_OCEAN = getBiome("cold_ocean");
Biome CRIMSON_FOREST = getBiome("crimson_forest");
Biome DARK_FOREST = getBiome("dark_forest");
Biome DEEP_COLD_OCEAN = getBiome("deep_cold_ocean");
Biome DEEP_DARK = getBiome("deep_dark");
Biome DEEP_FROZEN_OCEAN = getBiome("deep_frozen_ocean");
Biome DEEP_LUKEWARM_OCEAN = getBiome("deep_lukewarm_ocean");
Biome DEEP_OCEAN = getBiome("deep_ocean");
Biome DESERT = getBiome("desert");
Biome DRIPSTONE_CAVES = getBiome("dripstone_caves");
Biome END_BARRENS = getBiome("end_barrens");
Biome END_HIGHLANDS = getBiome("end_highlands");
Biome END_MIDLANDS = getBiome("end_midlands");
Biome ERODED_BADLANDS = getBiome("eroded_badlands");
Biome FLOWER_FOREST = getBiome("flower_forest");
Biome FOREST = getBiome("forest");
Biome FROZEN_OCEAN = getBiome("frozen_ocean");
Biome FROZEN_PEAKS = getBiome("frozen_peaks");
Biome FROZEN_RIVER = getBiome("frozen_river");
Biome GROVE = getBiome("grove");
Biome ICE_SPIKES = getBiome("ice_spikes");
Biome JAGGED_PEAKS = getBiome("jagged_peaks");
Biome JUNGLE = getBiome("jungle");
Biome LUKEWARM_OCEAN = getBiome("lukewarm_ocean");
Biome LUSH_CAVES = getBiome("lush_caves");
Biome MANGROVE_SWAMP = getBiome("mangrove_swamp");
Biome MEADOW = getBiome("meadow");
Biome MUSHROOM_FIELDS = getBiome("mushroom_fields");
Biome NETHER_WASTES = getBiome("nether_wastes");
Biome OCEAN = getBiome("ocean");
Biome OLD_GROWTH_BIRCH_FOREST = getBiome("old_growth_birch_forest");
Biome OLD_GROWTH_PINE_TAIGA = getBiome("old_growth_pine_taiga");
Biome OLD_GROWTH_SPRUCE_TAIGA = getBiome("old_growth_spruce_taiga");
Biome PALE_GARDEN = getBiome("pale_garden");
Biome PLAINS = getBiome("plains");
Biome RIVER = getBiome("river");
Biome SAVANNA = getBiome("savanna");
Biome SAVANNA_PLATEAU = getBiome("savanna_plateau");
Biome SMALL_END_ISLANDS = getBiome("small_end_islands");
Biome SNOWY_BEACH = getBiome("snowy_beach");
Biome SNOWY_PLAINS = getBiome("snowy_plains");
Biome SNOWY_SLOPES = getBiome("snowy_slopes");
Biome SNOWY_TAIGA = getBiome("snowy_taiga");
Biome SOUL_SAND_VALLEY = getBiome("soul_sand_valley");
Biome SPARSE_JUNGLE = getBiome("sparse_jungle");
Biome STONY_PEAKS = getBiome("stony_peaks");
Biome STONY_SHORE = getBiome("stony_shore");
Biome SUNFLOWER_PLAINS = getBiome("sunflower_plains");
Biome SWAMP = getBiome("swamp");
Biome TAIGA = getBiome("taiga");
Biome THE_END = getBiome("the_end");
Biome THE_VOID = getBiome("the_void");
Biome WARM_OCEAN = getBiome("warm_ocean");
Biome WARPED_FOREST = getBiome("warped_forest");
Biome WINDSWEPT_FOREST = getBiome("windswept_forest");
Biome WINDSWEPT_GRAVELLY_HILLS = getBiome("windswept_gravelly_hills");
Biome WINDSWEPT_HILLS = getBiome("windswept_hills");
Biome WINDSWEPT_SAVANNA = getBiome("windswept_savanna");
Biome WOODED_BADLANDS = getBiome("wooded_badlands");
// End generate - Biome
/**
* Represents a custom Biome
*
* @deprecated Biome is no longer an enum, custom biomes will have their own biome instance.
*/
@Deprecated(since = "1.21.3", forRemoval = true) @org.jetbrains.annotations.ApiStatus.ScheduledForRemoval(inVersion = "1.22") // Paper - will be removed via asm-utils
Biome CUSTOM = Bukkit.getUnsafe().getCustomBiome();
Biome CUSTOM = InternalAPIBridge.get().constructLegacyCustomBiome();
@NotNull
private static Biome getBiome(@NotNull String key) {

View File

@@ -364,7 +364,7 @@ public interface Block extends Metadatable, Translatable, net.kyori.adventure.tr
// Paper start
/**
* @see #getState() optionally disables use of snapshot, to operate on real block data
* @param useSnapshot if this block is a TE, should we create a fully copy of the TileEntity
* @param useSnapshot if this block is a block entity, should we create a full copy of the BlockEntity
* @return BlockState with the current state of this block
*/
@NotNull

File diff suppressed because it is too large Load Diff

View File

@@ -70,7 +70,6 @@ public interface Campfire extends TileState {
*/
void setCookTimeTotal(int index, int cookTimeTotal);
// Paper start
/**
* Disable cooking in all slots.
*/
@@ -104,5 +103,4 @@ public interface Campfire extends TileState {
* @return {@code true} if the specified slot index cannot cook
*/
boolean isCookingDisabled(int index);
// Paper end
}

View File

@@ -10,7 +10,7 @@ public interface CommandBlock extends TileState, io.papermc.paper.command.Comman
/**
* Gets the command that this CommandBlock will run when powered.
* This will never return null. If the CommandBlock does not have a
* This will never return null. If the CommandBlock does not have a
* command, an empty String will be returned instead.
*
* @return Command that this CommandBlock will run when powered.
@@ -28,8 +28,8 @@ public interface CommandBlock extends TileState, io.papermc.paper.command.Comman
public void setCommand(@Nullable String command);
/**
* Gets the name of this CommandBlock. The name is used with commands
* that this CommandBlock executes. This name will never be null, and
* Gets the name of this CommandBlock. The name is used with commands
* that this CommandBlock executes. This name will never be null, and
* by default is "@".
*
* @return Name of this CommandBlock.
@@ -40,8 +40,8 @@ public interface CommandBlock extends TileState, io.papermc.paper.command.Comman
public String getName();
/**
* Sets the name of this CommandBlock. The name is used with commands
* that this CommandBlock executes. Setting the name to null is the
* Sets the name of this CommandBlock. The name is used with commands
* that this CommandBlock executes. Setting the name to null is the
* same as setting it to "@".
*
* @param name New name for this CommandBlock.
@@ -50,10 +50,9 @@ public interface CommandBlock extends TileState, io.papermc.paper.command.Comman
@Deprecated // Paper
public void setName(@Nullable String name);
// Paper start
/**
* Gets the name of this CommandBlock. The name is used with commands
* that this CommandBlock executes. This name will never be null, and
* Gets the name of this CommandBlock. The name is used with commands
* that this CommandBlock executes. This name will never be null, and
* by default is a {@link net.kyori.adventure.text.TextComponent} containing {@code @}.
*
* @return Name of this CommandBlock.
@@ -61,12 +60,11 @@ public interface CommandBlock extends TileState, io.papermc.paper.command.Comman
public net.kyori.adventure.text.@NotNull Component name();
/**
* Sets the name of this CommandBlock. The name is used with commands
* that this CommandBlock executes. Setting the name to null is the
* Sets the name of this CommandBlock. The name is used with commands
* that this CommandBlock executes. Setting the name to null is the
* same as setting it to a {@link net.kyori.adventure.text.TextComponent} containing {@code @}.
*
* @param name New name for this CommandBlock.
*/
public void name(net.kyori.adventure.text.@Nullable Component name);
// Paper end
}

View File

@@ -0,0 +1,20 @@
package org.bukkit.block;
/**
* Represents the face and the direction of a block
*/
public enum Orientation {
DOWN_EAST,
DOWN_NORTH,
DOWN_SOUTH,
DOWN_WEST,
UP_EAST,
UP_NORTH,
UP_SOUTH,
UP_WEST,
WEST_UP,
EAST_UP,
NORTH_UP,
SOUTH_UP
}

View File

@@ -0,0 +1,7 @@
package org.bukkit.block;
/**
* Represents a captured state of a test block.
*/
public interface TestBlock extends TileState {
}

View File

@@ -0,0 +1,7 @@
package org.bukkit.block;
/**
* Represents a captured state of a test instance block.
*/
public interface TestInstanceBlock extends TileState {
}

View File

@@ -5,13 +5,13 @@ import org.bukkit.persistence.PersistentDataHolder;
import org.jetbrains.annotations.NotNull;
/**
* Represents a block state that also hosts a tile entity at the given location.
*
* Represents a block state that also hosts a block entity at the given location.
* <br>
* This interface alone is merely a marker that does not provide any data.
*
* Data about the tile entities is provided by the respective interface for each
* tile entity type.
*
* <p>
* Data about the block entities is provided by the respective interface for each
* block entity type.
* <p>
* After modifying the data provided by a TileState, {@link #update()} needs to
* be called to store the data.
*/
@@ -19,16 +19,16 @@ public interface TileState extends BlockState, PersistentDataHolder {
/**
* Returns a custom tag container capable of storing tags on the object.
*
* <p>
* Note that the tags stored on this container are all stored under their
* own custom namespace therefore modifying default tags using this
* {@link PersistentDataHolder} is impossible.
* <p>
* This {@link PersistentDataHolder} is only linked to the snapshot instance
* stored by the {@link BlockState}.
*
* <p>
* When storing changes on the {@link PersistentDataHolder}, the updated
* content will only be applied to the actual tile entity after one of the
* content will only be applied to the actual block entity after one of the
* {@link #update()} methods is called.
*
* @return the custom tag container
@@ -40,7 +40,7 @@ public interface TileState extends BlockState, PersistentDataHolder {
// Paper start
/**
* Checks if this TileState is a snapshot or a live
* representation of the underlying tile entity.
* representation of the underlying block entity.
* <p>
* NOTE: You may still have to call {@link BlockState#update()} on
* live representations to update any visuals on the block.

View File

@@ -14,50 +14,96 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public interface PatternType extends OldEnum<PatternType>, Keyed {
// Start generate - PatternType
// @GeneratedFrom 1.21.5
PatternType BASE = getType("base");
PatternType SQUARE_BOTTOM_LEFT = getType("square_bottom_left");
PatternType SQUARE_BOTTOM_RIGHT = getType("square_bottom_right");
PatternType SQUARE_TOP_LEFT = getType("square_top_left");
PatternType SQUARE_TOP_RIGHT = getType("square_top_right");
PatternType STRIPE_BOTTOM = getType("stripe_bottom");
PatternType STRIPE_TOP = getType("stripe_top");
PatternType STRIPE_LEFT = getType("stripe_left");
PatternType STRIPE_RIGHT = getType("stripe_right");
PatternType STRIPE_CENTER = getType("stripe_center");
PatternType STRIPE_MIDDLE = getType("stripe_middle");
PatternType STRIPE_DOWNRIGHT = getType("stripe_downright");
PatternType STRIPE_DOWNLEFT = getType("stripe_downleft");
PatternType SMALL_STRIPES = getType("small_stripes");
PatternType CROSS = getType("cross");
PatternType STRAIGHT_CROSS = getType("straight_cross");
PatternType TRIANGLE_BOTTOM = getType("triangle_bottom");
PatternType TRIANGLE_TOP = getType("triangle_top");
PatternType TRIANGLES_BOTTOM = getType("triangles_bottom");
PatternType TRIANGLES_TOP = getType("triangles_top");
PatternType DIAGONAL_LEFT = getType("diagonal_left");
PatternType DIAGONAL_UP_RIGHT = getType("diagonal_up_right");
PatternType DIAGONAL_UP_LEFT = getType("diagonal_up_left");
PatternType DIAGONAL_RIGHT = getType("diagonal_right");
PatternType CIRCLE = getType("circle");
PatternType RHOMBUS = getType("rhombus");
PatternType HALF_VERTICAL = getType("half_vertical");
PatternType HALF_HORIZONTAL = getType("half_horizontal");
PatternType HALF_VERTICAL_RIGHT = getType("half_vertical_right");
PatternType HALF_HORIZONTAL_BOTTOM = getType("half_horizontal_bottom");
PatternType BORDER = getType("border");
PatternType CURLY_BORDER = getType("curly_border");
PatternType CREEPER = getType("creeper");
PatternType GRADIENT = getType("gradient");
PatternType GRADIENT_UP = getType("gradient_up");
PatternType BRICKS = getType("bricks");
PatternType SKULL = getType("skull");
PatternType FLOWER = getType("flower");
PatternType MOJANG = getType("mojang");
PatternType GLOBE = getType("globe");
PatternType PIGLIN = getType("piglin");
PatternType CIRCLE = getType("circle");
PatternType CREEPER = getType("creeper");
PatternType CROSS = getType("cross");
PatternType CURLY_BORDER = getType("curly_border");
PatternType DIAGONAL_LEFT = getType("diagonal_left");
PatternType DIAGONAL_RIGHT = getType("diagonal_right");
PatternType DIAGONAL_UP_LEFT = getType("diagonal_up_left");
PatternType DIAGONAL_UP_RIGHT = getType("diagonal_up_right");
PatternType FLOW = getType("flow");
PatternType FLOWER = getType("flower");
PatternType GLOBE = getType("globe");
PatternType GRADIENT = getType("gradient");
PatternType GRADIENT_UP = getType("gradient_up");
PatternType GUSTER = getType("guster");
PatternType HALF_HORIZONTAL = getType("half_horizontal");
PatternType HALF_HORIZONTAL_BOTTOM = getType("half_horizontal_bottom");
PatternType HALF_VERTICAL = getType("half_vertical");
PatternType HALF_VERTICAL_RIGHT = getType("half_vertical_right");
PatternType MOJANG = getType("mojang");
PatternType PIGLIN = getType("piglin");
PatternType RHOMBUS = getType("rhombus");
PatternType SKULL = getType("skull");
PatternType SMALL_STRIPES = getType("small_stripes");
PatternType SQUARE_BOTTOM_LEFT = getType("square_bottom_left");
PatternType SQUARE_BOTTOM_RIGHT = getType("square_bottom_right");
PatternType SQUARE_TOP_LEFT = getType("square_top_left");
PatternType SQUARE_TOP_RIGHT = getType("square_top_right");
PatternType STRAIGHT_CROSS = getType("straight_cross");
PatternType STRIPE_BOTTOM = getType("stripe_bottom");
PatternType STRIPE_CENTER = getType("stripe_center");
PatternType STRIPE_DOWNLEFT = getType("stripe_downleft");
PatternType STRIPE_DOWNRIGHT = getType("stripe_downright");
PatternType STRIPE_LEFT = getType("stripe_left");
PatternType STRIPE_MIDDLE = getType("stripe_middle");
PatternType STRIPE_RIGHT = getType("stripe_right");
PatternType STRIPE_TOP = getType("stripe_top");
PatternType TRIANGLE_BOTTOM = getType("triangle_bottom");
PatternType TRIANGLE_TOP = getType("triangle_top");
PatternType TRIANGLES_BOTTOM = getType("triangles_bottom");
PatternType TRIANGLES_TOP = getType("triangles_top");
// End generate - PatternType
// Paper start - deprecate getKey
/**
* @deprecated use {@link Registry#getKey(Keyed)}, {@link io.papermc.paper.registry.RegistryAccess#getRegistry(io.papermc.paper.registry.RegistryKey)},

View File

@@ -0,0 +1,35 @@
package org.bukkit.block.data;
/**
* 'segment_amount' represents the number of segment in this block.
*/
public interface Segmentable extends BlockData {
/**
* Gets the value of the 'segment_amount' property.
*
* @return the 'segment_amount' value
*/
int getSegmentAmount();
/**
* Sets the value of the 'segment_amount' property.
*
* @param segmentAmount the new 'segment_amount' value
*/
void setSegmentAmount(int segmentAmount);
/**
* Gets the minimum allowed value of the 'segment_amount' property.
*
* @return the minimum 'segment_amount' value
*/
int getMinimumSegmentAmount();
/**
* Gets the maximum allowed value of the 'segment_amount' property.
*
* @return the maximum 'segment_amount' value
*/
int getMaximumSegmentAmount();
}

View File

@@ -11,8 +11,19 @@ public interface CaveVinesPlant extends BlockData {
* Gets the value of the 'berries' property.
*
* @return the 'berries' value
* @deprecated bad name, use {@link #hasBerries()}
*/
boolean isBerries();
@Deprecated
default boolean isBerries() {
return this.hasBerries();
}
/**
* Gets the value of the 'berries' property.
*
* @return the 'berries' value
*/
boolean hasBerries();
/**
* Sets the value of the 'berries' property.

View File

@@ -48,18 +48,23 @@ public interface Crafter extends BlockData {
* @return the 'orientation' value
*/
@NotNull
Orientation getOrientation();
org.bukkit.block.Orientation getOrientation();
/**
* Sets the value of the 'orientation' property.
*
* @param orientation the new 'orientation' value
*/
void setOrientation(@NotNull Orientation orientation);
void setOrientation(@NotNull org.bukkit.block.Orientation orientation);
/**
* The directions the Crafter can be oriented.
*
* @deprecated this property is not specific to the Crafter, use
* {@link org.bukkit.block.Orientation} instead. All references
* to this enum will be redirected to that enum at runtime.
*/
@Deprecated
public enum Orientation {
DOWN_EAST,

View File

@@ -1,9 +1,10 @@
package org.bukkit.block.data.type;
import org.bukkit.block.data.Orientable;
import org.jetbrains.annotations.NotNull;
/**
* 'active' is whether the block is active.
* 'creaking_heart_state' is the state of the block depending on the time and its position.
* <br>
* 'natural' is whether this is a naturally generated block.
*/
@@ -13,15 +14,38 @@ public interface CreakingHeart extends Orientable {
* Gets the value of the 'active' property.
*
* @return the 'active' value
* @deprecated use {@link #getCreakingHeartState()}
*/
boolean isActive();
@Deprecated(since = "1.21.5", forRemoval = true)
default boolean isActive() {
return this.getCreakingHeartState() != State.UPROOTED;
}
/**
* Sets the value of the 'active' property.
*
* @param active the new 'active' value
* @deprecated use {@link #setCreakingHeartState(State)}
*/
void setActive(boolean active);
@Deprecated(since = "1.21.5", forRemoval = true)
default void setActive(boolean active) {
this.setCreakingHeartState(active ? State.AWAKE : State.UPROOTED);
}
/**
* Gets the value of the 'creaking_heart_state' property.
*
* @return the 'creaking_heart_state' value
*/
@NotNull
State getCreakingHeartState();
/**
* Sets the value of the 'creaking_heart_state' property.
*
* @param state the new 'creaking_heart_state' value
*/
void setCreakingHeartState(@NotNull State state);
/**
* Gets the value of the 'natural' property.
@@ -36,4 +60,10 @@ public interface CreakingHeart extends Orientable {
* @param natural the new 'natural' value
*/
void setNatural(boolean natural);
enum State {
UPROOTED,
DORMANT,
AWAKE
}
}

View File

@@ -4,17 +4,18 @@ import org.bukkit.block.data.Directional;
import org.bukkit.block.data.Waterlogged;
public interface DecoratedPot extends Directional, Waterlogged {
// Paper start - add missing block data api
/**
* @return whether the pot is cracked
*/
public boolean isCracked();
/**
* Set whether the pot is cracked.
* Gets the value of the 'cracked' property.
*
* @param cracked whether the pot is cracked
* @return the 'cracked' value
*/
public void setCracked(boolean cracked);
// Paper end - add missing block data api
boolean isCracked();
/**
* Sets the value of the 'cracked' property.
*
* @param cracked the new 'cracked' value
*/
void setCracked(boolean cracked);
}

View File

@@ -0,0 +1,39 @@
package org.bukkit.block.data.type;
import org.bukkit.block.data.Directional;
/**
* 'flower_amount' represents the number of flowers.
*/
public interface FlowerBed extends Directional {
/**
* Gets the value of the 'flower_amount' property.
*
* @return the 'flower_amount' value
*/
int getFlowerAmount();
/**
* Sets the value of the 'flower_amount' property.
*
* @param flower_amount the new 'flower_amount' value
*/
void setFlowerAmount(int flower_amount);
// Paper start
/**
* Gets the minimum allowed value of the 'flower_amount' property.
*
* @return the minimum 'flower_amount' value
*/
int getMinimumFlowerAmount();
// Paper end
/**
* Gets the maximum allowed value of the 'flower_amount' property.
*
* @return the maximum 'flower_amount' value
*/
int getMaximumFlowerAmount();
}

View File

@@ -14,18 +14,23 @@ public interface Jigsaw extends BlockData {
* @return the 'orientation' value
*/
@NotNull
Orientation getOrientation();
org.bukkit.block.Orientation getOrientation();
/**
* Sets the value of the 'orientation' property.
*
* @param orientation the new 'orientation' value
*/
void setOrientation(@NotNull Orientation orientation);
void setOrientation(@NotNull org.bukkit.block.Orientation orientation);
/**
* The directions the Jigsaw can be oriented.
*
* @deprecated this property is not specific to the Jigsaw, use
* {@link org.bukkit.block.Orientation} instead. All references
* to this enum will be redirected to that enum at runtime.
*/
@Deprecated
public enum Orientation {
DOWN_EAST,

View File

@@ -14,4 +14,11 @@ public interface Jukebox extends BlockData {
* @return the 'has_record' value
*/
boolean hasRecord();
/**
* Sets the value of the 'has_record' property.
*
* @param hasRecord the new 'has_record' value
*/
void setHasRecord(boolean hasRecord);
}

View File

@@ -0,0 +1,6 @@
package org.bukkit.block.data.type;
import org.bukkit.block.data.Directional;
import org.bukkit.block.data.Segmentable;
public interface LeafLitter extends Segmentable, Directional { }

View File

@@ -15,4 +15,11 @@ public interface Lectern extends Directional, Powerable {
* @return the 'has_book' value
*/
boolean hasBook();
/**
* Sets the value of the 'has_book' property.
*
* @param hasBook the new 'has_book' value
*/
void setHasBook(boolean hasBook);
}

View File

@@ -33,7 +33,7 @@ public interface MossyCarpet extends BlockData {
* @return if face is enabled
*/
@NotNull
Height getHeight(@NotNull BlockFace face);
Wall.Height getHeight(@NotNull BlockFace face);
/**
* Set the height of the specified face.
@@ -41,11 +41,16 @@ public interface MossyCarpet extends BlockData {
* @param face to set
* @param height the height
*/
void setHeight(@NotNull BlockFace face, @NotNull Height height);
void setHeight(@NotNull BlockFace face, @NotNull Wall.Height height);
/**
* The different heights a face may have.
*
* @deprecated this property is not specific to the MossyCarpet, use
* {@link org.bukkit.block.data.type.Wall.Height} instead. All references
* to this enum will be redirected to that enum at runtime.
*/
@Deprecated
public enum Height {
/**
* Not present.

View File

@@ -1,39 +1,11 @@
package org.bukkit.block.data.type;
import org.bukkit.block.data.Directional;
/**
* 'flower_amount' represents the number of petals.
*
* @deprecated incorrect name as multiple types of flower collection blocks exist now. Use {@link FlowerBed}
*/
public interface PinkPetals extends Directional {
@Deprecated(forRemoval = true, since = "1.21.5")
public interface PinkPetals extends FlowerBed {
/**
* Gets the value of the 'flower_amount' property.
*
* @return the 'flower_amount' value
*/
int getFlowerAmount();
/**
* Sets the value of the 'flower_amount' property.
*
* @param flower_amount the new 'flower_amount' value
*/
void setFlowerAmount(int flower_amount);
// Paper start
/**
* Gets the minimum allowed value of the 'flower_amount' property.
*
* @return the minimum 'flower_amount' value
*/
int getMinimumFlowerAmount();
// Paper end
/**
* Gets the maximum allowed value of the 'flower_amount' property.
*
* @return the maximum 'flower_amount' value
*/
int getMaximumFlowerAmount();
}

View File

@@ -13,16 +13,39 @@ public interface SculkSensor extends AnaloguePowerable, Waterlogged {
* Gets the value of the 'sculk_sensor_phase' property.
*
* @return the 'sculk_sensor_phase' value
* @deprecated bad name, use {@link #getSculkSensorPhase()}
*/
@NotNull
Phase getPhase();
@Deprecated
default Phase getPhase() {
return this.getSculkSensorPhase();
}
/**
* Sets the value of the 'sculk_sensor_phase' property.
*
* @param phase the new 'sculk_sensor_phase' value
* @deprecated bad name, use {@link #setSculkSensorPhase(Phase)}
*/
@Deprecated
default void setPhase(@NotNull Phase phase) {
this.setSculkSensorPhase(phase);
}
/**
* Gets the value of the 'sculk_sensor_phase' property.
*
* @return the 'sculk_sensor_phase' value
*/
@NotNull
Phase getSculkSensorPhase();
/**
* Sets the value of the 'sculk_sensor_phase' property.
*
* @param phase the new 'sculk_sensor_phase' value
*/
void setPhase(@NotNull Phase phase);
void setSculkSensorPhase(@NotNull Phase phase);
/**
* The Phase of the sensor.

View File

@@ -7,6 +7,11 @@ import org.jetbrains.annotations.NotNull;
public interface Switch extends Directional, FaceAttachable, Powerable {
@NotNull
AttachedFace getAttachedFace();
void setAttachedFace(@NotNull AttachedFace face);
/**
* Gets the value of the 'face' property.
*
@@ -15,7 +20,9 @@ public interface Switch extends Directional, FaceAttachable, Powerable {
*/
@NotNull
@Deprecated(since = "1.15.2")
Face getFace();
default Face getFace() {
return Face.valueOf(this.getAttachedFace().name());
}
/**
* Sets the value of the 'face' property.
@@ -24,7 +31,9 @@ public interface Switch extends Directional, FaceAttachable, Powerable {
* @deprecated use {@link #setAttachedFace(AttachedFace)}
*/
@Deprecated(since = "1.15.2")
void setFace(@NotNull Face face);
default void setFace(@NotNull Face face) {
this.setAttachedFace(AttachedFace.valueOf(face.name()));
}
/**
* The face to which a switch type block is stuck.

View File

@@ -0,0 +1,32 @@
package org.bukkit.block.data.type;
import org.bukkit.block.data.BlockData;
import org.jetbrains.annotations.NotNull;
/**
* 'mode' is the reaction of the block to a redstone pulse or its supply.
*/
public interface TestBlock extends BlockData {
/**
* Gets the value of the 'mode' property.
*
* @return the 'mode' value
*/
@NotNull
Mode getMode();
/**
* Sets the value of the 'mode' property.
*
* @param mode the new 'mode' value
*/
void setMode(@NotNull Mode mode);
enum Mode {
START,
LOG,
FAIL,
ACCEPT
}
}

View File

@@ -26,7 +26,9 @@ public interface Vault extends Directional {
*/
@Deprecated(since = "1.21.3", forRemoval = true)
@NotNull
State getTrialSpawnerState();
default State getTrialSpawnerState() {
return this.getVaultState();
}
/**
* Sets the value of the 'vault_state' property.
@@ -42,7 +44,9 @@ public interface Vault extends Directional {
* @deprecated see {@link #setVaultState(State)}
*/
@Deprecated(since = "1.21.3", forRemoval = true)
void setTrialSpawnerState(@NotNull State state);
default void setTrialSpawnerState(@NotNull State state) {
this.setVaultState(state);
}
/**
* Gets the value of the 'ominous' property.

View File

@@ -1,6 +1,5 @@
package org.bukkit.command.defaults;
import com.google.common.base.Charsets;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
import com.google.common.io.Resources;
@@ -11,6 +10,7 @@ import java.io.BufferedReader;
import java.io.IOException;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
@@ -25,14 +25,12 @@ import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.PluginDescriptionFile;
import org.bukkit.util.StringUtil;
import org.jetbrains.annotations.NotNull;
// Paper start - version command 2.0
import com.destroystokyo.paper.util.VersionFetcher;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.event.ClickEvent;
import net.kyori.adventure.text.format.TextDecoration;
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
// Paper end - version command 2.0
public class VersionCommand extends BukkitCommand {
private VersionFetcher versionFetcher; // Paper - version command 2.0
@@ -283,8 +281,8 @@ public class VersionCommand extends BukkitCommand {
private static int getDistance(@NotNull String repo, @NotNull String hash) {
try {
BufferedReader reader = Resources.asCharSource(
new URL("https://hub.spigotmc.org/stash/rest/api/1.0/projects/SPIGOT/repos/" + repo + "/commits?since=" + URLEncoder.encode(hash, "UTF-8") + "&withCounts=true"),
Charsets.UTF_8
new URL("https://hub.spigotmc.org/stash/rest/api/1.0/projects/SPIGOT/repos/" + repo + "/commits?since=" + URLEncoder.encode(hash, StandardCharsets.UTF_8) + "&withCounts=true"),
StandardCharsets.UTF_8
).openBufferedStream();
try {
JsonObject obj = new Gson().fromJson(reader, JsonObject.class);

View File

@@ -1,6 +1,5 @@
package org.bukkit.configuration.file;
import com.google.common.base.Charsets;
import com.google.common.base.Preconditions;
import com.google.common.io.Files;
import java.io.BufferedReader;
@@ -13,6 +12,7 @@ import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
import java.nio.charset.StandardCharsets;
import org.bukkit.configuration.Configuration;
import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.configuration.MemoryConfiguration;
@@ -64,7 +64,7 @@ public abstract class FileConfiguration extends MemoryConfiguration {
String data = saveToString();
Writer writer = new OutputStreamWriter(new FileOutputStream(file), Charsets.UTF_8);
Writer writer = new OutputStreamWriter(new FileOutputStream(file), StandardCharsets.UTF_8);
try {
writer.write(data);
@@ -125,7 +125,7 @@ public abstract class FileConfiguration extends MemoryConfiguration {
final FileInputStream stream = new FileInputStream(file);
load(new InputStreamReader(stream, Charsets.UTF_8));
load(new InputStreamReader(stream, StandardCharsets.UTF_8));
}
/**

View File

@@ -21,55 +21,106 @@ import org.jetbrains.annotations.NotNull;
@ApiStatus.Experimental
public interface DamageType extends Keyed, Translatable {
public static final DamageType IN_FIRE = getDamageType("in_fire");
public static final DamageType CAMPFIRE = getDamageType("campfire");
public static final DamageType LIGHTNING_BOLT = getDamageType("lightning_bolt");
public static final DamageType ON_FIRE = getDamageType("on_fire");
public static final DamageType LAVA = getDamageType("lava");
public static final DamageType HOT_FLOOR = getDamageType("hot_floor");
public static final DamageType IN_WALL = getDamageType("in_wall");
public static final DamageType CRAMMING = getDamageType("cramming");
public static final DamageType DROWN = getDamageType("drown");
public static final DamageType STARVE = getDamageType("starve");
public static final DamageType CACTUS = getDamageType("cactus");
public static final DamageType FALL = getDamageType("fall");
public static final DamageType ENDER_PEARL = getDamageType("ender_pearl");
public static final DamageType FLY_INTO_WALL = getDamageType("fly_into_wall");
public static final DamageType OUT_OF_WORLD = getDamageType("out_of_world");
public static final DamageType GENERIC = getDamageType("generic");
public static final DamageType MAGIC = getDamageType("magic");
public static final DamageType WITHER = getDamageType("wither");
public static final DamageType DRAGON_BREATH = getDamageType("dragon_breath");
public static final DamageType DRY_OUT = getDamageType("dry_out");
public static final DamageType SWEET_BERRY_BUSH = getDamageType("sweet_berry_bush");
public static final DamageType FREEZE = getDamageType("freeze");
public static final DamageType STALAGMITE = getDamageType("stalagmite");
public static final DamageType FALLING_BLOCK = getDamageType("falling_block");
public static final DamageType FALLING_ANVIL = getDamageType("falling_anvil");
public static final DamageType FALLING_STALACTITE = getDamageType("falling_stalactite");
public static final DamageType STING = getDamageType("sting");
public static final DamageType MOB_ATTACK = getDamageType("mob_attack");
public static final DamageType MOB_ATTACK_NO_AGGRO = getDamageType("mob_attack_no_aggro");
public static final DamageType PLAYER_ATTACK = getDamageType("player_attack");
public static final DamageType ARROW = getDamageType("arrow");
public static final DamageType TRIDENT = getDamageType("trident");
public static final DamageType MOB_PROJECTILE = getDamageType("mob_projectile");
public static final DamageType SPIT = getDamageType("spit");
public static final DamageType FIREWORKS = getDamageType("fireworks");
public static final DamageType FIREBALL = getDamageType("fireball");
public static final DamageType UNATTRIBUTED_FIREBALL = getDamageType("unattributed_fireball");
public static final DamageType WITHER_SKULL = getDamageType("wither_skull");
public static final DamageType THROWN = getDamageType("thrown");
public static final DamageType INDIRECT_MAGIC = getDamageType("indirect_magic");
public static final DamageType THORNS = getDamageType("thorns");
public static final DamageType EXPLOSION = getDamageType("explosion");
public static final DamageType PLAYER_EXPLOSION = getDamageType("player_explosion");
public static final DamageType SONIC_BOOM = getDamageType("sonic_boom");
public static final DamageType BAD_RESPAWN_POINT = getDamageType("bad_respawn_point");
public static final DamageType OUTSIDE_BORDER = getDamageType("outside_border");
public static final DamageType GENERIC_KILL = getDamageType("generic_kill");
public static final DamageType WIND_CHARGE = getDamageType("wind_charge");
public static final DamageType MACE_SMASH = getDamageType("mace_smash");
// Start generate - DamageType
// @GeneratedFrom 1.21.5
DamageType ARROW = getDamageType("arrow");
DamageType BAD_RESPAWN_POINT = getDamageType("bad_respawn_point");
DamageType CACTUS = getDamageType("cactus");
DamageType CAMPFIRE = getDamageType("campfire");
DamageType CRAMMING = getDamageType("cramming");
DamageType DRAGON_BREATH = getDamageType("dragon_breath");
DamageType DROWN = getDamageType("drown");
DamageType DRY_OUT = getDamageType("dry_out");
DamageType ENDER_PEARL = getDamageType("ender_pearl");
DamageType EXPLOSION = getDamageType("explosion");
DamageType FALL = getDamageType("fall");
DamageType FALLING_ANVIL = getDamageType("falling_anvil");
DamageType FALLING_BLOCK = getDamageType("falling_block");
DamageType FALLING_STALACTITE = getDamageType("falling_stalactite");
DamageType FIREBALL = getDamageType("fireball");
DamageType FIREWORKS = getDamageType("fireworks");
DamageType FLY_INTO_WALL = getDamageType("fly_into_wall");
DamageType FREEZE = getDamageType("freeze");
DamageType GENERIC = getDamageType("generic");
DamageType GENERIC_KILL = getDamageType("generic_kill");
DamageType HOT_FLOOR = getDamageType("hot_floor");
DamageType IN_FIRE = getDamageType("in_fire");
DamageType IN_WALL = getDamageType("in_wall");
DamageType INDIRECT_MAGIC = getDamageType("indirect_magic");
DamageType LAVA = getDamageType("lava");
DamageType LIGHTNING_BOLT = getDamageType("lightning_bolt");
DamageType MACE_SMASH = getDamageType("mace_smash");
DamageType MAGIC = getDamageType("magic");
DamageType MOB_ATTACK = getDamageType("mob_attack");
DamageType MOB_ATTACK_NO_AGGRO = getDamageType("mob_attack_no_aggro");
DamageType MOB_PROJECTILE = getDamageType("mob_projectile");
DamageType ON_FIRE = getDamageType("on_fire");
DamageType OUT_OF_WORLD = getDamageType("out_of_world");
DamageType OUTSIDE_BORDER = getDamageType("outside_border");
DamageType PLAYER_ATTACK = getDamageType("player_attack");
DamageType PLAYER_EXPLOSION = getDamageType("player_explosion");
DamageType SONIC_BOOM = getDamageType("sonic_boom");
DamageType SPIT = getDamageType("spit");
DamageType STALAGMITE = getDamageType("stalagmite");
DamageType STARVE = getDamageType("starve");
DamageType STING = getDamageType("sting");
DamageType SWEET_BERRY_BUSH = getDamageType("sweet_berry_bush");
DamageType THORNS = getDamageType("thorns");
DamageType THROWN = getDamageType("thrown");
DamageType TRIDENT = getDamageType("trident");
DamageType UNATTRIBUTED_FIREBALL = getDamageType("unattributed_fireball");
DamageType WIND_CHARGE = getDamageType("wind_charge");
DamageType WITHER = getDamageType("wither");
DamageType WITHER_SKULL = getDamageType("wither_skull");
// End generate - DamageType
@NotNull
private static DamageType getDamageType(@NotNull String key) {

View File

@@ -6,7 +6,10 @@ import org.jetbrains.annotations.NotNull;
/**
* Represents the applicable target for a {@link Enchantment}
*
* @deprecated enchantment groupings are now managed by tags, not categories
*/
@Deprecated(since = "1.20.5", forRemoval = true)
public enum EnchantmentTarget {
/**
* Allows the Enchantment to be placed on all items

View File

@@ -0,0 +1,14 @@
package org.bukkit.entity;
import org.jspecify.annotations.NullMarked;
/**
* This interface defines or represents the abstract concept of cow-like
* entities on the server. The interface is hence not a direct representation
* of an entity but rather serves as a parent to interfaces/entity types like
* {@link Cow} or {@link MushroomCow}.
*/
@NullMarked
public interface AbstractCow extends Animals {
}

View File

@@ -223,7 +223,7 @@ public interface AreaEffectCloud extends Entity {
* @param type the potion effect type to check for
* @return true if the potion has this effect
*/
boolean hasCustomEffect(@Nullable PotionEffectType type);
boolean hasCustomEffect(@NotNull PotionEffectType type);
/**
* Removes all custom potion effects from this cloud.

Some files were not shown because too many files have changed in this diff Show More