Files
Purpur/patches/server/0043-Pillager-limits-and-leaders-chance.patch
2020-04-06 01:09:14 -05:00

73 lines
4.4 KiB
Diff

From 501c98000608351a241ef325d4c3ede31634ae33 Mon Sep 17 00:00:00 2001
From: William Blake Galbreath <blake.galbreath@gmail.com>
Date: Mon, 22 Jul 2019 14:24:26 -0500
Subject: [PATCH] Pillager limits and leaders chance
---
.../java/net/minecraft/server/ChunkProviderGenerate.java | 1 +
.../java/net/minecraft/server/EntityMonsterPatrolling.java | 7 ++++++-
src/main/java/net/pl3x/purpur/PurpurWorldConfig.java | 6 ++++++
3 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/src/main/java/net/minecraft/server/ChunkProviderGenerate.java b/src/main/java/net/minecraft/server/ChunkProviderGenerate.java
index 70f43c5159..fa08b8e1ab 100644
--- a/src/main/java/net/minecraft/server/ChunkProviderGenerate.java
+++ b/src/main/java/net/minecraft/server/ChunkProviderGenerate.java
@@ -143,6 +143,7 @@ public class ChunkProviderGenerate extends ChunkGeneratorAbstract<GeneratorSetti
}
} else if (enumcreaturetype == EnumCreatureType.MONSTER) {
if (WorldGenerator.PILLAGER_OUTPOST.a(this.a, blockposition)) {
+ if (getWorld().purpurConfig.pillagerLimitOutpostSpawns <= 0 || getWorld().getEntitiesByClass(EntityPillager.class, new AxisAlignedBB(blockposition).grow(128)).size() < getWorld().purpurConfig.pillagerLimitOutpostSpawns) // Purpur
return WorldGenerator.PILLAGER_OUTPOST.e();
}
diff --git a/src/main/java/net/minecraft/server/EntityMonsterPatrolling.java b/src/main/java/net/minecraft/server/EntityMonsterPatrolling.java
index f44334b9e1..70559714ac 100644
--- a/src/main/java/net/minecraft/server/EntityMonsterPatrolling.java
+++ b/src/main/java/net/minecraft/server/EntityMonsterPatrolling.java
@@ -49,6 +49,7 @@ public abstract class EntityMonsterPatrolling extends EntityMonster {
return -0.45D;
}
+ public boolean canBeLeader() { return this.es(); } // Purpur
public boolean es() {
return true;
}
@@ -56,7 +57,11 @@ public abstract class EntityMonsterPatrolling extends EntityMonster {
@Nullable
@Override
public GroupDataEntity prepare(GeneratorAccess generatoraccess, DifficultyDamageScaler difficultydamagescaler, EnumMobSpawn enummobspawn, @Nullable GroupDataEntity groupdataentity, @Nullable NBTTagCompound nbttagcompound) {
- if (enummobspawn != EnumMobSpawn.PATROL && enummobspawn != EnumMobSpawn.EVENT && enummobspawn != EnumMobSpawn.STRUCTURE && this.random.nextFloat() < 0.06F && this.es()) {
+ // Purpur start
+ World world = generatoraccess.getMinecraftWorld();
+ if (this.canBeLeader() && enummobspawn != EnumMobSpawn.PATROL && enummobspawn != EnumMobSpawn.EVENT && enummobspawn != EnumMobSpawn.STRUCTURE && this.random.nextFloat() < world.purpurConfig.pillagerLeaderChance) {
+ if (world.purpurConfig.pillagerLeaderRangeCheck <= 0 || (this instanceof EntityPillager && world.getEntitiesByClass(EntityPillager.class, new AxisAlignedBB(new BlockPosition(this)).grow(world.purpurConfig.pillagerLeaderRangeCheck)).size() == 0))
+ // Purpur end
this.patrolLeader = true;
}
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
index 9579b477e6..ee20c67b47 100644
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
@@ -529,10 +529,16 @@ public class PurpurWorldConfig {
public boolean pillagerRidable = false;
public boolean pillagerRidableInWater = false;
public boolean pillagerRequireShiftToMount = true;
+ public int pillagerLimitOutpostSpawns = 0;
+ public float pillagerLeaderChance = 0.06F;
+ public int pillagerLeaderRangeCheck = 0;
private void pillagerSettings() {
pillagerRidable = getBoolean("mobs.pillager.ridable", pillagerRidable);
pillagerRidableInWater = getBoolean("mobs.pillager.ridable-in-water", pillagerRidableInWater);
pillagerRequireShiftToMount = getBoolean("mobs.pillager.require-shift-to-mount", pillagerRequireShiftToMount);
+ pillagerLimitOutpostSpawns = getInt("mobs.pillager.limit-outpost-spawns", pillagerLimitOutpostSpawns);
+ pillagerLeaderChance = (float) getDouble("mobs.pillager.leader.chance", pillagerLeaderChance);
+ pillagerLeaderRangeCheck = getInt("mobs.pillager.leader.range-check-for-other-leaders", pillagerLeaderRangeCheck);
}
public boolean polarBearRidable = false;
--
2.24.0