From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: BillyGalbreath Date: Fri, 27 Nov 2020 10:33:33 -0600 Subject: [PATCH] Zombie break door minimum difficulty option diff --git a/src/main/java/net/minecraft/server/PathfinderGoalBreakDoor.java b/src/main/java/net/minecraft/server/PathfinderGoalBreakDoor.java index 7488a1292..23870a271 100644 --- a/src/main/java/net/minecraft/server/PathfinderGoalBreakDoor.java +++ b/src/main/java/net/minecraft/server/PathfinderGoalBreakDoor.java @@ -13,7 +13,7 @@ public class PathfinderGoalBreakDoor extends PathfinderGoalDoorInteract { super(entityinsentient); this.b = -1; this.c = -1; - this.g = predicate; + this.g = entityinsentient instanceof EntityZombie ? difficulty -> testDifficulty(entity) : predicate; // Purpur } public PathfinderGoalBreakDoor(EntityInsentient entityinsentient, int i, Predicate predicate) { @@ -82,4 +82,21 @@ public class PathfinderGoalBreakDoor extends PathfinderGoalDoorInteract { private boolean a(EnumDifficulty enumdifficulty) { return this.g.test(enumdifficulty); } + + // Purpur start + private boolean testDifficulty(Entity entity) { + EnumDifficulty difficulty = entity.world.getDifficulty(); + switch (entity.world.purpurConfig.zombieBreakDoorMinDifficulty) { + case PEACEFUL: + return difficulty == EnumDifficulty.HARD || difficulty == EnumDifficulty.NORMAL || difficulty == EnumDifficulty.EASY || difficulty == EnumDifficulty.PEACEFUL; + case EASY: + return difficulty == EnumDifficulty.HARD || difficulty == EnumDifficulty.NORMAL || difficulty == EnumDifficulty.EASY; + case NORMAL: + return difficulty == EnumDifficulty.HARD || difficulty == EnumDifficulty.NORMAL; + case HARD: + default: + return difficulty == EnumDifficulty.HARD; + } + } + // Purpur end } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java index effcabfd6..ee7b5efcf 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -2,6 +2,7 @@ package net.pl3x.purpur; import net.minecraft.server.Block; import net.minecraft.server.Blocks; +import net.minecraft.server.EnumDifficulty; import net.minecraft.server.Explosion; import net.minecraft.server.IRegistry; import net.minecraft.server.Item; @@ -1119,6 +1120,7 @@ public class PurpurWorldConfig { public double zombieJockeyChance = 0.05D; public boolean zombieJockeyTryExistingChickens = true; public boolean zombieAggressiveTowardsVillagerWhenLagging = true; + public EnumDifficulty zombieBreakDoorMinDifficulty = EnumDifficulty.HARD; private void zombieSettings() { zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater); @@ -1126,6 +1128,11 @@ public class PurpurWorldConfig { zombieJockeyChance = getDouble("mobs.zombie.jockey.chance", zombieJockeyChance); zombieJockeyTryExistingChickens = getBoolean("mobs.zombie.jockey.try-existing-chickens", zombieJockeyTryExistingChickens); zombieAggressiveTowardsVillagerWhenLagging = getBoolean("mobs.zombie.aggressive-towards-villager-when-lagging", zombieAggressiveTowardsVillagerWhenLagging); + try { + zombieBreakDoorMinDifficulty = EnumDifficulty.valueOf(getString("mobs.zombie.break-door-minimum-difficulty", zombieBreakDoorMinDifficulty.name())); + } catch (IllegalArgumentException ignore) { + zombieBreakDoorMinDifficulty = EnumDifficulty.HARD; + } } public boolean zombieHorseCanSwim = false;