Paper/patches/server/0367-Implement-alternative-item-despawn-rate.patch

106 Zeilen
5.0 KiB
Diff

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
2021-06-16 06:53:50 +02:00
index 3e3097f23f775eec4107f5c2f3f2266f4250ba15..1a21a177e3062130d7bbcde53e49732c634db73d 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-06-15 15:20:52 +02:00
@@ -453,6 +453,54 @@ public class PaperWorldConfig {
2021-06-14 04:41:44 +02:00
this.noTickViewDistance = this.getInt("viewdistances.no-tick-view-distance", -1);
2021-06-11 14:02:28 +02: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-06-15 15:20:52 +02:00
+
public boolean antiXray;
public EngineMode engineMode;
public int maxChunkSectionIndex;
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
2021-06-14 04:41:44 +02:00
index 9ee1dc89dd4c6b9453e1f6f92208d454877d23c9..e0c13a112c95eed9867d4608e18dc797b0c9c9cf 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-06-14 04:41:44 +02:00
@@ -175,7 +175,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-06-14 04:41:44 +02:00
@@ -199,7 +199,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;
2021-06-14 04:41:44 +02:00
@@ -559,9 +559,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;
}