BOMBER sounds, cavaryn tweaks, other random bs
This commit is contained in:
1 parent
aad8a1e1c5
commit
ca77d1b480
65 files changed
+471
-170
No files matched your search
@@ -31,7 +31,7 @@ public final class AntarchySettings {
|
|||||||
private static double waspHealth = 16.0D;
|
private static double waspHealth = 16.0D;
|
||||||
private static double waspAttackDamage = 4.0D;
|
private static double waspAttackDamage = 4.0D;
|
||||||
private static double waspMovementSpeed = 0.39D;
|
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 bomberAttackDamage = 4.0D;
|
||||||
private static double bomberExplosionDamage = 8.0D;
|
private static double bomberExplosionDamage = 8.0D;
|
||||||
private static double bomberExplosionRadius = 4.0D;
|
private static double bomberExplosionRadius = 4.0D;
|
||||||
|
|||||||
@@ -119,6 +119,9 @@ public final class AntarchySoundEvents {
|
|||||||
public static Supplier<SoundEvent> MOLEVORE_HURT = (Supplier<SoundEvent>) UNBOUND;
|
public static Supplier<SoundEvent> MOLEVORE_HURT = (Supplier<SoundEvent>) UNBOUND;
|
||||||
public static Supplier<SoundEvent> MOLEVORE_ATTACK = (Supplier<SoundEvent>) UNBOUND;
|
public static Supplier<SoundEvent> MOLEVORE_ATTACK = (Supplier<SoundEvent>) UNBOUND;
|
||||||
public static Supplier<SoundEvent> MOLEVORE_DIG = (Supplier<SoundEvent>) UNBOUND;
|
public static Supplier<SoundEvent> MOLEVORE_DIG = (Supplier<SoundEvent>) UNBOUND;
|
||||||
|
public static Supplier<SoundEvent> BOMBER_WALK = (Supplier<SoundEvent>) UNBOUND;
|
||||||
|
public static Supplier<SoundEvent> BOMBER_KNOCK = (Supplier<SoundEvent>) UNBOUND;
|
||||||
|
public static Supplier<SoundEvent> BOMBER_EXPLODE = (Supplier<SoundEvent>) UNBOUND;
|
||||||
public static Supplier<SoundEvent> DUCT_TAPE_USE = (Supplier<SoundEvent>) UNBOUND;
|
public static Supplier<SoundEvent> DUCT_TAPE_USE = (Supplier<SoundEvent>) UNBOUND;
|
||||||
|
|
||||||
private AntarchySoundEvents() {
|
private AntarchySoundEvents() {
|
||||||
@@ -235,6 +238,9 @@ public final class AntarchySoundEvents {
|
|||||||
Supplier<SoundEvent> molevoreHurt,
|
Supplier<SoundEvent> molevoreHurt,
|
||||||
Supplier<SoundEvent> molevoreAttack,
|
Supplier<SoundEvent> molevoreAttack,
|
||||||
Supplier<SoundEvent> molevoreDig,
|
Supplier<SoundEvent> molevoreDig,
|
||||||
|
Supplier<SoundEvent> bomberWalk,
|
||||||
|
Supplier<SoundEvent> bomberKnock,
|
||||||
|
Supplier<SoundEvent> bomberExplode,
|
||||||
Supplier<SoundEvent> ductTapeUse
|
Supplier<SoundEvent> ductTapeUse
|
||||||
) {
|
) {
|
||||||
SQUIDZOOKA_FIRE = squidzookaFire;
|
SQUIDZOOKA_FIRE = squidzookaFire;
|
||||||
@@ -347,6 +353,9 @@ public final class AntarchySoundEvents {
|
|||||||
MOLEVORE_HURT = molevoreHurt;
|
MOLEVORE_HURT = molevoreHurt;
|
||||||
MOLEVORE_ATTACK = molevoreAttack;
|
MOLEVORE_ATTACK = molevoreAttack;
|
||||||
MOLEVORE_DIG = molevoreDig;
|
MOLEVORE_DIG = molevoreDig;
|
||||||
|
BOMBER_WALK = bomberWalk;
|
||||||
|
BOMBER_KNOCK = bomberKnock;
|
||||||
|
BOMBER_EXPLODE = bomberExplode;
|
||||||
DUCT_TAPE_USE = ductTapeUse;
|
DUCT_TAPE_USE = ductTapeUse;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
-1
@@ -24,7 +24,6 @@ public class UpwardFallingBlockRenderer extends EntityRenderer<UpwardFallingBloc
|
|||||||
if (blockState.isAir()) return;
|
if (blockState.isAir()) return;
|
||||||
|
|
||||||
poseStack.pushPose();
|
poseStack.pushPose();
|
||||||
// Center the block model on the entity origin
|
|
||||||
poseStack.translate(-0.5, 0.0, -0.5);
|
poseStack.translate(-0.5, 0.0, -0.5);
|
||||||
Minecraft.getInstance().getBlockRenderer().renderSingleBlock(
|
Minecraft.getInstance().getBlockRenderer().renderSingleBlock(
|
||||||
blockState, poseStack, bufferSource, light, OverlayTexture.NO_OVERLAY
|
blockState, poseStack, bufferSource, light, OverlayTexture.NO_OVERLAY
|
||||||
|
|||||||
@@ -1,14 +1,20 @@
|
|||||||
package com.craisinlord.antarchy.content.entity;
|
package com.craisinlord.antarchy.content.entity;
|
||||||
|
|
||||||
import com.craisinlord.antarchy.config.AntarchySettings;
|
import com.craisinlord.antarchy.config.AntarchySettings;
|
||||||
|
import com.craisinlord.antarchy.content.AntarchySoundEvents;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
|
import net.minecraft.core.particles.ParticleTypes;
|
||||||
|
import net.minecraft.core.registries.BuiltInRegistries;
|
||||||
import net.minecraft.tags.DamageTypeTags;
|
import net.minecraft.tags.DamageTypeTags;
|
||||||
import net.minecraft.network.syncher.EntityDataAccessor;
|
import net.minecraft.network.syncher.EntityDataAccessor;
|
||||||
import net.minecraft.network.syncher.EntityDataSerializers;
|
import net.minecraft.network.syncher.EntityDataSerializers;
|
||||||
import net.minecraft.network.syncher.SynchedEntityData;
|
import net.minecraft.network.syncher.SynchedEntityData;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.server.level.ServerLevel;
|
import net.minecraft.server.level.ServerLevel;
|
||||||
|
import net.minecraft.sounds.SoundEvent;
|
||||||
import net.minecraft.sounds.SoundEvents;
|
import net.minecraft.sounds.SoundEvents;
|
||||||
|
import net.minecraft.sounds.SoundSource;
|
||||||
import net.minecraft.util.RandomSource;
|
import net.minecraft.util.RandomSource;
|
||||||
import net.minecraft.world.Difficulty;
|
import net.minecraft.world.Difficulty;
|
||||||
import net.minecraft.world.DifficultyInstance;
|
import net.minecraft.world.DifficultyInstance;
|
||||||
@@ -48,15 +54,17 @@ import software.bernie.geckolib.animation.AnimationController;
|
|||||||
import software.bernie.geckolib.animation.AnimationState;
|
import software.bernie.geckolib.animation.AnimationState;
|
||||||
import software.bernie.geckolib.animation.PlayState;
|
import software.bernie.geckolib.animation.PlayState;
|
||||||
import software.bernie.geckolib.animation.RawAnimation;
|
import software.bernie.geckolib.animation.RawAnimation;
|
||||||
|
import software.bernie.geckolib.animation.keyframe.event.builtin.AutoPlayingSoundKeyframeHandler;
|
||||||
import software.bernie.geckolib.util.GeckoLibUtil;
|
import software.bernie.geckolib.util.GeckoLibUtil;
|
||||||
|
|
||||||
public class BomberEntity extends Monster implements GeoEntity {
|
public class BomberEntity extends Monster implements GeoEntity {
|
||||||
|
private static final ResourceLocation INTENTIONALLY_EMPTY_SOUND_ID = ResourceLocation.withDefaultNamespace("intentionally_empty");
|
||||||
private static final EntityDataAccessor<Integer> FUSE_TICKS_DATA =
|
private static final EntityDataAccessor<Integer> FUSE_TICKS_DATA =
|
||||||
SynchedEntityData.defineId(BomberEntity.class, EntityDataSerializers.INT);
|
SynchedEntityData.defineId(BomberEntity.class, EntityDataSerializers.INT);
|
||||||
private static final EntityDataAccessor<Boolean> DETONATING_DATA =
|
private static final EntityDataAccessor<Boolean> DETONATING_DATA =
|
||||||
SynchedEntityData.defineId(BomberEntity.class, EntityDataSerializers.BOOLEAN);
|
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 EXPLODE_ANIM_START_TICKS = 25;
|
||||||
private static final int FLASH_INTERVAL_TICKS = 5;
|
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);
|
Objects.requireNonNull(this.getAttribute(Attributes.MAX_HEALTH)).setBaseValue(maxHealth);
|
||||||
this.setHealth((float) maxHealth);
|
this.setHealth((float) maxHealth);
|
||||||
Objects.requireNonNull(this.getAttribute(Attributes.ATTACK_DAMAGE)).setBaseValue(attackDamage);
|
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
|
@Override
|
||||||
@@ -135,16 +145,6 @@ public class BomberEntity extends Monster implements GeoEntity {
|
|||||||
public boolean hurt(DamageSource source, float amount) {
|
public boolean hurt(DamageSource source, float amount) {
|
||||||
if (source.is(DamageTypeTags.IS_FIRE) || source.is(DamageTypeTags.IS_EXPLOSION)) {
|
if (source.is(DamageTypeTags.IS_FIRE) || source.is(DamageTypeTags.IS_EXPLOSION)) {
|
||||||
this.primeFuse();
|
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();
|
Entity directEntity = source.getDirectEntity();
|
||||||
@@ -155,6 +155,11 @@ public class BomberEntity extends Monster implements GeoEntity {
|
|||||||
return super.hurt(source, amount);
|
return super.hurt(source, amount);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected SoundEvent getHurtSound(DamageSource damageSource) {
|
||||||
|
return AntarchySoundEvents.BOMBER_KNOCK.get();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InteractionResult mobInteract(Player player, InteractionHand hand) {
|
public InteractionResult mobInteract(Player player, InteractionHand hand) {
|
||||||
ItemStack stack = player.getItemInHand(hand);
|
ItemStack stack = player.getItemInHand(hand);
|
||||||
@@ -185,7 +190,10 @@ public class BomberEntity extends Monster implements GeoEntity {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void registerControllers(AnimatableManager.ControllerRegistrar controllers) {
|
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
|
@Override
|
||||||
@@ -198,10 +206,6 @@ public class BomberEntity extends Monster implements GeoEntity {
|
|||||||
super.tick();
|
super.tick();
|
||||||
|
|
||||||
if (!this.level().isClientSide && this.detonating) {
|
if (!this.level().isClientSide && this.detonating) {
|
||||||
this.getNavigation().stop();
|
|
||||||
this.setDeltaMovement(0.0D, 0.0D, 0.0D);
|
|
||||||
this.hasImpulse = false;
|
|
||||||
|
|
||||||
if (this.fuseTicks > 0) {
|
if (this.fuseTicks > 0) {
|
||||||
this.fuseTicks--;
|
this.fuseTicks--;
|
||||||
this.entityData.set(FUSE_TICKS_DATA, 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;
|
&& (this.getFuseTicks() / FLASH_INTERVAL_TICKS) % 2 == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
private PlayState mainAnimController(AnimationState<BomberEntity> state) {
|
private PlayState movementAnimController(AnimationState<BomberEntity> 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<BomberEntity> state) {
|
||||||
if (this.isDetonating() && this.getFuseTicks() <= EXPLODE_ANIM_START_TICKS) {
|
if (this.isDetonating() && this.getFuseTicks() <= EXPLODE_ANIM_START_TICKS) {
|
||||||
return state.setAndContinue(EXPLODE_ANIM);
|
return state.setAndContinue(EXPLODE_ANIM);
|
||||||
}
|
}
|
||||||
|
|
||||||
return state.setAndContinue(state.isMoving() ? WALK_ANIM : IDLE_ANIM);
|
return PlayState.STOP;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void primeFuse() {
|
private void primeFuse() {
|
||||||
@@ -244,10 +256,7 @@ public class BomberEntity extends Monster implements GeoEntity {
|
|||||||
this.fuseTicks = DEFAULT_FUSE_TICKS;
|
this.fuseTicks = DEFAULT_FUSE_TICKS;
|
||||||
this.entityData.set(DETONATING_DATA, true);
|
this.entityData.set(DETONATING_DATA, true);
|
||||||
this.entityData.set(FUSE_TICKS_DATA, this.fuseTicks);
|
this.entityData.set(FUSE_TICKS_DATA, this.fuseTicks);
|
||||||
this.getNavigation().stop();
|
this.playSound(AntarchySoundEvents.BOMBER_EXPLODE.get(), 1.0F, 1.0F);
|
||||||
this.setDeltaMovement(Vec3.ZERO);
|
|
||||||
this.hasImpulse = false;
|
|
||||||
this.playSound(SoundEvents.TNT_PRIMED, 1.0F, 0.9F + this.random.nextFloat() * 0.2F);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void detonate() {
|
private void detonate() {
|
||||||
@@ -260,7 +269,21 @@ public class BomberEntity extends Monster implements GeoEntity {
|
|||||||
double y = this.getY(0.0625D);
|
double y = this.getY(0.0625D);
|
||||||
double z = this.getZ();
|
double z = this.getZ();
|
||||||
float radius = (float) AntarchySettings.bomberExplosionRadius();
|
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();
|
double extraDamage = AntarchySettings.bomberExplosionDamage();
|
||||||
if (extraDamage > 0.0D) {
|
if (extraDamage > 0.0D) {
|
||||||
@@ -283,6 +306,10 @@ public class BomberEntity extends Monster implements GeoEntity {
|
|||||||
this.discard();
|
this.discard();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean isMovingForAnimation() {
|
||||||
|
return this.getDeltaMovement().horizontalDistanceSqr() > 1.0E-4D || this.getNavigation().isInProgress();
|
||||||
|
}
|
||||||
|
|
||||||
private final class BomberAttackGoal extends MeleeAttackGoal {
|
private final class BomberAttackGoal extends MeleeAttackGoal {
|
||||||
private BomberAttackGoal() {
|
private BomberAttackGoal() {
|
||||||
super(BomberEntity.this, 1.1D, true);
|
super(BomberEntity.this, 1.1D, true);
|
||||||
@@ -290,12 +317,12 @@ public class BomberEntity extends Monster implements GeoEntity {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canUse() {
|
public boolean canUse() {
|
||||||
return !BomberEntity.this.detonating && super.canUse();
|
return super.canUse();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canContinueToUse() {
|
public boolean canContinueToUse() {
|
||||||
return !BomberEntity.this.detonating && super.canContinueToUse();
|
return super.canContinueToUse();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+13
-2
@@ -1,5 +1,6 @@
|
|||||||
package com.craisinlord.antarchy.content.entity.ant;
|
package com.craisinlord.antarchy.content.entity.ant;
|
||||||
|
|
||||||
|
import com.craisinlord.antarchy.config.AntarchySettings;
|
||||||
import java.util.LinkedHashSet;
|
import java.util.LinkedHashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import net.minecraft.core.BlockPos;
|
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.item.ItemStack;
|
||||||
import net.minecraft.world.level.ChunkPos;
|
import net.minecraft.world.level.ChunkPos;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
|
import net.minecraft.world.level.block.Blocks;
|
||||||
import net.minecraft.world.level.levelgen.Heightmap;
|
import net.minecraft.world.level.levelgen.Heightmap;
|
||||||
import net.minecraft.world.phys.Vec3;
|
import net.minecraft.world.phys.Vec3;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
@@ -161,17 +163,26 @@ public final class AntTeleportHelper {
|
|||||||
@Nullable
|
@Nullable
|
||||||
private static Vec3 tryFindSafeDismount(ServerPlayer player, ServerLevel destination, BlockPos candidate) {
|
private static Vec3 tryFindSafeDismount(ServerPlayer player, ServerLevel destination, BlockPos candidate) {
|
||||||
Vec3 safePos = DismountHelper.findSafeDismountLocation(player.getType(), destination, candidate, true);
|
Vec3 safePos = DismountHelper.findSafeDismountLocation(player.getType(), destination, candidate, true);
|
||||||
if (safePos != null) {
|
if (safePos != null && isValidArrivalPosition(destination, safePos)) {
|
||||||
return safePos;
|
return safePos;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Direction direction : Direction.Plane.HORIZONTAL) {
|
for (Direction direction : Direction.Plane.HORIZONTAL) {
|
||||||
safePos = DismountHelper.findSafeDismountLocation(player.getType(), destination, candidate.relative(direction), true);
|
safePos = DismountHelper.findSafeDismountLocation(player.getType(), destination, candidate.relative(direction), true);
|
||||||
if (safePos != null) {
|
if (safePos != null && isValidArrivalPosition(destination, safePos)) {
|
||||||
return safePos;
|
return safePos;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,10 @@
|
|||||||
package com.craisinlord.antarchy.content.fluid;
|
package com.craisinlord.antarchy.content.fluid;
|
||||||
|
|
||||||
|
import com.craisinlord.antarchy.Antarchy;
|
||||||
import com.craisinlord.antarchy.content.AntarchyObjects;
|
import com.craisinlord.antarchy.content.AntarchyObjects;
|
||||||
import net.minecraft.core.BlockPos;
|
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.MobEffectInstance;
|
||||||
import net.minecraft.world.effect.MobEffects;
|
import net.minecraft.world.effect.MobEffects;
|
||||||
import net.minecraft.world.entity.Entity;
|
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.LiquidBlock;
|
||||||
import net.minecraft.world.level.block.state.BlockBehaviour;
|
import net.minecraft.world.level.block.state.BlockBehaviour;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
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.level.material.FlowingFluid;
|
||||||
import net.minecraft.world.phys.Vec3;
|
|
||||||
|
|
||||||
public class BileLiquidBlock extends LiquidBlock {
|
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 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) {
|
public BileLiquidBlock(FlowingFluid fluid, BlockBehaviour.Properties properties) {
|
||||||
super(fluid, properties);
|
super(fluid, properties);
|
||||||
@@ -36,7 +40,10 @@ public class BileLiquidBlock extends LiquidBlock {
|
|||||||
return;
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+4
-20
@@ -14,7 +14,6 @@ import net.minecraft.util.RandomSource;
|
|||||||
import net.minecraft.world.level.WorldGenLevel;
|
import net.minecraft.world.level.WorldGenLevel;
|
||||||
import net.minecraft.world.level.block.Block;
|
import net.minecraft.world.level.block.Block;
|
||||||
import net.minecraft.world.level.block.Blocks;
|
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.block.state.BlockState;
|
||||||
import net.minecraft.world.level.levelgen.feature.Feature;
|
import net.minecraft.world.level.levelgen.feature.Feature;
|
||||||
import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext;
|
import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext;
|
||||||
@@ -27,8 +26,7 @@ public final class CavarynBileCystFeature extends Feature<NoneFeatureConfigurati
|
|||||||
private static final int SEARCH_RADIUS = 8;
|
private static final int SEARCH_RADIUS = 8;
|
||||||
private static final int SEARCH_ATTEMPTS = 20;
|
private static final int SEARCH_ATTEMPTS = 20;
|
||||||
private static final int VERTICAL_SCAN = 10;
|
private static final int VERTICAL_SCAN = 10;
|
||||||
// Chance that each exposed vein face oozes bile liquid outward into the cave
|
private static final float OOZE_CHANCE = 0.02f;
|
||||||
private static final float OOZE_CHANCE = 0.22f;
|
|
||||||
|
|
||||||
public CavarynBileCystFeature(Codec<NoneFeatureConfiguration> codec) {
|
public CavarynBileCystFeature(Codec<NoneFeatureConfiguration> codec) {
|
||||||
super(codec);
|
super(codec);
|
||||||
@@ -38,7 +36,7 @@ public final class CavarynBileCystFeature extends Feature<NoneFeatureConfigurati
|
|||||||
public boolean place(FeaturePlaceContext<NoneFeatureConfiguration> context) {
|
public boolean place(FeaturePlaceContext<NoneFeatureConfiguration> context) {
|
||||||
Block bileVeinBlock = getBlock(BILE_VEIN_ID);
|
Block bileVeinBlock = getBlock(BILE_VEIN_ID);
|
||||||
Block bileBlock = getBlock(BILE_ID);
|
Block bileBlock = getBlock(BILE_ID);
|
||||||
if (bileVeinBlock == null || !(bileBlock instanceof LiquidBlock)) {
|
if (bileVeinBlock == null || bileBlock == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -53,8 +51,6 @@ public final class CavarynBileCystFeature extends Feature<NoneFeatureConfigurati
|
|||||||
return placeCyst(level, center, bileVeinBlock, bileBlock, random);
|
return placeCyst(level, center, bileVeinBlock, bileBlock, random);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Find a solid block adjacent to cave air, then step 1-2 blocks deeper into the wall
|
|
||||||
// so the cyst is embedded rather than sitting right on the surface.
|
|
||||||
private static BlockPos findCenter(WorldGenLevel level, BlockPos origin, RandomSource random) {
|
private static BlockPos findCenter(WorldGenLevel level, BlockPos origin, RandomSource random) {
|
||||||
BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos();
|
BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos();
|
||||||
for (int attempt = 0; attempt < SEARCH_ATTEMPTS; attempt++) {
|
for (int attempt = 0; attempt < SEARCH_ATTEMPTS; attempt++) {
|
||||||
@@ -68,7 +64,6 @@ public final class CavarynBileCystFeature extends Feature<NoneFeatureConfigurati
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Need at least one open neighbor (at cave surface)
|
|
||||||
Direction openDir = null;
|
Direction openDir = null;
|
||||||
for (Direction dir : Direction.values()) {
|
for (Direction dir : Direction.values()) {
|
||||||
if (level.getBlockState(mutable.relative(dir)).canBeReplaced()) {
|
if (level.getBlockState(mutable.relative(dir)).canBeReplaced()) {
|
||||||
@@ -80,7 +75,6 @@ public final class CavarynBileCystFeature extends Feature<NoneFeatureConfigurati
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Step 1-2 blocks away from the opening so the cyst sits inside the wall
|
|
||||||
int depth = 1 + random.nextInt(2);
|
int depth = 1 + random.nextInt(2);
|
||||||
BlockPos candidate = mutable.immutable().relative(openDir.getOpposite(), depth);
|
BlockPos candidate = mutable.immutable().relative(openDir.getOpposite(), depth);
|
||||||
if (isSolid(level.getBlockState(candidate))) {
|
if (isSolid(level.getBlockState(candidate))) {
|
||||||
@@ -91,25 +85,22 @@ public final class CavarynBileCystFeature extends Feature<NoneFeatureConfigurati
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean placeCyst(WorldGenLevel level, BlockPos center, Block veinBlock, Block bileBlock, RandomSource random) {
|
private boolean placeCyst(WorldGenLevel level, BlockPos center, Block veinBlock, Block bileBlock, RandomSource random) {
|
||||||
// Per-axis radii: 1.5–13.5 so the cyst diameter ranges roughly 3–27
|
|
||||||
double rx = 1.5 + random.nextDouble() * 12.0;
|
double rx = 1.5 + random.nextDouble() * 12.0;
|
||||||
double ry = 1.5 + random.nextDouble() * 12.0;
|
double ry = 1.5 + random.nextDouble() * 12.0;
|
||||||
double rz = 1.5 + random.nextDouble() * 12.0;
|
double rz = 1.5 + random.nextDouble() * 12.0;
|
||||||
|
|
||||||
// Random stretch: pick one axis and scale it up 1.3–2x for elongated cysts
|
|
||||||
int stretchAxis = random.nextInt(3);
|
int stretchAxis = random.nextInt(3);
|
||||||
if (stretchAxis == 0) rx *= 1.3 + random.nextDouble() * 0.7;
|
if (stretchAxis == 0) rx *= 1.3 + random.nextDouble() * 0.7;
|
||||||
else if (stretchAxis == 1) ry *= 1.3 + random.nextDouble() * 0.7;
|
else if (stretchAxis == 1) ry *= 1.3 + random.nextDouble() * 0.7;
|
||||||
else rz *= 1.3 + random.nextDouble() * 0.7;
|
else rz *= 1.3 + random.nextDouble() * 0.7;
|
||||||
|
|
||||||
// Independent sine frequencies per wobble term — drives the lumpy distortion
|
|
||||||
double f1x = 0.6 + random.nextDouble() * 1.2;
|
double f1x = 0.6 + random.nextDouble() * 1.2;
|
||||||
double f1z = 0.6 + random.nextDouble() * 1.2;
|
double f1z = 0.6 + random.nextDouble() * 1.2;
|
||||||
double f2y = 0.7 + random.nextDouble() * 1.0;
|
double f2y = 0.7 + random.nextDouble() * 1.0;
|
||||||
double f2x = 0.5 + random.nextDouble() * 0.9;
|
double f2x = 0.5 + random.nextDouble() * 0.9;
|
||||||
double f3z = 0.8 + random.nextDouble() * 1.1;
|
double f3z = 0.8 + random.nextDouble() * 1.1;
|
||||||
double f3y = 0.5 + random.nextDouble() * 0.8;
|
double f3y = 0.5 + random.nextDouble() * 0.8;
|
||||||
double wobbleAmp = 0.15 + random.nextDouble() * 0.2; // surface roughness
|
double wobbleAmp = 0.15 + random.nextDouble() * 0.2;
|
||||||
|
|
||||||
int maxR = (int) Math.ceil(Math.max(Math.max(rx, ry), rz)) + 2;
|
int maxR = (int) Math.ceil(Math.max(Math.max(rx, ry), rz)) + 2;
|
||||||
List<BlockPos> placed = new ArrayList<>();
|
List<BlockPos> placed = new ArrayList<>();
|
||||||
@@ -122,7 +113,6 @@ public final class CavarynBileCystFeature extends Feature<NoneFeatureConfigurati
|
|||||||
(dy * dy) / (ry * ry) +
|
(dy * dy) / (ry * ry) +
|
||||||
(dz * dz) / (rz * rz));
|
(dz * dz) / (rz * rz));
|
||||||
|
|
||||||
// Multi-frequency sine interference — gives lumpy, non-spherical surface
|
|
||||||
double wobble = wobbleAmp * (
|
double wobble = wobbleAmp * (
|
||||||
0.4 * Math.sin(dx * f1x + dz * f1z) +
|
0.4 * Math.sin(dx * f1x + dz * f1z) +
|
||||||
0.35 * Math.cos(dy * f2y + dx * f2x) +
|
0.35 * Math.cos(dy * f2y + dx * f2x) +
|
||||||
@@ -140,12 +130,8 @@ public final class CavarynBileCystFeature extends Feature<NoneFeatureConfigurati
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (distorted < 0.7) {
|
if (distorted < 0.7) {
|
||||||
// Interior — fill with bile liquid
|
level.setBlock(pos, Blocks.AIR.defaultBlockState(), 2);
|
||||||
BlockState bileState = bileBlock.defaultBlockState();
|
|
||||||
level.setBlock(pos, bileState, 2);
|
|
||||||
scheduleFluidTick(level, pos, bileState);
|
|
||||||
} else {
|
} else {
|
||||||
// Outer shell — bile vein blocks
|
|
||||||
level.setBlock(pos, veinBlock.defaultBlockState(), 2);
|
level.setBlock(pos, veinBlock.defaultBlockState(), 2);
|
||||||
placed.add(pos.immutable());
|
placed.add(pos.immutable());
|
||||||
}
|
}
|
||||||
@@ -157,12 +143,10 @@ public final class CavarynBileCystFeature extends Feature<NoneFeatureConfigurati
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 30% chance this cyst oozes at all
|
|
||||||
if (random.nextFloat() >= 0.30f) {
|
if (random.nextFloat() >= 0.30f) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ooze bile out of exposed faces — "popped pimple" seep
|
|
||||||
for (BlockPos cystPos : placed) {
|
for (BlockPos cystPos : placed) {
|
||||||
for (Direction dir : Direction.values()) {
|
for (Direction dir : Direction.values()) {
|
||||||
BlockPos adj = cystPos.relative(dir);
|
BlockPos adj = cystPos.relative(dir);
|
||||||
|
|||||||
+2
-4
@@ -28,7 +28,7 @@ public final class CavarynBileVeinFeature extends Feature<NoneFeatureConfigurati
|
|||||||
private static final int SEARCH_ATTEMPTS = 24;
|
private static final int SEARCH_ATTEMPTS = 24;
|
||||||
private static final int VERTICAL_SCAN = 12;
|
private static final int VERTICAL_SCAN = 12;
|
||||||
private static final float BRANCH_CHANCE = 0.12f;
|
private static final float BRANCH_CHANCE = 0.12f;
|
||||||
private static final float LIQUID_POCKET_CHANCE = 0.04f;
|
private static final float LIQUID_POCKET_CHANCE = 0.008f;
|
||||||
|
|
||||||
public CavarynBileVeinFeature(Codec<NoneFeatureConfiguration> codec) {
|
public CavarynBileVeinFeature(Codec<NoneFeatureConfiguration> codec) {
|
||||||
super(codec);
|
super(codec);
|
||||||
@@ -53,7 +53,6 @@ public final class CavarynBileVeinFeature extends Feature<NoneFeatureConfigurati
|
|||||||
return growVeinNetwork(level, start, bileVeinBlock, bileBlock, random);
|
return growVeinNetwork(level, start, bileVeinBlock, bileBlock, random);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Find a solid block that sits at a cave boundary
|
|
||||||
private static BlockPos findStart(WorldGenLevel level, BlockPos origin, RandomSource random) {
|
private static BlockPos findStart(WorldGenLevel level, BlockPos origin, RandomSource random) {
|
||||||
BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos();
|
BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos();
|
||||||
for (int attempt = 0; attempt < SEARCH_ATTEMPTS; attempt++) {
|
for (int attempt = 0; attempt < SEARCH_ATTEMPTS; attempt++) {
|
||||||
@@ -116,7 +115,6 @@ public final class CavarynBileVeinFeature extends Feature<NoneFeatureConfigurati
|
|||||||
|
|
||||||
BlockState state = level.getBlockState(current);
|
BlockState state = level.getBlockState(current);
|
||||||
if (!isVeinCandidate(state)) {
|
if (!isVeinCandidate(state)) {
|
||||||
// Try to redirect
|
|
||||||
BlockPos redirect = findSolidNeighbor(current, dir, visited, level, random);
|
BlockPos redirect = findSolidNeighbor(current, dir, visited, level, random);
|
||||||
if (redirect == null) {
|
if (redirect == null) {
|
||||||
break;
|
break;
|
||||||
@@ -190,7 +188,7 @@ public final class CavarynBileVeinFeature extends Feature<NoneFeatureConfigurati
|
|||||||
if (!isVeinCandidate(candidateState)) {
|
if (!isVeinCandidate(candidateState)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (isEnclosed(level, candidate) || random.nextFloat() < 0.05f) {
|
if (isEnclosed(level, candidate) || random.nextFloat() < 0.01f) {
|
||||||
BlockState bileState = bileBlock.defaultBlockState();
|
BlockState bileState = bileBlock.defaultBlockState();
|
||||||
level.setBlock(candidate, bileState, 2);
|
level.setBlock(candidate, bileState, 2);
|
||||||
scheduleFluidTick(level, candidate, bileState);
|
scheduleFluidTick(level, candidate, bileState);
|
||||||
|
|||||||
-1
@@ -136,7 +136,6 @@ public final class CavarynEggPatchFeature extends Feature<NoneFeatureConfigurati
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Replace the floor block with amber moss so eggs hatch faster
|
|
||||||
if (amberMossBlock != null) {
|
if (amberMossBlock != null) {
|
||||||
BlockPos floorPos = eggPos.below();
|
BlockPos floorPos = eggPos.below();
|
||||||
BlockState floorState = level.getBlockState(floorPos);
|
BlockState floorState = level.getBlockState(floorPos);
|
||||||
|
|||||||
+3
-6
@@ -20,7 +20,6 @@ import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConf
|
|||||||
|
|
||||||
public final class CavarynWallAmberMossFeature extends Feature<NoneFeatureConfiguration> {
|
public final class CavarynWallAmberMossFeature extends Feature<NoneFeatureConfiguration> {
|
||||||
private static final ResourceLocation AMBER_LICHEN_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "amber_lichen");
|
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_RADIUS = 8;
|
||||||
private static final int SEARCH_ATTEMPTS = 28;
|
private static final int SEARCH_ATTEMPTS = 28;
|
||||||
private static final int VERTICAL_SCAN = 10;
|
private static final int VERTICAL_SCAN = 10;
|
||||||
@@ -34,8 +33,7 @@ public final class CavarynWallAmberMossFeature extends Feature<NoneFeatureConfig
|
|||||||
WorldGenLevel level = context.level();
|
WorldGenLevel level = context.level();
|
||||||
RandomSource random = context.random();
|
RandomSource random = context.random();
|
||||||
Block amberLichenBlock = getBlock(AMBER_LICHEN_ID);
|
Block amberLichenBlock = getBlock(AMBER_LICHEN_ID);
|
||||||
Block glowLichenBlock = getBlock(GLOW_LICHEN_ID);
|
if (amberLichenBlock == null) {
|
||||||
if (amberLichenBlock == null || glowLichenBlock == null) {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -49,7 +47,7 @@ public final class CavarynWallAmberMossFeature extends Feature<NoneFeatureConfig
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
placeLichenFringe(level, placedPatch, anchor.supportDirection(), amberLichenBlock, glowLichenBlock, random);
|
placeLichenFringe(level, placedPatch, anchor.supportDirection(), amberLichenBlock, random);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -115,7 +113,6 @@ public final class CavarynWallAmberMossFeature extends Feature<NoneFeatureConfig
|
|||||||
List<BlockPos> patchPositions,
|
List<BlockPos> patchPositions,
|
||||||
Direction supportDirection,
|
Direction supportDirection,
|
||||||
Block amberLichenBlock,
|
Block amberLichenBlock,
|
||||||
Block glowLichenBlock,
|
|
||||||
RandomSource random
|
RandomSource random
|
||||||
) {
|
) {
|
||||||
for (BlockPos patchPos : patchPositions) {
|
for (BlockPos patchPos : patchPositions) {
|
||||||
@@ -132,7 +129,7 @@ public final class CavarynWallAmberMossFeature extends Feature<NoneFeatureConfig
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
BlockState state = createLichenState(random.nextFloat() < 0.65F ? amberLichenBlock : glowLichenBlock, supportDirection);
|
BlockState state = createLichenState(amberLichenBlock, supportDirection);
|
||||||
if (!state.canSurvive(level, targetPos)) {
|
if (!state.canSurvive(level, targetPos)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|||||||
-3
@@ -61,7 +61,6 @@ public class CoralSpikeFeature extends Feature<NoneFeatureConfiguration> {
|
|||||||
int baseRadius = 2 + random.nextInt(2); // 2–3 wide at base
|
int baseRadius = 2 + random.nextInt(2); // 2–3 wide at base
|
||||||
int totalHeight = 20 + random.nextInt(15); // 20–34 blocks tall
|
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 curveAngle = random.nextDouble() * Math.PI * 2;
|
||||||
double curveDX = Math.cos(curveAngle);
|
double curveDX = Math.cos(curveAngle);
|
||||||
double curveDZ = Math.sin(curveAngle);
|
double curveDZ = Math.sin(curveAngle);
|
||||||
@@ -96,7 +95,6 @@ public class CoralSpikeFeature extends Feature<NoneFeatureConfiguration> {
|
|||||||
level.setBlock(pos, coral.block().defaultBlockState(), 2);
|
level.setBlock(pos, coral.block().defaultBlockState(), 2);
|
||||||
placed = true;
|
placed = true;
|
||||||
|
|
||||||
// Coral plants growing off the top of outer-surface blocks
|
|
||||||
if (dist >= radius - 0.6 && radius > 0) {
|
if (dist >= radius - 0.6 && radius > 0) {
|
||||||
BlockPos above = pos.above();
|
BlockPos above = pos.above();
|
||||||
if (canReplace(level.getBlockState(above))) {
|
if (canReplace(level.getBlockState(above))) {
|
||||||
@@ -110,7 +108,6 @@ public class CoralSpikeFeature extends Feature<NoneFeatureConfiguration> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wall fans on the outer surface
|
|
||||||
if (dist >= radius - 0.5) {
|
if (dist >= radius - 0.5) {
|
||||||
for (Direction dir : Direction.Plane.HORIZONTAL) {
|
for (Direction dir : Direction.Plane.HORIZONTAL) {
|
||||||
if (random.nextFloat() >= 0.4f) continue;
|
if (random.nextFloat() >= 0.4f) continue;
|
||||||
|
|||||||
+8
-4
@@ -102,7 +102,7 @@ public class ElythiaBiomeSource extends BiomeSource {
|
|||||||
// At continentalness < -0.80 the terrain is reliably below sea level.
|
// 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
|
// Transition-zone columns (-0.80 to -0.85) are treated as land to avoid
|
||||||
// ocean biome appearing over above-sea-level terrain.
|
// 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
|
@Override
|
||||||
public Holder<Biome> getNoiseBiome(int x, int y, int z, Climate.Sampler sampler) {
|
public Holder<Biome> 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.
|
// Use continentalness (XZ-only noise) to classify the column.
|
||||||
// Ocean columns get the ocean biome at every Y so structures, particles,
|
// Ocean columns get the ocean biome at every Y so structures, particles,
|
||||||
// and ambient effects work correctly above the water surface.
|
// 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);
|
Climate.TargetPoint target = sampler.sample(x, this.seaLevelQuartY, z);
|
||||||
if (target.continentalness() < OCEAN_CONTINENTALNESS_THRESHOLD) {
|
if (target.continentalness() < OCEAN_CONTINENTALNESS_THRESHOLD) {
|
||||||
|
if (biome.is(MOLEWORM_CAVES) || biome.is(ELYTHIA_LUSH_CAVES)) return biome;
|
||||||
Holder<Biome> seaLevelBiome = this.delegate.getNoiseBiome(x, this.seaLevelQuartY, z, sampler);
|
Holder<Biome> seaLevelBiome = this.delegate.getNoiseBiome(x, this.seaLevelQuartY, z, sampler);
|
||||||
// MultiNoise can return a land biome at sea-level depth — force ocean if so
|
// MultiNoise can return a land biome at sea-level depth — force ocean if so
|
||||||
if (isOceanBiome(seaLevelBiome)) return seaLevelBiome;
|
if (isOceanBiome(seaLevelBiome)) return seaLevelBiome;
|
||||||
return oceanHolder != null ? oceanHolder : seaLevelBiome;
|
return oceanHolder != null ? oceanHolder : seaLevelBiome;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Land column at or below sea level: force ocean for any biome not allowed there.
|
// Land column in the shallow-underwater zone: force ocean for surface biomes that
|
||||||
// +1 quart above seaLevelQuartY so blocks 76-83 (around the waterline) are all caught.
|
// ended up below sea level (e.g. meadow in a depression). Only applies within
|
||||||
if (y <= this.seaLevelQuartY + 1 && oceanHolder != null && !allowedBelowSeaLevel(biome)) {
|
// 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;
|
return oceanHolder;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-7
@@ -66,7 +66,6 @@ public class FallenOuranwoodFeature extends Feature<NoneFeatureConfiguration> {
|
|||||||
|
|
||||||
float dmg = damage[step];
|
float dmg = damage[step];
|
||||||
|
|
||||||
// Full gap sections — log has completely rotted through here
|
|
||||||
if (dmg > 0.78f) continue;
|
if (dmg > 0.78f) continue;
|
||||||
|
|
||||||
int surfaceY = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, bx, bz);
|
int surfaceY = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, bx, bz);
|
||||||
@@ -79,14 +78,11 @@ public class FallenOuranwoodFeature extends Feature<NoneFeatureConfiguration> {
|
|||||||
|
|
||||||
boolean isShell = dist >= outerRadius - 0.5;
|
boolean isShell = dist >= outerRadius - 0.5;
|
||||||
|
|
||||||
// Hollow interior: always skip center when hollow
|
|
||||||
if (hollow && dist < outerRadius - 0.5) continue;
|
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 && !isShell) continue;
|
||||||
if (dmg > 0.55f && random.nextFloat() < (dmg - 0.55f) * 3.5f) 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;
|
if (isShell && random.nextFloat() < dmg * 0.4f) continue;
|
||||||
|
|
||||||
int px = axis == Direction.Axis.X ? bx : bx + dp;
|
int px = axis == Direction.Axis.X ? bx : bx + dp;
|
||||||
@@ -95,13 +91,12 @@ public class FallenOuranwoodFeature extends Feature<NoneFeatureConfiguration> {
|
|||||||
|
|
||||||
if (!canReplace(level.getBlockState(pos))) continue;
|
if (!canReplace(level.getBlockState(pos))) continue;
|
||||||
|
|
||||||
// Block material mix: mostly mossy log, some fresh log patches, some moss
|
|
||||||
float r = random.nextFloat();
|
float r = random.nextFloat();
|
||||||
BlockState toPlace;
|
BlockState toPlace;
|
||||||
if (r < 0.08f) {
|
if (r < 0.08f) {
|
||||||
toPlace = Blocks.MOSS_BLOCK.defaultBlockState();
|
toPlace = Blocks.MOSS_BLOCK.defaultBlockState();
|
||||||
} else if (r < 0.22f) {
|
} else if (r < 0.22f) {
|
||||||
toPlace = freshLogState; // fresher wood, less decayed patch
|
toPlace = freshLogState;
|
||||||
} else if (r < 0.32f) {
|
} else if (r < 0.32f) {
|
||||||
toPlace = woodState;
|
toPlace = woodState;
|
||||||
} else {
|
} else {
|
||||||
@@ -114,7 +109,6 @@ public class FallenOuranwoodFeature extends Feature<NoneFeatureConfiguration> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Moss patches scattered along the log's footprint
|
|
||||||
int mossCount = 20 + random.nextInt(25);
|
int mossCount = 20 + random.nextInt(25);
|
||||||
for (int i = 0; i < mossCount; i++) {
|
for (int i = 0; i < mossCount; i++) {
|
||||||
int mx = origin.getX() + random.nextInt(length + 6) - 3;
|
int mx = origin.getX() + random.nextInt(length + 6) - 3;
|
||||||
|
|||||||
+19
-31
@@ -30,24 +30,17 @@ public class FungalMushroomFeature extends Feature<NoneFeatureConfiguration> {
|
|||||||
Block capBlock = isRed ? Blocks.RED_MUSHROOM_BLOCK : Blocks.BROWN_MUSHROOM_BLOCK;
|
Block capBlock = isRed ? Blocks.RED_MUSHROOM_BLOCK : Blocks.BROWN_MUSHROOM_BLOCK;
|
||||||
Block smallMushroom = isRed ? Blocks.RED_MUSHROOM : Blocks.BROWN_MUSHROOM;
|
Block smallMushroom = isRed ? Blocks.RED_MUSHROOM : Blocks.BROWN_MUSHROOM;
|
||||||
|
|
||||||
// 1-in-3 chance of a large mushroom (~3x the small variant)
|
int stemSize = random.nextBoolean() ? 2 : 3;
|
||||||
boolean isLarge = random.nextInt(3) == 0;
|
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 leanAngle = random.nextDouble() * Math.PI * 2;
|
||||||
double leanDX = Math.cos(leanAngle);
|
double leanDX = Math.cos(leanAngle);
|
||||||
double leanDZ = Math.sin(leanAngle);
|
double leanDZ = Math.sin(leanAngle);
|
||||||
double maxLean = isLarge
|
double maxLean = 2.0 + random.nextDouble() * 3.5;
|
||||||
? (6.0 + random.nextDouble() * 10.0) // large: 6–16 block lean
|
|
||||||
: (2.0 + random.nextDouble() * 3.5); // small: 2–5.5 block lean
|
|
||||||
|
|
||||||
int baseY = origin.getY();
|
int baseY = origin.getY();
|
||||||
int stemOffset = stemSize == 2 ? 0 : -1; // center 3x3 on origin
|
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()
|
BlockState stemPore = Blocks.MUSHROOM_STEM.defaultBlockState()
|
||||||
.setValue(HugeMushroomBlock.NORTH, false)
|
.setValue(HugeMushroomBlock.NORTH, false)
|
||||||
.setValue(HugeMushroomBlock.SOUTH, false)
|
.setValue(HugeMushroomBlock.SOUTH, false)
|
||||||
@@ -63,7 +56,6 @@ public class FungalMushroomFeature extends Feature<NoneFeatureConfiguration> {
|
|||||||
.setValue(HugeMushroomBlock.UP, false)
|
.setValue(HugeMushroomBlock.UP, false)
|
||||||
.setValue(HugeMushroomBlock.DOWN, false);
|
.setValue(HugeMushroomBlock.DOWN, false);
|
||||||
|
|
||||||
// Place leaning stem
|
|
||||||
for (int dy = 0; dy < stemHeight; dy++) {
|
for (int dy = 0; dy < stemHeight; dy++) {
|
||||||
double leanProgress = (double) dy / stemHeight;
|
double leanProgress = (double) dy / stemHeight;
|
||||||
int leanX = (int) Math.round(leanDX * maxLean * leanProgress);
|
int leanX = (int) Math.round(leanDX * maxLean * leanProgress);
|
||||||
@@ -71,34 +63,32 @@ public class FungalMushroomFeature extends Feature<NoneFeatureConfiguration> {
|
|||||||
|
|
||||||
for (int dx = 0; dx < stemSize; dx++) {
|
for (int dx = 0; dx < stemSize; dx++) {
|
||||||
for (int dz = 0; dz < stemSize; dz++) {
|
for (int dz = 0; dz < stemSize; dz++) {
|
||||||
BlockPos pos = new BlockPos(
|
int wx = origin.getX() + stemOffset + dx + leanX;
|
||||||
origin.getX() + stemOffset + dx + leanX,
|
int wz = origin.getZ() + stemOffset + dz + leanZ;
|
||||||
baseY + dy,
|
BlockPos pos = new BlockPos(wx, baseY + dy, wz);
|
||||||
origin.getZ() + stemOffset + dz + leanZ);
|
if (!canReplace(level.getBlockState(pos))) continue;
|
||||||
if (canReplace(level.getBlockState(pos))) {
|
|
||||||
// Outer ring shows bark, interior is pores
|
|
||||||
boolean isEdge = (dx == 0 || dx == stemSize - 1 || dz == 0 || dz == stemSize - 1);
|
boolean isEdge = (dx == 0 || dx == stemSize - 1 || dz == 0 || dz == stemSize - 1);
|
||||||
level.setBlock(pos, isEdge ? stemSide : stemPore, 2);
|
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 capCenterX = origin.getX() + (stemSize == 2 ? 0.5 : 0) + leanDX * maxLean;
|
||||||
double capCenterZ = origin.getZ() + (stemSize == 2 ? 0.5 : 0) + leanDZ * maxLean;
|
double capCenterZ = origin.getZ() + (stemSize == 2 ? 0.5 : 0) + leanDZ * maxLean;
|
||||||
int capTopY = baseY + stemHeight;
|
int capTopY = baseY + stemHeight;
|
||||||
int baseCapRadius = isLarge
|
int baseCapRadius = stemSize + 2 + random.nextInt(2);
|
||||||
? (stemSize + 7 + random.nextInt(6)) // large: ~11–18 at base
|
|
||||||
: (stemSize + 2 + random.nextInt(2)); // small: 4–6 at base
|
|
||||||
|
|
||||||
// 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;
|
int jitterRange = baseCapRadius + 4;
|
||||||
float[][] jitter = new float[jitterRange * 2 + 1][jitterRange * 2 + 1];
|
float[][] jitter = new float[jitterRange * 2 + 1][jitterRange * 2 + 1];
|
||||||
for (float[] row : jitter) {
|
for (float[] row : jitter) {
|
||||||
for (int j = 0; j < row.length; j++) {
|
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<NoneFeatureConfiguration> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Mycelium patches around base
|
int myceliumCount = 12 + random.nextInt(12);
|
||||||
int myceliumCount = isLarge ? (25 + random.nextInt(25)) : (12 + random.nextInt(12));
|
|
||||||
for (int i = 0; i < myceliumCount; i++) {
|
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 mx = origin.getX() + random.nextInt(radius * 2 + 1) - radius;
|
||||||
int mz = origin.getZ() + 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;
|
int my = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, mx, mz) - 1;
|
||||||
@@ -159,10 +148,9 @@ public class FungalMushroomFeature extends Feature<NoneFeatureConfiguration> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Small mushrooms scattered around
|
int smallCount = 5 + random.nextInt(8);
|
||||||
int smallCount = isLarge ? (10 + random.nextInt(15)) : (5 + random.nextInt(8));
|
|
||||||
for (int i = 0; i < smallCount; i++) {
|
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 sx = origin.getX() + random.nextInt(radius * 2 + 1) - radius;
|
||||||
int sz = origin.getZ() + 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);
|
int sy = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, sx, sz);
|
||||||
|
|||||||
-3
@@ -26,19 +26,16 @@ public class OuranwoodCocoonTreeFeature extends OuranwoodTreeFeature {
|
|||||||
private void spawnGuaranteedCocoon(WorldGenLevel level, BlockPos origin, OuranwoodTreeConfiguration config, RandomSource random) {
|
private void spawnGuaranteedCocoon(WorldGenLevel level, BlockPos origin, OuranwoodTreeConfiguration config, RandomSource random) {
|
||||||
if (!(level.getLevel() instanceof ServerLevel serverLevel)) return;
|
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);
|
Direction dir = Direction.Plane.HORIZONTAL.getRandomDirection(random);
|
||||||
int branchY = 10 + random.nextInt(8);
|
int branchY = 10 + random.nextInt(8);
|
||||||
int branchLength = 4 + random.nextInt(3); // 4–6 logs out from the trunk
|
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++) {
|
for (int i = 1; i <= branchLength; i++) {
|
||||||
BlockPos p = origin.above(branchY).relative(dir, i);
|
BlockPos p = origin.above(branchY).relative(dir, i);
|
||||||
setBlock(level, p, config.trunkProvider().getState(random, p));
|
setBlock(level, p, config.trunkProvider().getState(random, p));
|
||||||
}
|
}
|
||||||
BlockPos anchor = origin.above(branchY).relative(dir, branchLength);
|
BlockPos anchor = origin.above(branchY).relative(dir, branchLength);
|
||||||
|
|
||||||
// Clear everything below the anchor and spawn the cocooned brutalfly
|
|
||||||
BrutalflyCocoonFeature.clearCocoonVolume(level, anchor);
|
BrutalflyCocoonFeature.clearCocoonVolume(level, anchor);
|
||||||
BrutalflyEntity brutalfly = AntarchyObjects.BRUTALFLY.get().create(serverLevel);
|
BrutalflyEntity brutalfly = AntarchyObjects.BRUTALFLY.get().create(serverLevel);
|
||||||
if (brutalfly == null) return;
|
if (brutalfly == null) return;
|
||||||
|
|||||||
-3
@@ -553,8 +553,6 @@ public class OuranwoodTreeFeature extends Feature<OuranwoodTreeConfiguration> {
|
|||||||
return;
|
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
|
// The tick is scheduled here on the WorldGenLevel because onPlace() is never
|
||||||
// called during world generation, so the block cannot self-schedule.
|
// called during world generation, so the block cannot self-schedule.
|
||||||
int squirrelCount = 1 + random.nextInt(3);
|
int squirrelCount = 1 + random.nextInt(3);
|
||||||
@@ -824,7 +822,6 @@ public class OuranwoodTreeFeature extends Feature<OuranwoodTreeConfiguration> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set correct surface type on top soil block (from refreshTerrainSurface)
|
|
||||||
BlockPos topSoilPos = null;
|
BlockPos topSoilPos = null;
|
||||||
for (int y = maxY; y >= minY; y--) {
|
for (int y = maxY; y >= minY; y--) {
|
||||||
BlockPos pos = new BlockPos(worldX, y, worldZ);
|
BlockPos pos = new BlockPos(worldX, y, worldZ);
|
||||||
|
|||||||
@@ -13,9 +13,6 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Mixin(SplashManager.class)
|
@Mixin(SplashManager.class)
|
||||||
/*
|
|
||||||
* Adds Antarchy splash text without replacing vanilla handling.
|
|
||||||
*/
|
|
||||||
public abstract class SplashManagerMixin {
|
public abstract class SplashManagerMixin {
|
||||||
@Shadow
|
@Shadow
|
||||||
@Final
|
@Final
|
||||||
@@ -35,5 +32,6 @@ public abstract class SplashManagerMixin {
|
|||||||
this.splashes.add("Rainbow sugar yummy");
|
this.splashes.add("Rainbow sugar yummy");
|
||||||
this.splashes.add("Now with inverted gravity!");
|
this.splashes.add("Now with inverted gravity!");
|
||||||
this.splashes.add("Everything we need is already here");
|
this.splashes.add("Everything we need is already here");
|
||||||
|
this.splashes.add("Rub some bacon on it!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"required": true,
|
"required": true,
|
||||||
"package": "com.craisinlord.antarchy.mixins",
|
"package": "com.craisinlord.antarchy.mixins",
|
||||||
"refmap": "antarchy.refmap.json",
|
|
||||||
"plugin": "com.craisinlord.antarchy.mixins.AntarchyMixinPlugin",
|
"plugin": "com.craisinlord.antarchy.mixins.AntarchyMixinPlugin",
|
||||||
"compatibilityLevel": "JAVA_21",
|
"compatibilityLevel": "JAVA_21",
|
||||||
"mixins": [
|
"mixins": [
|
||||||
|
|||||||
@@ -64,6 +64,11 @@
|
|||||||
"walk": {
|
"walk": {
|
||||||
"loop": true,
|
"loop": true,
|
||||||
"animation_length": 0.5,
|
"animation_length": 0.5,
|
||||||
|
"sound_effects": {
|
||||||
|
"0.0": {
|
||||||
|
"effect": "antarchy:bomber_walk|0.9|1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"bones": {
|
"bones": {
|
||||||
"root": {
|
"root": {
|
||||||
"rotation": {
|
"rotation": {
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"variants": {
|
||||||
|
"": {
|
||||||
|
"model": "antarchy:block/broodstone"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -35,6 +35,7 @@
|
|||||||
"block.antarchy.infested_coarse_dirt": "Infested Coarse Dirt",
|
"block.antarchy.infested_coarse_dirt": "Infested Coarse Dirt",
|
||||||
"block.antarchy.nyxite": "Nyxite",
|
"block.antarchy.nyxite": "Nyxite",
|
||||||
"block.antarchy.myrmite": "Myrmite",
|
"block.antarchy.myrmite": "Myrmite",
|
||||||
|
"block.antarchy.broodstone": "Broodstone",
|
||||||
"block.antarchy.polished_nyxite": "Polished Nyxite",
|
"block.antarchy.polished_nyxite": "Polished Nyxite",
|
||||||
"block.antarchy.chiseled_nyxite": "Chiseled Nyxite",
|
"block.antarchy.chiseled_nyxite": "Chiseled Nyxite",
|
||||||
"block.antarchy.nyxite_bricks": "Nyxite Bricks",
|
"block.antarchy.nyxite_bricks": "Nyxite Bricks",
|
||||||
@@ -279,6 +280,7 @@
|
|||||||
"item.antarchy.chiten_block": "Chiten Block",
|
"item.antarchy.chiten_block": "Chiten Block",
|
||||||
"item.antarchy.chiten_spike": "Chiten Spike",
|
"item.antarchy.chiten_spike": "Chiten Spike",
|
||||||
"item.antarchy.myrmite": "Myrmite",
|
"item.antarchy.myrmite": "Myrmite",
|
||||||
|
"item.antarchy.broodstone": "Broodstone",
|
||||||
"item.antarchy.torchflower_bush": "Torchflower Bush",
|
"item.antarchy.torchflower_bush": "Torchflower Bush",
|
||||||
"block.antarchy.torchflower_bush": "Torchflower Bush",
|
"block.antarchy.torchflower_bush": "Torchflower Bush",
|
||||||
"item.antarchy.mud_pie": "Mud Pie",
|
"item.antarchy.mud_pie": "Mud Pie",
|
||||||
@@ -647,6 +649,9 @@
|
|||||||
"subtitles.antarchy.basilisk_hiss": "Basilisk hisses",
|
"subtitles.antarchy.basilisk_hiss": "Basilisk hisses",
|
||||||
"subtitles.antarchy.basilisk_hurt": "Basilisk hurts",
|
"subtitles.antarchy.basilisk_hurt": "Basilisk hurts",
|
||||||
"subtitles.antarchy.basilisk_death": "Basilisk dies",
|
"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.inversion": "Potion of Inversion",
|
||||||
"item.minecraft.potion.effect.long_inversion": "Potion of Inversion",
|
"item.minecraft.potion.effect.long_inversion": "Potion of Inversion",
|
||||||
"item.minecraft.splash_potion.effect.inversion": "Splash Potion of Inversion",
|
"item.minecraft.splash_potion.effect.inversion": "Splash Potion of Inversion",
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"parent": "minecraft:block/cube_all",
|
||||||
|
"textures": {
|
||||||
|
"all": "antarchy:block/broodstone/broodstone"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"parent": "antarchy:block/broodstone"
|
||||||
|
}
|
||||||
@@ -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": {
|
"thoraxis_nightmare_wastes_ambient": {
|
||||||
"subtitle": "subtitles.antarchy.thoraxis_nightmare_wastes_ambient",
|
"subtitle": "subtitles.antarchy.thoraxis_nightmare_wastes_ambient",
|
||||||
"sounds": [
|
"sounds": [
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 401 B |
@@ -4,8 +4,33 @@
|
|||||||
"type": "minecraft:noise",
|
"type": "minecraft:noise",
|
||||||
"settings": "antarchy:cavaryn",
|
"settings": "antarchy:cavaryn",
|
||||||
"biome_source": {
|
"biome_source": {
|
||||||
"type": "minecraft:fixed",
|
"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"
|
"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"
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -7,7 +7,8 @@
|
|||||||
"type": "antarchy:elythia_biome_source",
|
"type": "antarchy:elythia_biome_source",
|
||||||
"moleworm_caves_max_y": 30,
|
"moleworm_caves_max_y": 30,
|
||||||
"surface_biome_sample_y": 160,
|
"surface_biome_sample_y": 160,
|
||||||
"ocean_max_y": 75,
|
"ocean_max_y": 67,
|
||||||
|
"sea_level": 70,
|
||||||
"biomes": [
|
"biomes": [
|
||||||
{
|
{
|
||||||
"biome": "antarchy:moleworm_caves",
|
"biome": "antarchy:moleworm_caves",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"logical_height": 192,
|
"logical_height": 192,
|
||||||
"infiniburn": "#minecraft:infiniburn_overworld",
|
"infiniburn": "#minecraft:infiniburn_overworld",
|
||||||
"effects": "minecraft:overworld",
|
"effects": "minecraft:overworld",
|
||||||
"ambient_light": 0.0,
|
"ambient_light": 0.01,
|
||||||
"piglin_safe": false,
|
"piglin_safe": false,
|
||||||
"has_raids": false,
|
"has_raids": false,
|
||||||
"monster_spawn_light_level": 0,
|
"monster_spawn_light_level": 0,
|
||||||
|
|||||||
@@ -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"
|
||||||
|
}
|
||||||
@@ -2,6 +2,7 @@
|
|||||||
"values": [
|
"values": [
|
||||||
"#minecraft:moss_replaceable",
|
"#minecraft:moss_replaceable",
|
||||||
"antarchy:myrmite",
|
"antarchy:myrmite",
|
||||||
|
"antarchy:broodstone",
|
||||||
"antarchy:amber_moss_block"
|
"antarchy:amber_moss_block"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"values": [
|
||||||
|
"antarchy:cavaryn",
|
||||||
|
"antarchy:brooding_tunnels"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -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": []
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -38,13 +38,14 @@
|
|||||||
[],
|
[],
|
||||||
[
|
[
|
||||||
"antarchy:cavaryn_bile_veins",
|
"antarchy:cavaryn_bile_veins",
|
||||||
"antarchy:cavaryn_bile_cysts",
|
|
||||||
"antarchy:cavaryn_wall_amber_moss",
|
"antarchy:cavaryn_wall_amber_moss",
|
||||||
"antarchy:cavaryn_creepvine",
|
|
||||||
"antarchy:cavaryn_chiten_spikes",
|
"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,
|
"creature_spawn_probability": 0.06,
|
||||||
"spawners": {
|
"spawners": {
|
||||||
|
|||||||
@@ -57,7 +57,7 @@
|
|||||||
],
|
],
|
||||||
[]
|
[]
|
||||||
],
|
],
|
||||||
"creature_spawn_probability": 0.04,
|
"creature_spawn_probability": 0.15,
|
||||||
"spawners": {
|
"spawners": {
|
||||||
"monster": [
|
"monster": [
|
||||||
{ "type": "antarchy:missile_squid", "weight": 12, "minCount": 1, "maxCount": 3 },
|
{ "type": "antarchy:missile_squid", "weight": 12, "minCount": 1, "maxCount": 3 },
|
||||||
|
|||||||
+2
-2
@@ -6,8 +6,8 @@
|
|||||||
"type": "minecraft:y_clamped_gradient",
|
"type": "minecraft:y_clamped_gradient",
|
||||||
"from_y": -64,
|
"from_y": -64,
|
||||||
"to_y": 220,
|
"to_y": 220,
|
||||||
"from_value": 2.1,
|
"from_value": 1.75,
|
||||||
"to_value": -1.78
|
"to_value": -2.05
|
||||||
},
|
},
|
||||||
"argument2": {
|
"argument2": {
|
||||||
"type": "minecraft:add",
|
"type": "minecraft:add",
|
||||||
|
|||||||
@@ -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",
|
"type": "minecraft:condition",
|
||||||
"if_true": {
|
"if_true": {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"sea_level": 78,
|
"sea_level": 70,
|
||||||
"disable_mob_generation": false,
|
"disable_mob_generation": false,
|
||||||
"aquifers_enabled": true,
|
"aquifers_enabled": true,
|
||||||
"ore_veins_enabled": false,
|
"ore_veins_enabled": false,
|
||||||
|
|||||||
+27
@@ -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"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
+1
-1
@@ -3,7 +3,7 @@
|
|||||||
"placement": [
|
"placement": [
|
||||||
{
|
{
|
||||||
"type": "minecraft:count",
|
"type": "minecraft:count",
|
||||||
"count": 3
|
"count": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "minecraft:in_square"
|
"type": "minecraft:in_square"
|
||||||
|
|||||||
+1
-1
@@ -3,7 +3,7 @@
|
|||||||
"placement": [
|
"placement": [
|
||||||
{
|
{
|
||||||
"type": "minecraft:count",
|
"type": "minecraft:count",
|
||||||
"count": 5
|
"count": 2
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "minecraft:in_square"
|
"type": "minecraft:in_square"
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"values": [
|
||||||
|
"antarchy:broodstone"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -37,6 +37,7 @@
|
|||||||
"antarchy:nyxite_brick_slab",
|
"antarchy:nyxite_brick_slab",
|
||||||
"antarchy:nyxite_brick_wall",
|
"antarchy:nyxite_brick_wall",
|
||||||
"antarchy:myrmite",
|
"antarchy:myrmite",
|
||||||
|
"antarchy:broodstone",
|
||||||
"antarchy:bile_vein",
|
"antarchy:bile_vein",
|
||||||
"antarchy:chiten_block",
|
"antarchy:chiten_block",
|
||||||
"antarchy:chiten_spike",
|
"antarchy:chiten_spike",
|
||||||
|
|||||||
@@ -39,6 +39,11 @@ public final class AntarchyFabric implements ModInitializer {
|
|||||||
BloodCrystalShardItem.SYNC_BLOODGLASS = BloodglassManager::syncBloodglass;
|
BloodCrystalShardItem.SYNC_BLOODGLASS = BloodglassManager::syncBloodglass;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static final TagKey<net.minecraft.world.level.biome.Biome> CAVARYN_BIOMES = TagKey.create(
|
||||||
|
Registries.BIOME,
|
||||||
|
ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "is_cavaryn")
|
||||||
|
);
|
||||||
|
|
||||||
private static void registerWorldgenFeatures() {
|
private static void registerWorldgenFeatures() {
|
||||||
BiomeModifications.addFeature(
|
BiomeModifications.addFeature(
|
||||||
BiomeSelectors.tag(SHELLSTONE_BIOMES),
|
BiomeSelectors.tag(SHELLSTONE_BIOMES),
|
||||||
|
|||||||
@@ -389,6 +389,9 @@ public final class AntarchyFabricContent {
|
|||||||
public static final DeferredHolder<SoundEvent, SoundEvent> MOLEVORE_HURT = registerSoundEvent("molevore_hurt");
|
public static final DeferredHolder<SoundEvent, SoundEvent> MOLEVORE_HURT = registerSoundEvent("molevore_hurt");
|
||||||
public static final DeferredHolder<SoundEvent, SoundEvent> MOLEVORE_ATTACK = registerSoundEvent("molevore_attack");
|
public static final DeferredHolder<SoundEvent, SoundEvent> MOLEVORE_ATTACK = registerSoundEvent("molevore_attack");
|
||||||
public static final DeferredHolder<SoundEvent, SoundEvent> MOLEVORE_DIG = registerSoundEvent("molevore_dig");
|
public static final DeferredHolder<SoundEvent, SoundEvent> MOLEVORE_DIG = registerSoundEvent("molevore_dig");
|
||||||
|
public static final DeferredHolder<SoundEvent, SoundEvent> BOMBER_WALK = registerSoundEvent("bomber_walk");
|
||||||
|
public static final DeferredHolder<SoundEvent, SoundEvent> BOMBER_KNOCK = registerSoundEvent("bomber_knock");
|
||||||
|
public static final DeferredHolder<SoundEvent, SoundEvent> BOMBER_EXPLODE = registerSoundEvent("bomber_explode");
|
||||||
public static final DeferredHolder<SoundEvent, SoundEvent> DUCT_TAPE_USE = registerSoundEvent("duct_tape_use");
|
public static final DeferredHolder<SoundEvent, SoundEvent> DUCT_TAPE_USE = registerSoundEvent("duct_tape_use");
|
||||||
public static final DeferredHolder<SoundEvent, SoundEvent> POTENT_NYXITE_HYPNOTIC_GAS = registerSoundEvent("potent_nyxite_hypnotic_gas");
|
public static final DeferredHolder<SoundEvent, SoundEvent> POTENT_NYXITE_HYPNOTIC_GAS = registerSoundEvent("potent_nyxite_hypnotic_gas");
|
||||||
public static final DeferredHolder<SoundEvent, SoundEvent> POTENT_NYXITE_GEYSER_ERUPTION_START = registerSoundEvent("potent_nyxite_geyser_eruption_start");
|
public static final DeferredHolder<SoundEvent, SoundEvent> POTENT_NYXITE_GEYSER_ERUPTION_START = registerSoundEvent("potent_nyxite_geyser_eruption_start");
|
||||||
@@ -602,6 +605,8 @@ public final class AntarchyFabricContent {
|
|||||||
));
|
));
|
||||||
public static final DeferredBlock<Block> MYRMITE = BLOCKS.register("myrmite",
|
public static final DeferredBlock<Block> MYRMITE = BLOCKS.register("myrmite",
|
||||||
() -> new Block(nyxiteProperties()));
|
() -> new Block(nyxiteProperties()));
|
||||||
|
public static final DeferredBlock<Block> BROODSTONE = BLOCKS.register("broodstone",
|
||||||
|
() -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.DEEPSLATE).requiresCorrectToolForDrops()));
|
||||||
public static final DeferredBlock<RotatedPillarBlock> CHITEN_BLOCK = BLOCKS.register("chiten_block",
|
public static final DeferredBlock<RotatedPillarBlock> CHITEN_BLOCK = BLOCKS.register("chiten_block",
|
||||||
() -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.BONE_BLOCK).requiresCorrectToolForDrops()));
|
() -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.BONE_BLOCK).requiresCorrectToolForDrops()));
|
||||||
public static final DeferredBlock<UmbralMossBlock> UMBRAL_MOSS_BLOCK = BLOCKS.register("umbral_moss_block",
|
public static final DeferredBlock<UmbralMossBlock> UMBRAL_MOSS_BLOCK = BLOCKS.register("umbral_moss_block",
|
||||||
@@ -613,7 +618,7 @@ public final class AntarchyFabricContent {
|
|||||||
public static final DeferredBlock<UmbralMossCarpetBlock> AMBER_MOSS_CARPET = BLOCKS.register("amber_moss_carpet",
|
public static final DeferredBlock<UmbralMossCarpetBlock> AMBER_MOSS_CARPET = BLOCKS.register("amber_moss_carpet",
|
||||||
() -> new UmbralMossCarpetBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_CARPET).noOcclusion()));
|
() -> new UmbralMossCarpetBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_CARPET).noOcclusion()));
|
||||||
public static final DeferredBlock<GlowLichenBlock> AMBER_LICHEN = BLOCKS.register("amber_lichen",
|
public static final DeferredBlock<GlowLichenBlock> 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<Block> BILE_VEIN = BLOCKS.register("bile_vein",
|
public static final DeferredBlock<Block> BILE_VEIN = BLOCKS.register("bile_vein",
|
||||||
() -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.NETHERRACK)));
|
() -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.NETHERRACK)));
|
||||||
public static final DeferredBlock<VineBlock> CREEPVINE = BLOCKS.register("creepvine",
|
public static final DeferredBlock<VineBlock> CREEPVINE = BLOCKS.register("creepvine",
|
||||||
@@ -1192,6 +1197,7 @@ public final class AntarchyFabricContent {
|
|||||||
public static final DeferredItem<net.minecraft.world.item.BlockItem> INFESTED_COARSE_DIRT_ITEM = ITEMS.registerSimpleBlockItem(INFESTED_COARSE_DIRT);
|
public static final DeferredItem<net.minecraft.world.item.BlockItem> INFESTED_COARSE_DIRT_ITEM = ITEMS.registerSimpleBlockItem(INFESTED_COARSE_DIRT);
|
||||||
public static final DeferredItem<net.minecraft.world.item.BlockItem> NYXITE_ITEM = ITEMS.registerSimpleBlockItem(NYXITE);
|
public static final DeferredItem<net.minecraft.world.item.BlockItem> NYXITE_ITEM = ITEMS.registerSimpleBlockItem(NYXITE);
|
||||||
public static final DeferredItem<net.minecraft.world.item.BlockItem> MYRMITE_ITEM = ITEMS.registerSimpleBlockItem(MYRMITE);
|
public static final DeferredItem<net.minecraft.world.item.BlockItem> MYRMITE_ITEM = ITEMS.registerSimpleBlockItem(MYRMITE);
|
||||||
|
public static final DeferredItem<net.minecraft.world.item.BlockItem> BROODSTONE_ITEM = ITEMS.registerSimpleBlockItem(BROODSTONE);
|
||||||
public static final DeferredItem<net.minecraft.world.item.BlockItem> POLISHED_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(POLISHED_NYXITE);
|
public static final DeferredItem<net.minecraft.world.item.BlockItem> POLISHED_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(POLISHED_NYXITE);
|
||||||
public static final DeferredItem<net.minecraft.world.item.BlockItem> CHISELED_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(CHISELED_NYXITE);
|
public static final DeferredItem<net.minecraft.world.item.BlockItem> CHISELED_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(CHISELED_NYXITE);
|
||||||
public static final DeferredItem<net.minecraft.world.item.BlockItem> NYXITE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(NYXITE_BRICKS);
|
public static final DeferredItem<net.minecraft.world.item.BlockItem> NYXITE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(NYXITE_BRICKS);
|
||||||
@@ -1686,7 +1692,7 @@ public final class AntarchyFabricContent {
|
|||||||
public static final DeferredItem<DeferredSpawnEggItem> RAINBOW_ANT_SPAWN_EGG = ITEMS.register("rainbow_ant_spawn_egg",
|
public static final DeferredItem<DeferredSpawnEggItem> RAINBOW_ANT_SPAWN_EGG = ITEMS.register("rainbow_ant_spawn_egg",
|
||||||
() -> new DeferredSpawnEggItem(RAINBOW_ANT, 0x56D4F0, 0xF66DBB, new Item.Properties()));
|
() -> new DeferredSpawnEggItem(RAINBOW_ANT, 0x56D4F0, 0xF66DBB, new Item.Properties()));
|
||||||
public static final DeferredItem<DeferredSpawnEggItem> TERMITE_SPAWN_EGG = ITEMS.register("termite_spawn_egg",
|
public static final DeferredItem<DeferredSpawnEggItem> 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<DeferredSpawnEggItem> MOLEWORM_SPAWN_EGG = ITEMS.register("moleworm_spawn_egg",
|
public static final DeferredItem<DeferredSpawnEggItem> MOLEWORM_SPAWN_EGG = ITEMS.register("moleworm_spawn_egg",
|
||||||
() -> new DeferredSpawnEggItem(MOLEWORM, 0x7A6150, 0xD2B8A3, new Item.Properties()));
|
() -> new DeferredSpawnEggItem(MOLEWORM, 0x7A6150, 0xD2B8A3, new Item.Properties()));
|
||||||
public static final DeferredItem<DeferredSpawnEggItem> MANTIS_SPAWN_EGG = ITEMS.register("mantis_spawn_egg",
|
public static final DeferredItem<DeferredSpawnEggItem> MANTIS_SPAWN_EGG = ITEMS.register("mantis_spawn_egg",
|
||||||
@@ -1994,7 +2000,7 @@ public final class AntarchyFabricContent {
|
|||||||
case "blood_crystal_block", "budding_blood_crystal",
|
case "blood_crystal_block", "budding_blood_crystal",
|
||||||
"small_blood_crystal_bud", "medium_blood_crystal_bud",
|
"small_blood_crystal_bud", "medium_blood_crystal_bud",
|
||||||
"large_blood_crystal_bud", "blood_crystal_cluster" -> 7;
|
"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",
|
case "uranium_ore", "deepslate_uranium_ore", "titanium_ore", "deepslate_titanium_ore",
|
||||||
"uranium_block", "titanium_block", "raw_uranium_block", "raw_titanium_block",
|
"uranium_block", "titanium_block", "raw_uranium_block", "raw_titanium_block",
|
||||||
"cut_uranium", "cut_titanium", "cut_uranium_slab", "cut_titanium_slab",
|
"cut_uranium", "cut_titanium", "cut_uranium_slab", "cut_titanium_slab",
|
||||||
@@ -2411,6 +2417,9 @@ public final class AntarchyFabricContent {
|
|||||||
MOLEVORE_HURT,
|
MOLEVORE_HURT,
|
||||||
MOLEVORE_ATTACK,
|
MOLEVORE_ATTACK,
|
||||||
MOLEVORE_DIG,
|
MOLEVORE_DIG,
|
||||||
|
BOMBER_WALK,
|
||||||
|
BOMBER_KNOCK,
|
||||||
|
BOMBER_EXPLODE,
|
||||||
DUCT_TAPE_USE
|
DUCT_TAPE_USE
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
+31
-31
@@ -1,6 +1,6 @@
|
|||||||
package com.craisinlord.antarchy.fabric.mixin.client;
|
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.systems.RenderSystem;
|
||||||
import com.mojang.blaze3d.shaders.FogShape;
|
import com.mojang.blaze3d.shaders.FogShape;
|
||||||
import net.minecraft.client.Camera;
|
import net.minecraft.client.Camera;
|
||||||
@@ -16,34 +16,34 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
|||||||
|
|
||||||
@Mixin(FogRenderer.class)
|
@Mixin(FogRenderer.class)
|
||||||
public abstract class AntiwaterFogMixin {
|
public abstract class AntiwaterFogMixin {
|
||||||
// @Inject(method = "setupColor", at = @At("TAIL"))
|
@Inject(method = "setupColor", at = @At("TAIL"))
|
||||||
// private static void antarchy$overrideAntiwaterColor(Camera camera, float partialTick, ClientLevel level, int renderDistance, float darkenWorldAmount, CallbackInfo ci) {
|
private static void antarchy$overrideBileColor(Camera camera, float partialTick, ClientLevel level, int renderDistance, float darkenWorldAmount, CallbackInfo ci) {
|
||||||
// if (!antarchy$isInAntiwater(camera)) {
|
if (!antarchy$isInBile(camera)) {
|
||||||
// return;
|
return;
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// RenderSystem.clearColor(0.52F, 0.06F, 0.06F, 0.0F);
|
RenderSystem.clearColor(0.38F, 0.42F, 0.10F, 0.0F);
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// @Inject(method = "setupFog", at = @At("TAIL"))
|
@Inject(method = "setupFog", at = @At("TAIL"))
|
||||||
// private static void antarchy$overrideAntiwaterFog(Camera camera, FogRenderer.FogMode mode, float renderDistance, boolean thickFog, float partialTick, CallbackInfo ci) {
|
private static void antarchy$overrideBileFog(Camera camera, FogRenderer.FogMode mode, float renderDistance, boolean thickFog, float partialTick, CallbackInfo ci) {
|
||||||
// if (!antarchy$isInAntiwater(camera)) {
|
if (!antarchy$isInBile(camera)) {
|
||||||
// return;
|
return;
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// RenderSystem.setShaderFogStart(0.5F);
|
RenderSystem.setShaderFogStart(0.25F);
|
||||||
// RenderSystem.setShaderFogEnd(Math.min(renderDistance, 12.0F));
|
RenderSystem.setShaderFogEnd(Math.min(renderDistance, 4.0F));
|
||||||
// RenderSystem.setShaderFogShape(FogShape.CYLINDER);
|
RenderSystem.setShaderFogShape(FogShape.CYLINDER);
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// private static boolean antarchy$isInAntiwater(Camera camera) {
|
private static boolean antarchy$isInBile(Camera camera) {
|
||||||
// Entity entity = camera.getEntity();
|
Entity entity = camera.getEntity();
|
||||||
// if (entity == null || entity.level() == null) {
|
if (entity == null || entity.level() == null) {
|
||||||
// return false;
|
return false;
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// BlockPos pos = BlockPos.containing(camera.getPosition());
|
BlockPos pos = BlockPos.containing(camera.getPosition());
|
||||||
// FluidState fluidState = entity.level().getFluidState(pos);
|
FluidState fluidState = entity.level().getFluidState(pos);
|
||||||
// return PotentNyxiteBlock.isAntiwater(fluidState);
|
return BileLiquidBlock.isBile(fluidState);
|
||||||
// }
|
}
|
||||||
}
|
}
|
||||||
@@ -134,6 +134,9 @@ public class AntarchyNeoforge {
|
|||||||
AntarchyNeoforgeSounds.MOLEVORE_HURT,
|
AntarchyNeoforgeSounds.MOLEVORE_HURT,
|
||||||
AntarchyNeoforgeSounds.MOLEVORE_ATTACK,
|
AntarchyNeoforgeSounds.MOLEVORE_ATTACK,
|
||||||
AntarchyNeoforgeSounds.MOLEVORE_DIG,
|
AntarchyNeoforgeSounds.MOLEVORE_DIG,
|
||||||
|
AntarchyNeoforgeSounds.BOMBER_WALK,
|
||||||
|
AntarchyNeoforgeSounds.BOMBER_KNOCK,
|
||||||
|
AntarchyNeoforgeSounds.BOMBER_EXPLODE,
|
||||||
AntarchyNeoforgeSounds.DUCT_TAPE_USE
|
AntarchyNeoforgeSounds.DUCT_TAPE_USE
|
||||||
);
|
);
|
||||||
bindCommonObjects();
|
bindCommonObjects();
|
||||||
|
|||||||
+12
@@ -318,6 +318,18 @@ public final class AntarchyNeoForgeClient {
|
|||||||
public int getTintColor(FluidState state, BlockAndTintGetter getter, net.minecraft.core.BlockPos pos) {
|
public int getTintColor(FluidState state, BlockAndTintGetter getter, net.minecraft.core.BlockPos pos) {
|
||||||
return 0xFFFFFFFF;
|
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());
|
}, AntarchyNeoForgeFluidTypes.BILE_TYPE.get());
|
||||||
|
|
||||||
event.registerFluidType(new IClientFluidTypeExtensions() {
|
event.registerFluidType(new IClientFluidTypeExtensions() {
|
||||||
|
|||||||
-1
@@ -46,7 +46,6 @@ public final class MogglesClientRenderer {
|
|||||||
|
|
||||||
Vec3 dir = end.subtract(eye).normalize();
|
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));
|
int steps = Math.min(5, (int) (totalDist / 1.5));
|
||||||
double spacing = (totalDist - 1.5) / Math.max(steps, 1);
|
double spacing = (totalDist - 1.5) / Math.max(steps, 1);
|
||||||
|
|
||||||
|
|||||||
+3
-1
@@ -183,6 +183,8 @@ public final class AntarchyNeoforgeBlocks {
|
|||||||
));
|
));
|
||||||
public static final DeferredBlock<Block> MYRMITE = BLOCKS.register("myrmite",
|
public static final DeferredBlock<Block> MYRMITE = BLOCKS.register("myrmite",
|
||||||
() -> new Block(nyxiteProperties()));
|
() -> new Block(nyxiteProperties()));
|
||||||
|
public static final DeferredBlock<Block> BROODSTONE = BLOCKS.register("broodstone",
|
||||||
|
() -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.DEEPSLATE).requiresCorrectToolForDrops()));
|
||||||
public static final DeferredBlock<RotatedPillarBlock> CHITEN_BLOCK = BLOCKS.register("chiten_block",
|
public static final DeferredBlock<RotatedPillarBlock> CHITEN_BLOCK = BLOCKS.register("chiten_block",
|
||||||
() -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.BONE_BLOCK).requiresCorrectToolForDrops()));
|
() -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.BONE_BLOCK).requiresCorrectToolForDrops()));
|
||||||
public static final DeferredBlock<UmbralMossBlock> UMBRAL_MOSS_BLOCK = BLOCKS.register("umbral_moss_block",
|
public static final DeferredBlock<UmbralMossBlock> UMBRAL_MOSS_BLOCK = BLOCKS.register("umbral_moss_block",
|
||||||
@@ -194,7 +196,7 @@ public final class AntarchyNeoforgeBlocks {
|
|||||||
public static final DeferredBlock<UmbralMossCarpetBlock> AMBER_MOSS_CARPET = BLOCKS.register("amber_moss_carpet",
|
public static final DeferredBlock<UmbralMossCarpetBlock> AMBER_MOSS_CARPET = BLOCKS.register("amber_moss_carpet",
|
||||||
() -> new UmbralMossCarpetBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_CARPET).noOcclusion()));
|
() -> new UmbralMossCarpetBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_CARPET).noOcclusion()));
|
||||||
public static final DeferredBlock<GlowLichenBlock> AMBER_LICHEN = BLOCKS.register("amber_lichen",
|
public static final DeferredBlock<GlowLichenBlock> 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<Block> BILE_VEIN = BLOCKS.register("bile_vein",
|
public static final DeferredBlock<Block> BILE_VEIN = BLOCKS.register("bile_vein",
|
||||||
() -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.NETHERRACK)));
|
() -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.NETHERRACK)));
|
||||||
public static final DeferredBlock<VineBlock> CREEPVINE = BLOCKS.register("creepvine",
|
public static final DeferredBlock<VineBlock> CREEPVINE = BLOCKS.register("creepvine",
|
||||||
|
|||||||
+2
-1
@@ -245,6 +245,7 @@ public class AntarchyNeoforgeCreativeModeTabs {
|
|||||||
event.accept(AntarchyNeoforgeItems.MEDIUM_BLOOD_CRYSTAL_BUD_ITEM.get());
|
event.accept(AntarchyNeoforgeItems.MEDIUM_BLOOD_CRYSTAL_BUD_ITEM.get());
|
||||||
event.accept(AntarchyNeoforgeItems.LARGE_BLOOD_CRYSTAL_BUD_ITEM.get());
|
event.accept(AntarchyNeoforgeItems.LARGE_BLOOD_CRYSTAL_BUD_ITEM.get());
|
||||||
event.accept(AntarchyNeoforgeItems.MYRMITE_ITEM.get());
|
event.accept(AntarchyNeoforgeItems.MYRMITE_ITEM.get());
|
||||||
|
event.accept(AntarchyNeoforgeItems.BROODSTONE_ITEM.get());
|
||||||
event.accept(AntarchyNeoforgeItems.BILE_VEIN_ITEM.get());
|
event.accept(AntarchyNeoforgeItems.BILE_VEIN_ITEM.get());
|
||||||
event.accept(AntarchyNeoforgeItems.CHITEN_BLOCK_ITEM.get());
|
event.accept(AntarchyNeoforgeItems.CHITEN_BLOCK_ITEM.get());
|
||||||
event.accept(AntarchyNeoforgeItems.CHITEN_SPIKE_ITEM.get());
|
event.accept(AntarchyNeoforgeItems.CHITEN_SPIKE_ITEM.get());
|
||||||
@@ -380,7 +381,7 @@ public class AntarchyNeoforgeCreativeModeTabs {
|
|||||||
// 8 - Blood crystal blocks (not the shard ingredient)
|
// 8 - Blood crystal blocks (not the shard ingredient)
|
||||||
case "blood_crystal_block", "small_blood_crystal_bud", "medium_blood_crystal_bud",
|
case "blood_crystal_block", "small_blood_crystal_bud", "medium_blood_crystal_bud",
|
||||||
"large_blood_crystal_bud", "budding_blood_crystal", "blood_crystal_cluster",
|
"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
|
// 9 - Ouranwood leaves
|
||||||
case "ouranwood_leaves" -> 9;
|
case "ouranwood_leaves" -> 9;
|
||||||
|
|||||||
+2
-1
@@ -230,6 +230,7 @@ public final class AntarchyNeoforgeItems {
|
|||||||
public static final DeferredItem<net.minecraft.world.item.BlockItem> INFESTED_COARSE_DIRT_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.INFESTED_COARSE_DIRT);
|
public static final DeferredItem<net.minecraft.world.item.BlockItem> INFESTED_COARSE_DIRT_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.INFESTED_COARSE_DIRT);
|
||||||
public static final DeferredItem<net.minecraft.world.item.BlockItem> NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.NYXITE);
|
public static final DeferredItem<net.minecraft.world.item.BlockItem> NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.NYXITE);
|
||||||
public static final DeferredItem<net.minecraft.world.item.BlockItem> MYRMITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.MYRMITE);
|
public static final DeferredItem<net.minecraft.world.item.BlockItem> MYRMITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.MYRMITE);
|
||||||
|
public static final DeferredItem<net.minecraft.world.item.BlockItem> BROODSTONE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.BROODSTONE);
|
||||||
public static final DeferredItem<net.minecraft.world.item.BlockItem> POLISHED_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.POLISHED_NYXITE);
|
public static final DeferredItem<net.minecraft.world.item.BlockItem> POLISHED_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.POLISHED_NYXITE);
|
||||||
public static final DeferredItem<net.minecraft.world.item.BlockItem> CHISELED_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CHISELED_NYXITE);
|
public static final DeferredItem<net.minecraft.world.item.BlockItem> CHISELED_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CHISELED_NYXITE);
|
||||||
public static final DeferredItem<net.minecraft.world.item.BlockItem> NYXITE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.NYXITE_BRICKS);
|
public static final DeferredItem<net.minecraft.world.item.BlockItem> NYXITE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.NYXITE_BRICKS);
|
||||||
@@ -507,7 +508,7 @@ public final class AntarchyNeoforgeItems {
|
|||||||
public static final DeferredItem<DeferredSpawnEggItem> RAINBOW_ANT_SPAWN_EGG = ITEMS.register("rainbow_ant_spawn_egg",
|
public static final DeferredItem<DeferredSpawnEggItem> RAINBOW_ANT_SPAWN_EGG = ITEMS.register("rainbow_ant_spawn_egg",
|
||||||
() -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.RAINBOW_ANT, 0x56D4F0, 0xF66DBB, new Item.Properties()));
|
() -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.RAINBOW_ANT, 0x56D4F0, 0xF66DBB, new Item.Properties()));
|
||||||
public static final DeferredItem<DeferredSpawnEggItem> TERMITE_SPAWN_EGG = ITEMS.register("termite_spawn_egg",
|
public static final DeferredItem<DeferredSpawnEggItem> 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<DeferredSpawnEggItem> MOLEWORM_SPAWN_EGG = ITEMS.register("moleworm_spawn_egg",
|
public static final DeferredItem<DeferredSpawnEggItem> MOLEWORM_SPAWN_EGG = ITEMS.register("moleworm_spawn_egg",
|
||||||
() -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.MOLEWORM, 0x7A6150, 0xD2B8A3, new Item.Properties()));
|
() -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.MOLEWORM, 0x7A6150, 0xD2B8A3, new Item.Properties()));
|
||||||
public static final DeferredItem<DeferredSpawnEggItem> MANTIS_SPAWN_EGG = ITEMS.register("mantis_spawn_egg",
|
public static final DeferredItem<DeferredSpawnEggItem> MANTIS_SPAWN_EGG = ITEMS.register("mantis_spawn_egg",
|
||||||
|
|||||||
+3
@@ -121,6 +121,9 @@ public final class AntarchyNeoforgeSounds {
|
|||||||
public static final DeferredHolder<SoundEvent, SoundEvent> MOLEVORE_HURT = registerSoundEvent("molevore_hurt");
|
public static final DeferredHolder<SoundEvent, SoundEvent> MOLEVORE_HURT = registerSoundEvent("molevore_hurt");
|
||||||
public static final DeferredHolder<SoundEvent, SoundEvent> MOLEVORE_ATTACK = registerSoundEvent("molevore_attack");
|
public static final DeferredHolder<SoundEvent, SoundEvent> MOLEVORE_ATTACK = registerSoundEvent("molevore_attack");
|
||||||
public static final DeferredHolder<SoundEvent, SoundEvent> MOLEVORE_DIG = registerSoundEvent("molevore_dig");
|
public static final DeferredHolder<SoundEvent, SoundEvent> MOLEVORE_DIG = registerSoundEvent("molevore_dig");
|
||||||
|
public static final DeferredHolder<SoundEvent, SoundEvent> BOMBER_WALK = registerSoundEvent("bomber_walk");
|
||||||
|
public static final DeferredHolder<SoundEvent, SoundEvent> BOMBER_KNOCK = registerSoundEvent("bomber_knock");
|
||||||
|
public static final DeferredHolder<SoundEvent, SoundEvent> BOMBER_EXPLODE = registerSoundEvent("bomber_explode");
|
||||||
public static final DeferredHolder<SoundEvent, SoundEvent> DUCT_TAPE_USE = registerSoundEvent("duct_tape_use");
|
public static final DeferredHolder<SoundEvent, SoundEvent> DUCT_TAPE_USE = registerSoundEvent("duct_tape_use");
|
||||||
public static final DeferredHolder<SoundEvent, SoundEvent> POTENT_NYXITE_HYPNOTIC_GAS = registerSoundEvent("potent_nyxite_hypnotic_gas");
|
public static final DeferredHolder<SoundEvent, SoundEvent> POTENT_NYXITE_HYPNOTIC_GAS = registerSoundEvent("potent_nyxite_hypnotic_gas");
|
||||||
public static final DeferredHolder<SoundEvent, SoundEvent> POTENT_NYXITE_GEYSER_ERUPTION_START = registerSoundEvent("potent_nyxite_geyser_eruption_start");
|
public static final DeferredHolder<SoundEvent, SoundEvent> POTENT_NYXITE_GEYSER_ERUPTION_START = registerSoundEvent("potent_nyxite_geyser_eruption_start");
|
||||||
|
|||||||
+8
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"type": "neoforge:remove_features",
|
||||||
|
"biomes": "#antarchy:is_cavaryn",
|
||||||
|
"features": [
|
||||||
|
"minecraft:glow_lichen"
|
||||||
|
],
|
||||||
|
"step": "vegetal_decoration"
|
||||||
|
}
|
||||||
Reference in new issue
Block a user