mirror of
https://github.com/PaperMC/Paper.git
synced 2024-09-11 22:48:21 +02:00
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: 312281ea PR-742: Make World implement Keyed CraftBukkit Changes: 2ac7fa7a SPIGOT-7014: getLootTable API should not persistently update loot table 7fdd7941 PR-1046: Make World implement Keyed 7bc728a6 PR-1045: Revert changes to persistence required checks Spigot Changes: b6d12d17 Rebuild patches
88 lines
4.4 KiB
Diff
88 lines
4.4 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Suddenly <suddenly@suddenly.coffee>
|
|
Date: Tue, 1 Mar 2016 13:51:54 -0600
|
|
Subject: [PATCH] Add configurable despawn distances for living entities
|
|
|
|
|
|
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
|
index adb1f1bf96bd37b571fb53419db063d79a041bbf..309fdf93b0a148d00cda58ffd31557f349d12907 100644
|
|
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
|
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
|
@@ -3,6 +3,9 @@ package com.destroystokyo.paper;
|
|
import java.util.List;
|
|
|
|
import java.util.stream.Collectors;
|
|
+import it.unimi.dsi.fastutil.objects.Reference2IntMap;
|
|
+import it.unimi.dsi.fastutil.objects.Reference2IntOpenHashMap;
|
|
+import net.minecraft.world.entity.MobCategory;
|
|
import org.bukkit.Bukkit;
|
|
import org.bukkit.configuration.file.YamlConfiguration;
|
|
import org.spigotmc.SpigotWorldConfig;
|
|
@@ -46,6 +49,13 @@ public class PaperWorldConfig {
|
|
public void removeOldValues() {
|
|
boolean needsSave = false;
|
|
|
|
+ if (PaperConfig.version < 24) {
|
|
+ needsSave = true;
|
|
+
|
|
+ set("despawn-ranges.soft", null);
|
|
+ set("despawn-ranges.hard", null);
|
|
+ }
|
|
+
|
|
if (needsSave) {
|
|
saveConfig();
|
|
}
|
|
@@ -132,4 +142,31 @@ public class PaperWorldConfig {
|
|
private void nerfedMobsShouldJump() {
|
|
nerfedMobsShouldJump = getBoolean("spawner-nerfed-mobs-should-jump", false);
|
|
}
|
|
+
|
|
+ public final Reference2IntMap<MobCategory> softDespawnDistances = new Reference2IntOpenHashMap<>(MobCategory.values().length);
|
|
+ public final Reference2IntMap<MobCategory> hardDespawnDistances = new Reference2IntOpenHashMap<>(MobCategory.values().length);
|
|
+ private void despawnDistances() {
|
|
+ if (PaperConfig.version < 24) {
|
|
+ int softDistance = getInt("despawn-ranges.soft", 32, false); // 32^2 = 1024, Minecraft Default
|
|
+ int hardDistance = getInt("despawn-ranges.hard", 128, false); // 128^2 = 16384, Minecraft Default
|
|
+ for (MobCategory value : MobCategory.values()) {
|
|
+ if (softDistance != 32) {
|
|
+ softDespawnDistances.put(value, softDistance);
|
|
+ }
|
|
+ if (hardDistance != 128) {
|
|
+ hardDespawnDistances.put(value, hardDistance);
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+ for (MobCategory category : MobCategory.values()) {
|
|
+ int softDistance = getInt("despawn-ranges." + category.getName() + ".soft", softDespawnDistances.getOrDefault(category, category.getNoDespawnDistance()));
|
|
+ int hardDistance = getInt("despawn-ranges." + category.getName() + ".hard", hardDespawnDistances.getOrDefault(category, category.getDespawnDistance()));
|
|
+ if (softDistance > hardDistance) {
|
|
+ softDistance = hardDistance;
|
|
+ }
|
|
+ log("Mobs in " + category.getName() + " Despawn Ranges: Soft" + softDistance + " Hard: " + hardDistance);
|
|
+ softDespawnDistances.put(category, softDistance);
|
|
+ hardDespawnDistances.put(category, hardDistance);
|
|
+ }
|
|
+ }
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java
|
|
index 28d0be9c3391a636fdc04c2e081ed462ed512c5d..57a856cc52db63861d38e1b94c899b47b7572139 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/Mob.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/Mob.java
|
|
@@ -777,14 +777,14 @@ public abstract class Mob extends LivingEntity {
|
|
|
|
if (entityhuman != null) {
|
|
double d0 = entityhuman.distanceToSqr((Entity) this);
|
|
- int i = this.getType().getCategory().getDespawnDistance();
|
|
+ int i = this.level.paperConfig.hardDespawnDistances.getInt(this.getType().getCategory()); // Paper - custom despawn distances
|
|
int j = i * i;
|
|
|
|
if (d0 > (double) j && this.removeWhenFarAway(d0)) {
|
|
this.discard();
|
|
}
|
|
|
|
- int k = this.getType().getCategory().getNoDespawnDistance();
|
|
+ int k = this.level.paperConfig.softDespawnDistances.getInt(this.getType().getCategory()); // Paper - custom despawn distances
|
|
int l = k * k;
|
|
|
|
if (this.noActionTime > 600 && this.random.nextInt(800) == 0 && d0 > (double) l && this.removeWhenFarAway(d0)) {
|