aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0440-Add-Wandering-Trader-spawn-rate-config-options.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/server/0440-Add-Wandering-Trader-spawn-rate-config-options.patch')
-rw-r--r--patches/server/0440-Add-Wandering-Trader-spawn-rate-config-options.patch87
1 files changed, 87 insertions, 0 deletions
diff --git a/patches/server/0440-Add-Wandering-Trader-spawn-rate-config-options.patch b/patches/server/0440-Add-Wandering-Trader-spawn-rate-config-options.patch
new file mode 100644
index 0000000000..98525387d7
--- /dev/null
+++ b/patches/server/0440-Add-Wandering-Trader-spawn-rate-config-options.patch
@@ -0,0 +1,87 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Jason Penilla <[email protected]>
+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.wiki/wiki/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/net/minecraft/world/entity/npc/WanderingTraderSpawner.java b/src/main/java/net/minecraft/world/entity/npc/WanderingTraderSpawner.java
+index 4b7e9bc8aa253d0eb12a2195416c618cccdc8690..d5d27b0d352ca3fd57a26605cb35c499e88b57fc 100644
+--- a/src/main/java/net/minecraft/world/entity/npc/WanderingTraderSpawner.java
++++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTraderSpawner.java
+@@ -40,43 +40,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 - Add Wandering Trader spawn rate config options
++ 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 - Add Wandering Trader spawn rate config options
+
+ }
+
+ @Override
+ public int tick(ServerLevel world, boolean spawnMonsters, boolean spawnAnimals) {
++ // Paper start - Add Wandering Trader spawn rate config options
++ if (this.tickDelay == Integer.MIN_VALUE) {
++ this.tickDelay = world.paperConfig().entities.spawning.wanderingTrader.spawnMinuteLength;
++ this.spawnDelay = world.paperConfig().entities.spawning.wanderingTrader.spawnDayLength;
++ this.spawnChance = world.paperConfig().entities.spawning.wanderingTrader.spawnChanceMin;
++ }
+ 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().entities.spawning.wanderingTrader.spawnMinuteLength;
++ this.spawnDelay = this.spawnDelay - world.paperConfig().entities.spawning.wanderingTrader.spawnMinuteLength;
++ //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().entities.spawning.wanderingTrader.spawnDayLength;
+ 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.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
++ this.spawnChance = Mth.clamp(i + world.paperConfig().entities.spawning.wanderingTrader.spawnChanceFailureIncrement, world.paperConfig().entities.spawning.wanderingTrader.spawnChanceMin, world.paperConfig().entities.spawning.wanderingTrader.spawnChanceMax);
+ if (this.random.nextInt(100) > i) {
+ return 0;
+ } else if (this.spawn(world)) {
+- this.spawnChance = 25;
++ this.spawnChance = world.paperConfig().entities.spawning.wanderingTrader.spawnChanceMin;
++ // Paper end - Add Wandering Trader spawn rate config options
+ return 1;
+ } else {
+ return 0;