mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-03 06:40:19 +08:00
b31089a929
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 Bukkit Changes: d264e972 #591: Add option for a consumer before spawning an item 1c537fce #590: Add spawn and transform reasons for piglin zombification. CraftBukkit Changes: ee5006d1 #810: Add option for a consumer before spawning an item f6a39d3c #809: Add spawn and transform reasons for piglin zombification. 0c24068a Organise imports Spigot Changes: bff52619 Organise imports
102 lines
5.4 KiB
Diff
102 lines
5.4 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Jake Potrebic <jake.m.potrebic@gmail.com>
|
|
Date: Sun, 3 Jan 2021 22:27:43 -0800
|
|
Subject: [PATCH] Configurable door breaking difficulty
|
|
|
|
|
|
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
|
index c42e5d9f9c9f67988383c4c25123d8a629ede9e3..c5495e02c3fe271b26f62ea2ec64e07957edf37e 100644
|
|
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
|
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
|
@@ -5,8 +5,12 @@ import java.util.EnumMap;
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
+import java.util.stream.Collectors;
|
|
|
|
import com.destroystokyo.paper.antixray.ChunkPacketBlockControllerAntiXray.EngineMode;
|
|
+import net.minecraft.server.EntityVindicator;
|
|
+import net.minecraft.server.EntityZombie;
|
|
+import net.minecraft.server.EnumDifficulty;
|
|
import org.bukkit.Bukkit;
|
|
import org.bukkit.Material;
|
|
import org.bukkit.configuration.ConfigurationSection;
|
|
@@ -73,6 +77,11 @@ public class PaperWorldConfig {
|
|
return config.getString("world-settings." + worldName + "." + path, config.getString("world-settings.default." + path));
|
|
}
|
|
|
|
+ private <T extends Enum<T>> List<T> getEnumList(String path, List<T> def, Class<T> type) {
|
|
+ config.addDefault("world-settings.default." + path, def.stream().map(Enum::name).collect(Collectors.toList()));
|
|
+ return ((List<String>) (config.getList("world-settings." + worldName + "." + path, config.getList("world-settings.default." + path)))).stream().map(s -> Enum.valueOf(type, s)).collect(Collectors.toList());
|
|
+ }
|
|
+
|
|
public int cactusMaxHeight;
|
|
public int reedMaxHeight;
|
|
public int bambooMaxHeight;
|
|
@@ -733,4 +742,23 @@ public class PaperWorldConfig {
|
|
private void disableMobSpawnerSpawnEggTransformation() {
|
|
disableMobSpawnerSpawnEggTransformation = getBoolean("game-mechanics.disable-mob-spawner-spawn-egg-transformation", disableMobSpawnerSpawnEggTransformation);
|
|
}
|
|
+
|
|
+ public List<EnumDifficulty> zombieBreakDoors;
|
|
+ public List<EnumDifficulty> vindicatorBreakDoors;
|
|
+ private void setupEntityBreakingDoors() {
|
|
+ zombieBreakDoors = getEnumList(
|
|
+ "door-breaking-difficulty.zombie",
|
|
+ Arrays.stream(EnumDifficulty.values())
|
|
+ .filter(EntityZombie.getDoorBreakingPredicate())
|
|
+ .collect(Collectors.toList()),
|
|
+ EnumDifficulty.class
|
|
+ );
|
|
+ vindicatorBreakDoors = getEnumList(
|
|
+ "door-breaking-difficulty.vindicator",
|
|
+ Arrays.stream(EnumDifficulty.values())
|
|
+ .filter(EntityVindicator.getDoorBreakingPredicate())
|
|
+ .collect(Collectors.toList()),
|
|
+ EnumDifficulty.class
|
|
+ );
|
|
+ }
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/EntityVindicator.java b/src/main/java/net/minecraft/server/EntityVindicator.java
|
|
index c0d26aa9dcd02c44d744b10e18609857ada95889..4761ddfedeed54e79788a6f60f06a805efd60ab1 100644
|
|
--- a/src/main/java/net/minecraft/server/EntityVindicator.java
|
|
+++ b/src/main/java/net/minecraft/server/EntityVindicator.java
|
|
@@ -8,6 +8,7 @@ import javax.annotation.Nullable;
|
|
|
|
public class EntityVindicator extends EntityIllagerAbstract {
|
|
|
|
+ public static final Predicate<EnumDifficulty> getDoorBreakingPredicate() { return b; } // Paper - OBFHELPER
|
|
private static final Predicate<EnumDifficulty> b = (enumdifficulty) -> {
|
|
return enumdifficulty == EnumDifficulty.NORMAL || enumdifficulty == EnumDifficulty.HARD;
|
|
};
|
|
@@ -164,7 +165,7 @@ public class EntityVindicator extends EntityIllagerAbstract {
|
|
static class a extends PathfinderGoalBreakDoor {
|
|
|
|
public a(EntityInsentient entityinsentient) {
|
|
- super(entityinsentient, 6, EntityVindicator.b);
|
|
+ super(entityinsentient, 6, com.google.common.base.Predicates.in(entityinsentient.world.paperConfig.vindicatorBreakDoors)); // Paper
|
|
this.a(EnumSet.of(PathfinderGoal.Type.MOVE));
|
|
}
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/EntityZombie.java b/src/main/java/net/minecraft/server/EntityZombie.java
|
|
index 6a1f6a6257546226f3c37d60d98a11ead42615b8..c081dfa775dc93afd96eff88953c9a5f21f2adb9 100644
|
|
--- a/src/main/java/net/minecraft/server/EntityZombie.java
|
|
+++ b/src/main/java/net/minecraft/server/EntityZombie.java
|
|
@@ -24,6 +24,7 @@ public class EntityZombie extends EntityMonster {
|
|
private static final DataWatcherObject<Boolean> d = DataWatcher.a(EntityZombie.class, DataWatcherRegistry.i);
|
|
private static final DataWatcherObject<Integer> bo = DataWatcher.a(EntityZombie.class, DataWatcherRegistry.b);
|
|
public static final DataWatcherObject<Boolean> DROWN_CONVERTING = DataWatcher.a(EntityZombie.class, DataWatcherRegistry.i);
|
|
+ public static final Predicate<EnumDifficulty> getDoorBreakingPredicate() { return bq; } // Paper - OBFHELPER
|
|
private static final Predicate<EnumDifficulty> bq = (enumdifficulty) -> {
|
|
return enumdifficulty == EnumDifficulty.HARD;
|
|
};
|
|
@@ -36,7 +37,7 @@ public class EntityZombie extends EntityMonster {
|
|
|
|
public EntityZombie(EntityTypes<? extends EntityZombie> entitytypes, World world) {
|
|
super(entitytypes, world);
|
|
- this.br = new PathfinderGoalBreakDoor(this, EntityZombie.bq);
|
|
+ this.br = new PathfinderGoalBreakDoor(this, com.google.common.base.Predicates.in(world.paperConfig.zombieBreakDoors)); // Paper
|
|
}
|
|
|
|
public EntityZombie(World world) {
|