big king and queen dev
This commit is contained in:
1 parent
d34830a99b
commit
68eba61022
169 files changed
+4897
-1060
No files matched your search
+21
@@ -152,6 +152,8 @@ public final class AntarchyConfigModuleNeoforge {
|
||||
AntarchySettings.setQueenBeamDamage(AntarchyMobsConfig.queenBeamDamage());
|
||||
AntarchySettings.setQueenBeamRange(AntarchyMobsConfig.queenBeamRange());
|
||||
AntarchySettings.setQueenBeamDurationTicks(AntarchyMobsConfig.queenBeamDurationTicks());
|
||||
AntarchySettings.setQueenBeamWindupTicks(AntarchyMobsConfig.queenBeamWindupTicks());
|
||||
AntarchySettings.setQueenBeamTravelTicks(AntarchyMobsConfig.queenBeamTravelTicks());
|
||||
AntarchySettings.setQueenBeamCooldownTicks(AntarchyMobsConfig.queenBeamCooldownTicks());
|
||||
AntarchySettings.setQueenBeamTracking(AntarchyMobsConfig.queenBeamTracking());
|
||||
AntarchySettings.setQueenBeamTerrainRadius(AntarchyMobsConfig.queenBeamTerrainRadius());
|
||||
@@ -159,11 +161,30 @@ public final class AntarchyConfigModuleNeoforge {
|
||||
AntarchySettings.setKingBeamDamage(AntarchyMobsConfig.kingBeamDamage());
|
||||
AntarchySettings.setKingBeamRange(AntarchyMobsConfig.kingBeamRange());
|
||||
AntarchySettings.setKingBeamDurationTicks(AntarchyMobsConfig.kingBeamDurationTicks());
|
||||
AntarchySettings.setKingBeamWindupTicks(AntarchyMobsConfig.kingBeamWindupTicks());
|
||||
AntarchySettings.setKingBeamTravelTicks(AntarchyMobsConfig.kingBeamTravelTicks());
|
||||
AntarchySettings.setKingBeamCooldownTicks(AntarchyMobsConfig.kingBeamCooldownTicks());
|
||||
AntarchySettings.setKingBeamTracking(AntarchyMobsConfig.kingBeamTracking());
|
||||
AntarchySettings.setKingBeamTerrainRadius(AntarchyMobsConfig.kingBeamTerrainRadius());
|
||||
AntarchySettings.setKingBeamTerrainCap(AntarchyMobsConfig.kingBeamTerrainCap());
|
||||
AntarchySettings.setRoyalDecreeCooldownTicks(AntarchyMobsConfig.royalDecreeCooldownTicks());
|
||||
AntarchySettings.setQueenBlackHoleRadius(AntarchyMobsConfig.queenBlackHoleRadius());
|
||||
AntarchySettings.setQueenBlackHoleActiveTicks(AntarchyMobsConfig.queenBlackHoleActiveTicks());
|
||||
AntarchySettings.setQueenBlackHolePullStrength(AntarchyMobsConfig.queenBlackHolePullStrength());
|
||||
AntarchySettings.setQueenFinalTimeFieldRadius(AntarchyMobsConfig.queenFinalTimeFieldRadius());
|
||||
AntarchySettings.setQueenFinalTimeFieldRate(AntarchyMobsConfig.queenFinalTimeFieldRate());
|
||||
AntarchySettings.setQueenFinalTimeFieldDurationTicks(AntarchyMobsConfig.queenFinalTimeFieldDurationTicks());
|
||||
AntarchySettings.setQueenFinalTimeFieldCooldownTicks(AntarchyMobsConfig.queenFinalTimeFieldCooldownTicks());
|
||||
AntarchySettings.setKingFireballDamage(AntarchyMobsConfig.kingFireballDamage());
|
||||
AntarchySettings.setKingFireballRadius(AntarchyMobsConfig.kingFireballRadius());
|
||||
AntarchySettings.setKingFireballCooldownTicks(AntarchyMobsConfig.kingFireballCooldownTicks());
|
||||
AntarchySettings.setKingIceballDamage(AntarchyMobsConfig.kingIceballDamage());
|
||||
AntarchySettings.setKingIceballRadius(AntarchyMobsConfig.kingIceballRadius());
|
||||
AntarchySettings.setKingIceballCooldownTicks(AntarchyMobsConfig.kingIceballCooldownTicks());
|
||||
AntarchySettings.setKingIceSpikeDamage(AntarchyMobsConfig.kingIceSpikeDamage());
|
||||
AntarchySettings.setKingIceSpikeCooldownTicks(AntarchyMobsConfig.kingIceSpikeCooldownTicks());
|
||||
AntarchySettings.setKingElementalTerrainCap(AntarchyMobsConfig.kingElementalTerrainCap());
|
||||
AntarchySettings.setRoyalBossSoundVolume(AntarchyMobsConfig.royalBossSoundVolume());
|
||||
|
||||
AntarchySettings.setRoyalEggHatchChance(AntarchyMobsConfig.royalEggHatchChance());
|
||||
AntarchySettings.setRoyalBoltDamage(AntarchyMobsConfig.royalBoltDamage());
|
||||
|
||||
+54
-5
@@ -125,10 +125,17 @@ public final class AntarchyMobsConfig {
|
||||
private static final ModConfigSpec.DoubleValue ROYAL_BOSS_BITE_DAMAGE_MULTIPLIER;
|
||||
private static final ModConfigSpec.IntValue ROYAL_BOSS_BITE_COOLDOWN_TICKS;
|
||||
private static final ModConfigSpec.DoubleValue QUEEN_BEAM_DAMAGE, QUEEN_BEAM_RANGE, QUEEN_BEAM_TRACKING, QUEEN_BEAM_TERRAIN_RADIUS;
|
||||
private static final ModConfigSpec.IntValue QUEEN_BEAM_DURATION_TICKS, QUEEN_BEAM_COOLDOWN_TICKS, QUEEN_BEAM_TERRAIN_CAP;
|
||||
private static final ModConfigSpec.IntValue QUEEN_BEAM_DURATION_TICKS, QUEEN_BEAM_WINDUP_TICKS, QUEEN_BEAM_TRAVEL_TICKS, QUEEN_BEAM_COOLDOWN_TICKS, QUEEN_BEAM_TERRAIN_CAP;
|
||||
private static final ModConfigSpec.DoubleValue KING_BEAM_DAMAGE, KING_BEAM_RANGE, KING_BEAM_TRACKING, KING_BEAM_TERRAIN_RADIUS;
|
||||
private static final ModConfigSpec.IntValue KING_BEAM_DURATION_TICKS, KING_BEAM_COOLDOWN_TICKS, KING_BEAM_TERRAIN_CAP;
|
||||
private static final ModConfigSpec.IntValue KING_BEAM_DURATION_TICKS, KING_BEAM_WINDUP_TICKS, KING_BEAM_TRAVEL_TICKS, KING_BEAM_COOLDOWN_TICKS, KING_BEAM_TERRAIN_CAP;
|
||||
private static final ModConfigSpec.IntValue ROYAL_DECREE_COOLDOWN_TICKS;
|
||||
private static final ModConfigSpec.DoubleValue QUEEN_BLACK_HOLE_RADIUS, QUEEN_BLACK_HOLE_PULL_STRENGTH,
|
||||
QUEEN_FINAL_TIME_FIELD_RADIUS, QUEEN_FINAL_TIME_FIELD_RATE;
|
||||
private static final ModConfigSpec.IntValue QUEEN_BLACK_HOLE_ACTIVE_TICKS,
|
||||
QUEEN_FINAL_TIME_FIELD_DURATION_TICKS, QUEEN_FINAL_TIME_FIELD_COOLDOWN_TICKS;
|
||||
private static final ModConfigSpec.DoubleValue ROYAL_BOSS_SOUND_VOLUME;
|
||||
private static final ModConfigSpec.DoubleValue KING_FIREBALL_DAMAGE, KING_FIREBALL_RADIUS, KING_ICEBALL_DAMAGE, KING_ICEBALL_RADIUS, KING_ICE_SPIKE_DAMAGE;
|
||||
private static final ModConfigSpec.IntValue KING_FIREBALL_COOLDOWN_TICKS, KING_ICEBALL_COOLDOWN_TICKS, KING_ICE_SPIKE_COOLDOWN_TICKS, KING_ELEMENTAL_TERRAIN_CAP;
|
||||
|
||||
// Royal mounts
|
||||
|
||||
@@ -579,6 +586,8 @@ public final class AntarchyMobsConfig {
|
||||
QUEEN_BEAM_DAMAGE = b.defineInRange("queenBeamDamage", 45.0D, 0.0D, 1024.0D);
|
||||
QUEEN_BEAM_RANGE = b.defineInRange("queenBeamRange", 100.0D, 1.0D, 256.0D);
|
||||
QUEEN_BEAM_DURATION_TICKS = b.defineInRange("queenBeamDurationTicks", 30, 1, 1200);
|
||||
QUEEN_BEAM_WINDUP_TICKS = b.comment("Charge time before the Queen beam actually fires.").defineInRange("queenBeamWindupTicks", 20, 0, 1200);
|
||||
QUEEN_BEAM_TRAVEL_TICKS = b.comment("Time for the Queen beam to extend from its head to its committed range.").defineInRange("queenBeamTravelTicks", 12, 1, 1200);
|
||||
QUEEN_BEAM_COOLDOWN_TICKS = b.defineInRange("queenBeamCooldownTicks", 90, 1, 2400);
|
||||
QUEEN_BEAM_TRACKING = b.defineInRange("queenBeamTracking", 0.1D, 0.0D, 1.0D);
|
||||
QUEEN_BEAM_TERRAIN_RADIUS = b.defineInRange("queenBeamTerrainRadius", 5.0D, 0.0D, 32.0D);
|
||||
@@ -586,11 +595,30 @@ public final class AntarchyMobsConfig {
|
||||
KING_BEAM_DAMAGE = b.defineInRange("kingBeamDamage", 50.0D, 0.0D, 1024.0D);
|
||||
KING_BEAM_RANGE = b.defineInRange("kingBeamRange", 100.0D, 1.0D, 256.0D);
|
||||
KING_BEAM_DURATION_TICKS = b.defineInRange("kingBeamDurationTicks", 30, 1, 1200);
|
||||
KING_BEAM_WINDUP_TICKS = b.comment("Charge time before the King beam actually fires.").defineInRange("kingBeamWindupTicks", 20, 0, 1200);
|
||||
KING_BEAM_TRAVEL_TICKS = b.comment("Time for the King beam to extend from its head to its committed range.").defineInRange("kingBeamTravelTicks", 12, 1, 1200);
|
||||
KING_BEAM_COOLDOWN_TICKS = b.defineInRange("kingBeamCooldownTicks", 90, 1, 2400);
|
||||
KING_BEAM_TRACKING = b.defineInRange("kingBeamTracking", 0.1D, 0.0D, 1.0D);
|
||||
KING_BEAM_TERRAIN_RADIUS = b.defineInRange("kingBeamTerrainRadius", 5.0D, 0.0D, 32.0D);
|
||||
KING_BEAM_TERRAIN_CAP = b.defineInRange("kingBeamTerrainCap", 192, 0, 4096);
|
||||
ROYAL_DECREE_COOLDOWN_TICKS = b.comment("Cooldown in ticks between the end of one King decree and the next.").defineInRange("royalDecreeCooldownTicks", 1200, 1, 72000);
|
||||
QUEEN_BLACK_HOLE_RADIUS = b.defineInRange("queenBlackHoleRadius", 14.0D, 1.0D, 64.0D);
|
||||
QUEEN_BLACK_HOLE_ACTIVE_TICKS = b.defineInRange("queenBlackHoleActiveTicks", 120, 20, 1200);
|
||||
QUEEN_BLACK_HOLE_PULL_STRENGTH = b.defineInRange("queenBlackHolePullStrength", 0.16D, 0.0D, 2.0D);
|
||||
QUEEN_FINAL_TIME_FIELD_RADIUS = b.defineInRange("queenFinalTimeFieldRadius", 20.0D, 1.0D, 64.0D);
|
||||
QUEEN_FINAL_TIME_FIELD_RATE = b.defineInRange("queenFinalTimeFieldRate", 0.05D, 0.05D, 1.0D);
|
||||
QUEEN_FINAL_TIME_FIELD_DURATION_TICKS = b.defineInRange("queenFinalTimeFieldDurationTicks", 45, 1, 1200);
|
||||
QUEEN_FINAL_TIME_FIELD_COOLDOWN_TICKS = b.defineInRange("queenFinalTimeFieldCooldownTicks", 80, 1, 2400);
|
||||
KING_FIREBALL_DAMAGE = b.defineInRange("kingFireballDamage", 32.0D, 0.0D, 1024.0D);
|
||||
KING_FIREBALL_RADIUS = b.defineInRange("kingFireballRadius", 4.5D, 0.5D, 32.0D);
|
||||
KING_FIREBALL_COOLDOWN_TICKS = b.defineInRange("kingFireballCooldownTicks", 150, 1, 2400);
|
||||
KING_ICEBALL_DAMAGE = b.defineInRange("kingIceballDamage", 18.0D, 0.0D, 1024.0D);
|
||||
KING_ICEBALL_RADIUS = b.defineInRange("kingIceballRadius", 5.0D, 0.5D, 32.0D);
|
||||
KING_ICEBALL_COOLDOWN_TICKS = b.defineInRange("kingIceballCooldownTicks", 190, 1, 2400);
|
||||
KING_ICE_SPIKE_DAMAGE = b.defineInRange("kingIceSpikeDamage", 24.0D, 0.0D, 1024.0D);
|
||||
KING_ICE_SPIKE_COOLDOWN_TICKS = b.defineInRange("kingIceSpikeCooldownTicks", 240, 1, 2400);
|
||||
KING_ELEMENTAL_TERRAIN_CAP = b.defineInRange("kingElementalTerrainCap", 256, 0, 4096);
|
||||
ROYAL_BOSS_SOUND_VOLUME = b.comment("Volume multiplier for large King and Queen presence, movement, and attack sounds.").defineInRange("royalBossSoundVolume", 4.5D, 0.5D, 16.0D);
|
||||
b.pop();
|
||||
|
||||
b.push("royalMounts");
|
||||
@@ -726,8 +754,8 @@ public final class AntarchyMobsConfig {
|
||||
b.push("dimensionalTear");
|
||||
DIMENSIONAL_TEAR_LIFETIME_TICKS = b.comment("Ticks before naturally generated linked Dimensional Tears collapse.").defineInRange("lifetimeTicks", 24000, 1200, 240000);
|
||||
DIMENSIONAL_TEAR_INVERTED_DURATION_TICKS = b.comment("Ticks of Inverted applied to living entities exiting a Dimensional Tear.").defineInRange("invertedDurationTicks", 2400, 0, 240000);
|
||||
DIMENSIONAL_TEAR_EMERGENCE_MIN_INTERVAL_TICKS = b.comment("Minimum ticks between Nightmare/Lucid emergence events per tear.").defineInRange("emergenceMinIntervalTicks", 2400, 20, 240000);
|
||||
DIMENSIONAL_TEAR_EMERGENCE_MAX_INTERVAL_TICKS = b.comment("Maximum ticks between Nightmare/Lucid emergence events per tear.").defineInRange("emergenceMaxIntervalTicks", 7200, 20, 240000);
|
||||
DIMENSIONAL_TEAR_EMERGENCE_MIN_INTERVAL_TICKS = b.comment("Minimum ticks between Nightmare/Lucid emergence events per tear.").defineInRange("emergenceMinIntervalTicks", 400, 20, 240000);
|
||||
DIMENSIONAL_TEAR_EMERGENCE_MAX_INTERVAL_TICKS = b.comment("Maximum ticks between Nightmare/Lucid emergence events per tear.").defineInRange("emergenceMaxIntervalTicks", 1200, 20, 240000);
|
||||
DIMENSIONAL_TEAR_LUCID_EVENT_CHANCE = b.comment("Chance that an emergence event spawns a Lucid instead of a Nightmare.").defineInRange("lucidEventChance", 0.65D, 0.0D, 1.0D);
|
||||
b.pop();
|
||||
|
||||
@@ -787,7 +815,7 @@ public final class AntarchyMobsConfig {
|
||||
VORTEX_MOVEMENT_SPEED = b.comment("Base movement speed.").defineInRange("movementSpeed", 0.22D, 0.0D, 10.0D);
|
||||
VORTEX_FLYING_SPEED = b.comment("Base flying speed.").defineInRange("flyingSpeed", 0.35D, 0.0D, 10.0D);
|
||||
VORTEX_MAX_ACTIVE_VORTEXES = b.comment("Maximum damaging wind vortexes one Vortex mob can maintain at once.").defineInRange("maxActiveVortexes", 3, 0, 32);
|
||||
WIND_VORTEX_DURATION_TICKS = b.comment("Lifetime in ticks for wind vortexes spawned by Vortex charges or Vortex mobs.").defineInRange("windVortexDurationTicks", 140, 1, 1200);
|
||||
WIND_VORTEX_DURATION_TICKS = b.comment("Lifetime in ticks for wind vortexes spawned by Vortex charges or Vortex mobs.").defineInRange("windVortexDurationTicks", 240, 1, 1200);
|
||||
WIND_VORTEX_PULL_STRENGTH = b.comment("How strongly wind vortexes pull entities toward their spiral path.").defineInRange("windVortexPullStrength", 0.32D, 0.0D, 4.0D);
|
||||
WIND_VORTEX_LAUNCH_STRENGTH = b.comment("Launch velocity multiplier applied when entities exit the top of a wind vortex.").defineInRange("windVortexLaunchStrength", 1.0D, 0.0D, 4.0D);
|
||||
VORTEX_LENS_MIN_RADIUS = b.comment("Top radius at signal strength 1 for Vortex Lens wind vortexes.").defineInRange("vortexLensMinRadius", 1.5D, 0.1D, 64.0D);
|
||||
@@ -995,6 +1023,8 @@ public final class AntarchyMobsConfig {
|
||||
static double queenBeamDamage() { return QUEEN_BEAM_DAMAGE.get(); }
|
||||
static double queenBeamRange() { return QUEEN_BEAM_RANGE.get(); }
|
||||
static int queenBeamDurationTicks() { return QUEEN_BEAM_DURATION_TICKS.get(); }
|
||||
static int queenBeamWindupTicks() { return QUEEN_BEAM_WINDUP_TICKS.get(); }
|
||||
static int queenBeamTravelTicks() { return QUEEN_BEAM_TRAVEL_TICKS.get(); }
|
||||
static int queenBeamCooldownTicks() { return QUEEN_BEAM_COOLDOWN_TICKS.get(); }
|
||||
static double queenBeamTracking() { return QUEEN_BEAM_TRACKING.get(); }
|
||||
static double queenBeamTerrainRadius() { return QUEEN_BEAM_TERRAIN_RADIUS.get(); }
|
||||
@@ -1002,11 +1032,30 @@ public final class AntarchyMobsConfig {
|
||||
static double kingBeamDamage() { return KING_BEAM_DAMAGE.get(); }
|
||||
static double kingBeamRange() { return KING_BEAM_RANGE.get(); }
|
||||
static int kingBeamDurationTicks() { return KING_BEAM_DURATION_TICKS.get(); }
|
||||
static int kingBeamWindupTicks() { return KING_BEAM_WINDUP_TICKS.get(); }
|
||||
static int kingBeamTravelTicks() { return KING_BEAM_TRAVEL_TICKS.get(); }
|
||||
static int kingBeamCooldownTicks() { return KING_BEAM_COOLDOWN_TICKS.get(); }
|
||||
static double kingBeamTracking() { return KING_BEAM_TRACKING.get(); }
|
||||
static double kingBeamTerrainRadius() { return KING_BEAM_TERRAIN_RADIUS.get(); }
|
||||
static int kingBeamTerrainCap() { return KING_BEAM_TERRAIN_CAP.get(); }
|
||||
static int royalDecreeCooldownTicks() { return ROYAL_DECREE_COOLDOWN_TICKS.get(); }
|
||||
static double queenBlackHoleRadius() { return QUEEN_BLACK_HOLE_RADIUS.get(); }
|
||||
static int queenBlackHoleActiveTicks() { return QUEEN_BLACK_HOLE_ACTIVE_TICKS.get(); }
|
||||
static double queenBlackHolePullStrength() { return QUEEN_BLACK_HOLE_PULL_STRENGTH.get(); }
|
||||
static double queenFinalTimeFieldRadius() { return QUEEN_FINAL_TIME_FIELD_RADIUS.get(); }
|
||||
static double queenFinalTimeFieldRate() { return QUEEN_FINAL_TIME_FIELD_RATE.get(); }
|
||||
static int queenFinalTimeFieldDurationTicks() { return QUEEN_FINAL_TIME_FIELD_DURATION_TICKS.get(); }
|
||||
static int queenFinalTimeFieldCooldownTicks() { return QUEEN_FINAL_TIME_FIELD_COOLDOWN_TICKS.get(); }
|
||||
static double kingFireballDamage() { return KING_FIREBALL_DAMAGE.get(); }
|
||||
static double kingFireballRadius() { return KING_FIREBALL_RADIUS.get(); }
|
||||
static int kingFireballCooldownTicks() { return KING_FIREBALL_COOLDOWN_TICKS.get(); }
|
||||
static double kingIceballDamage() { return KING_ICEBALL_DAMAGE.get(); }
|
||||
static double kingIceballRadius() { return KING_ICEBALL_RADIUS.get(); }
|
||||
static int kingIceballCooldownTicks() { return KING_ICEBALL_COOLDOWN_TICKS.get(); }
|
||||
static double kingIceSpikeDamage() { return KING_ICE_SPIKE_DAMAGE.get(); }
|
||||
static int kingIceSpikeCooldownTicks() { return KING_ICE_SPIKE_COOLDOWN_TICKS.get(); }
|
||||
static int kingElementalTerrainCap() { return KING_ELEMENTAL_TERRAIN_CAP.get(); }
|
||||
static double royalBossSoundVolume() { return ROYAL_BOSS_SOUND_VOLUME.get(); }
|
||||
|
||||
static int royalEggHatchChance() { return ROYAL_EGG_HATCH_CHANCE.get(); }
|
||||
static double royalBoltDamage() { return ROYAL_BOLT_DAMAGE.get(); }
|
||||
|
||||
@@ -221,6 +221,7 @@ public class AntarchyNeoforge {
|
||||
AntarchyNeoforgeSounds.KING_ROAR,
|
||||
AntarchyNeoforgeSounds.KING_WING_FLAP,
|
||||
AntarchyNeoforgeSounds.KING_FLY_LOOP,
|
||||
AntarchyNeoforgeSounds.QUEEN_FLY_LOOP,
|
||||
AntarchyNeoforgeSounds.PRINCE_IDLE,
|
||||
AntarchyNeoforgeSounds.PRINCE_BITE,
|
||||
AntarchyNeoforgeSounds.PRINCE_SHOOT,
|
||||
@@ -436,6 +437,8 @@ public class AntarchyNeoforge {
|
||||
AntarchyObjects.setQueen(() -> AntarchyNeoforgeEntites.QUEEN.get());
|
||||
AntarchyObjects.setManticore(() -> AntarchyNeoforgeEntites.MANTICORE.get());
|
||||
AntarchyObjects.setRoyalBolt(() -> AntarchyNeoforgeEntites.ROYAL_BOLT.get());
|
||||
AntarchyObjects.setRoyalElementalProjectile(() -> AntarchyNeoforgeEntites.ROYAL_ELEMENTAL_PROJECTILE.get());
|
||||
AntarchyObjects.setRoyalIceSpike(() -> AntarchyNeoforgeEntites.ROYAL_ICE_SPIKE.get());
|
||||
AntarchyObjects.setPrinceEgg(() -> AntarchyNeoforgeBlocks.PRINCE_EGG.get());
|
||||
AntarchyObjects.setPrincessEgg(() -> AntarchyNeoforgeBlocks.PRINCESS_EGG.get());
|
||||
AntarchyObjects.setRoyalEggBlockEntity(() -> AntarchyNeoforgeBlocks.ROYAL_EGG_BLOCK_ENTITY.get());
|
||||
|
||||
+3
-1
@@ -150,7 +150,7 @@ public final class AntarchyNeoForgeClient {
|
||||
event.registerEntityRenderer(AntarchyNeoforgeEntites.VORTEX_CHARGE_PROJECTILE.get(), ThrownItemRenderer::new);
|
||||
event.registerEntityRenderer(AntarchyNeoforgeEntites.WIND_VORTEX.get(), WindVortexRenderer::new);
|
||||
event.registerEntityRenderer(AntarchyNeoforgeEntites.TIME_DILATION_FIELD.get(), TimeDilationFieldRenderer::new);
|
||||
event.registerEntityRenderer(AntarchyNeoforgeEntites.ROYAL_BLACK_HOLE.get(), net.minecraft.client.renderer.entity.NoopRenderer::new);
|
||||
event.registerEntityRenderer(AntarchyNeoforgeEntites.ROYAL_BLACK_HOLE.get(), com.craisinlord.antarchy.content.client.renderer.RoyalBlackHoleRenderer::new);
|
||||
event.registerEntityRenderer(AntarchyNeoforgeEntites.CRITTER_CAGE_PROJECTILE.get(), ThrownItemRenderer::new);
|
||||
event.registerEntityRenderer(AntarchyNeoforgeEntites.WORM_HOOK_PROJECTILE.get(), ThrownItemRenderer::new);
|
||||
event.registerEntityRenderer(AntarchyNeoforgeEntites.HUSH_PROJECTILE.get(), HushProjectileRenderer::new);
|
||||
@@ -176,6 +176,8 @@ public final class AntarchyNeoForgeClient {
|
||||
event.registerEntityRenderer(AntarchyNeoforgeEntites.KING.get(), com.craisinlord.antarchy.content.client.renderer.RoyalBossRenderer::new);
|
||||
event.registerEntityRenderer(AntarchyNeoforgeEntites.QUEEN.get(), com.craisinlord.antarchy.content.client.renderer.RoyalBossRenderer::new);
|
||||
event.registerEntityRenderer(AntarchyNeoforgeEntites.ROYAL_BOLT.get(), com.craisinlord.antarchy.content.client.renderer.RoyalBoltRenderer::new);
|
||||
event.registerEntityRenderer(AntarchyNeoforgeEntites.ROYAL_ELEMENTAL_PROJECTILE.get(), com.craisinlord.antarchy.content.client.renderer.RoyalElementalProjectileRenderer::new);
|
||||
event.registerEntityRenderer(AntarchyNeoforgeEntites.ROYAL_ICE_SPIKE.get(), com.craisinlord.antarchy.content.client.renderer.RoyalIceSpikeRenderer::new);
|
||||
event.registerEntityRenderer(AntarchyNeoforgeEntites.JERRY.get(), context -> withParalyzedGeoLayer(new com.craisinlord.antarchy.content.client.renderer.JerryRenderer(context)));
|
||||
event.registerEntityRenderer(AntarchyNeoforgeEntites.JUMPY_BUG.get(), context -> withParalyzedGeoLayer(new com.craisinlord.antarchy.content.client.renderer.JumpyBugRenderer(context)));
|
||||
event.registerEntityRenderer(AntarchyNeoforgeEntites.SPIT_BUG.get(), context -> withParalyzedGeoLayer(new com.craisinlord.antarchy.content.client.renderer.SpitBugRenderer(context)));
|
||||
|
||||
+141
-10
@@ -83,10 +83,24 @@ import net.neoforged.neoforge.fluids.FluidInteractionRegistry;
|
||||
import net.neoforged.neoforge.network.PacketDistributor;
|
||||
|
||||
public final class AntarchyNeoForgeEvents {
|
||||
private static final long SERVER_HANG_WARN_NANOS = 5_000_000_000L;
|
||||
private static final long SERVER_IDLE_BUSY_WARN_NANOS = 30_000_000_000L;
|
||||
private static final long SERVER_HANG_REPEAT_NANOS = 30_000_000_000L;
|
||||
private static final double OVERHEAD_INVERSION_WARN_MS = 10.0D;
|
||||
private static final long OVERHEAD_INVERSION_WARN_INTERVAL_TICKS = 100L;
|
||||
private static volatile boolean serverHangWatchdogStarted;
|
||||
private static volatile long serverTickStartNanos;
|
||||
private static volatile long serverTickEndNanos;
|
||||
private static volatile long serverHangLastDumpNanos;
|
||||
private static volatile Thread serverTickThread;
|
||||
private static long lastOverheadInversionWarnTick = Long.MIN_VALUE / 2L;
|
||||
|
||||
private AntarchyNeoForgeEvents() {}
|
||||
|
||||
public static void register(IEventBus modEventBus) {
|
||||
modEventBus.addListener(AntarchyNeoForgeEvents::onCommonSetup);
|
||||
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::beginServerTickWatchdog);
|
||||
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::endServerTickWatchdog);
|
||||
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::onMissileSquidDeath);
|
||||
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::onPermanentPortalSacrifice);
|
||||
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::onLivingBreathe);
|
||||
@@ -151,6 +165,79 @@ public final class AntarchyNeoForgeEvents {
|
||||
NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::onWandererTrades);
|
||||
}
|
||||
|
||||
static void beginServerTickWatchdog(ServerTickEvent.Pre event) {
|
||||
ensureServerHangWatchdogStarted();
|
||||
serverTickThread = Thread.currentThread();
|
||||
serverTickStartNanos = System.nanoTime();
|
||||
}
|
||||
|
||||
static void endServerTickWatchdog(ServerTickEvent.Post event) {
|
||||
serverTickEndNanos = System.nanoTime();
|
||||
serverTickStartNanos = 0L;
|
||||
}
|
||||
|
||||
private static synchronized void ensureServerHangWatchdogStarted() {
|
||||
if (serverHangWatchdogStarted) {
|
||||
return;
|
||||
}
|
||||
serverHangWatchdogStarted = true;
|
||||
Thread watchdog = new Thread(() -> {
|
||||
while (true) {
|
||||
try {
|
||||
Thread.sleep(2_000L);
|
||||
} catch (InterruptedException ignored) {
|
||||
Thread.currentThread().interrupt();
|
||||
return;
|
||||
}
|
||||
|
||||
long tickStart = serverTickStartNanos;
|
||||
long tickEnd = serverTickEndNanos;
|
||||
Thread tickThread = serverTickThread;
|
||||
long now = System.nanoTime();
|
||||
if (tickThread == null || now - serverHangLastDumpNanos < SERVER_HANG_REPEAT_NANOS) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (tickStart > 0L && now - tickStart >= SERVER_HANG_WARN_NANOS) {
|
||||
antarchy$dumpServerThreadWatchdog(
|
||||
"server thread appears hung",
|
||||
(now - tickStart) / 1_000_000.0D,
|
||||
tickThread
|
||||
);
|
||||
serverHangLastDumpNanos = now;
|
||||
continue;
|
||||
}
|
||||
|
||||
Thread.State state = tickThread.getState();
|
||||
boolean idleBusy = tickStart <= 0L
|
||||
&& tickEnd > 0L
|
||||
&& now - tickEnd >= SERVER_IDLE_BUSY_WARN_NANOS
|
||||
&& state != Thread.State.WAITING
|
||||
&& state != Thread.State.TIMED_WAITING;
|
||||
if (idleBusy) {
|
||||
antarchy$dumpServerThreadWatchdog(
|
||||
"server thread busy outside active tick",
|
||||
(now - tickEnd) / 1_000_000.0D,
|
||||
tickThread
|
||||
);
|
||||
serverHangLastDumpNanos = now;
|
||||
}
|
||||
}
|
||||
}, "Antarchy Server Hang Watchdog");
|
||||
watchdog.setDaemon(true);
|
||||
watchdog.start();
|
||||
}
|
||||
|
||||
private static void antarchy$dumpServerThreadWatchdog(String message, double elapsedMs, Thread tickThread) {
|
||||
Antarchy.LOGGER.error(
|
||||
"[antarchy-watchdog] {} elapsedMs={} thread={} state={}",
|
||||
message, elapsedMs, tickThread.getName(), tickThread.getState()
|
||||
);
|
||||
for (StackTraceElement element : tickThread.getStackTrace()) {
|
||||
Antarchy.LOGGER.error("[antarchy-watchdog] at {}", element);
|
||||
}
|
||||
}
|
||||
|
||||
static void onVillagerTrades(VillagerTradesEvent event) {
|
||||
if (event.getType() == VillagerProfession.FARMER) {
|
||||
event.getTrades().get(1).add(emeraldForItems(AntarchyObjects.CORN.get(), 20, 16, 2));
|
||||
@@ -430,6 +517,9 @@ public final class AntarchyNeoForgeEvents {
|
||||
}
|
||||
|
||||
private static final int ANTIMETAL_INVERTED_REFRESH_TICKS = 20;
|
||||
private static final int ANTIMETAL_INVERTED_REFRESH_THRESHOLD_TICKS = 12;
|
||||
private static final int ANTIMETAL_PLAYER_SCAN_INTERVAL_TICKS = 2;
|
||||
private static final int ANTIMETAL_MOB_SCAN_INTERVAL_TICKS = 10;
|
||||
|
||||
static void tickOverheadInversion(EntityTickEvent.Post event) {
|
||||
if (!(event.getEntity() instanceof LivingEntity livingEntity)) {
|
||||
@@ -441,17 +531,56 @@ public final class AntarchyNeoForgeEvents {
|
||||
if (livingEntity instanceof Player player && player.isSpectator()) {
|
||||
return;
|
||||
}
|
||||
if (!isDirectlyBelowAntimetal(livingEntity)) {
|
||||
|
||||
MobEffectInstance existingInverted = livingEntity.getEffect(AntarchyNeoforgeMisc.INVERTED);
|
||||
long gameTime = livingEntity.level().getGameTime();
|
||||
if (!shouldScanOverheadAntimetal(livingEntity, existingInverted, gameTime)) {
|
||||
return;
|
||||
}
|
||||
|
||||
MobEffectInstance existingInverted = livingEntity.getEffect(AntarchyNeoforgeMisc.INVERTED);
|
||||
if (existingInverted == null || existingInverted.getDuration() <= 5) {
|
||||
long startNanos = System.nanoTime();
|
||||
boolean directlyBelowAntimetal = isDirectlyBelowAntimetal(livingEntity);
|
||||
double elapsedMs = (System.nanoTime() - startNanos) / 1_000_000.0D;
|
||||
if (elapsedMs >= OVERHEAD_INVERSION_WARN_MS
|
||||
&& gameTime - lastOverheadInversionWarnTick >= OVERHEAD_INVERSION_WARN_INTERVAL_TICKS) {
|
||||
lastOverheadInversionWarnTick = gameTime;
|
||||
Antarchy.LOGGER.warn(
|
||||
"[antarchy-gravity] slow overhead antimetal scan targetType={} uuid={} pos=({}, {}, {}) dim={} elapsedMs={} inverted={} forced={} gameTime={}",
|
||||
livingEntity.getType(), livingEntity.getUUID(), livingEntity.getX(), livingEntity.getY(), livingEntity.getZ(),
|
||||
livingEntity.level().dimension().location(), elapsedMs,
|
||||
com.craisinlord.antarchy.content.gravity.AntarchyGravityApi.isGravityInverted(livingEntity),
|
||||
com.craisinlord.antarchy.content.gravity.AntarchyGravityApi.isGravityForced(livingEntity),
|
||||
gameTime
|
||||
);
|
||||
}
|
||||
if (!directlyBelowAntimetal) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (existingInverted == null || existingInverted.getDuration() <= ANTIMETAL_INVERTED_REFRESH_THRESHOLD_TICKS) {
|
||||
if (livingEntity instanceof Player || livingEntity.level().dimension().location().toString().equals("antarchy:thoraxis")) {
|
||||
Antarchy.LOGGER.info(
|
||||
"[antarchy-gravity] overhead antimetal applying inverted effect targetType={} uuid={} pos=({}, {}, {}) dim={} existingDuration={} gameTime={}",
|
||||
livingEntity.getType(), livingEntity.getUUID(), livingEntity.getX(), livingEntity.getY(), livingEntity.getZ(),
|
||||
livingEntity.level().dimension().location(),
|
||||
existingInverted != null ? existingInverted.getDuration() : -1,
|
||||
gameTime
|
||||
);
|
||||
}
|
||||
livingEntity.addEffect(new MobEffectInstance(AntarchyNeoforgeMisc.INVERTED, ANTIMETAL_INVERTED_REFRESH_TICKS, 0, false, false, false));
|
||||
spawnAntimetalInversionParticles(livingEntity);
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean shouldScanOverheadAntimetal(LivingEntity entity, MobEffectInstance existingInverted, long gameTime) {
|
||||
if (existingInverted != null && existingInverted.getDuration() <= ANTIMETAL_INVERTED_REFRESH_THRESHOLD_TICKS) {
|
||||
return true;
|
||||
}
|
||||
int interval = entity instanceof Player ? ANTIMETAL_PLAYER_SCAN_INTERVAL_TICKS : ANTIMETAL_MOB_SCAN_INTERVAL_TICKS;
|
||||
long phase = (long) entity.getUUID().hashCode() + gameTime;
|
||||
return Math.floorMod(phase, interval) == 0L;
|
||||
}
|
||||
|
||||
private static boolean isInOrBelowAntimetalScaffolding(LivingEntity entity) {
|
||||
AABB bounds = entity.getBoundingBox().deflate(1.0E-3D);
|
||||
int minX = net.minecraft.util.Mth.floor(bounds.minX);
|
||||
@@ -484,18 +613,16 @@ public final class AntarchyNeoForgeEvents {
|
||||
|
||||
int minX = net.minecraft.util.Mth.floor(bounds.minX);
|
||||
int maxX = net.minecraft.util.Mth.floor(bounds.maxX);
|
||||
int minY = net.minecraft.util.Mth.floor(bounds.minY);
|
||||
int maxY = net.minecraft.util.Mth.floor(bounds.maxY);
|
||||
int minZ = net.minecraft.util.Mth.floor(bounds.minZ);
|
||||
int maxZ = net.minecraft.util.Mth.floor(bounds.maxZ);
|
||||
|
||||
net.minecraft.core.BlockPos.MutableBlockPos crystalPos = new net.minecraft.core.BlockPos.MutableBlockPos();
|
||||
for (int x = minX; x <= maxX; x++) {
|
||||
for (int y = minY; y <= maxY; y++) {
|
||||
for (int z = minZ; z <= maxZ; z++) {
|
||||
net.minecraft.core.BlockPos crystalPos = new net.minecraft.core.BlockPos(x, y + 1, z);
|
||||
if (entity.level().getBlockState(crystalPos).is(com.craisinlord.antarchy.content.AntarchyTags.Blocks.ANTIMETAL_INVERSION_BLOCKS)) {
|
||||
return true;
|
||||
}
|
||||
for (int z = minZ; z <= maxZ; z++) {
|
||||
crystalPos.set(x, maxY + 1, z);
|
||||
if (entity.level().getBlockState(crystalPos).is(com.craisinlord.antarchy.content.AntarchyTags.Blocks.ANTIMETAL_INVERSION_BLOCKS)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1146,6 +1273,10 @@ public final class AntarchyNeoForgeEvents {
|
||||
event.getBuilder().addMix(Potions.AWKWARD, AntarchyNeoforgeItems.TITANIUM_NUGGET.get(), AntarchyNeoforgeMisc.GROWING);
|
||||
event.getBuilder().addMix(AntarchyNeoforgeMisc.GROWING, Items.GLOWSTONE_DUST, AntarchyNeoforgeMisc.STRONG_GROWING);
|
||||
event.getBuilder().addMix(AntarchyNeoforgeMisc.STRONG_GROWING, Items.GLOWSTONE_DUST, AntarchyNeoforgeMisc.EXTREME_GROWING);
|
||||
event.getBuilder().addMix(Potions.AWKWARD, AntarchyNeoforgeItems.KING_SCALE.get(), AntarchyNeoforgeMisc.COMMAND);
|
||||
event.getBuilder().addMix(AntarchyNeoforgeMisc.COMMAND, Items.REDSTONE, AntarchyNeoforgeMisc.LONG_COMMAND);
|
||||
event.getBuilder().addMix(Potions.AWKWARD, AntarchyNeoforgeItems.QUEEN_SCALE.get(), AntarchyNeoforgeMisc.TIME_DILATION);
|
||||
event.getBuilder().addMix(AntarchyNeoforgeMisc.TIME_DILATION, Items.REDSTONE, AntarchyNeoforgeMisc.LONG_TIME_DILATION);
|
||||
|
||||
}
|
||||
|
||||
|
||||
+9
@@ -425,6 +425,7 @@ public final class AntarchyNeoforgeEntites {
|
||||
() -> EntityType.Builder.of(ScorpionEntity::new, MobCategory.MONSTER)
|
||||
.sized(1.5F, 1.0F)
|
||||
.clientTrackingRange(8)
|
||||
.fireImmune()
|
||||
.build("scorpion"));
|
||||
public static final DeferredHolder<EntityType<?>, EntityType<BasiliskEntity>> BASILISK = ENTITY_TYPES.register("basilisk",
|
||||
() -> EntityType.Builder.of(BasiliskEntity::new, MobCategory.MONSTER)
|
||||
@@ -435,6 +436,7 @@ public final class AntarchyNeoforgeEntites {
|
||||
() -> EntityType.Builder.of(EmperorScorpionEntity::new, MobCategory.MONSTER)
|
||||
.sized(6.0F, 3.0F)
|
||||
.clientTrackingRange(12)
|
||||
.fireImmune()
|
||||
.build("emperor_scorpion"));
|
||||
public static final DeferredHolder<EntityType<?>, EntityType<LucidEyeProjectileEntity>> LUCID_PEARL_PROJECTILE = ENTITY_TYPES.register("lucid_pearl_projectile",
|
||||
() -> EntityType.Builder.<LucidEyeProjectileEntity>of(LucidEyeProjectileEntity::new, MobCategory.MISC)
|
||||
@@ -497,6 +499,7 @@ public final class AntarchyNeoforgeEntites {
|
||||
() -> EntityType.Builder.of(ManticoreEntity::new, MobCategory.MONSTER)
|
||||
.sized(1.95F, 2.0F)
|
||||
.clientTrackingRange(10)
|
||||
.fireImmune()
|
||||
.build("manticore"));
|
||||
public static final DeferredHolder<EntityType<?>, EntityType<JerryEntity>> JERRY = ENTITY_TYPES.register("jerry",
|
||||
() -> EntityType.Builder.of(JerryEntity::new, MobCategory.MONSTER)
|
||||
@@ -541,6 +544,12 @@ public final class AntarchyNeoforgeEntites {
|
||||
public static final DeferredHolder<EntityType<?>, EntityType<com.craisinlord.antarchy.content.entity.royal.RoyalBoltEntity>> ROYAL_BOLT = ENTITY_TYPES.register("royal_bolt",
|
||||
() -> EntityType.Builder.<com.craisinlord.antarchy.content.entity.royal.RoyalBoltEntity>of(com.craisinlord.antarchy.content.entity.royal.RoyalBoltEntity::new, MobCategory.MISC)
|
||||
.sized(0.4F, 0.4F).clientTrackingRange(8).updateInterval(1).fireImmune().build("royal_bolt"));
|
||||
public static final DeferredHolder<EntityType<?>, EntityType<com.craisinlord.antarchy.content.entity.royal.RoyalElementalProjectileEntity>> ROYAL_ELEMENTAL_PROJECTILE = ENTITY_TYPES.register("royal_elemental_projectile",
|
||||
() -> EntityType.Builder.<com.craisinlord.antarchy.content.entity.royal.RoyalElementalProjectileEntity>of(com.craisinlord.antarchy.content.entity.royal.RoyalElementalProjectileEntity::new, MobCategory.MISC)
|
||||
.sized(1.0F, 1.0F).clientTrackingRange(16).updateInterval(1).fireImmune().build("royal_elemental_projectile"));
|
||||
public static final DeferredHolder<EntityType<?>, EntityType<com.craisinlord.antarchy.content.entity.royal.RoyalIceSpikeEntity>> ROYAL_ICE_SPIKE = ENTITY_TYPES.register("royal_ice_spike",
|
||||
() -> EntityType.Builder.<com.craisinlord.antarchy.content.entity.royal.RoyalIceSpikeEntity>of(com.craisinlord.antarchy.content.entity.royal.RoyalIceSpikeEntity::new, MobCategory.MISC)
|
||||
.sized(2.0F, 4.0F).clientTrackingRange(16).updateInterval(1).fireImmune().build("royal_ice_spike"));
|
||||
public static final DeferredHolder<EntityType<?>, EntityType<OuranwoodDeerEntity>> OURANWOOD_DEER = ENTITY_TYPES.register("ouranwood_deer",
|
||||
() -> EntityType.Builder.of(OuranwoodDeerEntity::new, MobCategory.CREATURE)
|
||||
.sized(1.125F, 1.75F)
|
||||
|
||||
+15
@@ -7,6 +7,8 @@ import com.craisinlord.antarchy.content.effect.DreadMobEffect;
|
||||
import com.craisinlord.antarchy.content.effect.GoopedMobEffect;
|
||||
import com.craisinlord.antarchy.content.effect.GrowthMobEffect;
|
||||
import com.craisinlord.antarchy.content.effect.InvertedMobEffect;
|
||||
import com.craisinlord.antarchy.content.effect.CommandedMobEffect;
|
||||
import com.craisinlord.antarchy.content.effect.DilatedMobEffect;
|
||||
import com.craisinlord.antarchy.content.effect.ParalyzedMobEffect;
|
||||
import com.craisinlord.antarchy.content.effect.ShrinkMobEffect;
|
||||
import com.craisinlord.antarchy.content.effect.StinkyMobEffect;
|
||||
@@ -127,6 +129,8 @@ public final class AntarchyNeoforgeMisc {
|
||||
public static final DeferredHolder<MobEffect, DreadMobEffect> DREAD = MOB_EFFECTS.register("dread", DreadMobEffect::new);
|
||||
public static final DeferredHolder<MobEffect, ParalyzedMobEffect> PARALYZED = MOB_EFFECTS.register("paralyzed", ParalyzedMobEffect::new);
|
||||
public static final DeferredHolder<MobEffect, InvertedMobEffect> INVERTED = MOB_EFFECTS.register("inverted", InvertedMobEffect::new);
|
||||
public static final DeferredHolder<MobEffect, CommandedMobEffect> COMMANDED = MOB_EFFECTS.register("commanded", CommandedMobEffect::new);
|
||||
public static final DeferredHolder<MobEffect, DilatedMobEffect> DILATED = MOB_EFFECTS.register("dilated", DilatedMobEffect::new);
|
||||
public static final DeferredHolder<MobEffect, StinkyMobEffect> STINKY = MOB_EFFECTS.register("stinky", StinkyMobEffect::new);
|
||||
public static final DeferredHolder<MobEffect, GoopedMobEffect> GOOPED = MOB_EFFECTS.register("gooped", GoopedMobEffect::new);
|
||||
public static final DeferredHolder<MobEffect, com.craisinlord.antarchy.content.effect.BloodglassWardEffect> BLOODGLASS_WARD = MOB_EFFECTS.register("bloodglass_ward", com.craisinlord.antarchy.content.effect.BloodglassWardEffect::new);
|
||||
@@ -140,6 +144,14 @@ public final class AntarchyNeoforgeMisc {
|
||||
() -> new Potion(new MobEffectInstance(INVERTED, 600)));
|
||||
public static final DeferredHolder<Potion, Potion> LONG_INVERSION = POTIONS.register("long_inversion",
|
||||
() -> new Potion("inversion", new MobEffectInstance(INVERTED, 2400)));
|
||||
public static final DeferredHolder<Potion, Potion> COMMAND = POTIONS.register("command",
|
||||
() -> new Potion(new MobEffectInstance(COMMANDED, 600)));
|
||||
public static final DeferredHolder<Potion, Potion> LONG_COMMAND = POTIONS.register("long_command",
|
||||
() -> new Potion("command", new MobEffectInstance(COMMANDED, 1200)));
|
||||
public static final DeferredHolder<Potion, Potion> TIME_DILATION = POTIONS.register("time_dilation",
|
||||
() -> new Potion(new MobEffectInstance(DILATED, 300)));
|
||||
public static final DeferredHolder<Potion, Potion> LONG_TIME_DILATION = POTIONS.register("long_time_dilation",
|
||||
() -> new Potion("time_dilation", new MobEffectInstance(DILATED, 600)));
|
||||
public static final DeferredHolder<Potion, Potion> STINKY_POTION = POTIONS.register("stinky",
|
||||
() -> new Potion(new MobEffectInstance(STINKY, 1200)));
|
||||
public static final DeferredHolder<Potion, Potion> LONG_STINKY = POTIONS.register("long_stinky",
|
||||
@@ -375,6 +387,9 @@ public final class AntarchyNeoforgeMisc {
|
||||
public static final DeferredHolder<Feature<?>, DimensionalTearFeature> DIMENSIONAL_TEAR = FEATURES.register("dimensional_tear",
|
||||
() -> new DimensionalTearFeature(NoneFeatureConfiguration.CODEC));
|
||||
|
||||
public static final DeferredHolder<Feature<?>, ThoraxisIchorLakeFeature> THORAXIS_ICHOR_LAKE = FEATURES.register("thoraxis_ichor_lake",
|
||||
() -> new ThoraxisIchorLakeFeature(NoneFeatureConfiguration.CODEC));
|
||||
|
||||
// Biome sources
|
||||
public static final DeferredHolder<MapCodec<? extends BiomeSource>, MapCodec<ElythiaBiomeSource>> ELYTHIA_BIOME_SOURCE = BIOME_SOURCES.register("elythia_biome_source",
|
||||
() -> ElythiaBiomeSource.CODEC);
|
||||
|
||||
Reference in new issue
Block a user