2021-06-11 14:02:28 +02:00
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: kickash32 <kickash32@gmail.com>
Date: Mon, 3 Jun 2019 02:02:39 -0400
Subject: [PATCH] Implement alternative item-despawn-rate
2021-06-14 04:41:44 +02:00
2021-06-11 14:02:28 +02:00
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
2022-01-19 20:18:24 +01:00
index a17bf0ebe4d60effc72ea71ba4a7eba001875e19..68ae6664541d1dbc611520e7e8612b4f5162c696 100644
2021-06-11 14:02:28 +02:00
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
2021-12-01 02:31:13 +01:00
@@ -565,5 +565,52 @@ public class PaperWorldConfig {
2021-11-29 12:55:13 +01:00
Bukkit.getLogger().warning("You have enabled permission-based Anti-Xray checking - depending on your permission plugin, this may cause performance issues");
}
2021-06-11 14:02:28 +02:00
}
2021-11-24 10:01:27 +01:00
-}
2021-06-15 15:20:52 +02:00
2021-06-11 14:02:28 +02:00
+ public boolean altItemDespawnRateEnabled;
2021-06-15 15:20:52 +02:00
+ public java.util.Map<org.bukkit.Material, Integer> altItemDespawnRateMap;
2021-06-11 14:02:28 +02:00
+ private void altItemDespawnRate() {
+ String path = "alt-item-despawn-rate";
+
+ altItemDespawnRateEnabled = getBoolean(path + ".enabled", false);
+
2021-06-15 15:20:52 +02:00
+ java.util.Map<org.bukkit.Material, Integer> altItemDespawnRateMapDefault = new java.util.EnumMap<>(org.bukkit.Material.class);
+ altItemDespawnRateMapDefault.put(org.bukkit.Material.COBBLESTONE, 300);
+ for (org.bukkit.Material key : altItemDespawnRateMapDefault.keySet()) {
2021-06-11 14:02:28 +02:00
+ config.addDefault("world-settings.default." + path + ".items." + key, altItemDespawnRateMapDefault.get(key));
+ }
+
2021-06-15 15:20:52 +02:00
+ java.util.Map<String, Integer> rawMap = new java.util.HashMap<>();
2021-06-11 14:02:28 +02:00
+ try {
2021-06-15 15:20:52 +02:00
+ org.bukkit.configuration.ConfigurationSection mapSection = config.getConfigurationSection("world-settings." + worldName + "." + path + ".items");
2021-06-11 14:02:28 +02:00
+ if (mapSection == null) {
+ mapSection = config.getConfigurationSection("world-settings.default." + path + ".items");
+ }
+ for (String key : mapSection.getKeys(false)) {
+ int val = mapSection.getInt(key);
+ rawMap.put(key, val);
+ }
+ }
+ catch (Exception e) {
+ logError("alt-item-despawn-rate was malformatted");
+ altItemDespawnRateEnabled = false;
+ }
+
2021-06-15 15:20:52 +02:00
+ altItemDespawnRateMap = new java.util.EnumMap<>(org.bukkit.Material.class);
2021-06-11 14:02:28 +02:00
+ if (!altItemDespawnRateEnabled) {
+ return;
+ }
+
+ for(String key : rawMap.keySet()) {
+ try {
2021-06-15 15:20:52 +02:00
+ altItemDespawnRateMap.put(org.bukkit.Material.valueOf(key), rawMap.get(key));
2021-06-11 14:02:28 +02:00
+ } catch (Exception e) {
+ logError("Could not add item " + key + " to altItemDespawnRateMap: " + e.getMessage());
+ }
+ }
+ if(altItemDespawnRateEnabled) {
2021-06-15 15:20:52 +02:00
+ for(org.bukkit.Material key : altItemDespawnRateMap.keySet()) {
2021-06-11 14:02:28 +02:00
+ log("Alternative item despawn rate of " + key + ": " + altItemDespawnRateMap.get(key));
+ }
+ }
+ }
2021-11-24 10:01:27 +01:00
+}
2021-06-11 14:02:28 +02:00
diff --git a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
2022-03-01 06:43:03 +01:00
index 87c92e73d23a1ebb0646ba0293e1c0d51bb0e059..7b2ac6920d5f0a8dc7cbb552a0e45e2fe471190e 100644
2021-06-11 14:02:28 +02:00
--- a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
+++ b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
2021-11-24 10:01:27 +01:00
@@ -174,7 +174,7 @@ public class ItemEntity extends Entity {
2021-06-11 14:02:28 +02:00
}
}
- if (!this.level.isClientSide && this.age >= level.spigotConfig.itemDespawnRate) { // Spigot
+ if (!this.level.isClientSide && this.age >= this.getDespawnRate()) { // Spigot // Paper
// CraftBukkit start - fire ItemDespawnEvent
if (org.bukkit.craftbukkit.event.CraftEventFactory.callItemDespawnEvent(this).isCancelled()) {
this.age = 0;
2021-11-24 10:01:27 +01:00
@@ -198,7 +198,7 @@ public class ItemEntity extends Entity {
2021-06-11 14:02:28 +02:00
this.lastTick = MinecraftServer.currentTick;
// CraftBukkit end
- if (!this.level.isClientSide && this.age >= level.spigotConfig.itemDespawnRate) { // Spigot
+ if (!this.level.isClientSide && this.age >= this.getDespawnRate()) { // Spigot // Paper
// CraftBukkit start - fire ItemDespawnEvent
if (org.bukkit.craftbukkit.event.CraftEventFactory.callItemDespawnEvent(this).isCancelled()) {
this.age = 0;
2022-03-01 06:43:03 +01:00
@@ -560,9 +560,16 @@ public class ItemEntity extends Entity {
2021-06-11 14:02:28 +02:00
public void makeFakeItem() {
this.setNeverPickUp();
- this.age = level.spigotConfig.itemDespawnRate - 1; // Spigot
2021-06-14 04:41:44 +02:00
+ this.age = this.getDespawnRate() - 1; // Spigot
2021-06-11 14:02:28 +02:00
}
+ // Paper start
+ public int getDespawnRate(){
2021-06-14 04:41:44 +02:00
+ org.bukkit.Material material = this.getItem().getBukkitStack().getType();
2021-06-11 14:02:28 +02:00
+ return level.paperConfig.altItemDespawnRateMap.getOrDefault(material, level.spigotConfig.itemDespawnRate);
+ }
+ // Paper end
+
2021-06-14 04:41:44 +02:00
public float getSpin(float tickDelta) {
return ((float) this.getAge() + tickDelta) / 20.0F + this.bobOffs;
}