2019-02-23 18:17:41 +01:00
|
|
|
From 8c74a2e04e4a744068d564312cd647bc53898a59 Mon Sep 17 00:00:00 2001
|
2016-05-02 05:54:08 +02:00
|
|
|
From: Aikar <aikar@aikar.co>
|
|
|
|
Date: Sun, 1 May 2016 15:19:49 -0400
|
|
|
|
Subject: [PATCH] LootTable API
|
|
|
|
|
|
|
|
Provides API to control what Loot Table an object uses.
|
|
|
|
|
|
|
|
Also provides an Event to control if a lootable inventory should
|
|
|
|
auto replenish for a player.
|
|
|
|
|
|
|
|
Provides methods to determine players looted state for an object
|
|
|
|
|
|
|
|
diff --git a/src/main/java/com/destroystokyo/paper/loottable/LootableBlockInventory.java b/src/main/java/com/destroystokyo/paper/loottable/LootableBlockInventory.java
|
|
|
|
new file mode 100644
|
2019-02-23 18:17:41 +01:00
|
|
|
index 00000000..9095df61
|
2016-05-02 05:54:08 +02:00
|
|
|
--- /dev/null
|
|
|
|
+++ b/src/main/java/com/destroystokyo/paper/loottable/LootableBlockInventory.java
|
2018-08-12 19:11:08 +02:00
|
|
|
@@ -0,0 +1,15 @@
|
2016-05-02 05:54:08 +02:00
|
|
|
+package com.destroystokyo.paper.loottable;
|
|
|
|
+
|
|
|
|
+import org.bukkit.block.Block;
|
|
|
|
+
|
2018-08-12 19:11:08 +02:00
|
|
|
+/**
|
|
|
|
+ * Represents an Inventory that can generate loot, such as Chests inside of Fortresses and Mineshafts
|
|
|
|
+ */
|
2016-05-02 05:54:08 +02:00
|
|
|
+public interface LootableBlockInventory extends LootableInventory {
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Gets the block that is lootable
|
|
|
|
+ * @return The Block
|
|
|
|
+ */
|
|
|
|
+ Block getBlock();
|
|
|
|
+}
|
|
|
|
diff --git a/src/main/java/com/destroystokyo/paper/loottable/LootableEntityInventory.java b/src/main/java/com/destroystokyo/paper/loottable/LootableEntityInventory.java
|
|
|
|
new file mode 100644
|
2019-02-23 18:17:41 +01:00
|
|
|
index 00000000..a389f74c
|
2016-05-02 05:54:08 +02:00
|
|
|
--- /dev/null
|
|
|
|
+++ b/src/main/java/com/destroystokyo/paper/loottable/LootableEntityInventory.java
|
2018-08-12 19:11:08 +02:00
|
|
|
@@ -0,0 +1,15 @@
|
2016-05-02 05:54:08 +02:00
|
|
|
+package com.destroystokyo.paper.loottable;
|
|
|
|
+
|
|
|
|
+import org.bukkit.entity.Entity;
|
|
|
|
+
|
2018-08-12 19:11:08 +02:00
|
|
|
+/**
|
|
|
|
+ * Represents an Inventory that can generate loot, such as Minecarts inside of Mineshafts
|
|
|
|
+ */
|
2016-05-02 05:54:08 +02:00
|
|
|
+public interface LootableEntityInventory extends LootableInventory {
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Gets the entity that is lootable
|
|
|
|
+ * @return The Entity
|
|
|
|
+ */
|
|
|
|
+ Entity getEntity();
|
|
|
|
+}
|
|
|
|
diff --git a/src/main/java/com/destroystokyo/paper/loottable/LootableInventory.java b/src/main/java/com/destroystokyo/paper/loottable/LootableInventory.java
|
|
|
|
new file mode 100644
|
2019-02-23 18:17:41 +01:00
|
|
|
index 00000000..2fc3e8a1
|
2016-05-02 05:54:08 +02:00
|
|
|
--- /dev/null
|
|
|
|
+++ b/src/main/java/com/destroystokyo/paper/loottable/LootableInventory.java
|
2018-08-26 20:11:49 +02:00
|
|
|
@@ -0,0 +1,112 @@
|
2016-05-02 05:54:08 +02:00
|
|
|
+package com.destroystokyo.paper.loottable;
|
|
|
|
+
|
|
|
|
+import org.bukkit.entity.Player;
|
2018-08-26 20:11:49 +02:00
|
|
|
+import org.bukkit.loot.Lootable;
|
2016-05-02 05:54:08 +02:00
|
|
|
+
|
|
|
|
+import java.util.UUID;
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * Represents an Inventory that contains a Loot Table associated to it that will
|
|
|
|
+ * automatically fill on first open.
|
|
|
|
+ *
|
|
|
|
+ * A new feature and API is provided to support automatically refreshing the contents
|
|
|
|
+ * of the inventory based on that Loot Table after a configurable amount of time has passed.
|
|
|
|
+ *
|
|
|
|
+ * The behavior of how the Inventory is filled based on the loot table may vary based
|
|
|
|
+ * on Minecraft versions and the Loot Table feature.
|
|
|
|
+ */
|
|
|
|
+public interface LootableInventory extends Lootable {
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Server owners have to enable whether or not an object in a world should refill
|
|
|
|
+ *
|
|
|
|
+ * @return If the world this inventory is currently in has Replenishable Lootables enabled
|
|
|
|
+ */
|
|
|
|
+ boolean isRefillEnabled();
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Whether or not this object has ever been filled
|
|
|
|
+ * @return Has ever been filled
|
|
|
|
+ */
|
|
|
|
+ boolean hasBeenFilled();
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Has this player ever looted this block
|
|
|
|
+ * @param player The player to check
|
|
|
|
+ * @return Whether or not this player has looted this block
|
|
|
|
+ */
|
|
|
|
+ default boolean hasPlayerLooted(Player player) {
|
|
|
|
+ return hasPlayerLooted(player.getUniqueId());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Has this player ever looted this block
|
|
|
|
+ * @param player The player to check
|
|
|
|
+ * @return Whether or not this player has looted this block
|
|
|
|
+ */
|
|
|
|
+ boolean hasPlayerLooted(UUID player);
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Gets the timestamp, in milliseconds, of when the player last looted this object
|
|
|
|
+ *
|
|
|
|
+ * @param player The player to check
|
|
|
|
+ * @return Timestamp last looted, or null if player has not looted this object
|
|
|
|
+ */
|
|
|
|
+ default Long getLastLooted(Player player) {
|
|
|
|
+ return getLastLooted(player.getUniqueId());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Gets the timestamp, in milliseconds, of when the player last looted this object
|
|
|
|
+ *
|
|
|
|
+ * @param player The player to check
|
|
|
|
+ * @return Timestamp last looted, or null if player has not looted this object
|
|
|
|
+ */
|
|
|
|
+ Long getLastLooted(UUID player);
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Change the state of whether or not a player has looted this block
|
|
|
|
+ * @param player The player to change state for
|
|
|
|
+ * @param looted true to add player to looted list, false to remove
|
|
|
|
+ * @return The previous state of whether the player had looted this or not
|
|
|
|
+ */
|
|
|
|
+ default boolean setHasPlayerLooted(Player player, boolean looted) {
|
|
|
|
+ return setHasPlayerLooted(player.getUniqueId(), looted);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Change the state of whether or not a player has looted this block
|
|
|
|
+ * @param player The player to change state for
|
|
|
|
+ * @param looted true to add player to looted list, false to remove
|
|
|
|
+ * @return The previous state of whether the player had looted this or not
|
|
|
|
+ */
|
|
|
|
+ boolean setHasPlayerLooted(UUID player, boolean looted);
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Returns Whether or not this object has been filled and now has a pending refill
|
|
|
|
+ * @return Has pending refill
|
|
|
|
+ */
|
|
|
|
+ boolean hasPendingRefill();
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Gets the timestamp in milliseconds that the Lootable object was last refilled
|
|
|
|
+ *
|
|
|
|
+ * @return -1 if it was never refilled, or timestamp in milliseconds
|
|
|
|
+ */
|
|
|
|
+ long getLastFilled();
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Gets the timestamp in milliseconds that the Lootable object will refill
|
|
|
|
+ *
|
|
|
|
+ * @return -1 if it is not scheduled for refill, or timestamp in milliseconds
|
|
|
|
+ */
|
|
|
|
+ long getNextRefill();
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Sets the timestamp in milliseconds of the next refill for this object
|
|
|
|
+ *
|
|
|
|
+ * @param refillAt timestamp in milliseconds. -1 to clear next refill
|
|
|
|
+ * @return The previous scheduled time to refill, or -1 if was not scheduled
|
|
|
|
+ */
|
|
|
|
+ long setNextRefill(long refillAt);
|
|
|
|
+}
|
|
|
|
diff --git a/src/main/java/com/destroystokyo/paper/loottable/LootableInventoryReplenishEvent.java b/src/main/java/com/destroystokyo/paper/loottable/LootableInventoryReplenishEvent.java
|
|
|
|
new file mode 100644
|
2019-02-23 18:17:41 +01:00
|
|
|
index 00000000..2169493d
|
2016-05-02 05:54:08 +02:00
|
|
|
--- /dev/null
|
|
|
|
+++ b/src/main/java/com/destroystokyo/paper/loottable/LootableInventoryReplenishEvent.java
|
|
|
|
@@ -0,0 +1,41 @@
|
|
|
|
+package com.destroystokyo.paper.loottable;
|
|
|
|
+
|
|
|
|
+import org.bukkit.entity.Player;
|
|
|
|
+import org.bukkit.event.Cancellable;
|
|
|
|
+import org.bukkit.event.HandlerList;
|
|
|
|
+import org.bukkit.event.player.PlayerEvent;
|
|
|
|
+
|
|
|
|
+public class LootableInventoryReplenishEvent extends PlayerEvent implements Cancellable {
|
|
|
|
+ private final LootableInventory inventory;
|
|
|
|
+
|
|
|
|
+ public LootableInventoryReplenishEvent(Player player, LootableInventory inventory) {
|
|
|
|
+ super(player);
|
|
|
|
+ this.inventory = inventory;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public LootableInventory getInventory() {
|
|
|
|
+ return inventory;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private static final HandlerList handlers = new HandlerList();
|
|
|
|
+
|
|
|
|
+ public HandlerList getHandlers() {
|
|
|
|
+ return handlers;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public static HandlerList getHandlerList() {
|
|
|
|
+ return handlers;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private boolean cancelled = false;
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public boolean isCancelled() {
|
|
|
|
+ return cancelled;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void setCancelled(boolean cancel) {
|
|
|
|
+ cancelled = cancel;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
diff --git a/src/main/java/org/bukkit/block/Chest.java b/src/main/java/org/bukkit/block/Chest.java
|
2019-02-23 18:17:41 +01:00
|
|
|
index 815d79a5..b68ab881 100644
|
2016-05-02 05:54:08 +02:00
|
|
|
--- a/src/main/java/org/bukkit/block/Chest.java
|
|
|
|
+++ b/src/main/java/org/bukkit/block/Chest.java
|
2018-08-12 19:11:08 +02:00
|
|
|
@@ -1,5 +1,6 @@
|
2016-05-02 05:54:08 +02:00
|
|
|
package org.bukkit.block;
|
|
|
|
|
2018-08-12 19:11:08 +02:00
|
|
|
+import com.destroystokyo.paper.loottable.LootableBlockInventory;
|
2016-11-19 05:58:56 +01:00
|
|
|
import org.bukkit.Nameable;
|
2016-05-02 05:54:08 +02:00
|
|
|
import org.bukkit.inventory.Inventory;
|
2018-08-12 19:11:08 +02:00
|
|
|
import org.bukkit.loot.Lootable;
|
|
|
|
@@ -7,7 +8,7 @@ import org.bukkit.loot.Lootable;
|
2016-05-02 05:54:08 +02:00
|
|
|
/**
|
2017-08-06 00:36:47 +02:00
|
|
|
* Represents a captured state of a chest.
|
2016-05-02 05:54:08 +02:00
|
|
|
*/
|
2018-08-12 19:11:08 +02:00
|
|
|
-public interface Chest extends Container, Nameable, Lootable {
|
|
|
|
+public interface Chest extends Container, Nameable, LootableBlockInventory { // Paper
|
2016-05-02 05:54:08 +02:00
|
|
|
|
|
|
|
/**
|
2017-08-06 00:36:47 +02:00
|
|
|
* Gets the inventory of the chest block represented by this block state.
|
2016-05-02 05:54:08 +02:00
|
|
|
diff --git a/src/main/java/org/bukkit/block/Dispenser.java b/src/main/java/org/bukkit/block/Dispenser.java
|
2019-02-23 18:17:41 +01:00
|
|
|
index 2741625d..6d180117 100644
|
2016-05-02 05:54:08 +02:00
|
|
|
--- a/src/main/java/org/bukkit/block/Dispenser.java
|
|
|
|
+++ b/src/main/java/org/bukkit/block/Dispenser.java
|
2018-08-12 19:11:08 +02:00
|
|
|
@@ -1,5 +1,6 @@
|
2016-05-02 05:54:08 +02:00
|
|
|
package org.bukkit.block;
|
|
|
|
|
2018-08-12 19:11:08 +02:00
|
|
|
+import com.destroystokyo.paper.loottable.LootableBlockInventory;
|
2016-11-19 05:58:56 +01:00
|
|
|
import org.bukkit.Nameable;
|
2018-08-12 19:11:08 +02:00
|
|
|
import org.bukkit.loot.Lootable;
|
2016-05-02 05:54:08 +02:00
|
|
|
import org.bukkit.projectiles.BlockProjectileSource;
|
2018-08-12 19:11:08 +02:00
|
|
|
@@ -7,7 +8,7 @@ import org.bukkit.projectiles.BlockProjectileSource;
|
2016-05-02 05:54:08 +02:00
|
|
|
/**
|
2017-08-06 00:36:47 +02:00
|
|
|
* Represents a captured state of a dispenser.
|
2016-05-02 05:54:08 +02:00
|
|
|
*/
|
2018-08-12 19:11:08 +02:00
|
|
|
-public interface Dispenser extends Container, Nameable, Lootable {
|
|
|
|
+public interface Dispenser extends Container, Nameable, LootableBlockInventory { // Paper
|
2016-05-02 05:54:08 +02:00
|
|
|
|
|
|
|
/**
|
2017-08-06 00:36:47 +02:00
|
|
|
* Gets the BlockProjectileSource object for the dispenser.
|
2018-08-12 19:11:08 +02:00
|
|
|
diff --git a/src/main/java/org/bukkit/block/Dropper.java b/src/main/java/org/bukkit/block/Dropper.java
|
2019-02-23 18:17:41 +01:00
|
|
|
index 2e8c3f71..47737b59 100644
|
2018-08-12 19:11:08 +02:00
|
|
|
--- a/src/main/java/org/bukkit/block/Dropper.java
|
|
|
|
+++ b/src/main/java/org/bukkit/block/Dropper.java
|
|
|
|
@@ -1,12 +1,13 @@
|
|
|
|
package org.bukkit.block;
|
|
|
|
|
|
|
|
+import com.destroystokyo.paper.loottable.LootableBlockInventory;
|
|
|
|
import org.bukkit.Nameable;
|
|
|
|
import org.bukkit.loot.Lootable;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Represents a captured state of a dropper.
|
|
|
|
*/
|
|
|
|
-public interface Dropper extends Container, Nameable, Lootable {
|
|
|
|
+public interface Dropper extends Container, Nameable, LootableBlockInventory { // Paper
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Tries to drop a randomly selected item from the dropper's inventory,
|
2016-05-02 05:54:08 +02:00
|
|
|
diff --git a/src/main/java/org/bukkit/block/Hopper.java b/src/main/java/org/bukkit/block/Hopper.java
|
2019-02-23 18:17:41 +01:00
|
|
|
index 73fce5f3..221123e8 100644
|
2016-05-02 05:54:08 +02:00
|
|
|
--- a/src/main/java/org/bukkit/block/Hopper.java
|
|
|
|
+++ b/src/main/java/org/bukkit/block/Hopper.java
|
2018-08-12 19:11:08 +02:00
|
|
|
@@ -1,9 +1,10 @@
|
2016-05-02 05:54:08 +02:00
|
|
|
package org.bukkit.block;
|
|
|
|
|
2018-08-12 19:11:08 +02:00
|
|
|
+import com.destroystokyo.paper.loottable.LootableBlockInventory;
|
2016-11-19 05:58:56 +01:00
|
|
|
import org.bukkit.Nameable;
|
2018-08-12 19:11:08 +02:00
|
|
|
import org.bukkit.loot.Lootable;
|
2016-05-02 05:54:08 +02:00
|
|
|
|
|
|
|
/**
|
2017-08-06 00:36:47 +02:00
|
|
|
* Represents a captured state of a hopper.
|
2016-05-02 05:54:08 +02:00
|
|
|
*/
|
2018-08-12 19:11:08 +02:00
|
|
|
-public interface Hopper extends Container, Nameable, Lootable { }
|
|
|
|
+public interface Hopper extends Container, Nameable, LootableBlockInventory { } // Paper
|
2016-11-19 18:31:01 +01:00
|
|
|
diff --git a/src/main/java/org/bukkit/block/ShulkerBox.java b/src/main/java/org/bukkit/block/ShulkerBox.java
|
2019-02-23 18:17:41 +01:00
|
|
|
index 8e061e4a..1c02c6e1 100644
|
2016-11-19 18:31:01 +01:00
|
|
|
--- a/src/main/java/org/bukkit/block/ShulkerBox.java
|
|
|
|
+++ b/src/main/java/org/bukkit/block/ShulkerBox.java
|
2018-08-12 19:11:08 +02:00
|
|
|
@@ -1,5 +1,6 @@
|
2016-11-19 18:31:01 +01:00
|
|
|
package org.bukkit.block;
|
|
|
|
|
2018-08-12 19:11:08 +02:00
|
|
|
+import com.destroystokyo.paper.loottable.LootableBlockInventory;
|
2016-11-19 18:31:01 +01:00
|
|
|
import org.bukkit.DyeColor;
|
|
|
|
import org.bukkit.Nameable;
|
2018-08-12 19:11:08 +02:00
|
|
|
import org.bukkit.loot.Lootable;
|
|
|
|
@@ -7,7 +8,7 @@ import org.bukkit.loot.Lootable;
|
2016-11-19 18:31:01 +01:00
|
|
|
/**
|
2017-08-06 00:36:47 +02:00
|
|
|
* Represents a captured state of a ShulkerBox.
|
2016-11-19 18:31:01 +01:00
|
|
|
*/
|
2018-08-12 19:11:08 +02:00
|
|
|
-public interface ShulkerBox extends Container, Nameable, Lootable {
|
|
|
|
+public interface ShulkerBox extends Container, Nameable, LootableBlockInventory { // Paper
|
2016-11-19 18:31:01 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the {@link DyeColor} corresponding to this ShulkerBox
|
2018-08-12 19:11:08 +02:00
|
|
|
diff --git a/src/main/java/org/bukkit/entity/minecart/HopperMinecart.java b/src/main/java/org/bukkit/entity/minecart/HopperMinecart.java
|
2019-02-23 18:17:41 +01:00
|
|
|
index 8ced5403..86588550 100644
|
2018-08-12 19:11:08 +02:00
|
|
|
--- a/src/main/java/org/bukkit/entity/minecart/HopperMinecart.java
|
|
|
|
+++ b/src/main/java/org/bukkit/entity/minecart/HopperMinecart.java
|
|
|
|
@@ -1,5 +1,6 @@
|
|
|
|
package org.bukkit.entity.minecart;
|
|
|
|
|
|
|
|
+import com.destroystokyo.paper.loottable.LootableEntityInventory;
|
|
|
|
import org.bukkit.entity.Minecart;
|
|
|
|
import org.bukkit.inventory.InventoryHolder;
|
|
|
|
import org.bukkit.loot.Lootable;
|
|
|
|
@@ -7,7 +8,7 @@ import org.bukkit.loot.Lootable;
|
|
|
|
/**
|
|
|
|
* Represents a Minecart with a Hopper inside it
|
|
|
|
*/
|
|
|
|
-public interface HopperMinecart extends Minecart, InventoryHolder, Lootable {
|
|
|
|
+public interface HopperMinecart extends Minecart, InventoryHolder, LootableEntityInventory {
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Checks whether or not this Minecart will pick up
|
|
|
|
diff --git a/src/main/java/org/bukkit/entity/minecart/StorageMinecart.java b/src/main/java/org/bukkit/entity/minecart/StorageMinecart.java
|
2019-02-23 18:17:41 +01:00
|
|
|
index 9ea403e6..238d118f 100644
|
2018-08-12 19:11:08 +02:00
|
|
|
--- a/src/main/java/org/bukkit/entity/minecart/StorageMinecart.java
|
|
|
|
+++ b/src/main/java/org/bukkit/entity/minecart/StorageMinecart.java
|
|
|
|
@@ -1,5 +1,6 @@
|
|
|
|
package org.bukkit.entity.minecart;
|
|
|
|
|
|
|
|
+import com.destroystokyo.paper.loottable.LootableEntityInventory;
|
|
|
|
import org.bukkit.entity.Minecart;
|
|
|
|
import org.bukkit.inventory.InventoryHolder;
|
|
|
|
import org.bukkit.loot.Lootable;
|
|
|
|
@@ -9,5 +10,5 @@ import org.bukkit.loot.Lootable;
|
|
|
|
* minecarts} have their own inventory that can be accessed using methods
|
|
|
|
* from the {@link InventoryHolder} interface.
|
|
|
|
*/
|
|
|
|
-public interface StorageMinecart extends Minecart, InventoryHolder, Lootable {
|
|
|
|
+public interface StorageMinecart extends Minecart, InventoryHolder, LootableEntityInventory { // Paper
|
|
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/loot/Lootable.java b/src/main/java/org/bukkit/loot/Lootable.java
|
2019-02-23 18:17:41 +01:00
|
|
|
index f4b3d021..9f1c830f 100644
|
2018-08-12 19:11:08 +02:00
|
|
|
--- a/src/main/java/org/bukkit/loot/Lootable.java
|
|
|
|
+++ b/src/main/java/org/bukkit/loot/Lootable.java
|
2018-08-26 20:11:49 +02:00
|
|
|
@@ -33,6 +33,34 @@ public interface Lootable {
|
2018-08-12 19:11:08 +02:00
|
|
|
*/
|
|
|
|
LootTable getLootTable();
|
|
|
|
|
|
|
|
+ // Paper start
|
|
|
|
+ /**
|
|
|
|
+ * Set the loot table and seed for a container or entity at the same time.
|
|
|
|
+ *
|
|
|
|
+ * @param table the Loot Table this {@link org.bukkit.block.Container} or {@link org.bukkit.entity.Mob} will have.
|
|
|
|
+ * @param seed the seed to used to generate loot. Default is 0.
|
|
|
|
+ */
|
2018-08-26 20:11:49 +02:00
|
|
|
+ default void setLootTable(LootTable table, long seed) {
|
|
|
|
+ setLootTable(table);
|
|
|
|
+ setSeed(seed);
|
|
|
|
+ }
|
2018-08-12 19:11:08 +02:00
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Returns whether or not this object has a Loot Table
|
|
|
|
+ * @return Has a loot table
|
|
|
|
+ */
|
|
|
|
+ default boolean hasLootTable() {
|
|
|
|
+ return getLootTable() != null;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Clears the associated Loot Table to this object
|
|
|
|
+ */
|
|
|
|
+ default void clearLootTable() {
|
|
|
|
+ setLootTable(null);
|
|
|
|
+ }
|
|
|
|
+ // Paper end
|
|
|
|
+
|
|
|
|
/**
|
|
|
|
* Set the seed used when this Loot Table generates loot.
|
|
|
|
*
|
2016-05-02 05:54:08 +02:00
|
|
|
--
|
2019-02-23 18:17:41 +01:00
|
|
|
2.20.1
|
2016-05-02 05:54:08 +02:00
|
|
|
|