diff --git a/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java b/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java index e3843401..7e971b76 100644 --- a/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java +++ b/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java @@ -31,7 +31,7 @@ public final class AntarchySettings { private static double waspHealth = 16.0D; private static double waspAttackDamage = 4.0D; private static double waspMovementSpeed = 0.39D; - private static double bomberHealth = 10.0D; + private static double bomberHealth = 15.0D; private static double bomberAttackDamage = 4.0D; private static double bomberExplosionDamage = 8.0D; private static double bomberExplosionRadius = 4.0D; diff --git a/common/src/main/java/com/craisinlord/antarchy/content/AntarchySoundEvents.java b/common/src/main/java/com/craisinlord/antarchy/content/AntarchySoundEvents.java index cd113d7a..ee33fc27 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/AntarchySoundEvents.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/AntarchySoundEvents.java @@ -119,6 +119,9 @@ public final class AntarchySoundEvents { public static Supplier MOLEVORE_HURT = (Supplier) UNBOUND; public static Supplier MOLEVORE_ATTACK = (Supplier) UNBOUND; public static Supplier MOLEVORE_DIG = (Supplier) UNBOUND; + public static Supplier BOMBER_WALK = (Supplier) UNBOUND; + public static Supplier BOMBER_KNOCK = (Supplier) UNBOUND; + public static Supplier BOMBER_EXPLODE = (Supplier) UNBOUND; public static Supplier DUCT_TAPE_USE = (Supplier) UNBOUND; private AntarchySoundEvents() { @@ -235,6 +238,9 @@ public final class AntarchySoundEvents { Supplier molevoreHurt, Supplier molevoreAttack, Supplier molevoreDig, + Supplier bomberWalk, + Supplier bomberKnock, + Supplier bomberExplode, Supplier ductTapeUse ) { SQUIDZOOKA_FIRE = squidzookaFire; @@ -347,6 +353,9 @@ public final class AntarchySoundEvents { MOLEVORE_HURT = molevoreHurt; MOLEVORE_ATTACK = molevoreAttack; MOLEVORE_DIG = molevoreDig; + BOMBER_WALK = bomberWalk; + BOMBER_KNOCK = bomberKnock; + BOMBER_EXPLODE = bomberExplode; DUCT_TAPE_USE = ductTapeUse; } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/UpwardFallingBlockRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/UpwardFallingBlockRenderer.java index 6081a863..3b4f647f 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/UpwardFallingBlockRenderer.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/UpwardFallingBlockRenderer.java @@ -24,7 +24,6 @@ public class UpwardFallingBlockRenderer extends EntityRenderer FUSE_TICKS_DATA = SynchedEntityData.defineId(BomberEntity.class, EntityDataSerializers.INT); private static final EntityDataAccessor DETONATING_DATA = SynchedEntityData.defineId(BomberEntity.class, EntityDataSerializers.BOOLEAN); - private static final int DEFAULT_FUSE_TICKS = 80; + private static final int DEFAULT_FUSE_TICKS = 120; private static final int EXPLODE_ANIM_START_TICKS = 25; private static final int FLASH_INTERVAL_TICKS = 5; @@ -117,7 +125,9 @@ public class BomberEntity extends Monster implements GeoEntity { Objects.requireNonNull(this.getAttribute(Attributes.MAX_HEALTH)).setBaseValue(maxHealth); this.setHealth((float) maxHealth); Objects.requireNonNull(this.getAttribute(Attributes.ATTACK_DAMAGE)).setBaseValue(attackDamage); - return super.finalizeSpawn(level, difficulty, spawnReason, spawnGroupData); + SpawnGroupData spawnData = super.finalizeSpawn(level, difficulty, spawnReason, spawnGroupData); + this.primeFuse(); + return spawnData; } @Override @@ -135,16 +145,6 @@ public class BomberEntity extends Monster implements GeoEntity { public boolean hurt(DamageSource source, float amount) { if (source.is(DamageTypeTags.IS_FIRE) || source.is(DamageTypeTags.IS_EXPLOSION)) { this.primeFuse(); - return false; - } - if (this.detonating) { - Entity attacker = source.getDirectEntity(); - if (attacker != null) { - Vec3 knockDir = this.position().subtract(attacker.position()).normalize(); - this.push(knockDir.x * 0.5, 0.2, knockDir.z * 0.5); - this.hurtMarked = true; - } - return false; } Entity directEntity = source.getDirectEntity(); @@ -155,6 +155,11 @@ public class BomberEntity extends Monster implements GeoEntity { return super.hurt(source, amount); } + @Override + protected SoundEvent getHurtSound(DamageSource damageSource) { + return AntarchySoundEvents.BOMBER_KNOCK.get(); + } + @Override public InteractionResult mobInteract(Player player, InteractionHand hand) { ItemStack stack = player.getItemInHand(hand); @@ -185,7 +190,10 @@ public class BomberEntity extends Monster implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "main_controller", 0, this::mainAnimController)); + controllers.add(new AnimationController<>(this, "movement_controller", 0, this::movementAnimController) + .setSoundKeyframeHandler(new AutoPlayingSoundKeyframeHandler<>())); + controllers.add(new AnimationController<>(this, "explode_controller", 0, this::explodeAnimController) + .setSoundKeyframeHandler(new AutoPlayingSoundKeyframeHandler<>())); } @Override @@ -198,10 +206,6 @@ public class BomberEntity extends Monster implements GeoEntity { super.tick(); if (!this.level().isClientSide && this.detonating) { - this.getNavigation().stop(); - this.setDeltaMovement(0.0D, 0.0D, 0.0D); - this.hasImpulse = false; - if (this.fuseTicks > 0) { this.fuseTicks--; this.entityData.set(FUSE_TICKS_DATA, this.fuseTicks); @@ -227,12 +231,20 @@ public class BomberEntity extends Monster implements GeoEntity { && (this.getFuseTicks() / FLASH_INTERVAL_TICKS) % 2 == 0; } - private PlayState mainAnimController(AnimationState state) { + private PlayState movementAnimController(AnimationState state) { + if (this.isDetonating() && this.getFuseTicks() <= EXPLODE_ANIM_START_TICKS) { + return PlayState.STOP; + } + + return state.setAndContinue(this.isMovingForAnimation() ? WALK_ANIM : IDLE_ANIM); + } + + private PlayState explodeAnimController(AnimationState state) { if (this.isDetonating() && this.getFuseTicks() <= EXPLODE_ANIM_START_TICKS) { return state.setAndContinue(EXPLODE_ANIM); } - return state.setAndContinue(state.isMoving() ? WALK_ANIM : IDLE_ANIM); + return PlayState.STOP; } private void primeFuse() { @@ -244,10 +256,7 @@ public class BomberEntity extends Monster implements GeoEntity { this.fuseTicks = DEFAULT_FUSE_TICKS; this.entityData.set(DETONATING_DATA, true); this.entityData.set(FUSE_TICKS_DATA, this.fuseTicks); - this.getNavigation().stop(); - this.setDeltaMovement(Vec3.ZERO); - this.hasImpulse = false; - this.playSound(SoundEvents.TNT_PRIMED, 1.0F, 0.9F + this.random.nextFloat() * 0.2F); + this.playSound(AntarchySoundEvents.BOMBER_EXPLODE.get(), 1.0F, 1.0F); } private void detonate() { @@ -260,7 +269,21 @@ public class BomberEntity extends Monster implements GeoEntity { double y = this.getY(0.0625D); double z = this.getZ(); float radius = (float) AntarchySettings.bomberExplosionRadius(); - serverLevel.explode(this, x, y, z, radius, ExplosionInteraction.TNT); + serverLevel.playSound(null, x, y, z, SoundEvents.GENERIC_EXPLODE.value(), SoundSource.HOSTILE, 0.55F, 1.0F); + serverLevel.explode( + this, + null, + null, + x, + y, + z, + radius, + false, + ExplosionInteraction.TNT, + ParticleTypes.EXPLOSION_EMITTER, + ParticleTypes.EXPLOSION, + BuiltInRegistries.SOUND_EVENT.getHolder(INTENTIONALLY_EMPTY_SOUND_ID).orElseThrow() + ); double extraDamage = AntarchySettings.bomberExplosionDamage(); if (extraDamage > 0.0D) { @@ -283,6 +306,10 @@ public class BomberEntity extends Monster implements GeoEntity { this.discard(); } + private boolean isMovingForAnimation() { + return this.getDeltaMovement().horizontalDistanceSqr() > 1.0E-4D || this.getNavigation().isInProgress(); + } + private final class BomberAttackGoal extends MeleeAttackGoal { private BomberAttackGoal() { super(BomberEntity.this, 1.1D, true); @@ -290,12 +317,12 @@ public class BomberEntity extends Monster implements GeoEntity { @Override public boolean canUse() { - return !BomberEntity.this.detonating && super.canUse(); + return super.canUse(); } @Override public boolean canContinueToUse() { - return !BomberEntity.this.detonating && super.canContinueToUse(); + return super.canContinueToUse(); } } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/ant/AntTeleportHelper.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/ant/AntTeleportHelper.java index 97d66961..829d89e0 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/ant/AntTeleportHelper.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/ant/AntTeleportHelper.java @@ -1,5 +1,6 @@ package com.craisinlord.antarchy.content.entity.ant; +import com.craisinlord.antarchy.config.AntarchySettings; import java.util.LinkedHashSet; import java.util.Set; import net.minecraft.core.BlockPos; @@ -16,6 +17,7 @@ import net.minecraft.world.entity.vehicle.DismountHelper; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.phys.Vec3; import org.jetbrains.annotations.Nullable; @@ -161,17 +163,26 @@ public final class AntTeleportHelper { @Nullable private static Vec3 tryFindSafeDismount(ServerPlayer player, ServerLevel destination, BlockPos candidate) { Vec3 safePos = DismountHelper.findSafeDismountLocation(player.getType(), destination, candidate, true); - if (safePos != null) { + if (safePos != null && isValidArrivalPosition(destination, safePos)) { return safePos; } for (Direction direction : Direction.Plane.HORIZONTAL) { safePos = DismountHelper.findSafeDismountLocation(player.getType(), destination, candidate.relative(direction), true); - if (safePos != null) { + if (safePos != null && isValidArrivalPosition(destination, safePos)) { return safePos; } } return null; } + + private static boolean isValidArrivalPosition(ServerLevel destination, Vec3 safePos) { + if (destination.dimension() != AntarchySettings.termiteDestinationDimension()) { + return true; + } + + BlockPos standPos = BlockPos.containing(safePos); + return !destination.getBlockState(standPos.below()).is(Blocks.BEDROCK); + } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/fluid/BileLiquidBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/fluid/BileLiquidBlock.java index 81476b5f..f8596dd0 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/fluid/BileLiquidBlock.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/fluid/BileLiquidBlock.java @@ -1,7 +1,10 @@ package com.craisinlord.antarchy.content.fluid; +import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.AntarchyObjects; import net.minecraft.core.BlockPos; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.effect.MobEffects; import net.minecraft.world.entity.Entity; @@ -11,12 +14,13 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.block.LiquidBlock; import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.FluidState; import net.minecraft.world.level.material.FlowingFluid; -import net.minecraft.world.phys.Vec3; public class BileLiquidBlock extends LiquidBlock { + private static final ResourceLocation BILE_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "bile"); + private static final ResourceLocation FLOWING_BILE_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "flowing_bile"); private static final int EFFECT_DURATION_TICKS = 100; - private static final Vec3 SLOW_MOVEMENT = new Vec3(0.85D, 0.95D, 0.85D); public BileLiquidBlock(FlowingFluid fluid, BlockBehaviour.Properties properties) { super(fluid, properties); @@ -36,7 +40,10 @@ public class BileLiquidBlock extends LiquidBlock { return; } } + } - entity.makeStuckInBlock(state, SLOW_MOVEMENT); + public static boolean isBile(FluidState fluidState) { + ResourceLocation fluidId = BuiltInRegistries.FLUID.getKey(fluidState.getType()); + return BILE_ID.equals(fluidId) || FLOWING_BILE_ID.equals(fluidId); } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynBileCystFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynBileCystFeature.java index 2352b44e..43ed184a 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynBileCystFeature.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynBileCystFeature.java @@ -14,7 +14,6 @@ import net.minecraft.util.RandomSource; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.LiquidBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.feature.Feature; import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; @@ -27,8 +26,7 @@ public final class CavarynBileCystFeature extends Feature codec) { super(codec); @@ -38,7 +36,7 @@ public final class CavarynBileCystFeature extends Feature context) { Block bileVeinBlock = getBlock(BILE_VEIN_ID); Block bileBlock = getBlock(BILE_ID); - if (bileVeinBlock == null || !(bileBlock instanceof LiquidBlock)) { + if (bileVeinBlock == null || bileBlock == null) { return false; } @@ -53,8 +51,6 @@ public final class CavarynBileCystFeature extends Feature placed = new ArrayList<>(); @@ -122,7 +113,6 @@ public final class CavarynBileCystFeature extends Feature= 0.30f) { return true; } - // Ooze bile out of exposed faces — "popped pimple" seep for (BlockPos cystPos : placed) { for (Direction dir : Direction.values()) { BlockPos adj = cystPos.relative(dir); diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynBileVeinFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynBileVeinFeature.java index 932bd883..5cf07aa4 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynBileVeinFeature.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynBileVeinFeature.java @@ -28,7 +28,7 @@ public final class CavarynBileVeinFeature extends Feature codec) { super(codec); @@ -53,7 +53,6 @@ public final class CavarynBileVeinFeature extends Feature { private static final ResourceLocation AMBER_LICHEN_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "amber_lichen"); - private static final ResourceLocation GLOW_LICHEN_ID = ResourceLocation.withDefaultNamespace("glow_lichen"); private static final int SEARCH_RADIUS = 8; private static final int SEARCH_ATTEMPTS = 28; private static final int VERTICAL_SCAN = 10; @@ -34,8 +33,7 @@ public final class CavarynWallAmberMossFeature extends Feature patchPositions, Direction supportDirection, Block amberLichenBlock, - Block glowLichenBlock, RandomSource random ) { for (BlockPos patchPos : patchPositions) { @@ -132,7 +129,7 @@ public final class CavarynWallAmberMossFeature extends Feature { int baseRadius = 2 + random.nextInt(2); // 2–3 wide at base int totalHeight = 20 + random.nextInt(15); // 20–34 blocks tall - // Curve: lean toward a random horizontal direction, accelerating toward the tip double curveAngle = random.nextDouble() * Math.PI * 2; double curveDX = Math.cos(curveAngle); double curveDZ = Math.sin(curveAngle); @@ -96,7 +95,6 @@ public class CoralSpikeFeature extends Feature { level.setBlock(pos, coral.block().defaultBlockState(), 2); placed = true; - // Coral plants growing off the top of outer-surface blocks if (dist >= radius - 0.6 && radius > 0) { BlockPos above = pos.above(); if (canReplace(level.getBlockState(above))) { @@ -110,7 +108,6 @@ public class CoralSpikeFeature extends Feature { } } - // Wall fans on the outer surface if (dist >= radius - 0.5) { for (Direction dir : Direction.Plane.HORIZONTAL) { if (random.nextFloat() >= 0.4f) continue; diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java index 545bfb05..3b9d1ab1 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java @@ -102,7 +102,7 @@ public class ElythiaBiomeSource extends BiomeSource { // At continentalness < -0.80 the terrain is reliably below sea level. // Transition-zone columns (-0.80 to -0.85) are treated as land to avoid // ocean biome appearing over above-sea-level terrain. - private static final long OCEAN_CONTINENTALNESS_THRESHOLD = Climate.quantizeCoord(-0.80f); + private static final long OCEAN_CONTINENTALNESS_THRESHOLD = Climate.quantizeCoord(-0.87f); @Override public Holder getNoiseBiome(int x, int y, int z, Climate.Sampler sampler) { @@ -116,17 +116,21 @@ public class ElythiaBiomeSource extends BiomeSource { // Use continentalness (XZ-only noise) to classify the column. // Ocean columns get the ocean biome at every Y so structures, particles, // and ambient effects work correctly above the water surface. + // Cave biomes are always preserved even in ocean columns. Climate.TargetPoint target = sampler.sample(x, this.seaLevelQuartY, z); if (target.continentalness() < OCEAN_CONTINENTALNESS_THRESHOLD) { + if (biome.is(MOLEWORM_CAVES) || biome.is(ELYTHIA_LUSH_CAVES)) return biome; Holder seaLevelBiome = this.delegate.getNoiseBiome(x, this.seaLevelQuartY, z, sampler); // MultiNoise can return a land biome at sea-level depth — force ocean if so if (isOceanBiome(seaLevelBiome)) return seaLevelBiome; return oceanHolder != null ? oceanHolder : seaLevelBiome; } - // Land column at or below sea level: force ocean for any biome not allowed there. - // +1 quart above seaLevelQuartY so blocks 76-83 (around the waterline) are all caught. - if (y <= this.seaLevelQuartY + 1 && oceanHolder != null && !allowedBelowSeaLevel(biome)) { + // Land column in the shallow-underwater zone: force ocean for surface biomes that + // ended up below sea level (e.g. meadow in a depression). Only applies within + // 6 quarts (~24 blocks) of sea level — deep underground is unaffected. + if (y >= this.seaLevelQuartY - 6 && y <= this.seaLevelQuartY + && oceanHolder != null && !allowedBelowSeaLevel(biome)) { return oceanHolder; } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/FallenOuranwoodFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/FallenOuranwoodFeature.java index 78ba675b..d7a1861a 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/FallenOuranwoodFeature.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/FallenOuranwoodFeature.java @@ -66,7 +66,6 @@ public class FallenOuranwoodFeature extends Feature { float dmg = damage[step]; - // Full gap sections — log has completely rotted through here if (dmg > 0.78f) continue; int surfaceY = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, bx, bz); @@ -79,14 +78,11 @@ public class FallenOuranwoodFeature extends Feature { boolean isShell = dist >= outerRadius - 0.5; - // Hollow interior: always skip center when hollow if (hollow && dist < outerRadius - 0.5) continue; - // Heavy-damage sections: only keep fragments of the shell if (dmg > 0.55f && !isShell) continue; if (dmg > 0.55f && random.nextFloat() < (dmg - 0.55f) * 3.5f) continue; - // All sections: random rot holes punched through the shell if (isShell && random.nextFloat() < dmg * 0.4f) continue; int px = axis == Direction.Axis.X ? bx : bx + dp; @@ -95,13 +91,12 @@ public class FallenOuranwoodFeature extends Feature { if (!canReplace(level.getBlockState(pos))) continue; - // Block material mix: mostly mossy log, some fresh log patches, some moss float r = random.nextFloat(); BlockState toPlace; if (r < 0.08f) { toPlace = Blocks.MOSS_BLOCK.defaultBlockState(); } else if (r < 0.22f) { - toPlace = freshLogState; // fresher wood, less decayed patch + toPlace = freshLogState; } else if (r < 0.32f) { toPlace = woodState; } else { @@ -114,7 +109,6 @@ public class FallenOuranwoodFeature extends Feature { } } - // Moss patches scattered along the log's footprint int mossCount = 20 + random.nextInt(25); for (int i = 0; i < mossCount; i++) { int mx = origin.getX() + random.nextInt(length + 6) - 3; diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/FungalMushroomFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/FungalMushroomFeature.java index f671b975..a6da40dd 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/FungalMushroomFeature.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/FungalMushroomFeature.java @@ -30,24 +30,17 @@ public class FungalMushroomFeature extends Feature { Block capBlock = isRed ? Blocks.RED_MUSHROOM_BLOCK : Blocks.BROWN_MUSHROOM_BLOCK; Block smallMushroom = isRed ? Blocks.RED_MUSHROOM : Blocks.BROWN_MUSHROOM; - // 1-in-3 chance of a large mushroom (~3x the small variant) - boolean isLarge = random.nextInt(3) == 0; + int stemSize = random.nextBoolean() ? 2 : 3; + int stemHeight = 6 + random.nextInt(7); - int stemSize = isLarge ? (2 + random.nextInt(3)) : (random.nextBoolean() ? 2 : 3); - int stemHeight = isLarge ? (18 + random.nextInt(19)) : (6 + random.nextInt(7)); // large: 18–36, small: 6–12 - - // Lean: stem drifts in a random horizontal direction over its height double leanAngle = random.nextDouble() * Math.PI * 2; double leanDX = Math.cos(leanAngle); double leanDZ = Math.sin(leanAngle); - double maxLean = isLarge - ? (6.0 + random.nextDouble() * 10.0) // large: 6–16 block lean - : (2.0 + random.nextDouble() * 3.5); // small: 2–5.5 block lean + double maxLean = 2.0 + random.nextDouble() * 3.5; int baseY = origin.getY(); int stemOffset = stemSize == 2 ? 0 : -1; // center 3x3 on origin - // Pore-only stem state (inner faces; sides visible from outside) BlockState stemPore = Blocks.MUSHROOM_STEM.defaultBlockState() .setValue(HugeMushroomBlock.NORTH, false) .setValue(HugeMushroomBlock.SOUTH, false) @@ -63,7 +56,6 @@ public class FungalMushroomFeature extends Feature { .setValue(HugeMushroomBlock.UP, false) .setValue(HugeMushroomBlock.DOWN, false); - // Place leaning stem for (int dy = 0; dy < stemHeight; dy++) { double leanProgress = (double) dy / stemHeight; int leanX = (int) Math.round(leanDX * maxLean * leanProgress); @@ -71,34 +63,32 @@ public class FungalMushroomFeature extends Feature { for (int dx = 0; dx < stemSize; dx++) { for (int dz = 0; dz < stemSize; dz++) { - BlockPos pos = new BlockPos( - origin.getX() + stemOffset + dx + leanX, - baseY + dy, - origin.getZ() + stemOffset + dz + leanZ); - if (canReplace(level.getBlockState(pos))) { - // Outer ring shows bark, interior is pores - boolean isEdge = (dx == 0 || dx == stemSize - 1 || dz == 0 || dz == stemSize - 1); - level.setBlock(pos, isEdge ? stemSide : stemPore, 2); + int wx = origin.getX() + stemOffset + dx + leanX; + int wz = origin.getZ() + stemOffset + dz + leanZ; + BlockPos pos = new BlockPos(wx, baseY + dy, wz); + if (!canReplace(level.getBlockState(pos))) continue; + boolean isEdge = (dx == 0 || dx == stemSize - 1 || dz == 0 || dz == stemSize - 1); + BlockState stemState = isEdge ? stemSide : stemPore; + level.setBlock(pos, stemState, 2); + BlockPos below = pos.below(); + while (canReplace(level.getBlockState(below)) && below.getY() > level.getMinBuildHeight()) { + level.setBlock(below, stemState, 2); + below = below.below(); } } } } - // Cap: cone-shaped, follows the lean, with irregular per-block radius noise double capCenterX = origin.getX() + (stemSize == 2 ? 0.5 : 0) + leanDX * maxLean; double capCenterZ = origin.getZ() + (stemSize == 2 ? 0.5 : 0) + leanDZ * maxLean; int capTopY = baseY + stemHeight; - int baseCapRadius = isLarge - ? (stemSize + 7 + random.nextInt(6)) // large: ~11–18 at base - : (stemSize + 2 + random.nextInt(2)); // small: 4–6 at base + int baseCapRadius = stemSize + 2 + random.nextInt(2); - // Per-position radius jitter table — sampled before the loop for consistency - // Each (dx, dz) slot gets a random ±1.5 bias baked in int jitterRange = baseCapRadius + 4; float[][] jitter = new float[jitterRange * 2 + 1][jitterRange * 2 + 1]; for (float[] row : jitter) { for (int j = 0; j < row.length; j++) { - row[j] = random.nextFloat() * 3.0f - 1.5f; // ±1.5 blocks + row[j] = random.nextFloat() * 1.0f - 0.5f; } } @@ -143,10 +133,9 @@ public class FungalMushroomFeature extends Feature { } } - // Mycelium patches around base - int myceliumCount = isLarge ? (25 + random.nextInt(25)) : (12 + random.nextInt(12)); + int myceliumCount = 12 + random.nextInt(12); for (int i = 0; i < myceliumCount; i++) { - int radius = isLarge ? (stemSize + 8 + random.nextInt(8)) : (stemSize + 3 + random.nextInt(3)); + int radius = stemSize + 3 + random.nextInt(3); int mx = origin.getX() + random.nextInt(radius * 2 + 1) - radius; int mz = origin.getZ() + random.nextInt(radius * 2 + 1) - radius; int my = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, mx, mz) - 1; @@ -159,10 +148,9 @@ public class FungalMushroomFeature extends Feature { } } - // Small mushrooms scattered around - int smallCount = isLarge ? (10 + random.nextInt(15)) : (5 + random.nextInt(8)); + int smallCount = 5 + random.nextInt(8); for (int i = 0; i < smallCount; i++) { - int radius = isLarge ? (stemSize + 10 + random.nextInt(10)) : (stemSize + 4 + random.nextInt(4)); + int radius = stemSize + 4 + random.nextInt(4); int sx = origin.getX() + random.nextInt(radius * 2 + 1) - radius; int sz = origin.getZ() + random.nextInt(radius * 2 + 1) - radius; int sy = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, sx, sz); diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/OuranwoodCocoonTreeFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/OuranwoodCocoonTreeFeature.java index fe086d50..7fca2748 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/OuranwoodCocoonTreeFeature.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/OuranwoodCocoonTreeFeature.java @@ -26,19 +26,16 @@ public class OuranwoodCocoonTreeFeature extends OuranwoodTreeFeature { private void spawnGuaranteedCocoon(WorldGenLevel level, BlockPos origin, OuranwoodTreeConfiguration config, RandomSource random) { if (!(level.getLevel() instanceof ServerLevel serverLevel)) return; - // Pick a branch direction and a Y somewhere in the lower-mid trunk Direction dir = Direction.Plane.HORIZONTAL.getRandomDirection(random); int branchY = 10 + random.nextInt(8); int branchLength = 4 + random.nextInt(3); // 4–6 logs out from the trunk - // Place the branch logs, then re-assert the anchor tip so it's always a log for (int i = 1; i <= branchLength; i++) { BlockPos p = origin.above(branchY).relative(dir, i); setBlock(level, p, config.trunkProvider().getState(random, p)); } BlockPos anchor = origin.above(branchY).relative(dir, branchLength); - // Clear everything below the anchor and spawn the cocooned brutalfly BrutalflyCocoonFeature.clearCocoonVolume(level, anchor); BrutalflyEntity brutalfly = AntarchyObjects.BRUTALFLY.get().create(serverLevel); if (brutalfly == null) return; diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/OuranwoodTreeFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/OuranwoodTreeFeature.java index 98e24455..db2bd8d6 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/OuranwoodTreeFeature.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/OuranwoodTreeFeature.java @@ -553,8 +553,6 @@ public class OuranwoodTreeFeature extends Feature { return; } - // Place the marker block at the first floor position; it will spawn squirrels and - // convert itself to COARSE_DIRT shortly after the chunk loads. // The tick is scheduled here on the WorldGenLevel because onPlace() is never // called during world generation, so the block cannot self-schedule. int squirrelCount = 1 + random.nextInt(3); @@ -824,7 +822,6 @@ public class OuranwoodTreeFeature extends Feature { } } - // Set correct surface type on top soil block (from refreshTerrainSurface) BlockPos topSoilPos = null; for (int y = maxY; y >= minY; y--) { BlockPos pos = new BlockPos(worldX, y, worldZ); diff --git a/common/src/main/java/com/craisinlord/antarchy/mixins/client/SplashManagerMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/client/SplashManagerMixin.java index 83f930db..e812287b 100644 --- a/common/src/main/java/com/craisinlord/antarchy/mixins/client/SplashManagerMixin.java +++ b/common/src/main/java/com/craisinlord/antarchy/mixins/client/SplashManagerMixin.java @@ -13,9 +13,6 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import java.util.List; @Mixin(SplashManager.class) -/* - * Adds Antarchy splash text without replacing vanilla handling. - */ public abstract class SplashManagerMixin { @Shadow @Final @@ -35,5 +32,6 @@ public abstract class SplashManagerMixin { this.splashes.add("Rainbow sugar yummy"); this.splashes.add("Now with inverted gravity!"); this.splashes.add("Everything we need is already here"); + this.splashes.add("Rub some bacon on it!"); } } diff --git a/common/src/main/resources/antarchy-common.mixins.json b/common/src/main/resources/antarchy-common.mixins.json index 6b8422cb..1dea3fec 100644 --- a/common/src/main/resources/antarchy-common.mixins.json +++ b/common/src/main/resources/antarchy-common.mixins.json @@ -1,7 +1,6 @@ { "required": true, "package": "com.craisinlord.antarchy.mixins", - "refmap": "antarchy.refmap.json", "plugin": "com.craisinlord.antarchy.mixins.AntarchyMixinPlugin", "compatibilityLevel": "JAVA_21", "mixins": [ diff --git a/common/src/main/resources/assets/antarchy/animations/bomber.animation.json b/common/src/main/resources/assets/antarchy/animations/bomber.animation.json index 5571a40d..4bd766fb 100644 --- a/common/src/main/resources/assets/antarchy/animations/bomber.animation.json +++ b/common/src/main/resources/assets/antarchy/animations/bomber.animation.json @@ -64,6 +64,11 @@ "walk": { "loop": true, "animation_length": 0.5, + "sound_effects": { + "0.0": { + "effect": "antarchy:bomber_walk|0.9|1.0" + } + }, "bones": { "root": { "rotation": { @@ -313,4 +318,4 @@ } } } -} \ No newline at end of file +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/broodstone.json b/common/src/main/resources/assets/antarchy/blockstates/broodstone.json new file mode 100644 index 00000000..4ae6f1c1 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/broodstone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/broodstone" + } + } +} diff --git a/common/src/main/resources/assets/antarchy/lang/en_us.json b/common/src/main/resources/assets/antarchy/lang/en_us.json index 752948e3..ca6c9f4f 100644 --- a/common/src/main/resources/assets/antarchy/lang/en_us.json +++ b/common/src/main/resources/assets/antarchy/lang/en_us.json @@ -35,6 +35,7 @@ "block.antarchy.infested_coarse_dirt": "Infested Coarse Dirt", "block.antarchy.nyxite": "Nyxite", "block.antarchy.myrmite": "Myrmite", + "block.antarchy.broodstone": "Broodstone", "block.antarchy.polished_nyxite": "Polished Nyxite", "block.antarchy.chiseled_nyxite": "Chiseled Nyxite", "block.antarchy.nyxite_bricks": "Nyxite Bricks", @@ -279,6 +280,7 @@ "item.antarchy.chiten_block": "Chiten Block", "item.antarchy.chiten_spike": "Chiten Spike", "item.antarchy.myrmite": "Myrmite", + "item.antarchy.broodstone": "Broodstone", "item.antarchy.torchflower_bush": "Torchflower Bush", "block.antarchy.torchflower_bush": "Torchflower Bush", "item.antarchy.mud_pie": "Mud Pie", @@ -647,6 +649,9 @@ "subtitles.antarchy.basilisk_hiss": "Basilisk hisses", "subtitles.antarchy.basilisk_hurt": "Basilisk hurts", "subtitles.antarchy.basilisk_death": "Basilisk dies", + "subtitles.antarchy.bomber_walk": "Bomber walks", + "subtitles.antarchy.bomber_knock": "Bomber gets hit", + "subtitles.antarchy.bomber_explode": "Bomber fuse hisses", "item.minecraft.potion.effect.inversion": "Potion of Inversion", "item.minecraft.potion.effect.long_inversion": "Potion of Inversion", "item.minecraft.splash_potion.effect.inversion": "Splash Potion of Inversion", diff --git a/common/src/main/resources/assets/antarchy/models/block/broodstone.json b/common/src/main/resources/assets/antarchy/models/block/broodstone.json new file mode 100644 index 00000000..b282bd92 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/broodstone.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/broodstone/broodstone" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/item/broodstone.json b/common/src/main/resources/assets/antarchy/models/item/broodstone.json new file mode 100644 index 00000000..c212825a --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/broodstone.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/broodstone" +} diff --git a/common/src/main/resources/assets/antarchy/sounds.json b/common/src/main/resources/assets/antarchy/sounds.json index 2881e343..100a1def 100644 --- a/common/src/main/resources/assets/antarchy/sounds.json +++ b/common/src/main/resources/assets/antarchy/sounds.json @@ -418,6 +418,54 @@ } ] }, + "bomber_walk": { + "subtitle": "subtitles.antarchy.bomber_walk", + "sounds": [ + { + "name": "antarchy:mob/bomber/walk1" + }, + { + "name": "antarchy:mob/bomber/walk2" + }, + { + "name": "antarchy:mob/bomber/walk3" + }, + { + "name": "antarchy:mob/bomber/walk4" + } + ] + }, + "bomber_knock": { + "subtitle": "subtitles.antarchy.bomber_knock", + "sounds": [ + { + "name": "antarchy:mob/bomber/knock1" + }, + { + "name": "antarchy:mob/bomber/knock2" + }, + { + "name": "antarchy:mob/bomber/knock3" + }, + { + "name": "antarchy:mob/bomber/knock4" + }, + { + "name": "antarchy:mob/bomber/knock5" + } + ] + }, + "bomber_explode": { + "subtitle": "subtitles.antarchy.bomber_explode", + "sounds": [ + { + "name": "antarchy:mob/bomber/explode1" + }, + { + "name": "antarchy:mob/bomber/explode2" + } + ] + }, "thoraxis_nightmare_wastes_ambient": { "subtitle": "subtitles.antarchy.thoraxis_nightmare_wastes_ambient", "sounds": [ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/bomber/explode1.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/explode1.ogg new file mode 100644 index 00000000..1e9320a8 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/explode1.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/bomber/explode2.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/explode2.ogg new file mode 100644 index 00000000..82fa12a4 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/explode2.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/bomber/knock1.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/knock1.ogg new file mode 100644 index 00000000..4086db9d Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/knock1.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/bomber/knock2.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/knock2.ogg new file mode 100644 index 00000000..dd5fd457 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/knock2.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/bomber/knock3.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/knock3.ogg new file mode 100644 index 00000000..5174c62b Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/knock3.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/bomber/knock4.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/knock4.ogg new file mode 100644 index 00000000..3837027f Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/knock4.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/bomber/knock5.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/knock5.ogg new file mode 100644 index 00000000..39ab66d1 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/knock5.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/bomber/walk1.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/walk1.ogg new file mode 100644 index 00000000..a8dc5b89 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/walk1.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/bomber/walk2.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/walk2.ogg new file mode 100644 index 00000000..81bb99b9 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/walk2.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/bomber/walk3.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/walk3.ogg new file mode 100644 index 00000000..fb114262 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/walk3.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/bomber/walk4.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/walk4.ogg new file mode 100644 index 00000000..31578763 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/walk4.ogg differ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/lurking_terror/lurking_terror_fly_loop.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/lurking_terror/lurking_terror_fly_loop.ogg new file mode 100644 index 00000000..7204c176 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/sounds/mob/lurking_terror/lurking_terror_fly_loop.ogg differ diff --git a/common/src/main/resources/assets/antarchy/textures/item/bile_bucket.png b/common/src/main/resources/assets/antarchy/textures/item/bile_bucket.png new file mode 100644 index 00000000..39f853fb Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/item/bile_bucket.png differ diff --git a/common/src/main/resources/data/antarchy/dimension/cavaryn.json b/common/src/main/resources/data/antarchy/dimension/cavaryn.json index 9d1dacc3..71098217 100644 --- a/common/src/main/resources/data/antarchy/dimension/cavaryn.json +++ b/common/src/main/resources/data/antarchy/dimension/cavaryn.json @@ -4,8 +4,33 @@ "type": "minecraft:noise", "settings": "antarchy:cavaryn", "biome_source": { - "type": "minecraft:fixed", - "biome": "antarchy:cavaryn" + "type": "minecraft:multi_noise", + "biomes": [ + { + "parameters": { + "temperature": [-1.0, 1.0], + "humidity": [-1.0, 1.0], + "continentalness": [-1.0, 1.0], + "erosion": [-1.0, 1.0], + "weirdness": [-1.0, 1.0], + "depth": [-2.0, 0.7], + "offset": 0.0 + }, + "biome": "antarchy:cavaryn" + }, + { + "parameters": { + "temperature": [-1.0, 1.0], + "humidity": [-1.0, 1.0], + "continentalness": [-1.0, 1.0], + "erosion": [-1.0, 1.0], + "weirdness": [-1.0, 1.0], + "depth": [0.7, 2.0], + "offset": 0.0 + }, + "biome": "antarchy:brooding_tunnels" + } + ] } } } diff --git a/common/src/main/resources/data/antarchy/dimension/elythia.json b/common/src/main/resources/data/antarchy/dimension/elythia.json index 77904a56..ccccf713 100644 --- a/common/src/main/resources/data/antarchy/dimension/elythia.json +++ b/common/src/main/resources/data/antarchy/dimension/elythia.json @@ -7,7 +7,8 @@ "type": "antarchy:elythia_biome_source", "moleworm_caves_max_y": 30, "surface_biome_sample_y": 160, - "ocean_max_y": 75, + "ocean_max_y": 67, + "sea_level": 70, "biomes": [ { "biome": "antarchy:moleworm_caves", diff --git a/common/src/main/resources/data/antarchy/dimension_type/cavaryn.json b/common/src/main/resources/data/antarchy/dimension_type/cavaryn.json index 081e44a9..aac92d86 100644 --- a/common/src/main/resources/data/antarchy/dimension_type/cavaryn.json +++ b/common/src/main/resources/data/antarchy/dimension_type/cavaryn.json @@ -9,7 +9,7 @@ "logical_height": 192, "infiniburn": "#minecraft:infiniburn_overworld", "effects": "minecraft:overworld", - "ambient_light": 0.0, + "ambient_light": 0.01, "piglin_safe": false, "has_raids": false, "monster_spawn_light_level": 0, diff --git a/common/src/main/resources/data/antarchy/loot_table/blocks/broodstone.json b/common/src/main/resources/data/antarchy/loot_table/blocks/broodstone.json new file mode 100644 index 00000000..127d6661 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/blocks/broodstone.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:broodstone" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "antarchy:blocks/broodstone" +} diff --git a/common/src/main/resources/data/antarchy/tags/block/amber_moss_replaceable.json b/common/src/main/resources/data/antarchy/tags/block/amber_moss_replaceable.json index 2300979f..7c1185df 100644 --- a/common/src/main/resources/data/antarchy/tags/block/amber_moss_replaceable.json +++ b/common/src/main/resources/data/antarchy/tags/block/amber_moss_replaceable.json @@ -2,6 +2,7 @@ "values": [ "#minecraft:moss_replaceable", "antarchy:myrmite", + "antarchy:broodstone", "antarchy:amber_moss_block" ] } diff --git a/common/src/main/resources/data/antarchy/tags/worldgen/biome/is_cavaryn.json b/common/src/main/resources/data/antarchy/tags/worldgen/biome/is_cavaryn.json new file mode 100644 index 00000000..e9bd598e --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/worldgen/biome/is_cavaryn.json @@ -0,0 +1,6 @@ +{ + "values": [ + "antarchy:cavaryn", + "antarchy:brooding_tunnels" + ] +} diff --git a/common/src/main/resources/data/antarchy/worldgen/biome/brooding_tunnels.json b/common/src/main/resources/data/antarchy/worldgen/biome/brooding_tunnels.json new file mode 100644 index 00000000..3ca4faee --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/biome/brooding_tunnels.json @@ -0,0 +1,79 @@ +{ + "has_precipitation": false, + "temperature": 0.45, + "downfall": 0.0, + "effects": { + "fog_color": 655360, + "water_color": 327680, + "water_fog_color": 0, + "sky_color": 262144, + "grass_color": 2763554, + "foliage_color": 2763554, + "mood_sound": { + "sound": "minecraft:ambient.cave", + "tick_delay": 1200000, + "block_search_extent": 8, + "offset": 2.0 + }, + "particle": { + "probability": 0.003, + "options": { + "type": "antarchy:orange_ash" + } + } + }, + "spawn_costs": {}, + "carvers": { + "air": [], + "liquid": [] + }, + "features": [ + [], + [], + [], + [], + [], + [], + [], + [], + [ + "antarchy:cavaryn_bile_veins", + "antarchy:brooding_tunnels_creepvine", + "antarchy:cavaryn_terror_egg_patch" + ], + [ + "antarchy:cavaryn_bile_cysts" + ] + ], + "creature_spawn_probability": 0.06, + "spawners": { + "monster": [ + { + "type": "antarchy:creeping_horror", + "weight": 95, + "minCount": 2, + "maxCount": 5 + }, + { + "type": "antarchy:lurking_terror", + "weight": 95, + "minCount": 2, + "maxCount": 5 + } + ], + "creature": [ + { + "type": "antarchy:stink_bug", + "weight": 10, + "minCount": 1, + "maxCount": 3 + } + ], + "ambient": [], + "axolotls": [], + "underground_water_creature": [], + "water_creature": [], + "water_ambient": [], + "misc": [] + } +} diff --git a/common/src/main/resources/data/antarchy/worldgen/biome/cavaryn.json b/common/src/main/resources/data/antarchy/worldgen/biome/cavaryn.json index 723be7ad..79a55585 100644 --- a/common/src/main/resources/data/antarchy/worldgen/biome/cavaryn.json +++ b/common/src/main/resources/data/antarchy/worldgen/biome/cavaryn.json @@ -38,13 +38,14 @@ [], [ "antarchy:cavaryn_bile_veins", - "antarchy:cavaryn_bile_cysts", "antarchy:cavaryn_wall_amber_moss", - "antarchy:cavaryn_creepvine", "antarchy:cavaryn_chiten_spikes", - "antarchy:cavaryn_terror_egg_patch" + "antarchy:cavaryn_terror_egg_patch", + "antarchy:cavaryn_creepvine" ], - [] + [ + "antarchy:cavaryn_bile_cysts" + ] ], "creature_spawn_probability": 0.06, "spawners": { diff --git a/common/src/main/resources/data/antarchy/worldgen/biome/elythia_ocean.json b/common/src/main/resources/data/antarchy/worldgen/biome/elythia_ocean.json index 1aa23185..0b9b10c1 100644 --- a/common/src/main/resources/data/antarchy/worldgen/biome/elythia_ocean.json +++ b/common/src/main/resources/data/antarchy/worldgen/biome/elythia_ocean.json @@ -57,7 +57,7 @@ ], [] ], - "creature_spawn_probability": 0.04, + "creature_spawn_probability": 0.15, "spawners": { "monster": [ { "type": "antarchy:missile_squid", "weight": 12, "minCount": 1, "maxCount": 3 }, diff --git a/common/src/main/resources/data/antarchy/worldgen/density_function/elythia_surface.json b/common/src/main/resources/data/antarchy/worldgen/density_function/elythia_surface.json index 41e29735..59016ffd 100644 --- a/common/src/main/resources/data/antarchy/worldgen/density_function/elythia_surface.json +++ b/common/src/main/resources/data/antarchy/worldgen/density_function/elythia_surface.json @@ -6,8 +6,8 @@ "type": "minecraft:y_clamped_gradient", "from_y": -64, "to_y": 220, - "from_value": 2.1, - "to_value": -1.78 + "from_value": 1.75, + "to_value": -2.05 }, "argument2": { "type": "minecraft:add", diff --git a/common/src/main/resources/data/antarchy/worldgen/noise_settings/cavaryn.json b/common/src/main/resources/data/antarchy/worldgen/noise_settings/cavaryn.json index 9fd2adce..22fbb2c6 100644 --- a/common/src/main/resources/data/antarchy/worldgen/noise_settings/cavaryn.json +++ b/common/src/main/resources/data/antarchy/worldgen/noise_settings/cavaryn.json @@ -169,6 +169,19 @@ } } }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": ["antarchy:brooding_tunnels"] + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "antarchy:broodstone" + } + } + }, { "type": "minecraft:condition", "if_true": { diff --git a/common/src/main/resources/data/antarchy/worldgen/noise_settings/elythia.json b/common/src/main/resources/data/antarchy/worldgen/noise_settings/elythia.json index 3c660ef9..b2212c26 100644 --- a/common/src/main/resources/data/antarchy/worldgen/noise_settings/elythia.json +++ b/common/src/main/resources/data/antarchy/worldgen/noise_settings/elythia.json @@ -1,5 +1,5 @@ { - "sea_level": 78, + "sea_level": 70, "disable_mob_generation": false, "aquifers_enabled": true, "ore_veins_enabled": false, diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/brooding_tunnels_creepvine.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/brooding_tunnels_creepvine.json new file mode 100644 index 00000000..61470bd2 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/brooding_tunnels_creepvine.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:cavaryn_creepvine", + "placement": [ + { + "type": "minecraft:count", + "count": 22 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "above_bottom": 12 + }, + "max_inclusive": { + "below_top": 12 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_bile_cysts.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_bile_cysts.json index 4a0cdc9f..ff189ab4 100644 --- a/common/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_bile_cysts.json +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_bile_cysts.json @@ -3,7 +3,7 @@ "placement": [ { "type": "minecraft:count", - "count": 3 + "count": 1 }, { "type": "minecraft:in_square" diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_bile_veins.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_bile_veins.json index ffd3ef6c..b18f9af9 100644 --- a/common/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_bile_veins.json +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_bile_veins.json @@ -3,7 +3,7 @@ "placement": [ { "type": "minecraft:count", - "count": 5 + "count": 2 }, { "type": "minecraft:in_square" diff --git a/common/src/main/resources/data/c/tags/block/stones.json b/common/src/main/resources/data/c/tags/block/stones.json new file mode 100644 index 00000000..3da0bc9b --- /dev/null +++ b/common/src/main/resources/data/c/tags/block/stones.json @@ -0,0 +1,5 @@ +{ + "values": [ + "antarchy:broodstone" + ] +} diff --git a/common/src/main/resources/data/minecraft/tags/block/mineable/pickaxe.json b/common/src/main/resources/data/minecraft/tags/block/mineable/pickaxe.json index 3abcdbf5..9c5a8624 100644 --- a/common/src/main/resources/data/minecraft/tags/block/mineable/pickaxe.json +++ b/common/src/main/resources/data/minecraft/tags/block/mineable/pickaxe.json @@ -37,6 +37,7 @@ "antarchy:nyxite_brick_slab", "antarchy:nyxite_brick_wall", "antarchy:myrmite", + "antarchy:broodstone", "antarchy:bile_vein", "antarchy:chiten_block", "antarchy:chiten_spike", diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabric.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabric.java index c04f7b32..c9223b9d 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabric.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabric.java @@ -39,6 +39,11 @@ public final class AntarchyFabric implements ModInitializer { BloodCrystalShardItem.SYNC_BLOODGLASS = BloodglassManager::syncBloodglass; } + private static final TagKey CAVARYN_BIOMES = TagKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "is_cavaryn") + ); + private static void registerWorldgenFeatures() { BiomeModifications.addFeature( BiomeSelectors.tag(SHELLSTONE_BIOMES), diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java index c28299ce..5519915f 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java @@ -389,6 +389,9 @@ public final class AntarchyFabricContent { public static final DeferredHolder MOLEVORE_HURT = registerSoundEvent("molevore_hurt"); public static final DeferredHolder MOLEVORE_ATTACK = registerSoundEvent("molevore_attack"); public static final DeferredHolder MOLEVORE_DIG = registerSoundEvent("molevore_dig"); + public static final DeferredHolder BOMBER_WALK = registerSoundEvent("bomber_walk"); + public static final DeferredHolder BOMBER_KNOCK = registerSoundEvent("bomber_knock"); + public static final DeferredHolder BOMBER_EXPLODE = registerSoundEvent("bomber_explode"); public static final DeferredHolder DUCT_TAPE_USE = registerSoundEvent("duct_tape_use"); public static final DeferredHolder POTENT_NYXITE_HYPNOTIC_GAS = registerSoundEvent("potent_nyxite_hypnotic_gas"); public static final DeferredHolder POTENT_NYXITE_GEYSER_ERUPTION_START = registerSoundEvent("potent_nyxite_geyser_eruption_start"); @@ -602,6 +605,8 @@ public final class AntarchyFabricContent { )); public static final DeferredBlock MYRMITE = BLOCKS.register("myrmite", () -> new Block(nyxiteProperties())); + public static final DeferredBlock BROODSTONE = BLOCKS.register("broodstone", + () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.DEEPSLATE).requiresCorrectToolForDrops())); public static final DeferredBlock CHITEN_BLOCK = BLOCKS.register("chiten_block", () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.BONE_BLOCK).requiresCorrectToolForDrops())); public static final DeferredBlock UMBRAL_MOSS_BLOCK = BLOCKS.register("umbral_moss_block", @@ -613,7 +618,7 @@ public final class AntarchyFabricContent { public static final DeferredBlock AMBER_MOSS_CARPET = BLOCKS.register("amber_moss_carpet", () -> new UmbralMossCarpetBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_CARPET).noOcclusion())); public static final DeferredBlock AMBER_LICHEN = BLOCKS.register("amber_lichen", - () -> new GlowLichenBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.GLOW_LICHEN).lightLevel(state -> 1))); + () -> new GlowLichenBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.GLOW_LICHEN).lightLevel(state -> 4))); public static final DeferredBlock BILE_VEIN = BLOCKS.register("bile_vein", () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.NETHERRACK))); public static final DeferredBlock CREEPVINE = BLOCKS.register("creepvine", @@ -1192,6 +1197,7 @@ public final class AntarchyFabricContent { public static final DeferredItem INFESTED_COARSE_DIRT_ITEM = ITEMS.registerSimpleBlockItem(INFESTED_COARSE_DIRT); public static final DeferredItem NYXITE_ITEM = ITEMS.registerSimpleBlockItem(NYXITE); public static final DeferredItem MYRMITE_ITEM = ITEMS.registerSimpleBlockItem(MYRMITE); + public static final DeferredItem BROODSTONE_ITEM = ITEMS.registerSimpleBlockItem(BROODSTONE); public static final DeferredItem POLISHED_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(POLISHED_NYXITE); public static final DeferredItem CHISELED_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(CHISELED_NYXITE); public static final DeferredItem NYXITE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(NYXITE_BRICKS); @@ -1686,7 +1692,7 @@ public final class AntarchyFabricContent { public static final DeferredItem RAINBOW_ANT_SPAWN_EGG = ITEMS.register("rainbow_ant_spawn_egg", () -> new DeferredSpawnEggItem(RAINBOW_ANT, 0x56D4F0, 0xF66DBB, new Item.Properties())); public static final DeferredItem TERMITE_SPAWN_EGG = ITEMS.register("termite_spawn_egg", - () -> new DeferredSpawnEggItem(TERMITE, 0xE8DFC0, 0x5C3C1A, new Item.Properties())); + () -> new DeferredSpawnEggItem(TERMITE, 0xD4B96A, 0xFF6B1A, new Item.Properties())); public static final DeferredItem MOLEWORM_SPAWN_EGG = ITEMS.register("moleworm_spawn_egg", () -> new DeferredSpawnEggItem(MOLEWORM, 0x7A6150, 0xD2B8A3, new Item.Properties())); public static final DeferredItem MANTIS_SPAWN_EGG = ITEMS.register("mantis_spawn_egg", @@ -1994,7 +2000,7 @@ public final class AntarchyFabricContent { case "blood_crystal_block", "budding_blood_crystal", "small_blood_crystal_bud", "medium_blood_crystal_bud", "large_blood_crystal_bud", "blood_crystal_cluster" -> 7; - case "myrmite", "chiten_block", "chiten_spike", "amber_moss_block", "amber_moss_carpet" -> 8; + case "myrmite", "broodstone", "chiten_block", "chiten_spike", "amber_moss_block", "amber_moss_carpet" -> 8; case "uranium_ore", "deepslate_uranium_ore", "titanium_ore", "deepslate_titanium_ore", "uranium_block", "titanium_block", "raw_uranium_block", "raw_titanium_block", "cut_uranium", "cut_titanium", "cut_uranium_slab", "cut_titanium_slab", @@ -2411,6 +2417,9 @@ public final class AntarchyFabricContent { MOLEVORE_HURT, MOLEVORE_ATTACK, MOLEVORE_DIG, + BOMBER_WALK, + BOMBER_KNOCK, + BOMBER_EXPLODE, DUCT_TAPE_USE ); diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/AntiwaterFogMixin.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/AntiwaterFogMixin.java index a9b355b7..06585ef6 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/AntiwaterFogMixin.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/AntiwaterFogMixin.java @@ -1,6 +1,6 @@ package com.craisinlord.antarchy.fabric.mixin.client; -import com.craisinlord.antarchy.content.block.PotentNyxiteBlock; +import com.craisinlord.antarchy.content.fluid.BileLiquidBlock; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.shaders.FogShape; import net.minecraft.client.Camera; @@ -16,34 +16,34 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(FogRenderer.class) public abstract class AntiwaterFogMixin { -// @Inject(method = "setupColor", at = @At("TAIL")) -// private static void antarchy$overrideAntiwaterColor(Camera camera, float partialTick, ClientLevel level, int renderDistance, float darkenWorldAmount, CallbackInfo ci) { -// if (!antarchy$isInAntiwater(camera)) { -// return; -// } -// -// RenderSystem.clearColor(0.52F, 0.06F, 0.06F, 0.0F); -// } -// -// @Inject(method = "setupFog", at = @At("TAIL")) -// private static void antarchy$overrideAntiwaterFog(Camera camera, FogRenderer.FogMode mode, float renderDistance, boolean thickFog, float partialTick, CallbackInfo ci) { -// if (!antarchy$isInAntiwater(camera)) { -// return; -// } -// -// RenderSystem.setShaderFogStart(0.5F); -// RenderSystem.setShaderFogEnd(Math.min(renderDistance, 12.0F)); -// RenderSystem.setShaderFogShape(FogShape.CYLINDER); -// } -// -// private static boolean antarchy$isInAntiwater(Camera camera) { -// Entity entity = camera.getEntity(); -// if (entity == null || entity.level() == null) { -// return false; -// } -// -// BlockPos pos = BlockPos.containing(camera.getPosition()); -// FluidState fluidState = entity.level().getFluidState(pos); -// return PotentNyxiteBlock.isAntiwater(fluidState); -// } + @Inject(method = "setupColor", at = @At("TAIL")) + private static void antarchy$overrideBileColor(Camera camera, float partialTick, ClientLevel level, int renderDistance, float darkenWorldAmount, CallbackInfo ci) { + if (!antarchy$isInBile(camera)) { + return; + } + + RenderSystem.clearColor(0.38F, 0.42F, 0.10F, 0.0F); + } + + @Inject(method = "setupFog", at = @At("TAIL")) + private static void antarchy$overrideBileFog(Camera camera, FogRenderer.FogMode mode, float renderDistance, boolean thickFog, float partialTick, CallbackInfo ci) { + if (!antarchy$isInBile(camera)) { + return; + } + + RenderSystem.setShaderFogStart(0.25F); + RenderSystem.setShaderFogEnd(Math.min(renderDistance, 4.0F)); + RenderSystem.setShaderFogShape(FogShape.CYLINDER); + } + + private static boolean antarchy$isInBile(Camera camera) { + Entity entity = camera.getEntity(); + if (entity == null || entity.level() == null) { + return false; + } + + BlockPos pos = BlockPos.containing(camera.getPosition()); + FluidState fluidState = entity.level().getFluidState(pos); + return BileLiquidBlock.isBile(fluidState); + } } diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java index 4af30751..a870ec80 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java @@ -134,6 +134,9 @@ public class AntarchyNeoforge { AntarchyNeoforgeSounds.MOLEVORE_HURT, AntarchyNeoforgeSounds.MOLEVORE_ATTACK, AntarchyNeoforgeSounds.MOLEVORE_DIG, + AntarchyNeoforgeSounds.BOMBER_WALK, + AntarchyNeoforgeSounds.BOMBER_KNOCK, + AntarchyNeoforgeSounds.BOMBER_EXPLODE, AntarchyNeoforgeSounds.DUCT_TAPE_USE ); bindCommonObjects(); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java index f6fda2b9..5b85ef4c 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java @@ -318,6 +318,18 @@ public final class AntarchyNeoForgeClient { public int getTintColor(FluidState state, BlockAndTintGetter getter, net.minecraft.core.BlockPos pos) { return 0xFFFFFFFF; } + + @Override + public Vector3f modifyFogColor(Camera camera, float partialTick, ClientLevel level, int renderDistance, float darkenWorldAmount, Vector3f fluidFogColor) { + return new Vector3f(0.38F, 0.42F, 0.10F); + } + + @Override + public void modifyFogRender(Camera camera, net.minecraft.client.renderer.FogRenderer.FogMode mode, float renderDistance, float partialTick, float nearDistance, float farDistance, FogShape shape) { + RenderSystem.setShaderFogStart(0.25F); + RenderSystem.setShaderFogEnd(Math.min(farDistance, 4.0F)); + RenderSystem.setShaderFogShape(FogShape.CYLINDER); + } }, AntarchyNeoForgeFluidTypes.BILE_TYPE.get()); event.registerFluidType(new IClientFluidTypeExtensions() { diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/MogglesClientRenderer.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/MogglesClientRenderer.java index 6bbb1544..8ec82108 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/MogglesClientRenderer.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/MogglesClientRenderer.java @@ -46,7 +46,6 @@ public final class MogglesClientRenderer { Vec3 dir = end.subtract(eye).normalize(); - // Place up to 5 particles spaced evenly between 1.5 m ahead and the target. int steps = Math.min(5, (int) (totalDist / 1.5)); double spacing = (totalDist - 1.5) / Math.max(steps, 1); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java index 22abf3e2..56b0feb1 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java @@ -183,6 +183,8 @@ public final class AntarchyNeoforgeBlocks { )); public static final DeferredBlock MYRMITE = BLOCKS.register("myrmite", () -> new Block(nyxiteProperties())); + public static final DeferredBlock BROODSTONE = BLOCKS.register("broodstone", + () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.DEEPSLATE).requiresCorrectToolForDrops())); public static final DeferredBlock CHITEN_BLOCK = BLOCKS.register("chiten_block", () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.BONE_BLOCK).requiresCorrectToolForDrops())); public static final DeferredBlock UMBRAL_MOSS_BLOCK = BLOCKS.register("umbral_moss_block", @@ -194,7 +196,7 @@ public final class AntarchyNeoforgeBlocks { public static final DeferredBlock AMBER_MOSS_CARPET = BLOCKS.register("amber_moss_carpet", () -> new UmbralMossCarpetBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_CARPET).noOcclusion())); public static final DeferredBlock AMBER_LICHEN = BLOCKS.register("amber_lichen", - () -> new GlowLichenBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.GLOW_LICHEN).lightLevel(state -> 1))); + () -> new GlowLichenBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.GLOW_LICHEN).lightLevel(state -> 4))); public static final DeferredBlock BILE_VEIN = BLOCKS.register("bile_vein", () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.NETHERRACK))); public static final DeferredBlock CREEPVINE = BLOCKS.register("creepvine", diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java index 249350ac..d51007f4 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java @@ -245,6 +245,7 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.MEDIUM_BLOOD_CRYSTAL_BUD_ITEM.get()); event.accept(AntarchyNeoforgeItems.LARGE_BLOOD_CRYSTAL_BUD_ITEM.get()); event.accept(AntarchyNeoforgeItems.MYRMITE_ITEM.get()); + event.accept(AntarchyNeoforgeItems.BROODSTONE_ITEM.get()); event.accept(AntarchyNeoforgeItems.BILE_VEIN_ITEM.get()); event.accept(AntarchyNeoforgeItems.CHITEN_BLOCK_ITEM.get()); event.accept(AntarchyNeoforgeItems.CHITEN_SPIKE_ITEM.get()); @@ -380,7 +381,7 @@ public class AntarchyNeoforgeCreativeModeTabs { // 8 - Blood crystal blocks (not the shard ingredient) case "blood_crystal_block", "small_blood_crystal_bud", "medium_blood_crystal_bud", "large_blood_crystal_bud", "budding_blood_crystal", "blood_crystal_cluster", - "myrmite", "chiten_block", "amber_moss_block", "amber_moss_carpet" -> 8; + "myrmite", "broodstone", "chiten_block", "amber_moss_block", "amber_moss_carpet" -> 8; // 9 - Ouranwood leaves case "ouranwood_leaves" -> 9; diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java index efa03b38..099e6c02 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java @@ -230,6 +230,7 @@ public final class AntarchyNeoforgeItems { public static final DeferredItem INFESTED_COARSE_DIRT_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.INFESTED_COARSE_DIRT); public static final DeferredItem NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.NYXITE); public static final DeferredItem MYRMITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.MYRMITE); + public static final DeferredItem BROODSTONE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.BROODSTONE); public static final DeferredItem POLISHED_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.POLISHED_NYXITE); public static final DeferredItem CHISELED_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CHISELED_NYXITE); public static final DeferredItem NYXITE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.NYXITE_BRICKS); @@ -507,7 +508,7 @@ public final class AntarchyNeoforgeItems { public static final DeferredItem RAINBOW_ANT_SPAWN_EGG = ITEMS.register("rainbow_ant_spawn_egg", () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.RAINBOW_ANT, 0x56D4F0, 0xF66DBB, new Item.Properties())); public static final DeferredItem TERMITE_SPAWN_EGG = ITEMS.register("termite_spawn_egg", - () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.TERMITE, 0xE8DFC0, 0x5C3C1A, new Item.Properties())); + () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.TERMITE, 0xD4B96A, 0xFF6B1A, new Item.Properties())); public static final DeferredItem MOLEWORM_SPAWN_EGG = ITEMS.register("moleworm_spawn_egg", () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.MOLEWORM, 0x7A6150, 0xD2B8A3, new Item.Properties())); public static final DeferredItem MANTIS_SPAWN_EGG = ITEMS.register("mantis_spawn_egg", diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSounds.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSounds.java index fa8bc34f..9cb636a3 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSounds.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSounds.java @@ -121,6 +121,9 @@ public final class AntarchyNeoforgeSounds { public static final DeferredHolder MOLEVORE_HURT = registerSoundEvent("molevore_hurt"); public static final DeferredHolder MOLEVORE_ATTACK = registerSoundEvent("molevore_attack"); public static final DeferredHolder MOLEVORE_DIG = registerSoundEvent("molevore_dig"); + public static final DeferredHolder BOMBER_WALK = registerSoundEvent("bomber_walk"); + public static final DeferredHolder BOMBER_KNOCK = registerSoundEvent("bomber_knock"); + public static final DeferredHolder BOMBER_EXPLODE = registerSoundEvent("bomber_explode"); public static final DeferredHolder DUCT_TAPE_USE = registerSoundEvent("duct_tape_use"); public static final DeferredHolder POTENT_NYXITE_HYPNOTIC_GAS = registerSoundEvent("potent_nyxite_hypnotic_gas"); public static final DeferredHolder POTENT_NYXITE_GEYSER_ERUPTION_START = registerSoundEvent("potent_nyxite_geyser_eruption_start"); diff --git a/neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/remove_glow_lichen_from_cavaryn.json b/neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/remove_glow_lichen_from_cavaryn.json new file mode 100644 index 00000000..206947e6 --- /dev/null +++ b/neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/remove_glow_lichen_from_cavaryn.json @@ -0,0 +1,8 @@ +{ + "type": "neoforge:remove_features", + "biomes": "#antarchy:is_cavaryn", + "features": [ + "minecraft:glow_lichen" + ], + "step": "vegetal_decoration" +}