mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-01 20:50:41 +01:00
c97ce029e9
PaperMC believes that 1.16.2 is now ready for general release as we fixed the main issue plagueing the 1.16.x release, the MapLike data conversion issues. Until now, it was not safe for a server to convert a world to 1.16.2 without data conversion issues around villages and potentially other things. If you did, those MapLike errors meant something went wrong. This is now resolved. Big thanks to all those that helped, notably @BillyGalbreath and @Proximyst who did large parts of the update process with me. Please as always, backup your worlds and test before updating to 1.16.2! If you update to 1.16.2, there is no going back to an older build than this. --------------------------------- Co-authored-by: William Blake Galbreath <Blake.Galbreath@GMail.com> Co-authored-by: Mariell Hoversholm <proximyst@proximyst.com> Co-authored-by: krolik-exe <69214078+krolik-exe@users.noreply.github.com> Co-authored-by: BillyGalbreath <BillyGalbreath@users.noreply.github.com> Co-authored-by: stonar96 <minecraft.stonar96@gmail.com> Co-authored-by: Shane Freeder <theboyetronic@gmail.com> Co-authored-by: Jason <jasonpenilla2@me.com> Co-authored-by: kashike <kashike@vq.lc> Co-authored-by: Aurora <21148213+aurorasmiles@users.noreply.github.com> Co-authored-by: KennyTV <kennytv@t-online.de> Co-authored-by: commandblockguy <commandblockguy1@gmail.com> Co-authored-by: DigitalRegent <misterwener@gmail.com> Co-authored-by: ishland <ishlandmc@yeah.net>
141 lines
7.3 KiB
Diff
141 lines
7.3 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Phoenix616 <mail@moep.tv>
|
|
Date: Sat, 1 Feb 2020 16:50:39 +0100
|
|
Subject: [PATCH] Pillager patrol spawn settings and per player options
|
|
|
|
This adds config options for defining the spawn chance, spawn delay and
|
|
spawn start day as well as toggles for handling the spawn delay and
|
|
start day per player. (Based on the time played statistic)
|
|
When not per player it will use the Vanilla mechanic of one delay per
|
|
world and the world age for the start day.
|
|
|
|
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
|
index b633d74450c40bcc8831836f79a7a2daa43e3d35..6c80906d0cf3594a30aa201793a16a29ffeb1fcb 100644
|
|
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
|
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
|
@@ -568,10 +568,21 @@ public class PaperWorldConfig {
|
|
}
|
|
|
|
public boolean disablePillagerPatrols = false;
|
|
+ public double patrolSpawnChance = 0.2;
|
|
+ public boolean patrolPerPlayerDelay = false;
|
|
+ public int patrolDelay = 12000;
|
|
+ public boolean patrolPerPlayerStart = false;
|
|
+ public int patrolStartDay = 5;
|
|
private void pillagerSettings() {
|
|
disablePillagerPatrols = getBoolean("game-mechanics.disable-pillager-patrols", disablePillagerPatrols);
|
|
+ patrolSpawnChance = getDouble("game-mechanics.pillager-patrols.spawn-chance", patrolSpawnChance);
|
|
+ patrolPerPlayerDelay = getBoolean("game-mechanics.pillager-patrols.spawn-delay.per-player", patrolPerPlayerDelay);
|
|
+ patrolDelay = getInt("game-mechanics.pillager-patrols.spawn-delay.ticks", patrolDelay);
|
|
+ patrolPerPlayerStart = getBoolean("game-mechanics.pillager-patrols.start.per-player", patrolPerPlayerStart);
|
|
+ patrolStartDay = getInt("game-mechanics.pillager-patrols.start.day", patrolStartDay);
|
|
}
|
|
|
|
+
|
|
public boolean entitiesTargetWithFollowRange = false;
|
|
private void entitiesTargetWithFollowRange() {
|
|
entitiesTargetWithFollowRange = getBoolean("entities-target-with-follow-range", entitiesTargetWithFollowRange);
|
|
diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java
|
|
index 04e402275de6797dcd25d2497faf6a258dc26112..4fd7be1029bb69abfce3ad8d939031c574e19e9c 100644
|
|
--- a/src/main/java/net/minecraft/server/EntityPlayer.java
|
|
+++ b/src/main/java/net/minecraft/server/EntityPlayer.java
|
|
@@ -83,6 +83,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
|
public boolean viewingCredits;
|
|
private int containerUpdateDelay; // Paper
|
|
public long loginTime; // Paper
|
|
+ public int patrolSpawnDelay; // Paper - per player patrol spawns
|
|
// Paper start - cancellable death event
|
|
public boolean queueHealthUpdatePacket = false;
|
|
public net.minecraft.server.PacketPlayOutUpdateHealth queuedHealthUpdatePacket;
|
|
diff --git a/src/main/java/net/minecraft/server/MobSpawnerPatrol.java b/src/main/java/net/minecraft/server/MobSpawnerPatrol.java
|
|
index 7ed89bbe465402582c9d28f0a3935758a6b0f7af..13fccedb948ce5ced1678ff338f7eea5d53ee022 100644
|
|
--- a/src/main/java/net/minecraft/server/MobSpawnerPatrol.java
|
|
+++ b/src/main/java/net/minecraft/server/MobSpawnerPatrol.java
|
|
@@ -4,13 +4,13 @@ import java.util.Random;
|
|
|
|
public class MobSpawnerPatrol implements MobSpawner {
|
|
|
|
- private int a;
|
|
+ private int a;private int getSpawnDelay() { return a; } private void setSpawnDelay(int spawnDelay) { this.a = spawnDelay; } // Paper - OBFHELPER
|
|
|
|
public MobSpawnerPatrol() {}
|
|
|
|
@Override
|
|
public int a(WorldServer worldserver, boolean flag, boolean flag1) {
|
|
- if (worldserver.paperConfig.disablePillagerPatrols) return 0; // Paper
|
|
+ if (worldserver.paperConfig.disablePillagerPatrols || worldserver.paperConfig.patrolSpawnChance == 0) return 0; // Paper
|
|
if (!flag) {
|
|
return 0;
|
|
} else if (!worldserver.getGameRules().getBoolean(GameRules.DO_PATROL_SPAWNING)) {
|
|
@@ -18,23 +18,51 @@ public class MobSpawnerPatrol implements MobSpawner {
|
|
} else {
|
|
Random random = worldserver.random;
|
|
|
|
- --this.a;
|
|
- if (this.a > 0) {
|
|
+ // Paper start - Patrol settings
|
|
+ // Random player selection moved up for per player spawning and configuration
|
|
+ int j = worldserver.getPlayers().size();
|
|
+ if (j < 1) {
|
|
return 0;
|
|
+ }
|
|
+
|
|
+ EntityPlayer entityhuman = worldserver.getPlayers().get(random.nextInt(j));
|
|
+ if (entityhuman.isSpectator()) {
|
|
+ return 0;
|
|
+ }
|
|
+
|
|
+ int patrolSpawnDelay;
|
|
+ if (worldserver.paperConfig.patrolPerPlayerDelay) {
|
|
+ --entityhuman.patrolSpawnDelay;
|
|
+ patrolSpawnDelay = entityhuman.patrolSpawnDelay;
|
|
} else {
|
|
- this.a += 12000 + random.nextInt(1200);
|
|
- long i = worldserver.getDayTime() / 24000L;
|
|
+ setSpawnDelay(getSpawnDelay() - 1);
|
|
+ patrolSpawnDelay = getSpawnDelay();
|
|
+ }
|
|
+
|
|
+ if (patrolSpawnDelay > 0) {
|
|
+ return 0;
|
|
+ } else {
|
|
+ long days;
|
|
+ if (worldserver.paperConfig.patrolPerPlayerStart) {
|
|
+ days = entityhuman.getStatisticManager().getStatisticValue(StatisticList.CUSTOM.get(StatisticList.PLAY_ONE_MINUTE)) / 24000L; // PLAY_ONE_MINUTE is actually counting in ticks, a misnomer by Mojang
|
|
+ } else {
|
|
+ days = worldserver.getDayTime() / 24000L;
|
|
+ }
|
|
+ if (worldserver.paperConfig.patrolPerPlayerDelay) {
|
|
+ entityhuman.patrolSpawnDelay += worldserver.paperConfig.patrolDelay + random.nextInt(1200);
|
|
+ } else {
|
|
+ setSpawnDelay(getSpawnDelay() + worldserver.paperConfig.patrolDelay + random.nextInt(1200));
|
|
+ }
|
|
|
|
- if (i >= 5L && worldserver.isDay()) {
|
|
- if (random.nextInt(5) != 0) {
|
|
+ if (days >= worldserver.paperConfig.patrolStartDay && worldserver.isDay()) {
|
|
+ if (random.nextDouble() >= worldserver.paperConfig.patrolSpawnChance) {
|
|
+ // Paper end
|
|
return 0;
|
|
} else {
|
|
- int j = worldserver.getPlayers().size();
|
|
|
|
if (j < 1) {
|
|
return 0;
|
|
} else {
|
|
- EntityHuman entityhuman = (EntityHuman) worldserver.getPlayers().get(random.nextInt(j));
|
|
|
|
if (entityhuman.isSpectator()) {
|
|
return 0;
|
|
diff --git a/src/main/java/net/minecraft/server/StatisticWrapper.java b/src/main/java/net/minecraft/server/StatisticWrapper.java
|
|
index 3b6034038a4841ebc980b2392c71025d9b0dde35..795ea6fece2e28645e99f4578e26a6d12b4c1bf8 100644
|
|
--- a/src/main/java/net/minecraft/server/StatisticWrapper.java
|
|
+++ b/src/main/java/net/minecraft/server/StatisticWrapper.java
|
|
@@ -27,6 +27,7 @@ public class StatisticWrapper<T> implements Iterable<Statistic<T>> {
|
|
return this.b.values().iterator();
|
|
}
|
|
|
|
+ public final Statistic<T> get(T t) { return this.b(t); }; // Paper - OBFHELPER
|
|
public Statistic<T> b(T t0) {
|
|
return this.a(t0, Counter.DEFAULT);
|
|
}
|