Files
Purpur/patches/server/0126-Zombie-break-door-minimum-difficulty-option.patch
William Blake Galbreath 5455ba8ace progress
2021-06-20 12:27:52 -05:00

78 lines
4.0 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
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/world/entity/ai/goal/BreakDoorGoal.java b/src/main/java/net/minecraft/world/entity/ai/goal/BreakDoorGoal.java
index fe045f8e35fe2aac51032a67ce52b27a53a8eff0..03bc86c776596ca5964c22adb757115d60980311 100644
--- a/src/main/java/net/minecraft/world/entity/ai/goal/BreakDoorGoal.java
+++ b/src/main/java/net/minecraft/world/entity/ai/goal/BreakDoorGoal.java
@@ -7,6 +7,8 @@ import net.minecraft.world.entity.Mob;
import net.minecraft.world.level.GameRules;
import net.minecraft.world.level.block.Block;
+import static net.minecraft.world.Difficulty.*; // Purpur
+
public class BreakDoorGoal extends DoorInteractGoal {
private static final int DEFAULT_DOOR_BREAK_TIME = 240;
@@ -19,7 +21,7 @@ public class BreakDoorGoal extends DoorInteractGoal {
super(mob);
this.lastBreakProgress = -1;
this.doorBreakTime = -1;
- this.validDifficulties = difficultySufficientPredicate;
+ this.validDifficulties = mob instanceof net.minecraft.world.entity.monster.Zombie ? difficulty -> testDifficulty(mob) : difficultySufficientPredicate; // Purpur
}
public BreakDoorGoal(Mob mob, int maxProgress, Predicate<Difficulty> difficultySufficientPredicate) {
@@ -88,4 +90,16 @@ public class BreakDoorGoal extends DoorInteractGoal {
private boolean isValidDifficulty(Difficulty difficulty) {
return this.validDifficulties.test(difficulty);
}
+
+ // Purpur start
+ private boolean testDifficulty(Mob entity) {
+ Difficulty d = entity.level.getDifficulty();
+ return switch (entity.level.purpurConfig.zombieBreakDoorMinDifficulty) {
+ case PEACEFUL -> d == HARD || d == NORMAL || d == EASY || d == PEACEFUL;
+ case EASY -> d == HARD || d == NORMAL || d == EASY;
+ case NORMAL -> d == HARD || d == NORMAL;
+ default -> d == HARD;
+ };
+ }
+ // Purpur end
}
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
index 94302930c2009ca9c4750cb3315b5bcce59518da..aba5325f96a396be479445730558235529afdcec 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.core.Registry;
import net.minecraft.resources.ResourceLocation;
+import net.minecraft.world.Difficulty;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.Items;
import net.minecraft.world.level.Explosion;
@@ -1746,6 +1747,7 @@ public class PurpurWorldConfig {
public double zombieJockeyChance = 0.05D;
public boolean zombieJockeyTryExistingChickens = true;
public boolean zombieAggressiveTowardsVillagerWhenLagging = true;
+ public Difficulty zombieBreakDoorMinDifficulty = Difficulty.HARD;
private void zombieSettings() {
zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable);
zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater);
@@ -1760,6 +1762,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 = Difficulty.valueOf(getString("mobs.zombie.break-door-minimum-difficulty", zombieBreakDoorMinDifficulty.name()));
+ } catch (IllegalArgumentException ignore) {
+ zombieBreakDoorMinDifficulty = Difficulty.HARD;
+ }
}
public boolean zombieHorseRidableInWater = false;