geforkt von Mirrors/Paper
9147456fc9
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 CraftBukkit Changes: ab8ace685 SPIGOT-7236: Bone meal doesn't increase use statistic 7dcb59b8e Avoid switch on material in previous commit Spigot Changes: 19641c75 SPIGOT-7235: World.Spigot#strikeLightningEffect doesn't do anything
88 Zeilen
5.3 KiB
Diff
88 Zeilen
5.3 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Jason Penilla <11360596+jpenilla@users.noreply.github.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/net/minecraft/world/entity/npc/WanderingTraderSpawner.java b/src/main/java/net/minecraft/world/entity/npc/WanderingTraderSpawner.java
|
|
index 0885565e4de0c2924f9e89abfd20dfa0ccf031f2..0ae8e9134a3671cdf2a480cd4dd6598653e261ab 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
|
|
+ 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().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, (int) 25, (int) 75);
|
|
- this.serverLevelData.setWanderingTraderSpawnChance(this.spawnChance);
|
|
+ this.spawnChance = Mth.clamp(i + world.paperConfig().entities.spawning.wanderingTrader.spawnChanceFailureIncrement, world.paperConfig().entities.spawning.wanderingTrader.spawnChanceMin, world.paperConfig().entities.spawning.wanderingTrader.spawnChanceMax);
|
|
+ //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().entities.spawning.wanderingTrader.spawnChanceMin;
|
|
+ // Paper end
|
|
return 1;
|
|
} else {
|
|
return 0;
|