all api patches done*

*still waiting for leaf to port datafixer to 1.18 so i can do entity serialization
This commit is contained in:
Josh Roy 2021-11-24 20:24:51 -05:00 committed by MiniDigger | Martin
parent 4df6820f86
commit c1d14dc076
34 changed files with 49 additions and 62 deletions

View file

@ -0,0 +1,71 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Jake Potrebic <jake.m.potrebic@gmail.com>
Date: Sun, 3 Jan 2021 17:58:25 -0800
Subject: [PATCH] Add BlockBreakBlockEvent
diff --git a/src/main/java/io/papermc/paper/event/block/BlockBreakBlockEvent.java b/src/main/java/io/papermc/paper/event/block/BlockBreakBlockEvent.java
new file mode 100644
index 0000000000000000000000000000000000000000..ac7a60403a9e51fc194f2cc92b0bd60d8879a661
--- /dev/null
+++ b/src/main/java/io/papermc/paper/event/block/BlockBreakBlockEvent.java
@@ -0,0 +1,59 @@
+package io.papermc.paper.event.block;
+
+import org.bukkit.block.Block;
+import org.bukkit.event.HandlerList;
+import org.bukkit.event.block.BlockEvent;
+import org.bukkit.inventory.ItemStack;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.List;
+
+/**
+ * Called when a block forces another block to break and drop items.
+ * <p>
+ * Currently called for piston's and liquid flows.
+ */
+public class BlockBreakBlockEvent extends BlockEvent {
+
+ private static final HandlerList HANDLER_LIST = new HandlerList();
+
+ private final List<ItemStack> drops;
+ private final Block source;
+
+ public BlockBreakBlockEvent(@NotNull Block block, @NotNull Block source, @NotNull List<ItemStack> drops) {
+ super(block);
+ this.source = source;
+ this.drops = drops;
+ }
+
+ /**
+ * Get the drops of this event
+ *
+ * @return the drops
+ */
+ @NotNull
+ public List<ItemStack> getDrops() {
+ return drops;
+ }
+
+ /**
+ * Gets the block that cause this (e.g. a piston, or adjacent liquid)
+ *
+ * @return the source
+ */
+ @NotNull
+ public Block getSource() {
+ return source;
+ }
+
+ @NotNull
+ @Override
+ public HandlerList getHandlers() {
+ return HANDLER_LIST;
+ }
+
+ @NotNull
+ public static HandlerList getHandlerList() {
+ return HANDLER_LIST;
+ }
+}

View file

@ -0,0 +1,37 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Madeline Miller <mnmiller1@me.com>
Date: Sun, 29 Aug 2021 17:00:56 +1000
Subject: [PATCH] Add helpers for left/right click to Action
diff --git a/src/main/java/org/bukkit/event/block/Action.java b/src/main/java/org/bukkit/event/block/Action.java
index 25d26e3fe713311e66d7e634a6c32af61f4cef59..f0b672bbfcd0eb17f3953ffcd0e728f5b3ec909b 100644
--- a/src/main/java/org/bukkit/event/block/Action.java
+++ b/src/main/java/org/bukkit/event/block/Action.java
@@ -29,5 +29,25 @@ public enum Action {
* <li>Triggering tripwire
* </ul>
*/
- PHYSICAL,
+ // Paper start
+ PHYSICAL;
+
+ /**
+ * Gets whether this action is a result of a left click.
+ *
+ * @return Whether it's a left click
+ */
+ public boolean isLeftClick() {
+ return this == LEFT_CLICK_AIR || this == LEFT_CLICK_BLOCK;
+ }
+
+ /**
+ * Gets whether this action is a result of a right click.
+ *
+ * @return Whether it's a right click
+ */
+ public boolean isRightClick() {
+ return this == RIGHT_CLICK_AIR || this == RIGHT_CLICK_BLOCK;
+ }
+ // Paper end
}

View file

@ -0,0 +1,56 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Jake Potrebic <jake.m.potrebic@gmail.com>
Date: Sun, 26 Sep 2021 12:57:35 -0700
Subject: [PATCH] Option to prevent NBT copy in smithing recipes
diff --git a/src/main/java/org/bukkit/inventory/SmithingRecipe.java b/src/main/java/org/bukkit/inventory/SmithingRecipe.java
index af04071d37e70b8cc9837d57477c8493be8afb9f..00000f1399b053bb3c7b6d4792559b630d414b81 100644
--- a/src/main/java/org/bukkit/inventory/SmithingRecipe.java
+++ b/src/main/java/org/bukkit/inventory/SmithingRecipe.java
@@ -13,6 +13,7 @@ public class SmithingRecipe implements Recipe, Keyed {
private final ItemStack result;
private final RecipeChoice base;
private final RecipeChoice addition;
+ private final boolean copyNbt; // Paper
/**
* Create a smithing recipe to produce the specified result ItemStack.
@@ -23,6 +24,21 @@ public class SmithingRecipe implements Recipe, Keyed {
* @param addition The addition ingredient
*/
public SmithingRecipe(@NotNull NamespacedKey key, @NotNull ItemStack result, @NotNull RecipeChoice base, @NotNull RecipeChoice addition) {
+ // Paper start
+ this(key, result, base, addition, true);
+ }
+ /**
+ * Create a smithing recipe to produce the specified result ItemStack.
+ *
+ * @param key The unique recipe key
+ * @param result The item you want the recipe to create.
+ * @param base The base ingredient
+ * @param addition The addition ingredient
+ * @param copyNbt whether to copy the nbt from the input base item to the output
+ */
+ public SmithingRecipe(@NotNull NamespacedKey key, @NotNull ItemStack result, @NotNull RecipeChoice base, @NotNull RecipeChoice addition, boolean copyNbt) {
+ this.copyNbt = copyNbt;
+ // Paper end
this.key = key;
this.result = result;
this.base = base;
@@ -60,4 +76,15 @@ public class SmithingRecipe implements Recipe, Keyed {
public NamespacedKey getKey() {
return this.key;
}
+
+ // Paper start
+ /**
+ * Whether or not to copy the NBT of the input base item to the output.
+ *
+ * @return true to copy the NBT (default for vanilla smithing recipes)
+ */
+ public boolean willCopyNbt() {
+ return copyNbt;
+ }
+ // Paper end
}

View file

@ -0,0 +1,96 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Jake Potrebic <jake.m.potrebic@gmail.com>
Date: Fri, 28 May 2021 21:47:39 -0700
Subject: [PATCH] More CommandBlock API
diff --git a/src/main/java/io/papermc/paper/command/CommandBlockHolder.java b/src/main/java/io/papermc/paper/command/CommandBlockHolder.java
new file mode 100644
index 0000000000000000000000000000000000000000..09e57f495e3cbf3c6f434d12ab34830862faeb88
--- /dev/null
+++ b/src/main/java/io/papermc/paper/command/CommandBlockHolder.java
@@ -0,0 +1,58 @@
+package io.papermc.paper.command;
+
+import net.kyori.adventure.text.Component;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+public interface CommandBlockHolder {
+
+ /**
+ * Gets the command that this CommandBlock will run when powered.
+ * 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 activated.
+ */
+ @NotNull
+ String getCommand();
+
+ /**
+ * Sets the command that this CommandBlock will run when powered.
+ * Setting the command to null is the same as setting it to an empty
+ * String.
+ *
+ * @param command Command that this CommandBlock will run when activated.
+ */
+ void setCommand(@Nullable String command);
+
+ /**
+ * Gets the last output from this command block.
+ *
+ * @return the last output
+ */
+ @NotNull
+ Component lastOutput();
+
+ /**
+ * Sets the last output from this command block.
+ *
+ * @param lastOutput the last output
+ */
+ void lastOutput(@Nullable Component lastOutput);
+
+ /**
+ * Gets the success count from this command block.
+ * @see <a href="https://minecraft.fandom.com/wiki/Command_Block#Success_count">Command_Block#Success_count</a>
+ *
+ * @return the success count
+ */
+ int getSuccessCount();
+
+ /**
+ * Sets the success count from this command block.
+ * @see <a href="https://minecraft.fandom.com/wiki/Command_Block#Success_count">Command_Block#Success_count</a>
+ *
+ * @param successCount the success count
+ */
+ void setSuccessCount(int successCount);
+}
diff --git a/src/main/java/org/bukkit/block/CommandBlock.java b/src/main/java/org/bukkit/block/CommandBlock.java
index 73dce588d1f7a5048300073bf8c2b14d6da1e857..d63da691fb8cfa04bb699adb2eb55278e8b76200 100644
--- a/src/main/java/org/bukkit/block/CommandBlock.java
+++ b/src/main/java/org/bukkit/block/CommandBlock.java
@@ -6,7 +6,7 @@ import org.jetbrains.annotations.Nullable;
/**
* Represents a captured state of a command block.
*/
-public interface CommandBlock extends TileState {
+public interface CommandBlock extends TileState, io.papermc.paper.command.CommandBlockHolder { // Paper
/**
* Gets the command that this CommandBlock will run when powered.
diff --git a/src/main/java/org/bukkit/entity/minecart/CommandMinecart.java b/src/main/java/org/bukkit/entity/minecart/CommandMinecart.java
index 91cab8b13d5bba34007f124838b32a1df58c5ac7..6a6021ad3a0e6aaf51f5144fa126e81bada9cfcf 100644
--- a/src/main/java/org/bukkit/entity/minecart/CommandMinecart.java
+++ b/src/main/java/org/bukkit/entity/minecart/CommandMinecart.java
@@ -4,7 +4,7 @@ import org.bukkit.entity.Minecart;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-public interface CommandMinecart extends Minecart {
+public interface CommandMinecart extends Minecart, io.papermc.paper.command.CommandBlockHolder { // Paper
/**
* Gets the command that this CommandMinecart will run when activated.

View file

@ -0,0 +1,27 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Nassim Jahnke <jahnke.nassim@gmail.com>
Date: Fri, 1 Oct 2021 09:47:00 +0200
Subject: [PATCH] Fix plugin provides load order
Fixes https://hub.spigotmc.org/jira/browse/SPIGOT-6740
diff --git a/src/main/java/org/bukkit/plugin/SimplePluginManager.java b/src/main/java/org/bukkit/plugin/SimplePluginManager.java
index c57a59d337a41c083e88e36637d839db027b9289..1366496271c4c7f72d1e5f990e51775b1c371f99 100644
--- a/src/main/java/org/bukkit/plugin/SimplePluginManager.java
+++ b/src/main/java/org/bukkit/plugin/SimplePluginManager.java
@@ -281,6 +281,7 @@ public final class SimplePluginManager implements PluginManager {
// Paper end
missingDependency = false;
pluginIterator.remove();
+ pluginsProvided.values().removeIf(s -> s.equals(plugin)); // Paper - remove provided plugins
softDependencies.remove(plugin);
dependencies.remove(plugin);
@@ -314,6 +315,7 @@ public final class SimplePluginManager implements PluginManager {
// We're clear to load, no more soft or hard dependencies left
File file = plugins.get(plugin);
pluginIterator.remove();
+ pluginsProvided.values().removeIf(s -> s.equals(plugin)); // Paper - remove provided plugins
missingDependency = false;
try {

View file

@ -0,0 +1,69 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Jake Potrebic <jake.m.potrebic@gmail.com>
Date: Fri, 1 Oct 2021 08:04:43 -0700
Subject: [PATCH] Add missing team sidebar display slots
diff --git a/src/main/java/org/bukkit/scoreboard/DisplaySlot.java b/src/main/java/org/bukkit/scoreboard/DisplaySlot.java
index 5d58a18b3625fd01ea34969200edc3bc80cbb587..fe7d0a19f970ac5b4e0c4bef4ff7c4ceae60bb86 100644
--- a/src/main/java/org/bukkit/scoreboard/DisplaySlot.java
+++ b/src/main/java/org/bukkit/scoreboard/DisplaySlot.java
@@ -1,10 +1,55 @@
package org.bukkit.scoreboard;
+import net.kyori.adventure.text.format.NamedTextColor; // Paper
/**
* Locations for displaying objectives to the player
*/
public enum DisplaySlot {
- BELOW_NAME,
- PLAYER_LIST,
- SIDEBAR;
+ // Paper start
+ BELOW_NAME("belowName"),
+ PLAYER_LIST("list"),
+ SIDEBAR("sidebar"),
+ SIDEBAR_TEAM_BLACK(NamedTextColor.BLACK),
+ SIDEBAR_TEAM_DARK_BLUE(NamedTextColor.DARK_BLUE),
+ SIDEBAR_TEAM_DARK_GREEN(NamedTextColor.DARK_GREEN),
+ SIDEBAR_TEAM_DARK_AQUA(NamedTextColor.DARK_AQUA),
+ SIDEBAR_TEAM_DARK_RED(NamedTextColor.DARK_RED),
+ SIDEBAR_TEAM_DARK_PURPLE(NamedTextColor.DARK_PURPLE),
+ SIDEBAR_TEAM_GOLD(NamedTextColor.GOLD),
+ SIDEBAR_TEAM_GRAY(NamedTextColor.GRAY),
+ SIDEBAR_TEAM_DARK_GRAY(NamedTextColor.DARK_GRAY),
+ SIDEBAR_TEAM_BLUE(NamedTextColor.BLUE),
+ SIDEBAR_TEAM_GREEN(NamedTextColor.GREEN),
+ SIDEBAR_TEAM_AQUA(NamedTextColor.AQUA),
+ SIDEBAR_TEAM_RED(NamedTextColor.RED),
+ SIDEBAR_TEAM_LIGHT_PURPLE(NamedTextColor.LIGHT_PURPLE),
+ SIDEBAR_TEAM_YELLOW(NamedTextColor.YELLOW),
+ SIDEBAR_TEAM_WHITE(NamedTextColor.WHITE);
+
+ public static final net.kyori.adventure.util.Index<String, DisplaySlot> NAMES = net.kyori.adventure.util.Index.create(DisplaySlot.class, DisplaySlot::getId);
+
+ private final String id;
+
+ DisplaySlot(@org.jetbrains.annotations.NotNull String id) {
+ this.id = id;
+ }
+
+ DisplaySlot(@org.jetbrains.annotations.NotNull NamedTextColor color) {
+ this.id = "sidebar.team." + color;
+ }
+
+ /**
+ * Get the string id of this display slot.
+ *
+ * @return the string id
+ */
+ public @org.jetbrains.annotations.NotNull String getId() {
+ return id;
+ }
+
+ @Override
+ public String toString() {
+ return this.id;
+ }
+ // Paper end
}

View file

@ -0,0 +1,21 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Jake Potrebic <jake.m.potrebic@gmail.com>
Date: Wed, 12 May 2021 02:49:28 -0700
Subject: [PATCH] add back EntityPortalExitEvent
Was removed here: https://hub.spigotmc.org/stash/projects/SPIGOT/repos/craftbukkit/commits/a2d787f6ebeb72fa7d5750788221fb9a0d838ac4
diff --git a/src/main/java/org/bukkit/event/entity/EntityPortalExitEvent.java b/src/main/java/org/bukkit/event/entity/EntityPortalExitEvent.java
index 869ad3b12ebd8275d04b0c21b5ecc0389da01490..0a87e2934901eb1bcaec72ed8141cd4828a4efce 100644
--- a/src/main/java/org/bukkit/event/entity/EntityPortalExitEvent.java
+++ b/src/main/java/org/bukkit/event/entity/EntityPortalExitEvent.java
@@ -11,6 +11,9 @@ import org.jetbrains.annotations.NotNull;
* <p>
* This event allows you to modify the velocity of the entity after they have
* successfully exited the portal.
+ * <p>
+ * Cancelling this event does not prevent the teleport, but it does prevent
+ * any changes to velocity and location from taking place.
*/
public class EntityPortalExitEvent extends EntityTeleportEvent {
private static final HandlerList handlers = new HandlerList();

View file

@ -0,0 +1,48 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Jakub Zacek <dawon@dawon.eu>
Date: Mon, 4 Oct 2021 08:29:36 +0200
Subject: [PATCH] Add methods to find targets for lightning strikes
diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java
index 5810bcf92ddff080511dd07326769c8fef53d7b9..1f8a51897d9de00f0004ab1de479198390483f7d 100644
--- a/src/main/java/org/bukkit/World.java
+++ b/src/main/java/org/bukkit/World.java
@@ -757,6 +757,37 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
@NotNull
public LightningStrike strikeLightningEffect(@NotNull Location loc);
+ // Paper start
+ /**
+ * Finds the location of the nearest unobstructed Lightning Rod in a 128-block
+ * radius around the given location. Returns {@code null} if no Lightning Rod is found.
+ *
+ * <p>Note: To activate a Lightning Rod, the position one block above it must be struck by lightning.</p>
+ *
+ * @param location {@link Location} to search for Lightning Rod around
+ * @return {@link Location} of Lightning Rod or {@code null}
+ */
+ @Nullable
+ public Location findLightningRod(@NotNull Location location);
+
+ /**
+ * Finds a target {@link Location} for lightning to strike.
+ * <p>It selects from (in the following order):</p>
+ * <ol>
+ * <li>the block above the nearest Lightning Rod, found using {@link World#findLightningRod(Location)}</li>
+ * <li>a random {@link LivingEntity} that can see the sky in a 6x6 cuboid
+ * around input X/Z coordinates. Y ranges from <i>the highest motion-blocking
+ * block at the input X/Z - 3</i> to <i>the height limit + 3</i></li>
+ * </ol>
+ * <p>Returns {@code null} if no target is found.</p>
+ *
+ * @param location {@link Location} to search for target around
+ * @return lightning target or {@code null}
+ */
+ @Nullable
+ public Location findLightningTarget(@NotNull Location location);
+ // Paper end
+
/**
* Get a list of all entities in this World
*

View file

@ -0,0 +1,62 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Jake Potrebic <jake.m.potrebic@gmail.com>
Date: Fri, 20 Aug 2021 13:03:55 -0700
Subject: [PATCH] Get entity default attributes
diff --git a/src/main/java/org/bukkit/UnsafeValues.java b/src/main/java/org/bukkit/UnsafeValues.java
index 379acee1b5f2d06e6a96f3444783f4a29ca24095..0b15fe8b5da29bf691c394098f0203a49504242e 100644
--- a/src/main/java/org/bukkit/UnsafeValues.java
+++ b/src/main/java/org/bukkit/UnsafeValues.java
@@ -183,5 +183,22 @@ public interface UnsafeValues {
* @return the server's protocol version
*/
int getProtocolVersion();
+
+ /**
+ * Checks if the entity represented by the namespaced key has default attributes.
+ *
+ * @param entityKey the entity's key
+ * @return true if it has default attributes
+ */
+ boolean hasDefaultEntityAttributes(@org.jetbrains.annotations.NotNull NamespacedKey entityKey);
+
+ /**
+ * Gets the default attributes for the entity represented by the namespaced key.
+ *
+ * @param entityKey the entity's key
+ * @return an unmodifiable instance of Attributable for reading default attributes.
+ * @throws IllegalArgumentException if the entity does not exist of have default attributes (use {@link #hasDefaultEntityAttributes(NamespacedKey)} first)
+ */
+ @org.jetbrains.annotations.NotNull org.bukkit.attribute.Attributable getDefaultEntityAttributes(@org.jetbrains.annotations.NotNull NamespacedKey entityKey);
// Paper end
}
diff --git a/src/main/java/org/bukkit/entity/EntityType.java b/src/main/java/org/bukkit/entity/EntityType.java
index d36d314383713bac3b11f18d95b0809dce3cd6e0..48aa290dbcf93715ce58d56d6cf3216948f2f3f2 100644
--- a/src/main/java/org/bukkit/entity/EntityType.java
+++ b/src/main/java/org/bukkit/entity/EntityType.java
@@ -441,5 +441,24 @@ public enum EntityType implements Keyed, net.kyori.adventure.translation.Transla
Preconditions.checkArgument(this != UNKNOWN, "UNKNOWN entities do not have translation keys");
return org.bukkit.Bukkit.getUnsafe().getTranslationKey(this);
}
+
+ /**
+ * Checks if the entity has default attributes.
+ *
+ * @return true if it has default attributes
+ */
+ public boolean hasDefaultAttributes() {
+ return org.bukkit.Bukkit.getUnsafe().hasDefaultEntityAttributes(this.key);
+ }
+
+ /**
+ * Gets the default attributes for the entity.
+ *
+ * @return an unmodifiable instance of Attributable for reading default attributes.
+ * @throws IllegalArgumentException if the entity does not exist of have default attributes (use {@link #hasDefaultAttributes()} first)
+ */
+ public @NotNull org.bukkit.attribute.Attributable getDefaultAttributes() {
+ return org.bukkit.Bukkit.getUnsafe().getDefaultEntityAttributes(this.key);
+ }
// Paper end
}

View file

@ -0,0 +1,31 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: William Blake Galbreath <blake.galbreath@gmail.com>
Date: Thu, 14 Oct 2021 12:36:46 -0500
Subject: [PATCH] Left handed API
diff --git a/src/main/java/org/bukkit/entity/Mob.java b/src/main/java/org/bukkit/entity/Mob.java
index 07bedbc15ba2463d3c629ae68d229286d4033f79..984ad873f36c3dcc73703eb6902c4eab5f1e72b6 100644
--- a/src/main/java/org/bukkit/entity/Mob.java
+++ b/src/main/java/org/bukkit/entity/Mob.java
@@ -148,4 +148,20 @@ public interface Mob extends LivingEntity, Lootable {
* @return whether the mob is aware
*/
public boolean isAware();
+
+ // Paper start
+ /**
+ * Check if Mob is left-handed
+ *
+ * @return True if left-handed
+ */
+ public boolean isLeftHanded();
+
+ /**
+ * Set if Mob is left-handed
+ *
+ * @param leftHanded True if left-handed
+ */
+ public void setLeftHanded(boolean leftHanded);
+ // Paper end
}

View file

@ -0,0 +1,214 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: syldium <syldium@mailo.com>
Date: Fri, 9 Jul 2021 18:49:40 +0200
Subject: [PATCH] Add advancement display API
diff --git a/src/main/java/io/papermc/paper/advancement/AdvancementDisplay.java b/src/main/java/io/papermc/paper/advancement/AdvancementDisplay.java
new file mode 100644
index 0000000000000000000000000000000000000000..67341bb70762a2326030abd2548372b92474f544
--- /dev/null
+++ b/src/main/java/io/papermc/paper/advancement/AdvancementDisplay.java
@@ -0,0 +1,156 @@
+package io.papermc.paper.advancement;
+
+import net.kyori.adventure.text.Component;
+import net.kyori.adventure.text.format.NamedTextColor;
+import net.kyori.adventure.text.format.TextColor;
+import net.kyori.adventure.translation.Translatable;
+import net.kyori.adventure.util.Index;
+import org.bukkit.NamespacedKey;
+import org.bukkit.inventory.ItemStack;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes the display of an advancement.
+ * <p>
+ * The display is used in the chat, in the toast messages and the advancements
+ * screen.
+ */
+public interface AdvancementDisplay {
+
+ /**
+ * Gets the {@link Frame}.
+ * <p>
+ * This defines the appearance of the tile in the advancements screen and
+ * the text when it's completed.
+ *
+ * @return the frame type
+ */
+ @NotNull
+ Frame frame();
+
+ /**
+ * Gets the advancement title.
+ *
+ * @return the title
+ */
+ @NotNull
+ Component title();
+
+ /**
+ * Gets the description.
+ *
+ * @return the description
+ */
+ @NotNull
+ Component description();
+
+ /**
+ * Gets the icon shown in the frame in the advancements screen.
+ *
+ * @return a copy of the icon
+ */
+ @NotNull
+ ItemStack icon();
+
+ /**
+ * Gets whether a toast should be displayed.
+ * <p>
+ * A toast is a notification that will be displayed in the top right corner
+ * of the screen.
+ *
+ * @return {@code true} if a toast should be shown
+ */
+ boolean doesShowToast();
+
+ /**
+ * Gets whether a message should be sent in the chat.
+ *
+ * @return {@code true} if a message should be sent
+ * @see org.bukkit.event.player.PlayerAdvancementDoneEvent#message() to edit
+ * the message
+ */
+ boolean doesAnnounceToChat();
+
+ /**
+ * Gets whether this advancement is hidden.
+ * <p>
+ * Hidden advancements cannot be viewed by the player until they have been
+ * unlocked.
+ *
+ * @return {@code true} if hidden
+ */
+ boolean isHidden();
+
+ /**
+ * Gets the texture displayed behind the advancement tree when selected.
+ * <p>
+ * This only affects root advancements without any parent. If the background
+ * is not specified or doesn't exist, the tab background will be the missing
+ * texture.
+ *
+ * @return the background texture path
+ */
+ @Nullable
+ NamespacedKey backgroundPath();
+
+ /**
+ * Defines how the {@link #icon()} appears in the advancements screen and
+ * the color used with the {@link #title() advancement name}.
+ */
+ enum Frame implements Translatable {
+
+ /**
+ * "Challenge complete" advancement.
+ * <p>
+ * The client will play the {@code ui.toast.challenge_complete} sound
+ * when the challenge is completed and the toast is shown.
+ */
+ CHALLENGE("challenge", NamedTextColor.DARK_PURPLE),
+
+ /**
+ * "Goal reached" advancement.
+ */
+ GOAL("goal", NamedTextColor.GREEN),
+
+ /**
+ * "Advancement made" advancement.
+ */
+ TASK("task", NamedTextColor.GREEN);
+
+ /**
+ * The name map.
+ */
+ public static final Index<String, Frame> NAMES = Index.create(Frame.class, frame -> frame.name);
+ private final String name;
+ private final TextColor color;
+
+ Frame(String name, TextColor color) {
+ this.name = name;
+ this.color = color;
+ }
+
+ /**
+ * Gets the {@link TextColor} used for the advancement name.
+ *
+ * @return the text color
+ */
+ @NotNull
+ public TextColor color() {
+ return this.color;
+ }
+
+ /**
+ * Gets the translation key used when an advancement is completed.
+ * <p>
+ * This is the first line of the toast displayed by the client.
+ *
+ * @return the toast message key
+ */
+ @Override
+ @NotNull
+ public String translationKey() {
+ return "advancements.toast." + this.name;
+ }
+ }
+}
diff --git a/src/main/java/org/bukkit/advancement/Advancement.java b/src/main/java/org/bukkit/advancement/Advancement.java
index 7c5009974ac8d64d0e738e60cec45acb0d4ca89a..3bbc7dffc36fa31099a8794ceeec77aeae0c49cb 100644
--- a/src/main/java/org/bukkit/advancement/Advancement.java
+++ b/src/main/java/org/bukkit/advancement/Advancement.java
@@ -17,4 +17,41 @@ public interface Advancement extends Keyed {
*/
@NotNull
Collection<String> getCriteria();
+ // Paper start
+ /**
+ * Get the display info of this advancement.
+ * <p>
+ * Will be {@code null} when totally hidden, for example with crafting
+ * recipes.
+ *
+ * @return the display info
+ */
+ @org.jetbrains.annotations.Nullable
+ io.papermc.paper.advancement.AdvancementDisplay getDisplay();
+
+ /**
+ * Gets the parent advancement, if any.
+ *
+ * @return the parent advancement
+ */
+ @org.jetbrains.annotations.Nullable
+ Advancement getParent();
+
+ /**
+ * Gets all the direct children advancements.
+ *
+ * @return the children advancements
+ */
+ @NotNull
+ @org.jetbrains.annotations.Unmodifiable
+ Collection<Advancement> getChildren();
+
+ /**
+ * Gets the root advancement of the tree this is located in.
+ *
+ * @return the root advancement
+ */
+ @NotNull
+ Advancement getRoot();
+ // Paper end
}

View file

@ -0,0 +1,25 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: William Blake Galbreath <blake.galbreath@gmail.com>
Date: Thu, 14 Oct 2021 12:09:28 -0500
Subject: [PATCH] Add ItemFactory#getMonsterEgg API
diff --git a/src/main/java/org/bukkit/inventory/ItemFactory.java b/src/main/java/org/bukkit/inventory/ItemFactory.java
index 0a4466c6ca519c3a5da76ff870fb2a4e3a06effd..8677e273641a46aae7107361f23f6ded59a50dc0 100644
--- a/src/main/java/org/bukkit/inventory/ItemFactory.java
+++ b/src/main/java/org/bukkit/inventory/ItemFactory.java
@@ -241,5 +241,14 @@ public interface ItemFactory {
@NotNull
@Deprecated
net.md_5.bungee.api.chat.hover.content.Content hoverContentOf(@NotNull org.bukkit.entity.Entity entity, @NotNull net.md_5.bungee.api.chat.BaseComponent[] customName);
+
+ /**
+ * Get a spawn egg ItemStack from an EntityType
+ *
+ * @param type EntityType
+ * @return ItemStack spawner egg
+ */
+ @Nullable
+ ItemStack getSpawnEgg(@Nullable org.bukkit.entity.EntityType type);
// Paper end
}

View file

@ -0,0 +1,51 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: dodison <kacpik@mapik.eu>
Date: Mon, 26 Jul 2021 17:35:20 +0200
Subject: [PATCH] Add critical damage API
diff --git a/src/main/java/org/bukkit/event/entity/EntityDamageByEntityEvent.java b/src/main/java/org/bukkit/event/entity/EntityDamageByEntityEvent.java
index 869bad7405ec7fa67728e90d8b9f2e11b542611f..7ce8f1a26c1b33dd0eb6e6435952fd73abf49879 100644
--- a/src/main/java/org/bukkit/event/entity/EntityDamageByEntityEvent.java
+++ b/src/main/java/org/bukkit/event/entity/EntityDamageByEntityEvent.java
@@ -11,15 +11,40 @@ import org.jetbrains.annotations.NotNull;
public class EntityDamageByEntityEvent extends EntityDamageEvent {
private final Entity damager;
+ @Deprecated // Paper - add critical damage API
public EntityDamageByEntityEvent(@NotNull final Entity damager, @NotNull final Entity damagee, @NotNull final DamageCause cause, final double damage) {
super(damagee, cause, damage);
this.damager = damager;
+ this.critical = false; // Paper - add critical damage API
}
+ @Deprecated // Paper - add critical damage API
public EntityDamageByEntityEvent(@NotNull final Entity damager, @NotNull final Entity damagee, @NotNull final DamageCause cause, @NotNull final Map<DamageModifier, Double> modifiers, @NotNull final Map<DamageModifier, ? extends Function<? super Double, Double>> modifierFunctions) {
+ // Paper start - add critical damage API
+ this(damager, damagee, cause, modifiers, modifierFunctions, false);
+ }
+
+ private final boolean critical;
+ public EntityDamageByEntityEvent(@NotNull final Entity damager, @NotNull final Entity damagee, @NotNull final DamageCause cause, @NotNull final Map<DamageModifier, Double> modifiers, @NotNull final Map<DamageModifier, ? extends Function<? super Double, Double>> modifierFunctions, boolean critical) {
+ // Paper end
super(damagee, cause, modifiers, modifierFunctions);
this.damager = damager;
+ // Paper start - add critical damage API
+ this.critical = critical;
+ }
+
+ /**
+ * Shows this damage instance was critical.
+ * The damage instance can be critical if the attacking player met the respective conditions.
+ * Furthermore arrows may also cause a critical damage event if the arrow {@link org.bukkit.entity.AbstractArrow#isCritical()}.
+ *
+ * @return if the hit was critical.
+ * @see <a href="https://minecraft.fandom.com/wiki/Damage#Critical_hit">https://minecraft.fandom.com/wiki/Damage#Critical_hit</a>
+ */
+ public boolean isCritical() {
+ return this.critical;
}
+ // Paper end
/**
* Returns the entity that damaged the defender.

View file

@ -0,0 +1,34 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Jake Potrebic <jake.m.potrebic@gmail.com>
Date: Sun, 24 Oct 2021 20:29:27 -0700
Subject: [PATCH] Fix issues with mob conversion
diff --git a/src/main/java/org/bukkit/entity/PiglinAbstract.java b/src/main/java/org/bukkit/entity/PiglinAbstract.java
index 87f4b7ad7c0a95a7123d142fa023c5da5c760341..70a45e657c6cab6058d1a56fc51c5df79fdce60f 100644
--- a/src/main/java/org/bukkit/entity/PiglinAbstract.java
+++ b/src/main/java/org/bukkit/entity/PiglinAbstract.java
@@ -31,14 +31,17 @@ public interface PiglinAbstract extends Monster, Ageable {
public int getConversionTime();
/**
- * Sets the amount of ticks until this entity will be converted to a
- * Zombified Piglin.
+ * Sets the conversion counter value. The counter is incremented
+ * every tick the {@link #isConverting()} returns true. Setting this
+ * value will not start the conversion if the {@link PiglinAbstract} is
+ * not in a valid environment ({@link org.bukkit.World#isPiglinSafe})
+ * to convert or {@link #isImmuneToZombification()} is true or
+ * has no AI.
*
- * When this reaches 0, the entity will be converted. A value of less than 0
- * will stop the current conversion process without converting the current
- * entity.
+ * When this reaches 300, the entity will be converted. To stop the
+ * conversion use {@link #setImmuneToZombification(boolean)}.
*
- * @param time new conversion time
+ * @param time new conversion counter
*/
public void setConversionTime(int time);

View file

@ -0,0 +1,82 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Jake Potrebic <jake.m.potrebic@gmail.com>
Date: Thu, 4 Nov 2021 11:50:35 -0700
Subject: [PATCH] Add isCollidable methods to various places
diff --git a/src/main/java/org/bukkit/Material.java b/src/main/java/org/bukkit/Material.java
index d849908850025a078ec5127870ec0f61d77a72e9..f24820f14d689d49dfea25605199d5299ec28e7c 100644
--- a/src/main/java/org/bukkit/Material.java
+++ b/src/main/java/org/bukkit/Material.java
@@ -4026,6 +4026,16 @@ public enum Material implements Keyed, net.kyori.adventure.translation.Translata
public com.google.common.collect.Multimap<org.bukkit.attribute.Attribute, org.bukkit.attribute.AttributeModifier> getItemAttributes(@NotNull EquipmentSlot equipmentSlot) {
return Bukkit.getUnsafe().getItemAttributes(this, equipmentSlot);
}
+
+ /**
+ * Checks if this material is collidable.
+ *
+ * @return true if collidable
+ * @throws IllegalArgumentException if {@link #isBlock()} is false
+ */
+ public boolean isCollidable() {
+ return Bukkit.getUnsafe().isCollidable(this);
+ }
// Paper end
/**
diff --git a/src/main/java/org/bukkit/UnsafeValues.java b/src/main/java/org/bukkit/UnsafeValues.java
index 0b15fe8b5da29bf691c394098f0203a49504242e..c8c2e5bc2ec1d8d7ea445a1203c9d5a904dfc666 100644
--- a/src/main/java/org/bukkit/UnsafeValues.java
+++ b/src/main/java/org/bukkit/UnsafeValues.java
@@ -200,5 +200,14 @@ public interface UnsafeValues {
* @throws IllegalArgumentException if the entity does not exist of have default attributes (use {@link #hasDefaultEntityAttributes(NamespacedKey)} first)
*/
@org.jetbrains.annotations.NotNull org.bukkit.attribute.Attributable getDefaultEntityAttributes(@org.jetbrains.annotations.NotNull NamespacedKey entityKey);
+
+ /**
+ * Checks if this material is collidable.
+ *
+ * @param material the material to check
+ * @return true if collidable
+ * @throws IllegalArgumentException if {@link Material#isBlock()} is false
+ */
+ boolean isCollidable(@org.jetbrains.annotations.NotNull Material material);
// Paper end
}
diff --git a/src/main/java/org/bukkit/block/Block.java b/src/main/java/org/bukkit/block/Block.java
index e959f844581eaa88f581a4fabcb39148624bbe9b..0dd0beee6800fb34520dfa2d05e5bdda76624d64 100644
--- a/src/main/java/org/bukkit/block/Block.java
+++ b/src/main/java/org/bukkit/block/Block.java
@@ -471,6 +471,13 @@ public interface Block extends Metadatable, net.kyori.adventure.translation.Tran
* @return true if block is solid
*/
boolean isSolid();
+
+ /**
+ * Checks if this block is collidable.
+ *
+ * @return true if collidable
+ */
+ boolean isCollidable();
// Paper end
/**
diff --git a/src/main/java/org/bukkit/block/BlockState.java b/src/main/java/org/bukkit/block/BlockState.java
index 631cbf2be51040eee00aa39a39c5ec4003f91843..96cde879922c796f3ac8d14ee99d7b190ff67bd9 100644
--- a/src/main/java/org/bukkit/block/BlockState.java
+++ b/src/main/java/org/bukkit/block/BlockState.java
@@ -221,4 +221,13 @@ public interface BlockState extends Metadatable {
* or 'virtual' (e.g. on an itemstack)
*/
boolean isPlaced();
+
+ // Paper start
+ /**
+ * Checks if this block state is collidable.
+ *
+ * @return true if collidable
+ */
+ boolean isCollidable();
+ // Paper end
}

View file

@ -0,0 +1,23 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Seggan <segganew@gmail.com>
Date: Thu, 5 Aug 2021 13:10:31 -0400
Subject: [PATCH] Goat ram API
diff --git a/src/main/java/org/bukkit/entity/Goat.java b/src/main/java/org/bukkit/entity/Goat.java
index 90e9028b5ee7fcf9488d37090875b7163bdcd1d0..01827c4118df36fe1b77115f181fb4d225c3c866 100644
--- a/src/main/java/org/bukkit/entity/Goat.java
+++ b/src/main/java/org/bukkit/entity/Goat.java
@@ -24,4 +24,12 @@ public interface Goat extends Animals {
* @param screaming screaming status
*/
void setScreaming(boolean screaming);
+
+ // Paper start - Goat ram API
+ /**
+ * Makes the goat ram at the specified entity
+ * @param entity the entity to ram at
+ */
+ void ram(@org.jetbrains.annotations.NotNull LivingEntity entity);
+ // Paper end
}

View file

@ -0,0 +1,26 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: booky10 <boooky10@gmail.com>
Date: Fri, 5 Nov 2021 21:01:36 +0100
Subject: [PATCH] Add API for resetting a single score
It was only possible to reset all scores for a specific entry, instead of resetting only specific scores.
diff --git a/src/main/java/org/bukkit/scoreboard/Score.java b/src/main/java/org/bukkit/scoreboard/Score.java
index d25b4d04932da7e7562cd1acf67ebec33af5b6ef..07bfad4a908de26e9aa6291e4ad20006e88ffe87 100644
--- a/src/main/java/org/bukkit/scoreboard/Score.java
+++ b/src/main/java/org/bukkit/scoreboard/Score.java
@@ -73,4 +73,14 @@ public interface Score {
*/
@Nullable
Scoreboard getScoreboard();
+
+ // Paper start
+ /**
+ * Resets this score, if a value has been set.
+ *
+ * @throws IllegalStateException if the associated objective has been
+ * unregistered
+ */
+ void resetScore() throws IllegalStateException;
+ // Paper end
}