51cfcc88da
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: d352d965 SPIGOT-7221: Add Enemy (Entity) interface CraftBukkit Changes: 397c5557c SPIGOT-7221: Add Enemy (Entity) interface a0d3dfaf2 PR-1129: Fix state corruption while handling explosion damage on EntityComplexPart d67777f8b SPIGOT-7218: Player's outer layer of skin disappears after respawn
68 Zeilen
4.2 KiB
Diff
68 Zeilen
4.2 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Jan Villim <jan.villim@student.tuke.sk>
|
|
Date: Sat, 22 Jan 2022 17:56:19 +0100
|
|
Subject: [PATCH] Ability to control player's insomnia and phantoms
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/entity/EntitySelector.java b/src/main/java/net/minecraft/world/entity/EntitySelector.java
|
|
index a00c3d96f2fc7131d1f4afa7af4e41ace3cfce89..72abebff2018cde2922e97ad6478f93da9aed3ec 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/EntitySelector.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/EntitySelector.java
|
|
@@ -27,7 +27,18 @@ public final class EntitySelector {
|
|
return !entity.isSpectator();
|
|
};
|
|
public static final Predicate<Entity> CAN_BE_COLLIDED_WITH = EntitySelector.NO_SPECTATORS.and(Entity::canBeCollidedWith);
|
|
- public static Predicate<Player> isInsomniac = (player) -> net.minecraft.util.Mth.clamp(((net.minecraft.server.level.ServerPlayer) player).getStats().getValue(net.minecraft.stats.Stats.CUSTOM.get(net.minecraft.stats.Stats.TIME_SINCE_REST)), 1, Integer.MAX_VALUE) >= 72000; // Paper
|
|
+ // Paper start
|
|
+ public static Predicate<Player> isInsomniac = (player) -> {
|
|
+ net.minecraft.server.level.ServerPlayer serverPlayer = (net.minecraft.server.level.ServerPlayer) player;
|
|
+ int playerInsomniaTicks = serverPlayer.getLevel().paperConfig().entities.behavior.playerInsomniaStartTicks;
|
|
+
|
|
+ if (playerInsomniaTicks <= 0) {
|
|
+ return false;
|
|
+ }
|
|
+
|
|
+ return net.minecraft.util.Mth.clamp(serverPlayer.getStats().getValue(net.minecraft.stats.Stats.CUSTOM.get(net.minecraft.stats.Stats.TIME_SINCE_REST)), 1, Integer.MAX_VALUE) >= playerInsomniaTicks;
|
|
+ };
|
|
+ // Paper end
|
|
|
|
private EntitySelector() {}
|
|
// Paper start
|
|
diff --git a/src/main/java/net/minecraft/world/level/levelgen/PhantomSpawner.java b/src/main/java/net/minecraft/world/level/levelgen/PhantomSpawner.java
|
|
index 24fa62da17ad6c84d45c6fb726305a87df85d2aa..1c3718d9244513d9fc795dceb564a81375734557 100644
|
|
--- a/src/main/java/net/minecraft/world/level/levelgen/PhantomSpawner.java
|
|
+++ b/src/main/java/net/minecraft/world/level/levelgen/PhantomSpawner.java
|
|
@@ -35,13 +35,22 @@ public class PhantomSpawner implements CustomSpawner {
|
|
} else if (!world.getGameRules().getBoolean(GameRules.RULE_DOINSOMNIA)) {
|
|
return 0;
|
|
} else {
|
|
+ // Paper start
|
|
+ if (world.paperConfig().entities.behavior.phantomsSpawnAttemptMaxSeconds <= 0) {
|
|
+ return 0;
|
|
+ }
|
|
+ // Paper end
|
|
RandomSource randomsource = world.random;
|
|
|
|
--this.nextTick;
|
|
if (this.nextTick > 0) {
|
|
return 0;
|
|
} else {
|
|
- this.nextTick += (60 + randomsource.nextInt(60)) * 20;
|
|
+ // Paper start
|
|
+ int spawnAttemptMinSeconds = world.paperConfig().entities.behavior.phantomsSpawnAttemptMinSeconds;
|
|
+ int spawnAttemptMaxSeconds = world.paperConfig().entities.behavior.phantomsSpawnAttemptMaxSeconds;
|
|
+ this.nextTick += (spawnAttemptMinSeconds + randomsource.nextInt(spawnAttemptMaxSeconds - spawnAttemptMinSeconds + 1)) * 20;
|
|
+ // Paper end
|
|
if (world.getSkyDarken() < 5 && world.dimensionType().hasSkyLight()) {
|
|
return 0;
|
|
} else {
|
|
@@ -62,7 +71,7 @@ public class PhantomSpawner implements CustomSpawner {
|
|
int j = Mth.clamp(serverstatisticmanager.getValue(Stats.CUSTOM.get(Stats.TIME_SINCE_REST)), (int) 1, Integer.MAX_VALUE);
|
|
boolean flag2 = true;
|
|
|
|
- if (randomsource.nextInt(j) >= 72000) {
|
|
+ if (randomsource.nextInt(j) >= world.paperConfig().entities.behavior.playerInsomniaStartTicks) { // Paper
|
|
BlockPos blockposition1 = blockposition.above(20 + randomsource.nextInt(15)).east(-10 + randomsource.nextInt(21)).south(-10 + randomsource.nextInt(21));
|
|
BlockState iblockdata = world.getBlockState(blockposition1);
|
|
FluidState fluid = world.getFluidState(blockposition1);
|