more patches

This commit is contained in:
Jake Potrebic 2021-06-14 09:58:00 -07:00 committed by MiniDigger | Martin
parent 18a839d265
commit 8cf470d6b1
49 changed files with 582 additions and 738 deletions

View file

@ -0,0 +1,19 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Aurora <aurora@relanet.eu>
Date: Sat, 3 Oct 2020 16:28:41 +0200
Subject: [PATCH] Clarify the Javadocs for Entity.getEntitySpawnReason()
diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java
index 8cfe08cbc869e468edc0f0bdaa28d5bf1f6201a2..a9e455c5b3bbe4edbdb71f86f5c6eebc2f605547 100644
--- a/src/main/java/org/bukkit/entity/Entity.java
+++ b/src/main/java/org/bukkit/entity/Entity.java
@@ -713,7 +713,7 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent
}
/**
- * @return The {@link org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason} that spawned this entity.
+ * @return The {@link org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason} that initially spawned this entity. <!-- Paper - added "initially" to clarify that the SpawnReason doesn't change after the Entity was initially spawned" -->
*/
@NotNull
org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason getEntitySpawnReason();

View file

@ -0,0 +1,22 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: William Blake Galbreath <blake.galbreath@gmail.com>
Date: Mon, 7 Oct 2019 00:15:28 -0500
Subject: [PATCH] Villager#resetOffers
diff --git a/src/main/java/org/bukkit/entity/AbstractVillager.java b/src/main/java/org/bukkit/entity/AbstractVillager.java
index d2b0c08554dba4d34b37b440f1d77ae0e64cb99e..7fbe31c4fd69d4fca7ef96c0a56b0e0204d60cf4 100644
--- a/src/main/java/org/bukkit/entity/AbstractVillager.java
+++ b/src/main/java/org/bukkit/entity/AbstractVillager.java
@@ -21,4 +21,11 @@ public interface AbstractVillager extends Breedable, NPC, InventoryHolder, Merch
@NotNull
@Override
Inventory getInventory();
+
+ // Paper start
+ /**
+ * Reset this villager's trade offers
+ */
+ public void resetOffers();
+ // Paper end
}

View file

@ -0,0 +1,30 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Trigary <trigary0@gmail.com>
Date: Tue, 14 Apr 2020 12:06:14 +0200
Subject: [PATCH] Player elytra boost API
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
index 6bc4f12e4ef35979c9d99273d14d7b31833d3f75..d281d270bba71da5a7d1326112e73d9cdb1ed57b 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
@@ -1943,6 +1943,19 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
*/
@NotNull
<T> T getClientOption(@NotNull ClientOption<T> option);
+
+ /**
+ * Boost a Player that's {@link #isGliding()} using a {@link Firework}.
+ * If the creation of the entity is cancelled, no boosting is done.
+ * This method does not fire {@link com.destroystokyo.paper.event.player.PlayerElytraBoostEvent}.
+ *
+ * @param firework The {@link Material#FIREWORK_ROCKET} to boost the player with
+ * @return The {@link Firework} boosting the Player or null if the spawning of the entity was cancelled
+ * @throws IllegalArgumentException if {@link #isGliding()} is false
+ * or if the {@code firework} isn't a {@link Material#FIREWORK_ROCKET}
+ */
+ @Nullable
+ Firework boostElytra(@NotNull ItemStack firework);
// Paper end
// Spigot start

View file

@ -0,0 +1,68 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: oxygencraft <21054297+oxygencraft@users.noreply.github.com>
Date: Sun, 25 Oct 2020 18:35:58 +1100
Subject: [PATCH] Add getOfflinePlayerIfCached(String)
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
index af0cf1fe3db1efd39bc06a89216413fc4415b007..bad4593447ca390b3e2f3bc71b4ea9f4dd673445 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
@@ -962,6 +962,27 @@ public final class Bukkit {
return server.getOfflinePlayer(name);
}
+ // Paper start
+ /**
+ * Gets the player by the given name, regardless if they are offline or
+ * online.
+ * <p>
+ * This will not make a web request to get the UUID for the given name,
+ * thus this method will not block. However this method will return
+ * {@code null} if the player is not cached.
+ * </p>
+ *
+ * @param name the name of the player to retrieve
+ * @return an offline player if cached, {@code null} otherwise
+ * @see #getOfflinePlayer(String)
+ * @see #getOfflinePlayer(java.util.UUID)
+ */
+ @Nullable
+ public static OfflinePlayer getOfflinePlayerIfCached(@NotNull String name) {
+ return server.getOfflinePlayerIfCached(name);
+ }
+ // Paper end
+
/**
* Gets the player by the given UUID, regardless if they are offline or
* online.
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
index 64316a3bcba881f9366d9bf9e16b205e2b817707..48c6434a6a5b1659d4cc8ddf8fe23806628c3b7e 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
@@ -808,6 +808,25 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
@NotNull
public OfflinePlayer getOfflinePlayer(@NotNull String name);
+ // Paper start
+ /**
+ * Gets the player by the given name, regardless if they are offline or
+ * online.
+ * <p>
+ * This will not make a web request to get the UUID for the given name,
+ * thus this method will not block. However this method will return
+ * {@code null} if the player is not cached.
+ * </p>
+ *
+ * @param name the name of the player to retrieve
+ * @return an offline player if cached, {@code null} otherwise
+ * @see #getOfflinePlayer(String)
+ * @see #getOfflinePlayer(java.util.UUID)
+ */
+ @Nullable
+ public OfflinePlayer getOfflinePlayerIfCached(@NotNull String name);
+ // Paper end
+
/**
* Gets the player by the given UUID, regardless if they are offline or
* online.

View file

@ -0,0 +1,52 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Mariell Hoversholm <proximyst@proximyst.com>
Date: Mon, 9 Nov 2020 20:33:38 +0100
Subject: [PATCH] Add ignore discounts API
diff --git a/src/main/java/org/bukkit/inventory/MerchantRecipe.java b/src/main/java/org/bukkit/inventory/MerchantRecipe.java
index 1fb4a1c53791776f9c5a952a592f15fc35cb2703..2be2f3fe655c417bfc8f8e840f9e9415d168f37e 100644
--- a/src/main/java/org/bukkit/inventory/MerchantRecipe.java
+++ b/src/main/java/org/bukkit/inventory/MerchantRecipe.java
@@ -28,6 +28,7 @@ public class MerchantRecipe implements Recipe {
private boolean experienceReward;
private int villagerExperience;
private float priceMultiplier;
+ private boolean ignoreDiscounts; // Paper
public MerchantRecipe(@NotNull ItemStack result, int maxUses) {
this(result, 0, maxUses, false);
@@ -38,6 +39,12 @@ public class MerchantRecipe implements Recipe {
}
public MerchantRecipe(@NotNull ItemStack result, int uses, int maxUses, boolean experienceReward, int villagerExperience, float priceMultiplier) {
+ // Paper start - add ignoreDiscounts param
+ this(result, uses, maxUses, experienceReward, villagerExperience, priceMultiplier, false);
+ }
+ public MerchantRecipe(@NotNull ItemStack result, int uses, int maxUses, boolean experienceReward, int villagerExperience, float priceMultiplier, boolean ignoreDiscounts) {
+ this.ignoreDiscounts = ignoreDiscounts;
+ // Paper end
this.result = result;
this.uses = uses;
this.maxUses = maxUses;
@@ -172,4 +179,20 @@ public class MerchantRecipe implements Recipe {
public void setPriceMultiplier(float priceMultiplier) {
this.priceMultiplier = priceMultiplier;
}
+
+ // Paper start
+ /**
+ * @return Whether all discounts on this trade should be ignored.
+ */
+ public boolean shouldIgnoreDiscounts() {
+ return ignoreDiscounts;
+ }
+
+ /**
+ * @param ignoreDiscounts Whether all discounts on this trade should be ignored.
+ */
+ public void setIgnoreDiscounts(boolean ignoreDiscounts) {
+ this.ignoreDiscounts = ignoreDiscounts;
+ }
+ // Paper end
}

View file

@ -0,0 +1,45 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Alfie Smith <alfie@alfiesmith.net>
Date: Sat, 7 Nov 2020 01:20:27 +0000
Subject: [PATCH] Item no age & no player pickup
diff --git a/src/main/java/org/bukkit/entity/Item.java b/src/main/java/org/bukkit/entity/Item.java
index c404a5b8efea7c780db5ddae19456753808abb3d..0ee072645ecf1bf5feb74de6960947ef76db366e 100644
--- a/src/main/java/org/bukkit/entity/Item.java
+++ b/src/main/java/org/bukkit/entity/Item.java
@@ -90,5 +90,34 @@ public interface Item extends Entity {
* @param canMobPickup True to allow non-player entity pickup
*/
public void setCanMobPickup(boolean canMobPickup);
+
+ /**
+ * Gets whether the player can pickup the item or not
+ *
+ * @return True if a player can pickup the item
+ */
+ public boolean canPlayerPickup();
+
+ /**
+ * Sets whether the item can be picked up or not. Modifies the pickup delay value to do so.
+ *
+ * @param canPlayerPickup True if the player can pickup the item
+ */
+ public void setCanPlayerPickup(boolean canPlayerPickup);
+
+ /**
+ * Gets whether the item will age and despawn from being on the ground too long
+ *
+ * @return True if the item will age
+ */
+ public boolean willAge();
+
+ /**
+ * Sets whether the item will age or not. If the item is not ageing, it will not despawn
+ * by being on the ground for too long.
+ *
+ * @param willAge True if the item should age
+ */
+ public void setWillAge(boolean willAge);
// Paper end
}

View file

@ -0,0 +1,37 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Jake Potrebic <jake.m.potrebic@gmail.com>
Date: Wed, 24 Jun 2020 12:38:15 -0600
Subject: [PATCH] Beacon API - custom effect ranges
diff --git a/src/main/java/org/bukkit/block/Beacon.java b/src/main/java/org/bukkit/block/Beacon.java
index 6349fa9da3f96df3553fb9552c1cab95338cecb0..78475fc6faff0f295828d7b53792001d51aa2889 100644
--- a/src/main/java/org/bukkit/block/Beacon.java
+++ b/src/main/java/org/bukkit/block/Beacon.java
@@ -64,4 +64,26 @@ public interface Beacon extends TileState, Lockable, Nameable {
* @param effect desired secondary effect
*/
void setSecondaryEffect(@Nullable PotionEffectType effect);
+
+ // Paper start - Custom effect ranges
+ /**
+ * Gets the effect range of this beacon.
+ * A negative range value means the beacon is using its default range based on tier.
+ * @return Either the custom range set with {@link #setEffectRange(double)} or the range based on the beacon tier.
+ */
+ double getEffectRange();
+
+ /**
+ * Sets the effect range of the beacon
+ * A negative range value means the beacon is using its default range based on tier.
+ * @param range Radius of effect range.
+ */
+ void setEffectRange(double range);
+
+ /**
+ * Resets the custom range from this beacon and falls back to the range based on the the beacon tier.
+ * Shortcut for setting the effect range to a negative number.
+ */
+ void resetEffectRange();
+ // Paper end
}

View file

@ -0,0 +1,79 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Mariell Hoversholm <proximyst@proximyst.com>
Date: Sat, 14 Nov 2020 16:19:58 +0100
Subject: [PATCH] Add API for quit reason
diff --git a/src/main/java/org/bukkit/event/player/PlayerQuitEvent.java b/src/main/java/org/bukkit/event/player/PlayerQuitEvent.java
index 849e8f10dd77e9fb46aab17752b8f1ff79e9d42e..b6016aa1e91863efc252eecab69ade6f54c89f27 100644
--- a/src/main/java/org/bukkit/event/player/PlayerQuitEvent.java
+++ b/src/main/java/org/bukkit/event/player/PlayerQuitEvent.java
@@ -11,16 +11,28 @@ import org.jetbrains.annotations.Nullable;
public class PlayerQuitEvent extends PlayerEvent {
private static final HandlerList handlers = new HandlerList();
private net.kyori.adventure.text.Component quitMessage; // Paper
+ private final QuitReason reason; // Paper
@Deprecated // Paper
public PlayerQuitEvent(@NotNull final Player who, @Nullable final String quitMessage) {
+ // Paper start
+ this(who, quitMessage, null);
+ }
+ @Deprecated // Paper
+ public PlayerQuitEvent(@NotNull final Player who, @Nullable final String quitMessage, @Nullable QuitReason quitReason) {
super(who);
this.quitMessage = quitMessage != null ? org.bukkit.Bukkit.getUnsafe().legacyComponentSerializer().deserialize(quitMessage) : null; // Paper
+ this.reason = quitReason == null ? QuitReason.DISCONNECTED : quitReason;
}
// Paper start
+ @Deprecated
public PlayerQuitEvent(@NotNull final Player who, @Nullable final net.kyori.adventure.text.Component quitMessage) {
+ this(who, quitMessage, null);
+ }
+ public PlayerQuitEvent(@NotNull final Player who, @Nullable final net.kyori.adventure.text.Component quitMessage, @Nullable QuitReason quitReason) {
super(who);
this.quitMessage = quitMessage;
+ this.reason = quitReason == null ? QuitReason.DISCONNECTED : quitReason;
}
/**
@@ -75,4 +87,39 @@ public class PlayerQuitEvent extends PlayerEvent {
public static HandlerList getHandlerList() {
return handlers;
}
+
+ // Paper start
+ @NotNull
+ public QuitReason getReason() {
+ return this.reason;
+ }
+
+ public enum QuitReason {
+ /**
+ * The player left on their own behalf.
+ * <p>
+ * This does not mean they pressed the disconnect button in their client, but rather that the client severed the
+ * connection themselves. This may occur if no keep-alive packet is received on their side, among other things.
+ */
+ DISCONNECTED,
+
+ /**
+ * The player was kicked from the server.
+ */
+ KICKED,
+
+ /**
+ * The player has timed out.
+ */
+ TIMED_OUT,
+
+ /**
+ * The player's connection has entered an erroneous state.
+ * <p>
+ * Reasons for this may include invalid packets, invalid data, and uncaught exceptions in the packet handler,
+ * among others.
+ */
+ ERRONEOUS_STATE,
+ }
+ // Paper end
}

View file

@ -0,0 +1,41 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Ineusia <ineusia@yahoo.com>
Date: Mon, 26 Oct 2020 11:37:48 -0500
Subject: [PATCH] Add Destroy Speed API
Co-authored-by: Jake Potrebic <jake.m.potrebic@gmail.com>
diff --git a/src/main/java/org/bukkit/block/Block.java b/src/main/java/org/bukkit/block/Block.java
index 024deba760c41787190d20e4ac5c541920bb4991..e759a03ccf7b341db36f455879e0004a6d6d4d07 100644
--- a/src/main/java/org/bukkit/block/Block.java
+++ b/src/main/java/org/bukkit/block/Block.java
@@ -618,5 +618,29 @@ public interface Block extends Metadatable {
*/
@NotNull
String getTranslationKey();
+
+ /**
+ * Gets the speed at which this block will be destroyed by a given {@link ItemStack}
+ *
+ * <p>Default value is 1.0</p>
+ *
+ * @param itemStack {@link ItemStack} used to mine this Block
+ * @return the speed that this Block will be mined by the given {@link ItemStack}
+ */
+ @NotNull
+ public default float getDestroySpeed(@NotNull ItemStack itemStack) {
+ return getDestroySpeed(itemStack, false);
+ }
+
+ /**
+ * Gets the speed at which this blook will be destroyed by a given {@link org.bukkit.inventory.ItemStack}
+ * <p>
+ * Default value is 1.0
+ * @param itemStack {@link org.bukkit.inventory.ItemStack} used to mine this Block
+ * @param considerEnchants true to look at enchants on the itemstack
+ * @return the speed that this Block will be mined by the given {@link org.bukkit.inventory.ItemStack}
+ */
+ @NotNull
+ float getDestroySpeed(@NotNull ItemStack itemStack, boolean considerEnchants);
// Paper end
}

View file

@ -0,0 +1,24 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Anrza <andrzejrzeczycki314@gmail.com>
Date: Wed, 15 Jul 2020 12:07:58 +0200
Subject: [PATCH] Add LivingEntity#clearActiveItem
diff --git a/src/main/java/org/bukkit/entity/LivingEntity.java b/src/main/java/org/bukkit/entity/LivingEntity.java
index c4fe44dce3bcb3502b26af7c76ec6b36c2a2bebe..b96b5f4f2fc754298e2223b2f449a0755469278c 100644
--- a/src/main/java/org/bukkit/entity/LivingEntity.java
+++ b/src/main/java/org/bukkit/entity/LivingEntity.java
@@ -766,6 +766,13 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource
@Nullable
ItemStack getActiveItem();
+ // Paper start
+ /**
+ * Interrupts any ongoing active "usage" or consumption or an item.
+ */
+ void clearActiveItem();
+ // Paper end
+
/**
* Get's remaining time a player needs to keep hands raised with an item to finish using it.
* @return Remaining ticks to use the item

View file

@ -0,0 +1,89 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: KennyTV <jahnke.nassim@gmail.com>
Date: Tue, 25 Aug 2020 13:45:15 +0200
Subject: [PATCH] Add PlayerItemCooldownEvent
diff --git a/src/main/java/io/papermc/paper/event/player/PlayerItemCooldownEvent.java b/src/main/java/io/papermc/paper/event/player/PlayerItemCooldownEvent.java
new file mode 100644
index 0000000000000000000000000000000000000000..58d18f05af13d836ddc62fcd30befcb06f07c57c
--- /dev/null
+++ b/src/main/java/io/papermc/paper/event/player/PlayerItemCooldownEvent.java
@@ -0,0 +1,77 @@
+package io.papermc.paper.event.player;
+
+import com.google.common.base.Preconditions;
+import org.bukkit.Material;
+import org.bukkit.entity.Player;
+import org.bukkit.event.Cancellable;
+import org.bukkit.event.HandlerList;
+import org.bukkit.event.player.PlayerEvent;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * Fired when a player receives an item cooldown.
+ */
+public class PlayerItemCooldownEvent extends PlayerEvent implements Cancellable {
+ private static final HandlerList handlers = new HandlerList();
+ @NotNull
+ private final Material type;
+ private boolean cancelled;
+ private int cooldown;
+
+ public PlayerItemCooldownEvent(@NotNull Player player, @NotNull Material type, int cooldown) {
+ super(player);
+ this.type = type;
+ this.cooldown = cooldown;
+ }
+
+ /**
+ * Get the material affected by the cooldown.
+ *
+ * @return material affected by the cooldown
+ */
+ @NotNull
+ public Material getType() {
+ return type;
+ }
+
+ /**
+ * Gets the cooldown in ticks.
+ *
+ * @return cooldown in ticks
+ */
+ public int getCooldown() {
+ return cooldown;
+ }
+
+ /**
+ * Sets the cooldown of the material in ticks.
+ * Setting the cooldown to 0 results in removing an already existing cooldown for the material.
+ *
+ * @param cooldown cooldown in ticks, has to be a positive number
+ */
+ public void setCooldown(int cooldown) {
+ Preconditions.checkArgument(cooldown >= 0, "The cooldown has to be equal to or greater than 0!");
+ this.cooldown = cooldown;
+ }
+
+ @Override
+ public boolean isCancelled() {
+ return cancelled;
+ }
+
+ @Override
+ public void setCancelled(boolean cancel) {
+ this.cancelled = cancel;
+ }
+
+ @NotNull
+ @Override
+ public HandlerList getHandlers() {
+ return handlers;
+ }
+
+ @NotNull
+ public static HandlerList getHandlerList() {
+ return handlers;
+ }
+}

View file

@ -0,0 +1,49 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: KennyTV <jahnke.nassim@gmail.com>
Date: Sun, 26 Jul 2020 14:44:16 +0200
Subject: [PATCH] More lightning API
diff --git a/src/main/java/org/bukkit/entity/LightningStrike.java b/src/main/java/org/bukkit/entity/LightningStrike.java
index be347c3d0291f44036bae29a4e7e4645d6a4cdf6..2c81a3f685588431a3c7675c84b35a28975232af 100644
--- a/src/main/java/org/bukkit/entity/LightningStrike.java
+++ b/src/main/java/org/bukkit/entity/LightningStrike.java
@@ -31,4 +31,38 @@ public interface LightningStrike extends Entity {
@Override
Spigot spigot();
// Spigot end
+
+ // Paper start
+ /**
+ * Returns the amount of flash iterations that will be done before the lightning dies.
+ *
+ * @see #getLifeTicks() for how long the current flash will last
+ * @return amount of flashes that will be shown before the lightning dies
+ */
+ int getFlashCount();
+
+ /**
+ * Sets the amount of life iterations that will be done before the lightning dies.
+ * Default number of flashes on creation is between 1-3.
+ *
+ * @param flashes amount of iterations that will be done before the lightning dies, must to be a positive number
+ */
+ void setFlashCount(int flashes);
+
+ /**
+ * Returns the amount of ticks the current flash will do damage for.
+ * Starts with 2 by default, will damage while it is equal to or above 0, with the next flash beginning somewhere between 0 and -9.
+ *
+ * @return ticks the current flash will do damage for
+ */
+ int getLifeTicks();
+
+ /**
+ * Sets the amount of ticks the current flash will do damage/fire for.
+ * Default is 2 for each flash, on which the sound and effect will also be played.
+ *
+ * @param lifeTicks ticks the current flash will do damage for
+ */
+ void setLifeTicks(int lifeTicks);
+ // Paper end
}