mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-19 17:37:42 +01:00
Add phantom spawning options
This commit is contained in:
committed by
granny
parent
c7e0b215dc
commit
295d2c91db
@@ -1,71 +0,0 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
|
||||||
Date: Fri, 3 Jul 2020 00:03:52 -0500
|
|
||||||
Subject: [PATCH] Add phantom spawning options
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/level/levelgen/PhantomSpawner.java b/net/minecraft/world/level/levelgen/PhantomSpawner.java
|
|
||||||
index 021221da5d0315f6e371380a705ac6b3f6ac18d3..27eb9a365006884c85603dc6d9dd8eee009c98b3 100644
|
|
||||||
--- a/net/minecraft/world/level/levelgen/PhantomSpawner.java
|
|
||||||
+++ b/net/minecraft/world/level/levelgen/PhantomSpawner.java
|
|
||||||
@@ -48,7 +48,7 @@ public class PhantomSpawner implements CustomSpawner {
|
|
||||||
int spawnAttemptMaxSeconds = world.paperConfig().entities.behavior.phantomsSpawnAttemptMaxSeconds;
|
|
||||||
this.nextTick += (spawnAttemptMinSeconds + randomsource.nextInt(spawnAttemptMaxSeconds - spawnAttemptMinSeconds + 1)) * 20;
|
|
||||||
// Paper end - Ability to control player's insomnia and phantoms
|
|
||||||
- if (world.getSkyDarken() < 5 && world.dimensionType().hasSkyLight()) {
|
|
||||||
+ if (world.getSkyDarken() < world.purpurConfig.phantomSpawnMinSkyDarkness && world.dimensionType().hasSkyLight()) { // Purpur
|
|
||||||
return 0;
|
|
||||||
} else {
|
|
||||||
int i = 0;
|
|
||||||
@@ -60,10 +60,10 @@ public class PhantomSpawner implements CustomSpawner {
|
|
||||||
if (!entityplayer.isSpectator() && (!world.paperConfig().entities.behavior.phantomsDoNotSpawnOnCreativePlayers || !entityplayer.isCreative())) { // Paper - Add phantom creative and insomniac controls
|
|
||||||
BlockPos blockposition = entityplayer.blockPosition();
|
|
||||||
|
|
||||||
- if (!world.dimensionType().hasSkyLight() || blockposition.getY() >= world.getSeaLevel() && world.canSeeSky(blockposition)) {
|
|
||||||
+ if (!world.dimensionType().hasSkyLight() || (!world.purpurConfig.phantomSpawnOnlyAboveSeaLevel || blockposition.getY() >= world.getSeaLevel()) && (!world.purpurConfig.phantomSpawnOnlyWithVisibleSky || world.canSeeSky(blockposition))) { // Purpur
|
|
||||||
DifficultyInstance difficultydamagescaler = world.getCurrentDifficultyAt(blockposition);
|
|
||||||
|
|
||||||
- if (difficultydamagescaler.isHarderThan(randomsource.nextFloat() * 3.0F)) {
|
|
||||||
+ if (difficultydamagescaler.isHarderThan(randomsource.nextFloat() * (float) world.purpurConfig.phantomSpawnLocalDifficultyChance)) { // Purpur
|
|
||||||
ServerStatsCounter serverstatisticmanager = entityplayer.getStats();
|
|
||||||
int j = Mth.clamp(serverstatisticmanager.getValue(Stats.CUSTOM.get(Stats.TIME_SINCE_REST)), 1, Integer.MAX_VALUE);
|
|
||||||
boolean flag2 = true;
|
|
||||||
@@ -75,7 +75,7 @@ public class PhantomSpawner implements CustomSpawner {
|
|
||||||
|
|
||||||
if (NaturalSpawner.isValidEmptySpawnBlock(world, blockposition1, iblockdata, fluid, EntityType.PHANTOM)) {
|
|
||||||
SpawnGroupData groupdataentity = null;
|
|
||||||
- int k = 1 + randomsource.nextInt(difficultydamagescaler.getDifficulty().getId() + 1);
|
|
||||||
+ int k = world.purpurConfig.phantomSpawnMinPerAttempt + world.random.nextInt((world.purpurConfig.phantomSpawnMaxPerAttempt < 0 ? difficultydamagescaler.getDifficulty().getId() : world.purpurConfig.phantomSpawnMaxPerAttempt - world.purpurConfig.phantomSpawnMinPerAttempt) + 1); // Purpur
|
|
||||||
|
|
||||||
for (int l = 0; l < k; ++l) {
|
|
||||||
// Paper start - PhantomPreSpawnEvent
|
|
||||||
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
|
|
||||||
index 429c0bd678cb726b761e32d4b22b33c630f28097..8aebaf667907aa61355ae3a0846b4ee67f204382 100644
|
|
||||||
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
|
|
||||||
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
|
|
||||||
@@ -1166,6 +1166,12 @@ public class PurpurWorldConfig {
|
|
||||||
public double phantomAttackedByCrystalRadius = 0.0D;
|
|
||||||
public float phantomAttackedByCrystalDamage = 1.0F;
|
|
||||||
public double phantomOrbitCrystalRadius = 0.0D;
|
|
||||||
+ public int phantomSpawnMinSkyDarkness = 5;
|
|
||||||
+ public boolean phantomSpawnOnlyAboveSeaLevel = true;
|
|
||||||
+ public boolean phantomSpawnOnlyWithVisibleSky = true;
|
|
||||||
+ public double phantomSpawnLocalDifficultyChance = 3.0D;
|
|
||||||
+ public int phantomSpawnMinPerAttempt = 1;
|
|
||||||
+ public int phantomSpawnMaxPerAttempt = -1;
|
|
||||||
private void phantomSettings() {
|
|
||||||
phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable);
|
|
||||||
phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater);
|
|
||||||
@@ -1190,6 +1196,12 @@ public class PurpurWorldConfig {
|
|
||||||
phantomAttackedByCrystalRadius = getDouble("mobs.phantom.attacked-by-crystal-range", phantomAttackedByCrystalRadius);
|
|
||||||
phantomAttackedByCrystalDamage = (float) getDouble("mobs.phantom.attacked-by-crystal-damage", phantomAttackedByCrystalDamage);
|
|
||||||
phantomOrbitCrystalRadius = getDouble("mobs.phantom.orbit-crystal-radius", phantomOrbitCrystalRadius);
|
|
||||||
+ phantomSpawnMinSkyDarkness = getInt("mobs.phantom.spawn.min-sky-darkness", phantomSpawnMinSkyDarkness);
|
|
||||||
+ phantomSpawnOnlyAboveSeaLevel = getBoolean("mobs.phantom.spawn.only-above-sea-level", phantomSpawnOnlyAboveSeaLevel);
|
|
||||||
+ phantomSpawnOnlyWithVisibleSky = getBoolean("mobs.phantom.spawn.only-with-visible-sky", phantomSpawnOnlyWithVisibleSky);
|
|
||||||
+ phantomSpawnLocalDifficultyChance = getDouble("mobs.phantom.spawn.local-difficulty-chance", phantomSpawnLocalDifficultyChance);
|
|
||||||
+ phantomSpawnMinPerAttempt = getInt("mobs.phantom.spawn.per-attempt.min", phantomSpawnMinPerAttempt);
|
|
||||||
+ phantomSpawnMaxPerAttempt = getInt("mobs.phantom.spawn.per-attempt.max", phantomSpawnMaxPerAttempt);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean pigRidable = false;
|
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
--- a/net/minecraft/world/level/levelgen/PhantomSpawner.java
|
||||||
|
+++ b/net/minecraft/world/level/levelgen/PhantomSpawner.java
|
||||||
|
@@ -43,7 +_,7 @@
|
||||||
|
int spawnAttemptMaxSeconds = level.paperConfig().entities.behavior.phantomsSpawnAttemptMaxSeconds;
|
||||||
|
this.nextTick += (spawnAttemptMinSeconds + randomSource.nextInt(spawnAttemptMaxSeconds - spawnAttemptMinSeconds + 1)) * 20;
|
||||||
|
// Paper end - Ability to control player's insomnia and phantoms
|
||||||
|
- if (level.getSkyDarken() < 5 && level.dimensionType().hasSkyLight()) {
|
||||||
|
+ if (level.getSkyDarken() < level.purpurConfig.phantomSpawnMinSkyDarkness && level.dimensionType().hasSkyLight()) { // Purpur - Add phantom spawning options
|
||||||
|
return 0;
|
||||||
|
} else {
|
||||||
|
int i = 0;
|
||||||
|
@@ -51,9 +_,9 @@
|
||||||
|
for (ServerPlayer serverPlayer : level.players()) {
|
||||||
|
if (!serverPlayer.isSpectator() && (!level.paperConfig().entities.behavior.phantomsDoNotSpawnOnCreativePlayers || !serverPlayer.isCreative())) { // Paper - Add phantom creative and insomniac controls
|
||||||
|
BlockPos blockPos = serverPlayer.blockPosition();
|
||||||
|
- if (!level.dimensionType().hasSkyLight() || blockPos.getY() >= level.getSeaLevel() && level.canSeeSky(blockPos)) {
|
||||||
|
+ if (!level.dimensionType().hasSkyLight() || (!level.purpurConfig.phantomSpawnOnlyAboveSeaLevel || blockPos.getY() >= level.getSeaLevel()) && (!level.purpurConfig.phantomSpawnOnlyWithVisibleSky || level.canSeeSky(blockPos))) { // Purpur - Add phantom spawning options
|
||||||
|
DifficultyInstance currentDifficultyAt = level.getCurrentDifficultyAt(blockPos);
|
||||||
|
- if (currentDifficultyAt.isHarderThan(randomSource.nextFloat() * 3.0F)) {
|
||||||
|
+ if (currentDifficultyAt.isHarderThan(randomSource.nextFloat() * (float) level.purpurConfig.phantomSpawnLocalDifficultyChance)) { // Purpur - Add phantom spawning options
|
||||||
|
ServerStatsCounter stats = serverPlayer.getStats();
|
||||||
|
int i1 = Mth.clamp(stats.getValue(Stats.CUSTOM.get(Stats.TIME_SINCE_REST)), 1, Integer.MAX_VALUE);
|
||||||
|
int i2 = 24000;
|
||||||
|
@@ -65,7 +_,7 @@
|
||||||
|
FluidState fluidState = level.getFluidState(blockPos1);
|
||||||
|
if (NaturalSpawner.isValidEmptySpawnBlock(level, blockPos1, blockState, fluidState, EntityType.PHANTOM)) {
|
||||||
|
SpawnGroupData spawnGroupData = null;
|
||||||
|
- int i3 = 1 + randomSource.nextInt(currentDifficultyAt.getDifficulty().getId() + 1);
|
||||||
|
+ int i3 = level.purpurConfig.phantomSpawnMinPerAttempt + level.random.nextInt((level.purpurConfig.phantomSpawnMaxPerAttempt < 0 ? currentDifficultyAt.getDifficulty().getId() : level.purpurConfig.phantomSpawnMaxPerAttempt - level.purpurConfig.phantomSpawnMinPerAttempt) + 1); // Purpur - Add phantom spawning options
|
||||||
|
|
||||||
|
for (int i4 = 0; i4 < i3; i4++) {
|
||||||
|
// Paper start - PhantomPreSpawnEvent
|
||||||
@@ -1154,6 +1154,12 @@ public class PurpurWorldConfig {
|
|||||||
public double phantomAttackedByCrystalRadius = 0.0D;
|
public double phantomAttackedByCrystalRadius = 0.0D;
|
||||||
public float phantomAttackedByCrystalDamage = 1.0F;
|
public float phantomAttackedByCrystalDamage = 1.0F;
|
||||||
public double phantomOrbitCrystalRadius = 0.0D;
|
public double phantomOrbitCrystalRadius = 0.0D;
|
||||||
|
public int phantomSpawnMinSkyDarkness = 5;
|
||||||
|
public boolean phantomSpawnOnlyAboveSeaLevel = true;
|
||||||
|
public boolean phantomSpawnOnlyWithVisibleSky = true;
|
||||||
|
public double phantomSpawnLocalDifficultyChance = 3.0D;
|
||||||
|
public int phantomSpawnMinPerAttempt = 1;
|
||||||
|
public int phantomSpawnMaxPerAttempt = -1;
|
||||||
private void phantomSettings() {
|
private void phantomSettings() {
|
||||||
phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable);
|
phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable);
|
||||||
phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater);
|
phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater);
|
||||||
@@ -1178,6 +1184,12 @@ public class PurpurWorldConfig {
|
|||||||
phantomAttackedByCrystalRadius = getDouble("mobs.phantom.attacked-by-crystal-range", phantomAttackedByCrystalRadius);
|
phantomAttackedByCrystalRadius = getDouble("mobs.phantom.attacked-by-crystal-range", phantomAttackedByCrystalRadius);
|
||||||
phantomAttackedByCrystalDamage = (float) getDouble("mobs.phantom.attacked-by-crystal-damage", phantomAttackedByCrystalDamage);
|
phantomAttackedByCrystalDamage = (float) getDouble("mobs.phantom.attacked-by-crystal-damage", phantomAttackedByCrystalDamage);
|
||||||
phantomOrbitCrystalRadius = getDouble("mobs.phantom.orbit-crystal-radius", phantomOrbitCrystalRadius);
|
phantomOrbitCrystalRadius = getDouble("mobs.phantom.orbit-crystal-radius", phantomOrbitCrystalRadius);
|
||||||
|
phantomSpawnMinSkyDarkness = getInt("mobs.phantom.spawn.min-sky-darkness", phantomSpawnMinSkyDarkness);
|
||||||
|
phantomSpawnOnlyAboveSeaLevel = getBoolean("mobs.phantom.spawn.only-above-sea-level", phantomSpawnOnlyAboveSeaLevel);
|
||||||
|
phantomSpawnOnlyWithVisibleSky = getBoolean("mobs.phantom.spawn.only-with-visible-sky", phantomSpawnOnlyWithVisibleSky);
|
||||||
|
phantomSpawnLocalDifficultyChance = getDouble("mobs.phantom.spawn.local-difficulty-chance", phantomSpawnLocalDifficultyChance);
|
||||||
|
phantomSpawnMinPerAttempt = getInt("mobs.phantom.spawn.per-attempt.min", phantomSpawnMinPerAttempt);
|
||||||
|
phantomSpawnMaxPerAttempt = getInt("mobs.phantom.spawn.per-attempt.max", phantomSpawnMaxPerAttempt);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean pigRidable = false;
|
public boolean pigRidable = false;
|
||||||
|
|||||||
Reference in New Issue
Block a user