4d40e87b33
Had to drop some hunks modifying getEntities, as those methods were rewritten by Mojang in 1.17
111 lines
6.6 KiB
Diff
111 lines
6.6 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: jmp <jasonpenilla2@me.com>
|
|
Date: Thu, 20 Aug 2020 11:20:12 -0700
|
|
Subject: [PATCH] Add Wandering Trader spawn rate config options
|
|
|
|
Adds config options for modifying the spawn rates of Wandering Traders.
|
|
These values are all easy to understand and configure after a quick read of this
|
|
page on the Minecraft wiki: https://minecraft.gamepedia.com/Wandering_Trader#Spawning
|
|
Usages of the vanilla WanderingTraderSpawnDelay and WanderingTraderSpawnChance values
|
|
in IWorldServerData are removed as they were only used in certain places, with hardcoded
|
|
values used in other places.
|
|
|
|
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
|
index 72bfeb3d465585ea6de4e896eee65b5bed75188d..19c42a9863341f1d06ad57e95049b3cd5b88aeb2 100644
|
|
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
|
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
|
@@ -61,6 +61,19 @@ public class PaperWorldConfig {
|
|
}
|
|
}
|
|
|
|
+ public int wanderingTraderSpawnMinuteTicks = 1200;
|
|
+ public int wanderingTraderSpawnDayTicks = 24000;
|
|
+ public int wanderingTraderSpawnChanceFailureIncrement = 25;
|
|
+ public int wanderingTraderSpawnChanceMin = 25;
|
|
+ public int wanderingTraderSpawnChanceMax = 75;
|
|
+ private void wanderingTraderSettings() {
|
|
+ wanderingTraderSpawnMinuteTicks = getInt("wandering-trader.spawn-minute-length", wanderingTraderSpawnMinuteTicks);
|
|
+ wanderingTraderSpawnDayTicks = getInt("wandering-trader.spawn-day-length", wanderingTraderSpawnDayTicks);
|
|
+ wanderingTraderSpawnChanceFailureIncrement = getInt("wandering-trader.spawn-chance-failure-increment", wanderingTraderSpawnChanceFailureIncrement);
|
|
+ wanderingTraderSpawnChanceMin = getInt("wandering-trader.spawn-chance-min", wanderingTraderSpawnChanceMin);
|
|
+ wanderingTraderSpawnChanceMax = getInt("wandering-trader.spawn-chance-max", wanderingTraderSpawnChanceMax);
|
|
+ }
|
|
+
|
|
public short keepLoadedRange;
|
|
private void keepLoadedRange() {
|
|
keepLoadedRange = (short) (getInt("keep-spawn-loaded-range", Math.min(spigotConfig.viewDistance, 10)) * 16);
|
|
diff --git a/src/main/java/net/minecraft/world/entity/npc/WanderingTraderSpawner.java b/src/main/java/net/minecraft/world/entity/npc/WanderingTraderSpawner.java
|
|
index 12aa0fd5b6bada9820c3a08eee47c870f9c183cb..60f08ecd0034e8ef2965b54b3abccce582d0ca54 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/npc/WanderingTraderSpawner.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTraderSpawner.java
|
|
@@ -43,43 +43,53 @@ public class WanderingTraderSpawner implements CustomSpawner {
|
|
|
|
public WanderingTraderSpawner(ServerLevelData properties) {
|
|
this.serverLevelData = properties;
|
|
- this.tickDelay = 1200;
|
|
- this.spawnDelay = properties.getWanderingTraderSpawnDelay();
|
|
- this.spawnChance = properties.getWanderingTraderSpawnChance();
|
|
- if (this.spawnDelay == 0 && this.spawnChance == 0) {
|
|
- this.spawnDelay = 24000;
|
|
- properties.setWanderingTraderSpawnDelay(this.spawnDelay);
|
|
- this.spawnChance = 25;
|
|
- properties.setWanderingTraderSpawnChance(this.spawnChance);
|
|
- }
|
|
+ // Paper start
|
|
+ this.tickDelay = Integer.MIN_VALUE;
|
|
+ //this.spawnDelay = properties.getWanderingTraderSpawnDelay(); // Paper - This value is read from the world file only for the first spawn, after which vanilla uses a hardcoded value
|
|
+ //this.spawnChance = properties.getWanderingTraderSpawnChance(); // Paper - This value is read from the world file only for the first spawn, after which vanilla uses a hardcoded value
|
|
+ //if (this.spawnDelay == 0 && this.spawnChance == 0) {
|
|
+ // this.spawnDelay = 24000;
|
|
+ // properties.setWanderingTraderSpawnDelay(this.spawnDelay);
|
|
+ // this.spawnChance = 25;
|
|
+ // properties.setWanderingTraderSpawnChance(this.spawnChance);
|
|
+ //}
|
|
+ // Paper end
|
|
|
|
}
|
|
|
|
@Override
|
|
public int tick(ServerLevel world, boolean spawnMonsters, boolean spawnAnimals) {
|
|
+ // Paper start
|
|
+ if (this.tickDelay == Integer.MIN_VALUE) {
|
|
+ this.tickDelay = world.paperConfig.wanderingTraderSpawnMinuteTicks;
|
|
+ this.spawnDelay = world.paperConfig.wanderingTraderSpawnDayTicks;
|
|
+ this.spawnChance = world.paperConfig.wanderingTraderSpawnChanceMin;
|
|
+ }
|
|
if (!world.getGameRules().getBoolean(GameRules.RULE_DO_TRADER_SPAWNING)) {
|
|
return 0;
|
|
- } else if (--this.tickDelay > 0) {
|
|
+ } else if (this.tickDelay - 1 > 0) {
|
|
+ this.tickDelay = this.tickDelay - 1;
|
|
return 0;
|
|
} else {
|
|
- this.tickDelay = 1200;
|
|
- this.spawnDelay -= 1200;
|
|
- this.serverLevelData.setWanderingTraderSpawnDelay(this.spawnDelay);
|
|
+ this.tickDelay = world.paperConfig.wanderingTraderSpawnMinuteTicks;
|
|
+ this.spawnDelay = this.spawnDelay - world.paperConfig.wanderingTraderSpawnMinuteTicks;
|
|
+ //this.serverLevelData.setWanderingTraderSpawnDelay(this.spawnDelay); // Paper - We don't need to save this value to disk if it gets set back to a hardcoded value anyways
|
|
if (this.spawnDelay > 0) {
|
|
return 0;
|
|
} else {
|
|
- this.spawnDelay = 24000;
|
|
+ this.spawnDelay = world.paperConfig.wanderingTraderSpawnDayTicks;
|
|
if (!world.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING)) {
|
|
return 0;
|
|
} else {
|
|
int i = this.spawnChance;
|
|
|
|
- this.spawnChance = Mth.clamp(this.spawnChance + 25, 25, 75);
|
|
- this.serverLevelData.setWanderingTraderSpawnChance(this.spawnChance);
|
|
+ this.spawnChance = Mth.clamp(i + world.paperConfig.wanderingTraderSpawnChanceFailureIncrement, world.paperConfig.wanderingTraderSpawnChanceMin, world.paperConfig.wanderingTraderSpawnChanceMax);
|
|
+ //this.serverLevelData.setWanderingTraderSpawnChance(this.spawnChance); // Paper - We don't need to save this value to disk if it gets set back to a hardcoded value anyways
|
|
if (this.random.nextInt(100) > i) {
|
|
return 0;
|
|
} else if (this.spawn(world)) {
|
|
- this.spawnChance = 25;
|
|
+ this.spawnChance = world.paperConfig.wanderingTraderSpawnChanceMin;
|
|
+ // Paper end
|
|
return 1;
|
|
} else {
|
|
return 0;
|