beta V8 update
No files matched your search
@@ -14,7 +14,6 @@ public final class CreativeTabOrder {
|
||||
public static int group(Item item) {
|
||||
String path = BuiltInRegistries.ITEM.getKey(item).getPath();
|
||||
return switch (path) {
|
||||
case "glimmer_bottle" -> -1;
|
||||
case "ouranwood_log", "ouranwood_wood", "mossy_ouranwood_log", "mossy_ouranwood_wood",
|
||||
"stripped_ouranwood_log", "stripped_ouranwood_wood", "duplicator_log",
|
||||
"ouranwood_planks", "ouranwood_stairs", "ouranwood_slab",
|
||||
@@ -60,7 +59,7 @@ public final class CreativeTabOrder {
|
||||
"myrmite", "broodstone", "chiten_block", "chiten_spike", "amber_moss_block", "amber_moss_carpet" -> 8;
|
||||
case "ouranwood_leaves", "peach_leaves" -> 9;
|
||||
case "duplicator_sapling", "ouranwood_acorn", "peach_sapling", "corn_seeds" -> 10;
|
||||
case "orange_milkweed", "pink_milkweed", "hushweed", "amber_lichen", "creepvine",
|
||||
case "orange_milkweed", "pink_milkweed", "camellia", "spider_lily", "hushweed", "amber_lichen", "creepvine",
|
||||
"triffid_goo_block", "cloud_block", "wasp_nest",
|
||||
"red_ant_nest", "brown_ant_nest", "rainbow_ant_nest", "termite_nest" -> 11;
|
||||
case "dream_torch", "dream_lantern", "dream_campfire", "dream_fire", "dream_fire_ceiling",
|
||||
@@ -85,7 +84,7 @@ public final class CreativeTabOrder {
|
||||
"ultimate_helmet", "ultimate_chestplate",
|
||||
"ultimate_leggings", "ultimate_boots" -> 19;
|
||||
case "ultimate_bow", "ultimate_crossbow" -> 20;
|
||||
case "cloud_shark_fin_soup", "mud_pie", "rainbow_sugar",
|
||||
case "cloud_shark_fin_soup", "mud_pie", "peach_pie", "cornbread", "popcorn", "rainbow_sugar",
|
||||
"blood_crystal_apple", "spirit_apple", "peach", "raw_corndog", "cooked_corndog",
|
||||
"raw_venison", "cooked_venison" -> 21;
|
||||
case "blood_crystal_shard", "cloud_shark_fin", "basilisk_fang", "kraken_tooth",
|
||||
@@ -95,7 +94,7 @@ public final class CreativeTabOrder {
|
||||
"mantis_claw", "jumpy_bug_leg", "brutalfly_wing", "cornea_ear",
|
||||
"primordial_scute", "triffid_goo", "vortex_eye",
|
||||
"king_scale", "queen_scale", "chiten", "stink_bug", "corn", "high_fructose_corn_syrup" -> 22;
|
||||
case "reverie_bottle", "root_beer" -> 24;
|
||||
case "reverie_bottle", "glimmer_bottle", "root_beer" -> 24;
|
||||
case "easter_bunny_spawn_egg", "flying_squirrel_spawn_egg", "caterpillar_spawn_egg",
|
||||
"butterfly_spawn_egg", "reverie_spawn_egg", "brutalfly_spawn_egg",
|
||||
"red_ant_spawn_egg", "brown_ant_spawn_egg", "rainbow_ant_spawn_egg", "termite_spawn_egg",
|
||||
@@ -160,16 +159,18 @@ public final class CreativeTabOrder {
|
||||
case "corn_seeds" -> 3;
|
||||
case "orange_milkweed" -> 0;
|
||||
case "pink_milkweed" -> 1;
|
||||
case "hushweed" -> 2;
|
||||
case "amber_lichen" -> 3;
|
||||
case "creepvine" -> 4;
|
||||
case "triffid_goo_block" -> 5;
|
||||
case "cloud_block" -> 6;
|
||||
case "wasp_nest" -> 7;
|
||||
case "red_ant_nest" -> 8;
|
||||
case "brown_ant_nest" -> 9;
|
||||
case "rainbow_ant_nest" -> 10;
|
||||
case "termite_nest" -> 11;
|
||||
case "camellia" -> 2;
|
||||
case "spider_lily" -> 3;
|
||||
case "hushweed" -> 4;
|
||||
case "amber_lichen" -> 5;
|
||||
case "creepvine" -> 6;
|
||||
case "triffid_goo_block" -> 7;
|
||||
case "cloud_block" -> 8;
|
||||
case "wasp_nest" -> 9;
|
||||
case "red_ant_nest" -> 10;
|
||||
case "brown_ant_nest" -> 11;
|
||||
case "rainbow_ant_nest" -> 12;
|
||||
case "termite_nest" -> 13;
|
||||
case "blood_crystal_block" -> 0;
|
||||
case "small_blood_crystal_bud" -> 1;
|
||||
case "medium_blood_crystal_bud" -> 2;
|
||||
@@ -274,15 +275,22 @@ public final class CreativeTabOrder {
|
||||
case "ultimate_boots" -> 15;
|
||||
case "ultimate_bow" -> 0;
|
||||
case "ultimate_crossbow" -> 1;
|
||||
case "blood_crystal_apple" -> 0;
|
||||
case "spirit_apple" -> 1;
|
||||
case "peach" -> 2;
|
||||
case "raw_corndog" -> 3;
|
||||
case "cooked_corndog" -> 4;
|
||||
case "raw_venison" -> 5;
|
||||
case "cooked_venison" -> 6;
|
||||
case "cloud_shark_fin_soup" -> 0;
|
||||
case "mud_pie" -> 1;
|
||||
case "peach_pie" -> 2;
|
||||
case "cornbread" -> 3;
|
||||
case "popcorn" -> 4;
|
||||
case "rainbow_sugar" -> 5;
|
||||
case "raw_corndog" -> 6;
|
||||
case "cooked_corndog" -> 7;
|
||||
case "raw_venison" -> 8;
|
||||
case "cooked_venison" -> 9;
|
||||
case "blood_crystal_apple" -> 10;
|
||||
case "spirit_apple" -> 11;
|
||||
case "peach" -> 12;
|
||||
case "reverie_bottle" -> 0;
|
||||
case "root_beer" -> 1;
|
||||
case "glimmer_bottle" -> 1;
|
||||
case "root_beer" -> 2;
|
||||
case "blood_crystal_shard" -> 0;
|
||||
case "cloud_shark_fin" -> 1;
|
||||
case "basilisk_fang" -> 2;
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
package com.craisinlord.antarchy.content.block;
|
||||
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.util.RandomSource;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.level.block.state.BlockBehaviour;
|
||||
import net.minecraft.world.level.block.state.properties.DoubleBlockHalf;
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
|
||||
|
||||
public class CamelliaBlock extends MilkweedBlock {
|
||||
public CamelliaBlock(BlockBehaviour.Properties properties) {
|
||||
super(properties);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void performBonemeal(ServerLevel level, RandomSource random, BlockPos pos, BlockState state) {
|
||||
BlockPos dropPos = state.getValue(BlockStateProperties.DOUBLE_BLOCK_HALF) == DoubleBlockHalf.UPPER ? pos.below() : pos;
|
||||
popResource(level, dropPos, new ItemStack(this.asItem()));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.craisinlord.antarchy.content.block;
|
||||
|
||||
import com.mojang.serialization.MapCodec;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.world.level.BlockGetter;
|
||||
import net.minecraft.world.level.block.Block;
|
||||
import net.minecraft.world.level.block.BushBlock;
|
||||
import net.minecraft.world.level.block.state.BlockBehaviour;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.phys.shapes.CollisionContext;
|
||||
import net.minecraft.world.phys.shapes.VoxelShape;
|
||||
|
||||
public class SpiderLilyBlock extends BushBlock {
|
||||
public static final MapCodec<SpiderLilyBlock> CODEC = Block.simpleCodec(SpiderLilyBlock::new);
|
||||
private static final VoxelShape SHAPE = Block.box(5.0D, 0.0D, 5.0D, 11.0D, 10.0D, 11.0D);
|
||||
|
||||
public SpiderLilyBlock(BlockBehaviour.Properties properties) {
|
||||
super(properties);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MapCodec<SpiderLilyBlock> codec() {
|
||||
return CODEC;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) {
|
||||
return SHAPE;
|
||||
}
|
||||
}
|
||||
@@ -9,20 +9,45 @@ import net.minecraft.client.particle.TextureSheetParticle;
|
||||
import net.minecraft.core.particles.SimpleParticleType;
|
||||
|
||||
public final class PeachLeavesParticle extends TextureSheetParticle {
|
||||
private static final float ACCELERATION_SCALE = 0.0025F;
|
||||
private static final int INITIAL_LIFETIME = 300;
|
||||
private static final float WIND_BIG = 2.0F;
|
||||
private static final boolean SWIRL = false;
|
||||
private static final boolean FLOW_AWAY = true;
|
||||
private static final float GRAVITY_SCALE = 1.0F;
|
||||
private static final float INITIAL_Y_SPEED = 0.0F;
|
||||
|
||||
private float rotSpeed;
|
||||
private final float spinAcceleration;
|
||||
private final double xaFlowScale;
|
||||
private final double zaFlowScale;
|
||||
private final double swirlPeriod;
|
||||
private final boolean swirl;
|
||||
private final boolean flowAway;
|
||||
private final SpriteSet sprites;
|
||||
private final float gravity;
|
||||
|
||||
private PeachLeavesParticle(ClientLevel level, double x, double y, double z, SpriteSet sprites) {
|
||||
super(level, x, y, z, 0.0D, 0.0D, 0.0D);
|
||||
this.sprites = sprites;
|
||||
this.gravity = 0.02F + this.random.nextFloat() * 0.01F;
|
||||
this.lifetime = 28 + this.random.nextInt(26);
|
||||
this.quadSize = 0.14F + this.random.nextFloat() * 0.05F;
|
||||
this.xd = (this.random.nextDouble() - 0.5D) * 0.04D;
|
||||
this.yd = -0.015D - this.random.nextDouble() * 0.02D;
|
||||
this.zd = (this.random.nextDouble() - 0.5D) * 0.04D;
|
||||
this.hasPhysics = true;
|
||||
this.setSpriteFromAge(sprites);
|
||||
this.setSprite(sprites.get(level.random));
|
||||
this.rotSpeed = (float) Math.toRadians(this.random.nextBoolean() ? -30.0D : 30.0D);
|
||||
this.spinAcceleration = (float) Math.toRadians(this.random.nextBoolean() ? -5.0D : 5.0D);
|
||||
this.swirl = SWIRL;
|
||||
this.flowAway = FLOW_AWAY;
|
||||
this.lifetime = INITIAL_LIFETIME;
|
||||
this.gravity = GRAVITY_SCALE * 1.2F * ACCELERATION_SCALE;
|
||||
|
||||
float size = this.random.nextBoolean() ? 0.05F : 0.075F;
|
||||
this.quadSize = size;
|
||||
this.setSize(size, size);
|
||||
this.friction = 1.0F;
|
||||
this.yd = -INITIAL_Y_SPEED;
|
||||
|
||||
float randomAngle = this.random.nextFloat();
|
||||
double flowAngle = Math.toRadians(randomAngle * 60.0F);
|
||||
this.xaFlowScale = Math.cos(flowAngle) * WIND_BIG;
|
||||
this.zaFlowScale = Math.sin(flowAngle) * WIND_BIG;
|
||||
this.swirlPeriod = Math.toRadians(1000.0F + randomAngle * 3000.0F);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -31,27 +56,50 @@ public final class PeachLeavesParticle extends TextureSheetParticle {
|
||||
this.yo = this.y;
|
||||
this.zo = this.z;
|
||||
|
||||
if (this.age++ >= this.lifetime) {
|
||||
if (this.lifetime-- <= 0) {
|
||||
this.remove();
|
||||
return;
|
||||
}
|
||||
|
||||
double sway = Math.sin((this.age + this.x) * 0.22D) * 0.0035D;
|
||||
this.xd += sway;
|
||||
this.zd -= sway;
|
||||
this.yd -= this.gravity * 0.015D;
|
||||
float ageProgress = Math.min((INITIAL_LIFETIME - this.lifetime) / (float) INITIAL_LIFETIME, 1.0F);
|
||||
double windX = 0.0D;
|
||||
double windZ = 0.0D;
|
||||
|
||||
this.xd *= 0.91D;
|
||||
this.yd *= 0.92D;
|
||||
this.zd *= 0.91D;
|
||||
if (this.flowAway) {
|
||||
double flowScale = Math.pow(ageProgress, 1.25D);
|
||||
windX += this.xaFlowScale * flowScale;
|
||||
windZ += this.zaFlowScale * flowScale;
|
||||
}
|
||||
|
||||
if (this.swirl) {
|
||||
double swirlScale = ageProgress * ageProgress;
|
||||
windX += swirlScale * Math.cos(swirlScale * this.swirlPeriod) * WIND_BIG;
|
||||
windZ += swirlScale * Math.sin(swirlScale * this.swirlPeriod) * WIND_BIG;
|
||||
}
|
||||
|
||||
this.xd += windX * ACCELERATION_SCALE;
|
||||
this.zd += windZ * ACCELERATION_SCALE;
|
||||
this.yd -= this.gravity;
|
||||
|
||||
this.rotSpeed += this.spinAcceleration / 20.0F;
|
||||
this.oRoll = this.roll;
|
||||
this.roll += this.rotSpeed / 20.0F;
|
||||
|
||||
this.move(this.xd, this.yd, this.zd);
|
||||
this.setSpriteFromAge(this.sprites);
|
||||
if (this.onGround || this.lifetime < INITIAL_LIFETIME - 1 && this.xd == 0.0D && this.zd == 0.0D) {
|
||||
this.remove();
|
||||
return;
|
||||
}
|
||||
|
||||
this.xd *= this.friction;
|
||||
this.yd *= this.friction;
|
||||
this.zd *= this.friction;
|
||||
this.setSprite(this.sprites.get(INITIAL_LIFETIME - this.lifetime, INITIAL_LIFETIME));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ParticleRenderType getRenderType() {
|
||||
return ParticleRenderType.PARTICLE_SHEET_TRANSLUCENT;
|
||||
return ParticleRenderType.PARTICLE_SHEET_OPAQUE;
|
||||
}
|
||||
|
||||
public static final class Provider implements ParticleProvider<SimpleParticleType> {
|
||||
|
||||
@@ -45,14 +45,23 @@ public class GlimmerRenderer extends GeoEntityRenderer<GlimmerEntity> {
|
||||
private void renderVanillaModel(EntityModel<GlimmerEntity> model, GlimmerEntity entity, float entityYaw, float partialTick,
|
||||
PoseStack poseStack, MultiBufferSource bufferSource, int packedLight) {
|
||||
poseStack.pushPose();
|
||||
poseStack.mulPose(Axis.YP.rotationDegrees(180.0F - entityYaw));
|
||||
float growth = entity.getGrowthScale();
|
||||
poseStack.scale(growth, growth, growth);
|
||||
|
||||
// Compute body yaw directly from the entity's own tracked fields rather than trusting
|
||||
// the ambient entityYaw parameter, so the body pose and the head-offset math below are
|
||||
// always self-consistent (this is what caused the head to look "detached" from the body).
|
||||
float bodyYaw = Mth.rotLerp(partialTick, entity.yBodyRotO, entity.yBodyRot);
|
||||
poseStack.mulPose(Axis.YP.rotationDegrees(180.0F - bodyYaw));
|
||||
poseStack.scale(-1.0F, -1.0F, 1.0F);
|
||||
poseStack.translate(0.0F, -1.501F, 0.0F);
|
||||
|
||||
float limbSwing = entity.walkAnimation.position(partialTick);
|
||||
float limbSwingAmount = entity.walkAnimation.speed(partialTick);
|
||||
float ageInTicks = entity.tickCount + partialTick;
|
||||
float netHeadYaw = Mth.rotLerp(partialTick, entity.yHeadRotO, entity.yHeadRot) - entityYaw;
|
||||
float rawHeadYaw = Mth.rotLerp(partialTick, entity.yHeadRotO, entity.yHeadRot) - bodyYaw;
|
||||
float maxHeadYaw = entity.getMaxHeadYRot();
|
||||
float netHeadYaw = Mth.clamp(Mth.wrapDegrees(rawHeadYaw), -maxHeadYaw, maxHeadYaw);
|
||||
float headPitch = Mth.lerp(partialTick, entity.xRotO, entity.getXRot());
|
||||
|
||||
model.setupAnim(entity, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch);
|
||||
|
||||
@@ -23,7 +23,7 @@ import net.minecraft.world.entity.player.Player;
|
||||
public class GlimmerAntBehavior implements GlimmerVariantBehavior {
|
||||
private static final ResourceLocation REACH_BOOST_ID =
|
||||
ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "glimmer_ant_reach_boost");
|
||||
private static final double REACH_BOOST_AMOUNT = 0.5D;
|
||||
private static final double REACH_BOOST_AMOUNT = 1.5D;
|
||||
private static final float LARGE_ENEMY_MIN_HEALTH = 40.0F;
|
||||
private static final int ABILITY_COOLDOWN_TICKS = 20 * 120;
|
||||
private static final int STRENGTH_BURST_DURATION = 20 * 12;
|
||||
|
||||
@@ -22,7 +22,7 @@ import net.minecraft.world.item.Items;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class GlimmerAppleCowBehavior implements GlimmerVariantBehavior {
|
||||
private static final int SHEAR_REGROW_TICKS = 20 * 60 * 3;
|
||||
private static final int SHEAR_REGROW_TICKS = 20 * 60 * 2;
|
||||
private static final float EXHAUSTION_REDUCTION = 0.25F;
|
||||
private static final int LOW_FOOD_THRESHOLD = 16;
|
||||
private static final int ABILITY_COOLDOWN_TICKS = 20 * 120;
|
||||
@@ -87,7 +87,7 @@ public class GlimmerAppleCowBehavior implements GlimmerVariantBehavior {
|
||||
@Override
|
||||
@Nullable
|
||||
public InteractionResult onInteract(GlimmerEntity entity, Player player, ItemStack stack, InteractionHand hand) {
|
||||
if (entity.isTame() || entity.isShearCooldownActive() || !stack.is(Items.SHEARS)) {
|
||||
if ((entity.isTame() && !entity.isOwnedBy(player)) || entity.isShearCooldownActive() || !stack.is(Items.SHEARS)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@@ -29,6 +29,7 @@ public class GlimmerElkaBehavior implements GlimmerVariantBehavior {
|
||||
private static final int CRY_ANIM_TICKS = 40;
|
||||
private static final double SHOCKWAVE_RADIUS = 6.0D;
|
||||
private static final double SHOCKWAVE_KNOCKBACK = 1.3D;
|
||||
private static final float SHOCKWAVE_DAMAGE = 8.0F;
|
||||
|
||||
private static ResourceLocation rl(String path) {
|
||||
return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, path);
|
||||
@@ -136,6 +137,9 @@ public class GlimmerElkaBehavior implements GlimmerVariantBehavior {
|
||||
}
|
||||
|
||||
if (nearby instanceof LivingEntity living && (nearby instanceof Enemy || living.getLastHurtByMob() == owner)) {
|
||||
if (nearby instanceof Enemy) {
|
||||
living.hurt(owner.damageSources().mobAttack(entity), SHOCKWAVE_DAMAGE);
|
||||
}
|
||||
Vec3 away = living.position().subtract(owner.position());
|
||||
double horizontalDistance = Math.max(0.1D, away.horizontalDistance());
|
||||
living.knockback(SHOCKWAVE_KNOCKBACK, -away.x / horizontalDistance, -away.z / horizontalDistance);
|
||||
|
||||
@@ -54,6 +54,26 @@ public class GlimmerEntity extends TamableAnimal implements GeoEntity {
|
||||
Registries.BIOME,
|
||||
ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "glimmering_pools")
|
||||
);
|
||||
private static final ResourceKey<Biome> OURANWOOD_FOREST = ResourceKey.create(
|
||||
Registries.BIOME,
|
||||
ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "ouranwood_forest")
|
||||
);
|
||||
private static final ResourceKey<Biome> SPARSE_OURANWOOD_FOREST = ResourceKey.create(
|
||||
Registries.BIOME,
|
||||
ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "sparse_ouranwood_forest")
|
||||
);
|
||||
private static final ResourceKey<Biome> FUNGAL_OURANWOOD_FOREST = ResourceKey.create(
|
||||
Registries.BIOME,
|
||||
ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "fungal_ouranwood_forest")
|
||||
);
|
||||
private static final ResourceKey<Biome> ELYTHIA_MEADOW = ResourceKey.create(
|
||||
Registries.BIOME,
|
||||
ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "elythia_meadow")
|
||||
);
|
||||
private static final ResourceKey<Biome> PEACH_FOREST = ResourceKey.create(
|
||||
Registries.BIOME,
|
||||
ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "peach_forest")
|
||||
);
|
||||
private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle");
|
||||
private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk");
|
||||
|
||||
@@ -164,6 +184,10 @@ public class GlimmerEntity extends TamableAnimal implements GeoEntity {
|
||||
this.entityData.set(ABILITY_COOLDOWN, this.getVariant().getBehavior().abilityCooldownTicks());
|
||||
}
|
||||
|
||||
public void setAbilityCooldown(int ticks) {
|
||||
this.entityData.set(ABILITY_COOLDOWN, Math.max(0, ticks));
|
||||
}
|
||||
|
||||
public float getAbilityCooldownFraction(float partialTick) {
|
||||
int max = this.getVariant().getBehavior().abilityCooldownTicks();
|
||||
if (max <= 0) {
|
||||
@@ -351,7 +375,7 @@ public class GlimmerEntity extends TamableAnimal implements GeoEntity {
|
||||
return InteractionResult.CONSUME;
|
||||
}
|
||||
|
||||
ItemStack filled = com.craisinlord.antarchy.content.item.GlimmerBottleItem.create(this.getVariant());
|
||||
ItemStack filled = com.craisinlord.antarchy.content.item.GlimmerBottleItem.create(this.getVariant(), this.entityData.get(ABILITY_COOLDOWN));
|
||||
ItemStack result = net.minecraft.world.item.ItemUtils.createFilledResult(stack, player, filled);
|
||||
player.setItemInHand(hand, result);
|
||||
this.playSound(net.minecraft.sounds.SoundEvents.BOTTLE_FILL, 1.0F, 1.0F);
|
||||
@@ -385,18 +409,48 @@ public class GlimmerEntity extends TamableAnimal implements GeoEntity {
|
||||
};
|
||||
return poolVariants[this.random.nextInt(poolVariants.length)];
|
||||
}
|
||||
if (biome.is(OURANWOOD_FOREST) || biome.is(SPARSE_OURANWOOD_FOREST) || biome.is(FUNGAL_OURANWOOD_FOREST)) {
|
||||
GlimmerVariant[] forestVariants = new GlimmerVariant[] {
|
||||
GlimmerVariant.FROG,
|
||||
GlimmerVariant.OURANWOOD_DEER
|
||||
};
|
||||
return forestVariants[this.random.nextInt(forestVariants.length)];
|
||||
}
|
||||
if (biome.is(ELYTHIA_MEADOW)) {
|
||||
return GlimmerVariant.APPLE_COW;
|
||||
}
|
||||
if (biome.is(PEACH_FOREST)) {
|
||||
return GlimmerVariant.ELKA;
|
||||
}
|
||||
return GlimmerVariant.random(this.random);
|
||||
}
|
||||
|
||||
/**
|
||||
* Wild Glimmers are common in Glimmering Pools, but only rarely (and only at night)
|
||||
* turn up in Ouranwood Forest, the Elythia Meadow, and the Peach Forest.
|
||||
*/
|
||||
public static boolean checkGlimmerSpawnRules(EntityType<GlimmerEntity> type, ServerLevelAccessor level,
|
||||
MobSpawnType spawnType, BlockPos pos, net.minecraft.util.RandomSource random) {
|
||||
if (!net.minecraft.world.entity.animal.Animal.checkAnimalSpawnRules(type, level, spawnType, pos, random)) {
|
||||
return false;
|
||||
}
|
||||
Holder<Biome> biome = level.getBiome(pos);
|
||||
if (biome.is(GLIMMERING_POOLS)) {
|
||||
return true;
|
||||
}
|
||||
return level.getLevel().isNight();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
super.tick();
|
||||
|
||||
this.clampBodyToHeadRotation();
|
||||
GlimmerParticles.tickAmbient(this, this.getDeltaMovement().horizontalDistanceSqr() > 0.01D);
|
||||
|
||||
if (!this.level().isClientSide) {
|
||||
int fadeTicks = this.entityData.get(FADE_TICKS);
|
||||
if (this.isTame()) {
|
||||
if (this.isTame() || this.level().getBiome(this.blockPosition()).is(GLIMMERING_POOLS)) {
|
||||
if (fadeTicks > 0) {
|
||||
this.entityData.set(FADE_TICKS, 0);
|
||||
}
|
||||
@@ -473,6 +527,20 @@ public class GlimmerEntity extends TamableAnimal implements GeoEntity {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* With {@code noPhysics} true, Glimmers never travel through vanilla's normal movement path,
|
||||
* so the usual body-follows-head catch-up never runs and a stationary Glimmer looking around
|
||||
* (LookAtPlayerGoal/RandomLookAroundGoal only move the head) ends up with its head rendered
|
||||
* far past the model's body — this keeps the body snapped within {@link #getMaxHeadYRot()} of it.
|
||||
*/
|
||||
private void clampBodyToHeadRotation() {
|
||||
float maxYaw = this.getMaxHeadYRot();
|
||||
float delta = Mth.wrapDegrees(this.yHeadRot - this.yBodyRot);
|
||||
if (Math.abs(delta) > maxYaw) {
|
||||
this.yBodyRot = Mth.wrapDegrees(this.yHeadRot - Math.copySign(maxYaw, delta));
|
||||
}
|
||||
}
|
||||
|
||||
private void applyGroundSupport() {
|
||||
BlockPos below = BlockPos.containing(this.getX(), this.getY() - 0.05D, this.getZ());
|
||||
VoxelShape shape = this.level().getBlockState(below).getCollisionShape(this.level(), below);
|
||||
|
||||
@@ -28,6 +28,11 @@ import net.minecraft.world.entity.monster.Enemy;
|
||||
import net.minecraft.world.entity.monster.MagmaCube;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.phys.AABB;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
public class GlimmerFrogBehavior implements GlimmerVariantBehavior {
|
||||
private static final int SMALL_SLIME_SIZE = 1;
|
||||
@@ -40,6 +45,10 @@ public class GlimmerFrogBehavior implements GlimmerVariantBehavior {
|
||||
private static final float GROWTH_PER_EAT_MAX = 0.6F;
|
||||
private static final float GROWTH_MAX_SCALE = 2.2F;
|
||||
private static final double GROWTH_DECAY_PER_TICK = 0.0006D;
|
||||
private static final int TONGUE_ANIM_TICKS = 10;
|
||||
private static final int TONGUE_GRAB_TICK = 6;
|
||||
|
||||
private final Map<UUID, PendingEat> pendingEats = new HashMap<>();
|
||||
|
||||
private static ResourceLocation rl(String path) {
|
||||
return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, path);
|
||||
@@ -123,9 +132,41 @@ public class GlimmerFrogBehavior implements GlimmerVariantBehavior {
|
||||
|
||||
@Override
|
||||
public void tickAbilityCheck(GlimmerEntity entity, Player owner) {
|
||||
if (this.pendingEats.containsKey(entity.getUUID())) {
|
||||
return;
|
||||
}
|
||||
LivingEntity target = findEdibleTarget(entity, owner);
|
||||
if (target != null) {
|
||||
this.eatTarget(entity, owner, target);
|
||||
this.startEat(entity, owner, target);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void customTick(GlimmerEntity entity) {
|
||||
PendingEat pending = this.pendingEats.get(entity.getUUID());
|
||||
if (pending == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!pending.target.isAlive() || entity.distanceToSqr(pending.target) > EAT_RANGE * EAT_RANGE * 4.0D) {
|
||||
this.pendingEats.remove(entity.getUUID());
|
||||
return;
|
||||
}
|
||||
|
||||
pending.ticksRemaining--;
|
||||
if (pending.ticksRemaining == TONGUE_ANIM_TICKS - TONGUE_GRAB_TICK) {
|
||||
// The tongue "catches" the target partway through the animation and reels it in.
|
||||
entity.playSound(SoundEvents.FROG_TONGUE, 1.0F, 1.0F);
|
||||
}
|
||||
if (pending.ticksRemaining <= TONGUE_ANIM_TICKS - TONGUE_GRAB_TICK) {
|
||||
Vec3 mouth = entity.position().add(0.0D, entity.getBbHeight() * 0.5D, 0.0D);
|
||||
Vec3 pulled = pending.target.position().lerp(mouth, 0.55D);
|
||||
pending.target.teleportTo(pulled.x, pulled.y, pulled.z);
|
||||
}
|
||||
|
||||
if (pending.ticksRemaining <= 0) {
|
||||
this.pendingEats.remove(entity.getUUID());
|
||||
this.finishEat(entity, pending.owner, pending.target);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -157,16 +198,32 @@ public class GlimmerFrogBehavior implements GlimmerVariantBehavior {
|
||||
return target.getType().is(NO_EAT_TAG);
|
||||
}
|
||||
|
||||
private void eatTarget(GlimmerEntity entity, Player owner, LivingEntity target) {
|
||||
private void startEat(GlimmerEntity entity, Player owner, LivingEntity target) {
|
||||
PendingEat pending = new PendingEat();
|
||||
pending.target = target;
|
||||
pending.owner = owner;
|
||||
pending.ticksRemaining = TONGUE_ANIM_TICKS;
|
||||
this.pendingEats.put(entity.getUUID(), pending);
|
||||
|
||||
entity.playAbilityAnimation(TONGUE_ANIM_TICKS);
|
||||
entity.playSound(SoundEvents.FROG_LONG_JUMP, 0.8F, 1.4F);
|
||||
entity.startAbilityCooldown();
|
||||
}
|
||||
|
||||
private void finishEat(GlimmerEntity entity, Player owner, LivingEntity target) {
|
||||
float growthAdd = Mth.clamp(target.getMaxHealth() / 40.0F, GROWTH_PER_EAT_MIN, GROWTH_PER_EAT_MAX);
|
||||
entity.setGrowthScale(Math.min(GROWTH_MAX_SCALE, entity.getGrowthScale() + growthAdd));
|
||||
|
||||
Component targetName = target.getDisplayName();
|
||||
entity.playSound(SoundEvents.FROG_EAT, 1.2F, 0.9F);
|
||||
target.teleportTo(entity.getX(), entity.getY() + entity.getBbHeight() * 0.5D, entity.getZ());
|
||||
target.remove(Entity.RemovalReason.DISCARDED);
|
||||
|
||||
this.sendAbilityMessage(owner, Component.translatable("entity.antarchy.glimmer.ability.frog", targetName));
|
||||
entity.startAbilityCooldown();
|
||||
}
|
||||
|
||||
private static final class PendingEat {
|
||||
LivingEntity target;
|
||||
Player owner;
|
||||
int ticksRemaining;
|
||||
}
|
||||
}
|
||||
@@ -21,6 +21,13 @@ import net.minecraft.world.phys.Vec3;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import software.bernie.geckolib.animation.RawAnimation;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
public class GlimmerOuranwoodDeerBehavior implements GlimmerVariantBehavior {
|
||||
private static final int PASSIVE_REFRESH_DURATION = 20 * 4;
|
||||
private static final int ABILITY_COOLDOWN_TICKS = 20 * 10;
|
||||
@@ -28,11 +35,15 @@ public class GlimmerOuranwoodDeerBehavior implements GlimmerVariantBehavior {
|
||||
private static final RawAnimation RUN_ANIM = RawAnimation.begin().thenLoop("run");
|
||||
private static final double CHARGE_RANGE = 12.0D;
|
||||
private static final double CHARGE_CONE_DOT = 0.5D;
|
||||
private static final double CHARGE_CORRIDOR_WIDTH = 1.75D;
|
||||
private static final float CHARGE_DAMAGE = 9.0F;
|
||||
private static final double CHARGE_HIT_RADIUS = 1.5D;
|
||||
private static final double CHARGE_SPEED = 1.4D;
|
||||
private static final int CHARGE_DURATION_TICKS = 14;
|
||||
private static final float CHARGE_DAMAGE = 14.0F;
|
||||
private static final double CHARGE_KNOCKBACK = 1.6D;
|
||||
private static final int CHARGE_ANIM_TICKS = 45;
|
||||
|
||||
private final Map<UUID, ChargeState> activeCharges = new HashMap<>();
|
||||
|
||||
private static ResourceLocation rl(String path) {
|
||||
return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, path);
|
||||
}
|
||||
@@ -143,33 +154,63 @@ public class GlimmerOuranwoodDeerBehavior implements GlimmerVariantBehavior {
|
||||
}
|
||||
|
||||
if (bestTarget != null) {
|
||||
this.performCharge(entity, owner, bestTarget);
|
||||
this.startCharge(entity, owner, bestTarget);
|
||||
}
|
||||
}
|
||||
|
||||
private void performCharge(GlimmerEntity entity, Player owner, LivingEntity target) {
|
||||
private void startCharge(GlimmerEntity entity, Player owner, LivingEntity target) {
|
||||
Vec3 from = entity.position();
|
||||
Vec3 direction = target.position().subtract(from);
|
||||
double horizontalDistance = Math.max(1.0D, direction.horizontalDistance());
|
||||
double dirX = direction.x / horizontalDistance;
|
||||
double dirZ = direction.z / horizontalDistance;
|
||||
|
||||
entity.setDeltaMovement(dirX * 1.4D, entity.getDeltaMovement().y, dirZ * 1.4D);
|
||||
ChargeState state = new ChargeState();
|
||||
state.dirX = direction.x / horizontalDistance;
|
||||
state.dirZ = direction.z / horizontalDistance;
|
||||
state.ticksRemaining = CHARGE_DURATION_TICKS;
|
||||
state.owner = owner;
|
||||
this.activeCharges.put(entity.getUUID(), state);
|
||||
|
||||
entity.playAbilityAnimation(CHARGE_ANIM_TICKS);
|
||||
entity.playSound(SoundEvents.RAVAGER_ROAR, 1.0F, 1.3F);
|
||||
|
||||
AABB corridor = new AABB(from, target.position()).inflate(CHARGE_CORRIDOR_WIDTH, 1.5D, CHARGE_CORRIDOR_WIDTH);
|
||||
for (Entity candidate : owner.level().getEntities(entity, corridor)) {
|
||||
if (!(candidate instanceof Enemy) || !(candidate instanceof LivingEntity living) || !living.isAlive()) {
|
||||
continue;
|
||||
}
|
||||
living.hurt(owner.damageSources().mobAttack(entity), CHARGE_DAMAGE);
|
||||
Vec3 away = living.position().subtract(from);
|
||||
double awayDistance = Math.max(0.1D, away.horizontalDistance());
|
||||
living.knockback(CHARGE_KNOCKBACK, -away.x / awayDistance, -away.z / awayDistance);
|
||||
}
|
||||
|
||||
this.sendAbilityMessage(owner, Component.translatable("entity.antarchy.glimmer.ability.deer"));
|
||||
entity.startAbilityCooldown();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void customTick(GlimmerEntity entity) {
|
||||
ChargeState state = this.activeCharges.get(entity.getUUID());
|
||||
if (state == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!entity.isAlive() || state.ticksRemaining <= 0) {
|
||||
this.activeCharges.remove(entity.getUUID());
|
||||
return;
|
||||
}
|
||||
|
||||
state.ticksRemaining--;
|
||||
entity.setDeltaMovement(state.dirX * CHARGE_SPEED, entity.getDeltaMovement().y, state.dirZ * CHARGE_SPEED);
|
||||
|
||||
AABB hitBox = entity.getBoundingBox().inflate(CHARGE_HIT_RADIUS);
|
||||
for (Entity candidate : entity.level().getEntities(entity, hitBox)) {
|
||||
if (!(candidate instanceof Enemy) || !(candidate instanceof LivingEntity living) || !living.isAlive()
|
||||
|| state.alreadyHit.contains(candidate.getUUID())) {
|
||||
continue;
|
||||
}
|
||||
|
||||
living.hurt(state.owner.damageSources().mobAttack(entity), CHARGE_DAMAGE);
|
||||
Vec3 away = living.position().subtract(entity.position());
|
||||
double awayDistance = Math.max(0.1D, away.horizontalDistance());
|
||||
living.knockback(CHARGE_KNOCKBACK, -away.x / awayDistance, -away.z / awayDistance);
|
||||
state.alreadyHit.add(candidate.getUUID());
|
||||
}
|
||||
}
|
||||
|
||||
private static final class ChargeState {
|
||||
double dirX;
|
||||
double dirZ;
|
||||
int ticksRemaining;
|
||||
Player owner;
|
||||
final Set<UUID> alreadyHit = new HashSet<>();
|
||||
}
|
||||
}
|
||||
@@ -6,6 +6,7 @@ import com.craisinlord.antarchy.content.entity.glimmer.GlimmerCompanionSavedData
|
||||
import com.craisinlord.antarchy.content.entity.glimmer.GlimmerEntity;
|
||||
import com.craisinlord.antarchy.content.entity.glimmer.GlimmerVariant;
|
||||
import java.util.List;
|
||||
import net.minecraft.core.component.DataComponents;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.sounds.SoundEvents;
|
||||
@@ -18,17 +19,27 @@ import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.ItemUtils;
|
||||
import net.minecraft.world.item.Items;
|
||||
import net.minecraft.world.item.TooltipFlag;
|
||||
import net.minecraft.world.item.component.CustomData;
|
||||
import net.minecraft.world.level.Level;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class GlimmerBottleItem extends Item {
|
||||
private static final String ABILITY_COOLDOWN_TAG = "AbilityCooldown";
|
||||
|
||||
public GlimmerBottleItem() {
|
||||
super(new Item.Properties().stacksTo(1));
|
||||
}
|
||||
|
||||
public static ItemStack create(GlimmerVariant variant) {
|
||||
return create(variant, 0);
|
||||
}
|
||||
|
||||
public static ItemStack create(GlimmerVariant variant, int abilityCooldown) {
|
||||
ItemStack stack = new ItemStack(AntarchyObjects.GLIMMER_BOTTLE.get());
|
||||
stack.set(AntarchyObjects.GLIMMER_VARIANT_COMPONENT.get(), variant);
|
||||
if (abilityCooldown > 0) {
|
||||
CustomData.update(DataComponents.CUSTOM_DATA, stack, tag -> tag.putInt(ABILITY_COOLDOWN_TAG, abilityCooldown));
|
||||
}
|
||||
return stack;
|
||||
}
|
||||
|
||||
@@ -37,6 +48,10 @@ public class GlimmerBottleItem extends Item {
|
||||
return stack.get(AntarchyObjects.GLIMMER_VARIANT_COMPONENT.get());
|
||||
}
|
||||
|
||||
public static int getStoredAbilityCooldown(ItemStack stack) {
|
||||
return stack.getOrDefault(DataComponents.CUSTOM_DATA, CustomData.EMPTY).copyTag().getInt(ABILITY_COOLDOWN_TAG);
|
||||
}
|
||||
|
||||
@Override
|
||||
public InteractionResultHolder<ItemStack> use(Level level, Player player, InteractionHand hand) {
|
||||
ItemStack stack = player.getItemInHand(hand);
|
||||
@@ -58,6 +73,7 @@ public class GlimmerBottleItem extends Item {
|
||||
glimmer.lockVariant(variant);
|
||||
glimmer.tame(player);
|
||||
glimmer.setOrderedToSit(false);
|
||||
glimmer.setAbilityCooldown(getStoredAbilityCooldown(stack));
|
||||
level.addFreshEntity(glimmer);
|
||||
GlimmerCompanionSavedData.replaceCompanion(((ServerLevel) level).getServer(), player.getUUID(), glimmer.getUUID());
|
||||
GlimmerParticles.tickBurst(glimmer);
|
||||
|
||||
@@ -76,9 +76,11 @@ public class ElythiaBiomeSource extends BiomeSource {
|
||||
private final int molewormCavesMaxQuartY;
|
||||
private final int surfaceBiomeSampleQuartY;
|
||||
private final int seaLevelQuartY;
|
||||
private final int undergroundGuardMaxQuartY;
|
||||
private final Holder<Biome> oceanHolder;
|
||||
private final Holder<Biome> defaultLandHolder;
|
||||
private final Holder<Biome> glimmeringPoolsHolder;
|
||||
private final Holder<Biome> ouranwoodForestHolder;
|
||||
|
||||
public ElythiaBiomeSource(Climate.ParameterList<Holder<Biome>> parameters, int molewormCavesMaxY, int surfaceBiomeSampleY, int oceanMaxY, int seaLevel) {
|
||||
this.parameters = parameters;
|
||||
@@ -90,6 +92,11 @@ public class ElythiaBiomeSource extends BiomeSource {
|
||||
this.molewormCavesMaxQuartY = QuartPos.fromBlock(molewormCavesMaxY);
|
||||
this.surfaceBiomeSampleQuartY = QuartPos.fromBlock(surfaceBiomeSampleY);
|
||||
this.seaLevelQuartY = QuartPos.fromBlock(seaLevel);
|
||||
// Cave pockets carved into hills/mountains above sea level have no other guard —
|
||||
// they just resolve via raw climate matching, which can land on peach_forest/glimmering_pools
|
||||
// even though those are meant to be surface-only. Anything at or below this Y gets
|
||||
// treated as underground for those two biomes specifically.
|
||||
this.undergroundGuardMaxQuartY = QuartPos.fromBlock(molewormCavesMaxY + 40);
|
||||
this.oceanHolder = parameters.values().stream()
|
||||
.map(Pair::getSecond)
|
||||
.filter(h -> h.is(ELYTHIA_OCEAN))
|
||||
@@ -100,6 +107,11 @@ public class ElythiaBiomeSource extends BiomeSource {
|
||||
.filter(h -> h.is(GLIMMERING_POOLS))
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
this.ouranwoodForestHolder = parameters.values().stream()
|
||||
.map(Pair::getSecond)
|
||||
.filter(h -> h.is(OURANWOOD_FOREST))
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
this.defaultLandHolder = parameters.values().stream()
|
||||
.map(Pair::getSecond)
|
||||
.filter(h -> !isOceanBiome(h) && !h.is(ELYTHIA_BEACH)
|
||||
@@ -124,11 +136,6 @@ public class ElythiaBiomeSource extends BiomeSource {
|
||||
protected Stream<Holder<Biome>> collectPossibleBiomes() {
|
||||
return this.delegate.possibleBiomes().stream();
|
||||
}
|
||||
|
||||
// Conservative threshold well inside the ocean entry range (-0.85 to -0.92).
|
||||
// At continentalness < -0.80 the terrain is reliably below sea level.
|
||||
// Transition-zone columns (-0.80 to -0.85) are treated as land to avoid
|
||||
// ocean biome appearing over above-sea-level terrain.
|
||||
private static final long OCEAN_CONTINENTALNESS_THRESHOLD = Climate.quantizeCoord(-0.87f);
|
||||
|
||||
@Override
|
||||
@@ -140,7 +147,7 @@ public class ElythiaBiomeSource extends BiomeSource {
|
||||
return resolveSurfaceFallback(x, y, z, sampler, MOLEWORM_CAVES, GLIMMERING_POOLS);
|
||||
}
|
||||
|
||||
// Use continentalness (XZ-only noise) to classify the column.
|
||||
// Use continentalness o classify the column.
|
||||
// Ocean columns get the ocean biome at every Y so structures, particles,
|
||||
// and ambient effects work correctly above the water surface.
|
||||
// Cave biomes are always preserved even in ocean columns.
|
||||
@@ -160,13 +167,23 @@ public class ElythiaBiomeSource extends BiomeSource {
|
||||
return oceanHolder;
|
||||
}
|
||||
|
||||
// Land column: prevent ocean biomes from bleeding in at any Y
|
||||
// Land column prevent ocean biomes from sneakin in
|
||||
if (isOceanBiome(biome)) {
|
||||
return resolveLandFallback(x, z, sampler);
|
||||
}
|
||||
|
||||
if (biome.is(SPARSE_OURANWOOD_FOREST) && !isSparseOuranwoodCandidate(target, x, z)) {
|
||||
biome = this.ouranwoodForestHolder != null ? this.ouranwoodForestHolder : biome;
|
||||
}
|
||||
|
||||
if (isGlimmeringPoolsCandidate(biome, target, x, z)) {
|
||||
return this.glimmeringPoolsHolder != null ? this.glimmeringPoolsHolder : biome;
|
||||
biome = this.glimmeringPoolsHolder != null ? this.glimmeringPoolsHolder : biome;
|
||||
}
|
||||
|
||||
// Neither peach_forest nor glimmering_pools should ever generate underground —
|
||||
// fall back to whatever a nearby surface reference sample would give instead.
|
||||
if ((biome.is(PEACH_FOREST) || biome.is(GLIMMERING_POOLS)) && y <= this.undergroundGuardMaxQuartY) {
|
||||
return resolveSurfaceFallback(x, y, z, sampler, PEACH_FOREST, GLIMMERING_POOLS);
|
||||
}
|
||||
|
||||
return biome;
|
||||
@@ -182,8 +199,10 @@ public class ElythiaBiomeSource extends BiomeSource {
|
||||
}
|
||||
|
||||
private static boolean isOuranwoodBiome(Holder<Biome> biome) {
|
||||
// peach_forest is deliberately excluded here: letting glimmering_pools carve
|
||||
// into it fragments its own (already modest) territory into tiny patches.
|
||||
return biome.is(OURANWOOD_FOREST) || biome.is(SPARSE_OURANWOOD_FOREST)
|
||||
|| biome.is(PEACH_FOREST) || biome.is(FUNGAL_OURANWOOD_FOREST);
|
||||
|| biome.is(FUNGAL_OURANWOOD_FOREST);
|
||||
}
|
||||
|
||||
private static boolean isGlimmeringPoolsCandidate(Holder<Biome> biome, Climate.TargetPoint target, int x, int z) {
|
||||
@@ -196,30 +215,48 @@ public class ElythiaBiomeSource extends BiomeSource {
|
||||
long weirdness = target.weirdness();
|
||||
long depth = target.depth();
|
||||
|
||||
if (humidity < Climate.quantizeCoord(0.68F) || humidity > Climate.quantizeCoord(1.0F)) {
|
||||
if (humidity < Climate.quantizeCoord(0.64F) || humidity > Climate.quantizeCoord(1.0F)) {
|
||||
return false;
|
||||
}
|
||||
if (continentalness < Climate.quantizeCoord(0.32F) || continentalness > Climate.quantizeCoord(0.88F)) {
|
||||
if (continentalness < Climate.quantizeCoord(0.29F) || continentalness > Climate.quantizeCoord(0.90F)) {
|
||||
return false;
|
||||
}
|
||||
if (weirdness < Climate.quantizeCoord(-0.84F) || weirdness > Climate.quantizeCoord(0.29F)) {
|
||||
if (weirdness < Climate.quantizeCoord(-0.88F) || weirdness > Climate.quantizeCoord(0.33F)) {
|
||||
return false;
|
||||
}
|
||||
if (depth < Climate.quantizeCoord(0.0F) || depth > Climate.quantizeCoord(0.80F)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Hash on coarse cells (not raw per-quart coords) so eligible columns
|
||||
// clump into contiguous patches instead of speckling per-quart.
|
||||
// Cell size bumped from 6 to 8 blocks so patches (and the pools/streams
|
||||
// they host) run slightly larger than before.
|
||||
long cellX = Math.floorDiv(x, 8);
|
||||
long cellZ = Math.floorDiv(z, 8);
|
||||
long cellX = Math.floorDiv(x, 11);
|
||||
long cellZ = Math.floorDiv(z, 11);
|
||||
long gate = Math.floorMod(cellX * 73428767L + cellZ * 912931L, 5L);
|
||||
return gate <= 2L;
|
||||
return gate <= 3L;
|
||||
}
|
||||
|
||||
private static boolean isSparseOuranwoodCandidate(Climate.TargetPoint target, int x, int z) {
|
||||
if (target.temperature() > Climate.quantizeCoord(0.24F)) {
|
||||
return false;
|
||||
}
|
||||
if (target.humidity() > Climate.quantizeCoord(0.70F)) {
|
||||
return false;
|
||||
}
|
||||
if (target.continentalness() < Climate.quantizeCoord(0.90F)) {
|
||||
return false;
|
||||
}
|
||||
if (target.erosion() > Climate.quantizeCoord(-0.22F)) {
|
||||
return false;
|
||||
}
|
||||
if (target.weirdness() < Climate.quantizeCoord(0.92F)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
long cellX = Math.floorDiv(x, 24);
|
||||
long cellZ = Math.floorDiv(z, 24);
|
||||
long gate = Math.floorMod(cellX * 1103515245L + cellZ * 2147483647L, 12L);
|
||||
return gate == 0L;
|
||||
}
|
||||
|
||||
// Used for moleworm caves — returns best Y-sample, falls back to whatever the delegate gives
|
||||
@SafeVarargs
|
||||
private Holder<Biome> resolveSurfaceFallback(int x, int y, int z, Climate.Sampler sampler, ResourceKey<Biome>... excluded) {
|
||||
Holder<Biome> fallback = this.delegate.getNoiseBiome(x, this.surfaceBiomeSampleQuartY, z, sampler);
|
||||
@@ -237,7 +274,6 @@ public class ElythiaBiomeSource extends BiomeSource {
|
||||
return fallback;
|
||||
}
|
||||
|
||||
// Used when ocean bleeds into a land column — guaranteed to never return an ocean/cave biome
|
||||
private Holder<Biome> resolveLandFallback(int x, int z, Climate.Sampler sampler) {
|
||||
Holder<Biome> fallback = this.delegate.getNoiseBiome(x, this.surfaceBiomeSampleQuartY, z, sampler);
|
||||
if (!isOceanOrCave(fallback)) return fallback;
|
||||
@@ -269,9 +305,6 @@ public class ElythiaBiomeSource extends BiomeSource {
|
||||
try {
|
||||
this.delegate.addDebugInfo(debug, pos, sampler);
|
||||
} catch (NullPointerException ignored) {
|
||||
// TerraBlender's MixinMultiNoiseBiomeSource.addDebugInfo reads an internal
|
||||
// field (uniqueness) that it only injects into TerraBlender-registered sources.
|
||||
// Our delegate is not one of those, so we swallow the NPE here.
|
||||
}
|
||||
debug.add("Elythia mole cave cap: y<=" + this.molewormCavesMaxY);
|
||||
debug.add("Elythia sea level: " + this.seaLevel);
|
||||
|
||||
@@ -23,6 +23,8 @@ import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConf
|
||||
|
||||
public class ElythiaFloraFeature extends Feature<NoneFeatureConfiguration> {
|
||||
private static final String SIZEABLE_FOLIAGE_MODID = "sizeable_foliage";
|
||||
private static final ResourceLocation CAMELLIA_ID = ResourceLocation.fromNamespaceAndPath("antarchy", "camellia");
|
||||
private static final ResourceLocation SPIDER_LILY_ID = ResourceLocation.fromNamespaceAndPath("antarchy", "spider_lily");
|
||||
|
||||
private final Variant variant;
|
||||
|
||||
@@ -40,20 +42,18 @@ public class ElythiaFloraFeature extends Feature<NoneFeatureConfiguration> {
|
||||
case FOREST -> 185;
|
||||
case MEADOW -> 95;
|
||||
case PEACH_FOREST -> 120;
|
||||
case TORCHFLOWER_FIELDS -> 60;
|
||||
case BUTTERFLY_FIELDS -> 150;
|
||||
case FLOWER_FOREST_MILKWEED -> 14;
|
||||
};
|
||||
int radius = switch (this.variant) {
|
||||
case FOREST -> 8;
|
||||
case MEADOW, PEACH_FOREST, TORCHFLOWER_FIELDS -> 14;
|
||||
case MEADOW, PEACH_FOREST -> 14;
|
||||
case BUTTERFLY_FIELDS -> 18;
|
||||
case FLOWER_FOREST_MILKWEED -> 8;
|
||||
};
|
||||
boolean placedAny = false;
|
||||
|
||||
int torchflowerPatchRolls = switch (this.variant) {
|
||||
case TORCHFLOWER_FIELDS -> 3 + random.nextInt(3);
|
||||
case BUTTERFLY_FIELDS -> 2 + random.nextInt(3);
|
||||
case PEACH_FOREST -> 1;
|
||||
case FLOWER_FOREST_MILKWEED -> 0;
|
||||
@@ -64,7 +64,6 @@ public class ElythiaFloraFeature extends Feature<NoneFeatureConfiguration> {
|
||||
case FOREST -> 0.24F;
|
||||
case MEADOW -> 0.42F;
|
||||
case PEACH_FOREST -> 0.08F;
|
||||
case TORCHFLOWER_FIELDS -> 0.95F;
|
||||
case BUTTERFLY_FIELDS -> 0.24F;
|
||||
case FLOWER_FOREST_MILKWEED -> 0.0F;
|
||||
};
|
||||
@@ -76,7 +75,6 @@ public class ElythiaFloraFeature extends Feature<NoneFeatureConfiguration> {
|
||||
if (random.nextFloat() < switch (this.variant) {
|
||||
case MEADOW -> 0.1F;
|
||||
case PEACH_FOREST -> 0.0F;
|
||||
case TORCHFLOWER_FIELDS -> 0.04F;
|
||||
case BUTTERFLY_FIELDS -> 0.12F;
|
||||
case FOREST -> 0.05F;
|
||||
case FLOWER_FOREST_MILKWEED -> 0.0F;
|
||||
@@ -86,7 +84,6 @@ public class ElythiaFloraFeature extends Feature<NoneFeatureConfiguration> {
|
||||
if (random.nextFloat() < switch (this.variant) {
|
||||
case MEADOW -> 0.16F;
|
||||
case PEACH_FOREST -> 0.0F;
|
||||
case TORCHFLOWER_FIELDS -> 0.08F;
|
||||
case BUTTERFLY_FIELDS -> 0.95F;
|
||||
case FOREST -> 0.06F;
|
||||
case FLOWER_FOREST_MILKWEED -> 0.18F;
|
||||
@@ -96,13 +93,15 @@ public class ElythiaFloraFeature extends Feature<NoneFeatureConfiguration> {
|
||||
if (random.nextFloat() < switch (this.variant) {
|
||||
case MEADOW -> 0.16F;
|
||||
case PEACH_FOREST -> 0.0F;
|
||||
case TORCHFLOWER_FIELDS -> 0.08F;
|
||||
case BUTTERFLY_FIELDS -> 0.95F;
|
||||
case FOREST -> 0.06F;
|
||||
case FLOWER_FOREST_MILKWEED -> 0.18F;
|
||||
}) {
|
||||
placedAny |= this.placeMilkweedPatch(level, origin, random, AntarchyObjects.PINK_MILKWEED.get());
|
||||
}
|
||||
if (this.variant == Variant.PEACH_FOREST && random.nextFloat() < 0.025F) {
|
||||
placedAny |= this.placeMilkweedPatch(level, origin, random, antarchyBlock(CAMELLIA_ID));
|
||||
}
|
||||
|
||||
if (this.variant == Variant.FOREST || this.variant == Variant.PEACH_FOREST) {
|
||||
placedAny |= this.placeBigBushes(level, origin, random, radius);
|
||||
@@ -132,20 +131,6 @@ public class ElythiaFloraFeature extends Feature<NoneFeatureConfiguration> {
|
||||
}
|
||||
|
||||
private boolean placeSelectedPlant(WorldGenLevel level, BlockPos plantPos, BlockPos groundPos, RandomSource random) {
|
||||
if (this.variant == Variant.TORCHFLOWER_FIELDS) {
|
||||
float roll = random.nextFloat();
|
||||
if (roll < 0.14F) {
|
||||
return placeDouble(level, plantPos, torchflowerBush().defaultBlockState());
|
||||
}
|
||||
if (roll < 0.58F) {
|
||||
return placeSingle(level, plantPos, Blocks.TORCHFLOWER);
|
||||
}
|
||||
if (roll < 0.94F) {
|
||||
return placeSingle(level, plantPos, Blocks.SHORT_GRASS);
|
||||
}
|
||||
return placeDouble(level, plantPos, Blocks.TALL_GRASS.defaultBlockState());
|
||||
}
|
||||
|
||||
if (this.variant == Variant.BUTTERFLY_FIELDS) {
|
||||
float roll = random.nextFloat();
|
||||
if (roll < 0.18F) {
|
||||
@@ -179,6 +164,9 @@ public class ElythiaFloraFeature extends Feature<NoneFeatureConfiguration> {
|
||||
|
||||
if (this.variant == Variant.PEACH_FOREST) {
|
||||
float roll = random.nextFloat();
|
||||
if (roll < 0.01F) {
|
||||
return placeSingle(level, plantPos, antarchyBlock(SPIDER_LILY_ID));
|
||||
}
|
||||
if (roll < 0.58F) {
|
||||
return placeSingle(level, plantPos, Blocks.SHORT_GRASS);
|
||||
}
|
||||
@@ -231,6 +219,14 @@ public class ElythiaFloraFeature extends Feature<NoneFeatureConfiguration> {
|
||||
return block == Blocks.AIR ? Blocks.TORCHFLOWER : block;
|
||||
}
|
||||
|
||||
private static Block antarchyBlock(ResourceLocation id) {
|
||||
Block block = BuiltInRegistries.BLOCK.get(id);
|
||||
if (block == Blocks.AIR) {
|
||||
throw new IllegalStateException("Missing block: " + id);
|
||||
}
|
||||
return block;
|
||||
}
|
||||
|
||||
private boolean placeBigBushes(WorldGenLevel level, BlockPos origin, RandomSource random, int radius) {
|
||||
Block bushBlock = BuiltInRegistries.BLOCK.get(ResourceLocation.fromNamespaceAndPath(SIZEABLE_FOLIAGE_MODID, "big_bush"));
|
||||
if (!(bushBlock instanceof BigBushBlock)) {
|
||||
@@ -343,18 +339,23 @@ public class ElythiaFloraFeature extends Feature<NoneFeatureConfiguration> {
|
||||
return false;
|
||||
}
|
||||
|
||||
int radius = this.variant == Variant.TORCHFLOWER_FIELDS ? 4 : this.variant == Variant.MEADOW ? 3 : this.variant == Variant.BUTTERFLY_FIELDS ? 3 : 2;
|
||||
int plants = this.variant == Variant.TORCHFLOWER_FIELDS
|
||||
? 8 + random.nextInt(8)
|
||||
: this.variant == Variant.BUTTERFLY_FIELDS
|
||||
int radius = this.variant == Variant.MEADOW ? 3 : this.variant == Variant.BUTTERFLY_FIELDS ? 3 : 2;
|
||||
int plants = this.variant == Variant.BUTTERFLY_FIELDS
|
||||
? 4 + random.nextInt(5)
|
||||
: 3 + random.nextInt(this.variant == Variant.MEADOW ? 4 : 3);
|
||||
boolean bushEligible = this.variant == Variant.FOREST || this.variant == Variant.MEADOW;
|
||||
boolean placed = false;
|
||||
for (int i = 0; i < plants; i++) {
|
||||
BlockPos plantPos = samplePatchPos(level, patchCenter, radius, random);
|
||||
if (plantPos == null) {
|
||||
continue;
|
||||
}
|
||||
if (bushEligible && random.nextFloat() < 0.12F) {
|
||||
if (placeDouble(level, plantPos, torchflowerBush().defaultBlockState())) {
|
||||
placed = true;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if (placeSingle(level, plantPos, Blocks.TORCHFLOWER)) {
|
||||
placed = true;
|
||||
}
|
||||
@@ -421,7 +422,6 @@ public class ElythiaFloraFeature extends Feature<NoneFeatureConfiguration> {
|
||||
case FOREST -> 3;
|
||||
case MEADOW -> 5;
|
||||
case PEACH_FOREST -> 3;
|
||||
case TORCHFLOWER_FIELDS -> 2;
|
||||
case BUTTERFLY_FIELDS -> 3;
|
||||
case FLOWER_FOREST_MILKWEED -> 2;
|
||||
};
|
||||
@@ -581,7 +581,6 @@ public class ElythiaFloraFeature extends Feature<NoneFeatureConfiguration> {
|
||||
FOREST,
|
||||
MEADOW,
|
||||
PEACH_FOREST,
|
||||
TORCHFLOWER_FIELDS,
|
||||
BUTTERFLY_FIELDS,
|
||||
FLOWER_FOREST_MILKWEED
|
||||
}
|
||||
|
||||
@@ -19,8 +19,6 @@ public final class LumenPoolFeature extends Feature<NoneFeatureConfiguration> {
|
||||
private static final int SMALL_RADIUS_MAX = 4;
|
||||
private static final int LARGE_RADIUS_MIN = 5;
|
||||
private static final int LARGE_RADIUS_MAX = 6;
|
||||
private static final int HUGE_RADIUS_MIN = 11;
|
||||
private static final int HUGE_RADIUS_MAX = 17;
|
||||
|
||||
public LumenPoolFeature(Codec<NoneFeatureConfiguration> codec) {
|
||||
super(codec);
|
||||
@@ -37,18 +35,10 @@ public final class LumenPoolFeature extends Feature<NoneFeatureConfiguration> {
|
||||
return false;
|
||||
}
|
||||
|
||||
int radius;
|
||||
int maxDepth;
|
||||
if (random.nextInt(20) == 0) {
|
||||
radius = randomBetween(random, HUGE_RADIUS_MIN, HUGE_RADIUS_MAX);
|
||||
maxDepth = randomBetween(random, 9, 13);
|
||||
} else if (random.nextInt(8) == 0) {
|
||||
radius = randomBetween(random, LARGE_RADIUS_MIN, LARGE_RADIUS_MAX);
|
||||
maxDepth = randomBetween(random, 4, 6);
|
||||
} else {
|
||||
radius = randomBetween(random, SMALL_RADIUS_MIN, SMALL_RADIUS_MAX);
|
||||
maxDepth = randomBetween(random, 3, 4);
|
||||
}
|
||||
int radius = random.nextInt(8) == 0
|
||||
? randomBetween(random, LARGE_RADIUS_MIN, LARGE_RADIUS_MAX)
|
||||
: randomBetween(random, SMALL_RADIUS_MIN, SMALL_RADIUS_MAX);
|
||||
int maxDepth = radius >= LARGE_RADIUS_MIN ? randomBetween(random, 4, 6) : randomBetween(random, 3, 4);
|
||||
BlockState lumenBlockState = AntarchyObjects.LUMEN_BLOCK.get().defaultBlockState();
|
||||
BlockState shellstoneState = AntarchyObjects.SHELLSTONE.get().defaultBlockState();
|
||||
BlockState tuffState = Blocks.TUFF.defaultBlockState();
|
||||
@@ -123,12 +113,26 @@ public final class LumenPoolFeature extends Feature<NoneFeatureConfiguration> {
|
||||
BlockState floorState = pickFloorState(random, shellstoneState, tuffState, mossState, edge);
|
||||
level.setBlock(mutable, floorState, 2);
|
||||
placedAny = true;
|
||||
|
||||
clearFloatingVegetation(level, worldX, worldZ, localSurfaceY);
|
||||
}
|
||||
}
|
||||
|
||||
return placedAny;
|
||||
}
|
||||
|
||||
private static void clearFloatingVegetation(WorldGenLevel level, int x, int z, int surfaceY) {
|
||||
int topOfDebris = Math.max(surfaceY, level.getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, x, z) - 1);
|
||||
BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos();
|
||||
for (int offset = 1; offset <= 32; offset++) {
|
||||
mutable.set(x, topOfDebris + offset, z);
|
||||
BlockState state = level.getBlockState(mutable);
|
||||
if (!state.isAir() && state.canBeReplaced()) {
|
||||
level.setBlock(mutable, Blocks.AIR.defaultBlockState(), 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static BlockPos findSurfaceCenter(WorldGenLevel level, BlockPos origin) {
|
||||
int bestY = Integer.MIN_VALUE;
|
||||
BlockPos bestPos = null;
|
||||
|
||||
@@ -0,0 +1,249 @@
|
||||
package com.craisinlord.antarchy.content.worldgen.elythia;
|
||||
|
||||
import com.craisinlord.antarchy.content.AntarchyObjects;
|
||||
import com.mojang.serialization.Codec;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.util.Mth;
|
||||
import net.minecraft.util.RandomSource;
|
||||
import net.minecraft.world.level.WorldGenLevel;
|
||||
import net.minecraft.world.level.block.Blocks;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.level.levelgen.Heightmap;
|
||||
import net.minecraft.world.level.levelgen.feature.Feature;
|
||||
import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext;
|
||||
import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration;
|
||||
|
||||
public final class LumenSpireFeature extends Feature<NoneFeatureConfiguration> {
|
||||
private static final int MIN_HEIGHT = 15;
|
||||
private static final int MAX_HEIGHT = 20;
|
||||
private static final int MIN_LEVELS = 3;
|
||||
private static final int MAX_LEVELS = 4;
|
||||
private static final int SHAFT_RADIUS = 3;
|
||||
private static final int SHELF_RADIUS = SHAFT_RADIUS + 2;
|
||||
private static final int POOL_RADIUS = 2;
|
||||
|
||||
public LumenSpireFeature(Codec<NoneFeatureConfiguration> codec) {
|
||||
super(codec);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean place(FeaturePlaceContext<NoneFeatureConfiguration> context) {
|
||||
WorldGenLevel level = context.level();
|
||||
RandomSource random = context.random();
|
||||
BlockPos origin = context.origin();
|
||||
|
||||
BlockPos base = findSurfaceCenter(level, origin);
|
||||
if (base == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
int height = randomBetween(random, MIN_HEIGHT, MAX_HEIGHT);
|
||||
int levels = randomBetween(random, MIN_LEVELS, MAX_LEVELS);
|
||||
if (base.getY() + height >= level.getMaxBuildHeight() - 2) {
|
||||
return false;
|
||||
}
|
||||
|
||||
BlockState shellstoneState = AntarchyObjects.SHELLSTONE.get().defaultBlockState();
|
||||
BlockState tuffState = Blocks.TUFF.defaultBlockState();
|
||||
BlockState mossState = Blocks.MOSS_BLOCK.defaultBlockState();
|
||||
BlockState lumenBlockState = AntarchyObjects.LUMEN_BLOCK.get().defaultBlockState();
|
||||
|
||||
Direction cascadeDir = Direction.Plane.HORIZONTAL.getRandomDirection(random);
|
||||
int cascadeX = cascadeDir.getStepX() * (SHAFT_RADIUS + 1);
|
||||
int cascadeZ = cascadeDir.getStepZ() * (SHAFT_RADIUS + 1);
|
||||
int lipX = cascadeDir.getStepX() * (SHAFT_RADIUS + 1 + POOL_RADIUS);
|
||||
int lipZ = cascadeDir.getStepZ() * (SHAFT_RADIUS + 1 + POOL_RADIUS);
|
||||
|
||||
boolean placed = false;
|
||||
for (int y = 0; y <= height; y++) {
|
||||
double heightFraction = (double) y / height;
|
||||
int radius = Math.max(2, Mth.floor(SHAFT_RADIUS * (1.0D - heightFraction * 0.35D)));
|
||||
placed |= placePillarSlice(level, base.above(y), radius, random, shellstoneState, tuffState, mossState);
|
||||
}
|
||||
|
||||
int[] terraceHeights = new int[levels];
|
||||
for (int i = 0; i < levels; i++) {
|
||||
terraceHeights[i] = Mth.floor(height * (double) (i + 1) / levels);
|
||||
}
|
||||
|
||||
int lipWorldX = base.getX() + lipX;
|
||||
int lipWorldZ = base.getZ() + lipZ;
|
||||
int groundLandingY = level.getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, lipWorldX, lipWorldZ) - 1;
|
||||
|
||||
for (int i = levels - 1; i >= 0; i--) {
|
||||
int terraceY = base.getY() + terraceHeights[i];
|
||||
BlockPos shelfCenter = new BlockPos(base.getX(), terraceY, base.getZ());
|
||||
placeShelfRing(level, shelfCenter, random, shellstoneState, tuffState, mossState);
|
||||
|
||||
BlockPos poolCenter = new BlockPos(base.getX() + cascadeX, terraceY, base.getZ() + cascadeZ);
|
||||
carveTerracePool(level, poolCenter, shellstoneState, tuffState, lumenBlockState, i == levels - 1);
|
||||
|
||||
BlockPos lipPos = new BlockPos(base.getX() + lipX, terraceY - 1, base.getZ() + lipZ);
|
||||
level.setBlock(lipPos, Blocks.AIR.defaultBlockState(), 2);
|
||||
|
||||
int nextTerraceY = i > 0 ? base.getY() + terraceHeights[i - 1] : groundLandingY;
|
||||
for (int y = terraceY - 2; y > nextTerraceY; y--) {
|
||||
level.setBlock(new BlockPos(lipWorldX, y, lipWorldZ), Blocks.AIR.defaultBlockState(), 2);
|
||||
}
|
||||
|
||||
clearAboveShelf(level, shelfCenter);
|
||||
placed = true;
|
||||
}
|
||||
|
||||
carveBaseBasin(level, new BlockPos(lipWorldX, groundLandingY, lipWorldZ), random, shellstoneState, tuffState, mossState, lumenBlockState);
|
||||
|
||||
return placed;
|
||||
}
|
||||
|
||||
private static boolean placePillarSlice(WorldGenLevel level, BlockPos center, int radius, RandomSource random, BlockState shellstoneState, BlockState tuffState, BlockState mossState) {
|
||||
boolean placed = false;
|
||||
double rr = radius * radius;
|
||||
for (int x = -radius; x <= radius; x++) {
|
||||
for (int z = -radius; z <= radius; z++) {
|
||||
double distance = (x * x + z * z) / Math.max(1.0D, rr);
|
||||
if (distance > 1.0D) {
|
||||
continue;
|
||||
}
|
||||
|
||||
BlockPos targetPos = center.offset(x, 0, z);
|
||||
BlockState existing = level.getBlockState(targetPos);
|
||||
if (!LumenWorldgenHelper.isSolidSupport(existing)) {
|
||||
level.setBlock(targetPos, pickBodyState(distance, random, shellstoneState, tuffState, mossState), 2);
|
||||
placed = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return placed;
|
||||
}
|
||||
|
||||
private static void placeShelfRing(WorldGenLevel level, BlockPos center, RandomSource random, BlockState shellstoneState, BlockState tuffState, BlockState mossState) {
|
||||
double rr = SHELF_RADIUS * SHELF_RADIUS;
|
||||
for (int x = -SHELF_RADIUS; x <= SHELF_RADIUS; x++) {
|
||||
for (int z = -SHELF_RADIUS; z <= SHELF_RADIUS; z++) {
|
||||
double distance = (x * x + z * z) / Math.max(1.0D, rr);
|
||||
if (distance > 1.0D) {
|
||||
continue;
|
||||
}
|
||||
|
||||
BlockPos topPos = center.offset(x, 0, z);
|
||||
level.setBlock(topPos, pickBodyState(distance, random, shellstoneState, tuffState, mossState), 2);
|
||||
level.setBlock(topPos.below(), shellstoneState, 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void carveTerracePool(WorldGenLevel level, BlockPos poolCenter, BlockState shellstoneState, BlockState tuffState, BlockState lumenBlockState, boolean isApex) {
|
||||
double rr = POOL_RADIUS * POOL_RADIUS;
|
||||
for (int x = -POOL_RADIUS; x <= POOL_RADIUS; x++) {
|
||||
for (int z = -POOL_RADIUS; z <= POOL_RADIUS; z++) {
|
||||
double distance = (x * x + z * z) / Math.max(1.0D, rr);
|
||||
if (distance > 1.0D) {
|
||||
continue;
|
||||
}
|
||||
|
||||
BlockPos floorPos = poolCenter.offset(x, -1, z);
|
||||
BlockPos surfacePos = poolCenter.offset(x, 0, z);
|
||||
level.setBlock(floorPos, shellstoneState, 2);
|
||||
if (distance <= 0.55D) {
|
||||
level.setBlock(surfacePos, LumenWorldgenHelper.lumenState(lumenBlockState, true), 2);
|
||||
LumenWorldgenHelper.scheduleFluidTick(level, surfacePos);
|
||||
} else {
|
||||
level.setBlock(surfacePos, tuffState, 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (isApex) {
|
||||
level.setBlock(poolCenter, LumenWorldgenHelper.lumenState(lumenBlockState, true), 2);
|
||||
LumenWorldgenHelper.scheduleFluidTick(level, poolCenter);
|
||||
}
|
||||
}
|
||||
|
||||
private static void carveBaseBasin(WorldGenLevel level, BlockPos landingPos, RandomSource random, BlockState shellstoneState, BlockState tuffState, BlockState mossState, BlockState lumenBlockState) {
|
||||
int radius = 4 + random.nextInt(2);
|
||||
int depth = 2 + random.nextInt(2);
|
||||
int waterlineY = landingPos.getY() - 1;
|
||||
int floorY = waterlineY - depth;
|
||||
double rr = radius * radius;
|
||||
|
||||
for (int x = -radius - 1; x <= radius + 1; x++) {
|
||||
for (int z = -radius - 1; z <= radius + 1; z++) {
|
||||
double distance = (x * x + z * z) / Math.max(1.0D, rr);
|
||||
BlockPos topPos = landingPos.offset(x, 0, z);
|
||||
int surfaceY = level.getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, topPos.getX(), topPos.getZ()) - 1;
|
||||
|
||||
if (distance <= 1.0D) {
|
||||
for (int y = surfaceY; y > floorY; y--) {
|
||||
BlockPos fillPos = new BlockPos(topPos.getX(), y, topPos.getZ());
|
||||
if (y > waterlineY) {
|
||||
level.setBlock(fillPos, Blocks.AIR.defaultBlockState(), 2);
|
||||
} else {
|
||||
level.setBlock(fillPos, LumenWorldgenHelper.lumenState(lumenBlockState, 0), 2);
|
||||
LumenWorldgenHelper.scheduleFluidTick(level, fillPos);
|
||||
}
|
||||
}
|
||||
level.setBlock(new BlockPos(topPos.getX(), floorY, topPos.getZ()), pickBodyState(distance, random, shellstoneState, tuffState, mossState), 2);
|
||||
} else if (distance <= 1.25D) {
|
||||
for (int y = surfaceY; y >= floorY; y--) {
|
||||
level.setBlock(new BlockPos(topPos.getX(), y, topPos.getZ()), pickBodyState(distance, random, shellstoneState, tuffState, mossState), 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
level.setBlock(landingPos, LumenWorldgenHelper.lumenState(lumenBlockState, true), 2);
|
||||
LumenWorldgenHelper.scheduleFluidTick(level, landingPos);
|
||||
}
|
||||
|
||||
private static void clearAboveShelf(WorldGenLevel level, BlockPos shelfCenter) {
|
||||
for (int x = -SHELF_RADIUS; x <= SHELF_RADIUS; x++) {
|
||||
for (int z = -SHELF_RADIUS; z <= SHELF_RADIUS; z++) {
|
||||
double distance = (x * x + z * z) / (double) (SHELF_RADIUS * SHELF_RADIUS);
|
||||
if (distance > 1.0D) {
|
||||
continue;
|
||||
}
|
||||
|
||||
BlockPos columnTop = shelfCenter.offset(x, 0, z);
|
||||
for (int offset = 1; offset <= 16; offset++) {
|
||||
BlockPos abovePos = columnTop.above(offset);
|
||||
BlockState aboveState = level.getBlockState(abovePos);
|
||||
if (!aboveState.isAir() && aboveState.canBeReplaced()) {
|
||||
level.setBlock(abovePos, Blocks.AIR.defaultBlockState(), 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static BlockState pickBodyState(double distance, RandomSource random, BlockState shellstoneState, BlockState tuffState, BlockState mossState) {
|
||||
if (distance > 0.85D) {
|
||||
return random.nextFloat() < 0.4F ? mossState : tuffState;
|
||||
}
|
||||
return random.nextFloat() < 0.7F ? shellstoneState : tuffState;
|
||||
}
|
||||
|
||||
private static BlockPos findSurfaceCenter(WorldGenLevel level, BlockPos origin) {
|
||||
int bestY = Integer.MIN_VALUE;
|
||||
BlockPos bestPos = null;
|
||||
for (int dx = -4; dx <= 4; dx++) {
|
||||
for (int dz = -4; dz <= 4; dz++) {
|
||||
int x = origin.getX() + dx;
|
||||
int z = origin.getZ() + dz;
|
||||
int topY = level.getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, x, z) - 1;
|
||||
BlockPos pos = LumenWorldgenHelper.findNaturalFloor(level, x, z, topY, level.getMinBuildHeight() + 1);
|
||||
if (pos != null && pos.getY() > bestY) {
|
||||
bestY = pos.getY();
|
||||
bestPos = pos;
|
||||
}
|
||||
}
|
||||
}
|
||||
return bestPos;
|
||||
}
|
||||
|
||||
private static int randomBetween(RandomSource random, int minInclusive, int maxInclusive) {
|
||||
int min = Math.min(minInclusive, maxInclusive);
|
||||
int max = Math.max(minInclusive, maxInclusive);
|
||||
return min >= max ? min : min + random.nextInt(max - min + 1);
|
||||
}
|
||||
}
|
||||
@@ -15,9 +15,9 @@ import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext;
|
||||
import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration;
|
||||
|
||||
public final class LumenStreamFeature extends Feature<NoneFeatureConfiguration> {
|
||||
private static final int MAX_LENGTH = 160;
|
||||
private static final int MIN_LENGTH = 60;
|
||||
private static final int MAX_WIDTH = 4;
|
||||
private static final int MAX_LENGTH = 36;
|
||||
private static final int MIN_LENGTH = 12;
|
||||
private static final int MAX_WIDTH = 2;
|
||||
|
||||
public LumenStreamFeature(Codec<NoneFeatureConfiguration> codec) {
|
||||
super(codec);
|
||||
|
||||
@@ -17,6 +17,8 @@ import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext;
|
||||
import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration;
|
||||
|
||||
public class PeachForestMossyBoulderFeature extends Feature<NoneFeatureConfiguration> {
|
||||
private static final int ANGLE_SAMPLES = 16;
|
||||
|
||||
public PeachForestMossyBoulderFeature(Codec<NoneFeatureConfiguration> codec) {
|
||||
super(codec);
|
||||
}
|
||||
@@ -36,20 +38,25 @@ public class PeachForestMossyBoulderFeature extends Feature<NoneFeatureConfigura
|
||||
int baseRadius = 2 * (2 + random.nextInt(2));
|
||||
boolean placed = false;
|
||||
|
||||
int driftX = 0;
|
||||
int driftZ = 0;
|
||||
double[] silhouetteNoise = generateSilhouetteNoise(random);
|
||||
double leanMagnitude = random.nextDouble() * 1.6D;
|
||||
double leanAngle = random.nextDouble() * Math.PI * 2.0D;
|
||||
double wobbleAmplitude = 0.4D + random.nextDouble() * 0.4D;
|
||||
double wobblePhase = random.nextDouble() * Math.PI * 2.0D;
|
||||
|
||||
int topRadius = 1;
|
||||
BlockPos topCenter = base;
|
||||
for (int y = 0; y < height; y++) {
|
||||
double heightFraction = (double) y / (height - 1);
|
||||
double taper = 1.0D - heightFraction * 0.7D;
|
||||
double taper = Math.cos(heightFraction * Math.PI * 0.5D);
|
||||
int radius = Math.max(1, Math.round((float) (baseRadius * taper)));
|
||||
|
||||
driftX = Mth.clamp(driftX + random.nextInt(3) - 1, -1, 1);
|
||||
driftZ = Mth.clamp(driftZ + random.nextInt(3) - 1, -1, 1);
|
||||
double wobble = Math.sin(heightFraction * Math.PI * 1.5D + wobblePhase) * wobbleAmplitude;
|
||||
int driftX = (int) Math.round(Math.cos(leanAngle) * leanMagnitude * heightFraction + Math.cos(leanAngle + Math.PI * 0.5D) * wobble);
|
||||
int driftZ = (int) Math.round(Math.sin(leanAngle) * leanMagnitude * heightFraction + Math.sin(leanAngle + Math.PI * 0.5D) * wobble);
|
||||
BlockPos levelCenter = base.above(y).offset(driftX, 0, driftZ);
|
||||
|
||||
placed |= this.placeDisk(level, levelCenter, radius, heightFraction, random);
|
||||
placed |= this.placeDisk(level, levelCenter, radius, heightFraction, silhouetteNoise, random);
|
||||
topCenter = levelCenter;
|
||||
topRadius = radius;
|
||||
}
|
||||
@@ -61,13 +68,35 @@ public class PeachForestMossyBoulderFeature extends Feature<NoneFeatureConfigura
|
||||
return placed;
|
||||
}
|
||||
|
||||
private boolean placeDisk(WorldGenLevel level, BlockPos center, int radius, double heightFraction, RandomSource random) {
|
||||
private static double[] generateSilhouetteNoise(RandomSource random) {
|
||||
double[] noise = new double[ANGLE_SAMPLES];
|
||||
for (int i = 0; i < ANGLE_SAMPLES; i++) {
|
||||
noise[i] = 0.88D + random.nextDouble() * 0.24D;
|
||||
}
|
||||
return noise;
|
||||
}
|
||||
|
||||
private static double sampleSilhouetteNoise(double[] noise, int x, int z) {
|
||||
if (x == 0 && z == 0) {
|
||||
return 1.0D;
|
||||
}
|
||||
|
||||
double angle = Math.atan2(z, x);
|
||||
double normalized = (angle / (Math.PI * 2.0D) + 1.0D) * ANGLE_SAMPLES;
|
||||
int index0 = ((int) Math.floor(normalized)) % ANGLE_SAMPLES;
|
||||
int index1 = (index0 + 1) % ANGLE_SAMPLES;
|
||||
double t = normalized - Math.floor(normalized);
|
||||
return Mth.lerp(t, noise[index0], noise[index1]);
|
||||
}
|
||||
|
||||
private boolean placeDisk(WorldGenLevel level, BlockPos center, int radius, double heightFraction, double[] silhouetteNoise, RandomSource random) {
|
||||
boolean placed = false;
|
||||
double rr = radius * radius;
|
||||
for (int x = -radius; x <= radius; x++) {
|
||||
for (int z = -radius; z <= radius; z++) {
|
||||
double distance = (x * x + z * z) / Math.max(1.0D, rr);
|
||||
if (distance > 1.0D + random.nextDouble() * 0.3D) {
|
||||
double noiseFactor = sampleSilhouetteNoise(silhouetteNoise, x, z);
|
||||
double distance = (x * x + z * z) / (Math.max(1.0D, rr) * noiseFactor * noiseFactor);
|
||||
if (distance > 1.0D) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
@@ -39,6 +39,9 @@ public class PeachForestPondFeature extends Feature<PeachForestPondConfiguration
|
||||
double[] edgeNoise = generateEdgeNoise(random);
|
||||
boolean placed = false;
|
||||
|
||||
int rimHeight = 2 + Math.max(0, (Math.max(radiusX, radiusZ) - 10) / 6);
|
||||
int rimTopY = center.getY() + rimHeight;
|
||||
|
||||
for (int x = -radiusX - 2; x <= radiusX + 2; x++) {
|
||||
for (int z = -radiusZ - 2; z <= radiusZ + 2; z++) {
|
||||
double noiseFactor = sampleEdgeNoise(edgeNoise, x, z);
|
||||
@@ -48,17 +51,19 @@ public class PeachForestPondFeature extends Feature<PeachForestPondConfiguration
|
||||
if (distance <= 1.0D) {
|
||||
int floorY = center.getY() - (distance < 0.4D ? depth + 1 : depth);
|
||||
for (int y = center.getY(); y > floorY; y--) {
|
||||
level.setBlock(new BlockPos(topPos.getX(), y, topPos.getZ()), Blocks.WATER.defaultBlockState(), 2);
|
||||
BlockPos waterPos = new BlockPos(topPos.getX(), y, topPos.getZ());
|
||||
level.setBlock(waterPos, Blocks.WATER.defaultBlockState(), 2);
|
||||
LumenWorldgenHelper.scheduleFluidTick(level, waterPos);
|
||||
}
|
||||
level.setBlock(new BlockPos(topPos.getX(), floorY, topPos.getZ()), Blocks.TUFF.defaultBlockState(), 2);
|
||||
clearFloatingVegetation(level, topPos, center.getY());
|
||||
placed = true;
|
||||
} else if (distance <= 1.2D) {
|
||||
int floorY = center.getY() - depth;
|
||||
for (int y = center.getY(); y >= floorY; y--) {
|
||||
for (int y = rimTopY; y >= floorY; y--) {
|
||||
level.setBlock(new BlockPos(topPos.getX(), y, topPos.getZ()), Blocks.TUFF.defaultBlockState(), 2);
|
||||
}
|
||||
clearFloatingVegetation(level, topPos, center.getY());
|
||||
clearFloatingVegetation(level, topPos, rimTopY);
|
||||
placed = true;
|
||||
} else if (distance <= 1.45D && isSoil(level.getBlockState(topPos))) {
|
||||
level.setBlock(topPos, Blocks.TUFF.defaultBlockState(), 2);
|
||||
@@ -96,16 +101,12 @@ public class PeachForestPondFeature extends Feature<PeachForestPondConfiguration
|
||||
|
||||
private static void clearFloatingVegetation(WorldGenLevel level, BlockPos topPos, int surfaceY) {
|
||||
int topOfDebris = Math.max(surfaceY, level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, topPos.getX(), topPos.getZ()) - 1);
|
||||
int airStreak = 0;
|
||||
for (int offset = 1; offset <= 24 && airStreak < 3; offset++) {
|
||||
for (int offset = 1; offset <= 32; offset++) {
|
||||
BlockPos abovePos = new BlockPos(topPos.getX(), topOfDebris + offset, topPos.getZ());
|
||||
BlockState aboveState = level.getBlockState(abovePos);
|
||||
if (aboveState.isAir()) {
|
||||
airStreak++;
|
||||
continue;
|
||||
if (!aboveState.isAir() && aboveState.canBeReplaced()) {
|
||||
level.setBlock(abovePos, Blocks.AIR.defaultBlockState(), 2);
|
||||
}
|
||||
airStreak = 0;
|
||||
level.setBlock(abovePos, Blocks.AIR.defaultBlockState(), 2);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"variants": {
|
||||
"half=lower": {
|
||||
"model": "antarchy:block/camellia_bottom"
|
||||
},
|
||||
"half=upper": {
|
||||
"model": "antarchy:block/camellia_top"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"variants": {
|
||||
"": {
|
||||
"model": "minecraft:block/jungle_hanging_sign"
|
||||
"model": "antarchy:block/ouranwood_hanging_sign"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"variants": {
|
||||
"": {
|
||||
"model": "minecraft:block/jungle_sign"
|
||||
"model": "antarchy:block/ouranwood_sign"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"variants": {
|
||||
"": {
|
||||
"model": "minecraft:block/jungle_hanging_sign"
|
||||
"model": "antarchy:block/ouranwood_wall_hanging_sign"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"variants": {
|
||||
"": {
|
||||
"model": "minecraft:block/jungle_sign"
|
||||
"model": "antarchy:block/ouranwood_wall_sign"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"variants": {
|
||||
"": {
|
||||
"model": "minecraft:block/jungle_hanging_sign"
|
||||
"model": "antarchy:block/peach_hanging_sign"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"variants": {
|
||||
"": {
|
||||
"model": "minecraft:block/jungle_sign"
|
||||
"model": "antarchy:block/peach_sign"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"variants": {
|
||||
"": {
|
||||
"model": "minecraft:block/jungle_hanging_sign"
|
||||
"model": "antarchy:block/peach_wall_hanging_sign"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"variants": {
|
||||
"": {
|
||||
"model": "minecraft:block/jungle_sign"
|
||||
"model": "antarchy:block/peach_wall_sign"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"variants": {
|
||||
"": {
|
||||
"model": "antarchy:block/spider_lily"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -39,6 +39,8 @@
|
||||
"block.antarchy.peach_hanging_sign": "Peach Hanging Sign",
|
||||
"block.antarchy.orange_milkweed": "Orange Milkweed",
|
||||
"block.antarchy.pink_milkweed": "Pink Milkweed",
|
||||
"block.antarchy.camellia": "Camellia",
|
||||
"block.antarchy.spider_lily": "Spider Lily",
|
||||
"block.antarchy.hushweed": "Hushweed",
|
||||
"block.antarchy.umbral_moss_block": "Umbral Moss Block",
|
||||
"block.antarchy.umbral_moss_carpet": "Umbral Moss Carpet",
|
||||
@@ -282,12 +284,17 @@
|
||||
"item.antarchy.cooked_venison": "Cooked Venison",
|
||||
"item.antarchy.peach_sapling": "Peach Sapling",
|
||||
"item.antarchy.peach": "Peach",
|
||||
"item.antarchy.peach_pie": "Peach Pie",
|
||||
"item.antarchy.cornbread": "Cornbread",
|
||||
"item.antarchy.popcorn": "Popcorn",
|
||||
"item.antarchy.peach_sign": "Peach Sign",
|
||||
"item.antarchy.peach_hanging_sign": "Peach Hanging Sign",
|
||||
"item.antarchy.peach_boat": "Peach Boat",
|
||||
"item.antarchy.peach_chest_boat": "Peach Chest Boat",
|
||||
"item.antarchy.orange_milkweed": "Orange Milkweed",
|
||||
"item.antarchy.pink_milkweed": "Pink Milkweed",
|
||||
"item.antarchy.camellia": "Camellia",
|
||||
"item.antarchy.spider_lily": "Spider Lily",
|
||||
"item.antarchy.hushweed": "Hushweed",
|
||||
"item.antarchy.umbral_moss_block": "Umbral Moss Block",
|
||||
"item.antarchy.umbral_moss_carpet": "Umbral Moss Carpet",
|
||||
@@ -459,7 +466,6 @@
|
||||
"item.antarchy.alpha_mantis_spawn_egg": "Alpha Mantis Spawn Egg",
|
||||
"biome.antarchy.moleworm_caves": "Moleworm Caves",
|
||||
"biome.antarchy.butterfly_fields": "Butterfly Fields",
|
||||
"biome.antarchy.torchflower_fields": "Torchflower Fields",
|
||||
"biome.antarchy.ouranwood_forest": "Ouranwood Forest",
|
||||
"biome.antarchy.glimmering_pools": "Glimmering Pools",
|
||||
"biome.antarchy.peach_forest": "Peach Forest",
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:block/cross",
|
||||
"textures": {
|
||||
"cross": "antarchy:block/camellia_bush_bottom"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:block/cross",
|
||||
"textures": {
|
||||
"cross": "antarchy:block/camellia_bush_top"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:block/template_hanging_sign",
|
||||
"textures": {
|
||||
"texture": "antarchy:models/ouranwood/ouranwood_hanging_sign"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:block/template_sign",
|
||||
"textures": {
|
||||
"texture": "antarchy:models/ouranwood/ouranwood_sign"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:block/template_wall_hanging_sign",
|
||||
"textures": {
|
||||
"texture": "antarchy:models/ouranwood/ouranwood_hanging_sign"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:block/template_wall_sign",
|
||||
"textures": {
|
||||
"texture": "antarchy:models/ouranwood/ouranwood_sign"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:block/template_hanging_sign",
|
||||
"textures": {
|
||||
"texture": "antarchy:block/peach/peach_hanging"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:block/template_sign",
|
||||
"textures": {
|
||||
"texture": "antarchy:item/peach_sign"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:block/template_wall_hanging_sign",
|
||||
"textures": {
|
||||
"texture": "antarchy:block/peach/peach_hanging"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:block/template_wall_sign",
|
||||
"textures": {
|
||||
"texture": "antarchy:item/peach_sign"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
{
|
||||
"parent": "minecraft:block/block",
|
||||
"textures": {
|
||||
"particle": "antarchy:block/spider_lily_top",
|
||||
"stem": "antarchy:block/spider_lily_stem",
|
||||
"flower": "antarchy:block/spider_lily_top"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"from": [0.8, 0, 8],
|
||||
"to": [15.2, 16, 8],
|
||||
"shade": false,
|
||||
"faces": {
|
||||
"north": { "uv": [0, 0, 16, 16], "texture": "#stem", "tintindex": 0 },
|
||||
"south": { "uv": [16, 0, 0, 16], "texture": "#stem", "tintindex": 0 }
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [8, 0, 0.8],
|
||||
"to": [8, 16, 15.2],
|
||||
"shade": false,
|
||||
"faces": {
|
||||
"west": { "uv": [0, 0, 16, 16], "texture": "#stem", "tintindex": 0 },
|
||||
"east": { "uv": [16, 0, 0, 16], "texture": "#stem", "tintindex": 0 }
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [0.8, 0, 8],
|
||||
"to": [15.2, 16, 8],
|
||||
"shade": false,
|
||||
"faces": {
|
||||
"north": { "uv": [0, 0, 16, 16], "texture": "#flower" },
|
||||
"south": { "uv": [16, 0, 0, 16], "texture": "#flower" }
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [8, 0, 0.8],
|
||||
"to": [8, 16, 15.2],
|
||||
"shade": false,
|
||||
"faces": {
|
||||
"west": { "uv": [0, 0, 16, 16], "texture": "#flower" },
|
||||
"east": { "uv": [16, 0, 0, 16], "texture": "#flower" }
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "antarchy:block/camellia_bush_top"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "antarchy:item/cornbread"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "antarchy:item/peach_pie"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "antarchy:item/popcorn"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "antarchy:block/spider_lily_stem",
|
||||
"layer1": "antarchy:block/spider_lily_top"
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 661 B |
|
After Width: | Height: | Size: 597 B |
|
After Width: | Height: | Size: 197 B |
|
After Width: | Height: | Size: 331 B |
|
After Width: | Height: | Size: 366 B |
|
Before Width: | Height: | Size: 458 B After Width: | Height: | Size: 443 B |
|
After Width: | Height: | Size: 417 B |
|
After Width: | Height: | Size: 412 B |
@@ -98,10 +98,10 @@
|
||||
"biome": "antarchy:peach_forest",
|
||||
"parameters": {
|
||||
"temperature": 0.67,
|
||||
"humidity": 0.93,
|
||||
"humidity": 0.91,
|
||||
"continentalness": 0.54,
|
||||
"erosion": 0.25,
|
||||
"weirdness": -0.50,
|
||||
"erosion": 0.16,
|
||||
"weirdness": -0.42,
|
||||
"depth": 0.45,
|
||||
"offset": 0.0
|
||||
}
|
||||
@@ -112,8 +112,32 @@
|
||||
"temperature": 0.66,
|
||||
"humidity": 0.89,
|
||||
"continentalness": 0.54,
|
||||
"erosion": 0.29,
|
||||
"weirdness": -0.58,
|
||||
"erosion": 0.38,
|
||||
"weirdness": -0.42,
|
||||
"depth": 0.45,
|
||||
"offset": 0.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"biome": "antarchy:peach_forest",
|
||||
"parameters": {
|
||||
"temperature": 0.68,
|
||||
"humidity": 0.93,
|
||||
"continentalness": 0.54,
|
||||
"erosion": 0.16,
|
||||
"weirdness": -0.74,
|
||||
"depth": 0.45,
|
||||
"offset": 0.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"biome": "antarchy:peach_forest",
|
||||
"parameters": {
|
||||
"temperature": 0.65,
|
||||
"humidity": 0.87,
|
||||
"continentalness": 0.55,
|
||||
"erosion": 0.38,
|
||||
"weirdness": -0.74,
|
||||
"depth": 0.45,
|
||||
"offset": 0.0
|
||||
}
|
||||
@@ -131,7 +155,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"biome": "antarchy:sparse_ouranwood_forest",
|
||||
"biome": "antarchy:ouranwood_forest",
|
||||
"parameters": {
|
||||
"temperature": 0.67,
|
||||
"humidity": 0.93,
|
||||
@@ -142,6 +166,18 @@
|
||||
"offset": 0.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"biome": "antarchy:ouranwood_forest",
|
||||
"parameters": {
|
||||
"temperature": 0.67,
|
||||
"humidity": 0.93,
|
||||
"continentalness": 0.54,
|
||||
"erosion": 0.20,
|
||||
"weirdness": -0.40,
|
||||
"depth": 0.45,
|
||||
"offset": 0.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"biome": "antarchy:ouranwood_forest",
|
||||
"parameters": {
|
||||
@@ -193,17 +229,17 @@
|
||||
{
|
||||
"biome": "antarchy:sparse_ouranwood_forest",
|
||||
"parameters": {
|
||||
"temperature": 0.45,
|
||||
"humidity": 0.85,
|
||||
"continentalness": 0.75,
|
||||
"erosion": 0.0,
|
||||
"weirdness": 0.7,
|
||||
"temperature": 0.20,
|
||||
"humidity": 0.62,
|
||||
"continentalness": 0.95,
|
||||
"erosion": -0.35,
|
||||
"weirdness": 0.98,
|
||||
"depth": 0.0,
|
||||
"offset": 0.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"biome": "antarchy:sparse_ouranwood_forest",
|
||||
"biome": "antarchy:ouranwood_forest",
|
||||
"parameters": {
|
||||
"temperature": 0.55,
|
||||
"humidity": 0.9,
|
||||
@@ -238,18 +274,6 @@
|
||||
"offset": 0.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"biome": "antarchy:torchflower_fields",
|
||||
"parameters": {
|
||||
"temperature": 0.76,
|
||||
"humidity": 0.98,
|
||||
"continentalness": 0.62,
|
||||
"erosion": 0.18,
|
||||
"weirdness": 0.32,
|
||||
"depth": 0.0,
|
||||
"offset": 0.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"biome": "antarchy:butterfly_fields",
|
||||
"parameters": {
|
||||
@@ -358,18 +382,6 @@
|
||||
"offset": 0.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"biome": "antarchy:torchflower_fields",
|
||||
"parameters": {
|
||||
"temperature": 0.74,
|
||||
"humidity": 0.985,
|
||||
"continentalness": 0.58,
|
||||
"erosion": 0.16,
|
||||
"weirdness": 0.24,
|
||||
"depth": 0.5,
|
||||
"offset": 0.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"biome": "antarchy:elythia_meadow",
|
||||
"parameters": {
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"type": "minecraft:block",
|
||||
"pools": [
|
||||
{
|
||||
"conditions": [
|
||||
{
|
||||
"condition": "minecraft:survives_explosion"
|
||||
}
|
||||
],
|
||||
"entries": [
|
||||
{
|
||||
"type": "minecraft:item",
|
||||
"conditions": [
|
||||
{
|
||||
"block": "antarchy:camellia",
|
||||
"condition": "minecraft:block_state_property",
|
||||
"properties": {
|
||||
"half": "lower"
|
||||
}
|
||||
}
|
||||
],
|
||||
"name": "antarchy:camellia"
|
||||
}
|
||||
],
|
||||
"rolls": 1.0
|
||||
}
|
||||
],
|
||||
"random_sequence": "antarchy:blocks/camellia"
|
||||
}
|
||||
@@ -17,5 +17,5 @@
|
||||
"rolls": 1.0
|
||||
}
|
||||
],
|
||||
"random_sequence": "minecraft:blocks/jungle_hanging_sign"
|
||||
"random_sequence": "antarchy:blocks/ouranwood_hanging_sign"
|
||||
}
|
||||
@@ -17,5 +17,5 @@
|
||||
"rolls": 1.0
|
||||
}
|
||||
],
|
||||
"random_sequence": "minecraft:blocks/jungle_sign"
|
||||
"random_sequence": "antarchy:blocks/ouranwood_sign"
|
||||
}
|
||||
@@ -17,5 +17,5 @@
|
||||
"rolls": 1.0
|
||||
}
|
||||
],
|
||||
"random_sequence": "minecraft:blocks/jungle_hanging_sign"
|
||||
"random_sequence": "antarchy:blocks/peach_hanging_sign"
|
||||
}
|
||||
@@ -17,5 +17,5 @@
|
||||
"rolls": 1.0
|
||||
}
|
||||
],
|
||||
"random_sequence": "minecraft:blocks/jungle_sign"
|
||||
"random_sequence": "antarchy:blocks/peach_sign"
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"type": "minecraft:block",
|
||||
"pools": [
|
||||
{
|
||||
"rolls": 1.0,
|
||||
"entries": [
|
||||
{
|
||||
"type": "minecraft:item",
|
||||
"name": "antarchy:spider_lily"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"random_sequence": "antarchy:blocks/spider_lily"
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"type": "minecraft:smelting",
|
||||
"category": "food",
|
||||
"cookingtime": 200,
|
||||
"experience": 0.35,
|
||||
"ingredient": {
|
||||
"item": "antarchy:raw_venison"
|
||||
},
|
||||
"result": {
|
||||
"id": "antarchy:cooked_venison"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"type": "minecraft:smoking",
|
||||
"category": "food",
|
||||
"cookingtime": 100,
|
||||
"experience": 0.35,
|
||||
"ingredient": {
|
||||
"item": "antarchy:raw_venison"
|
||||
},
|
||||
"result": {
|
||||
"id": "antarchy:cooked_venison"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"category": "food",
|
||||
"key": {
|
||||
"C": {
|
||||
"item": "antarchy:corn"
|
||||
},
|
||||
"G": {
|
||||
"item": "minecraft:egg"
|
||||
},
|
||||
"H": {
|
||||
"item": "minecraft:honey_bottle"
|
||||
},
|
||||
"W": {
|
||||
"item": "minecraft:wheat"
|
||||
}
|
||||
},
|
||||
"pattern": [
|
||||
" H ",
|
||||
"CGC",
|
||||
"WWW"
|
||||
],
|
||||
"result": {
|
||||
"count": 1,
|
||||
"id": "antarchy:cornbread"
|
||||
}
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
{
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"category": "misc",
|
||||
"pattern": [
|
||||
"GGG",
|
||||
"RDR",
|
||||
"TTT"
|
||||
],
|
||||
"key": {
|
||||
"G": { "item": "antarchy:triffid_goo" },
|
||||
"R": { "item": "minecraft:redstone_block" },
|
||||
"D": { "item": "minecraft:diamond_pickaxe" },
|
||||
"T": { "item": "minecraft:tnt" }
|
||||
},
|
||||
"result": {
|
||||
"id": "antarchy:miners_dream",
|
||||
"count": 1
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"type": "minecraft:crafting_shapeless",
|
||||
"category": "food",
|
||||
"ingredients": [
|
||||
{
|
||||
"item": "antarchy:peach"
|
||||
},
|
||||
{
|
||||
"item": "minecraft:sugar"
|
||||
},
|
||||
{
|
||||
"item": "minecraft:egg"
|
||||
}
|
||||
],
|
||||
"result": {
|
||||
"count": 1,
|
||||
"id": "antarchy:peach_pie"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"type": "minecraft:crafting_shapeless",
|
||||
"category": "misc",
|
||||
"ingredients": [
|
||||
{
|
||||
"item": "antarchy:camellia"
|
||||
}
|
||||
],
|
||||
"result": {
|
||||
"count": 2,
|
||||
"id": "minecraft:pink_dye"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"type": "minecraft:smelting",
|
||||
"category": "food",
|
||||
"cookingtime": 200,
|
||||
"experience": 0.1,
|
||||
"ingredient": {
|
||||
"item": "antarchy:corn_seeds"
|
||||
},
|
||||
"result": {
|
||||
"id": "antarchy:popcorn"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"type": "minecraft:smoking",
|
||||
"category": "food",
|
||||
"cookingtime": 100,
|
||||
"experience": 0.1,
|
||||
"ingredient": {
|
||||
"item": "antarchy:corn_seeds"
|
||||
},
|
||||
"result": {
|
||||
"id": "antarchy:popcorn"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"type": "minecraft:crafting_shapeless",
|
||||
"category": "misc",
|
||||
"ingredients": [
|
||||
{
|
||||
"item": "antarchy:spider_lily"
|
||||
}
|
||||
],
|
||||
"result": {
|
||||
"count": 1,
|
||||
"id": "minecraft:red_dye"
|
||||
}
|
||||
}
|
||||
@@ -17,6 +17,6 @@
|
||||
"antarchy:golden_apple_cow",
|
||||
"antarchy:enchanted_golden_apple_cow",
|
||||
"antarchy:caterpillar",
|
||||
"antarchy:glimmer"
|
||||
"antarchy:ouranwood_deer"
|
||||
]
|
||||
}
|
||||
@@ -2,7 +2,6 @@
|
||||
"replace": false,
|
||||
"values": [
|
||||
"antarchy:elythia_meadow",
|
||||
"antarchy:torchflower_fields",
|
||||
"antarchy:butterfly_fields",
|
||||
"antarchy:ouranwood_forest",
|
||||
"antarchy:peach_forest",
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
"antarchy:elythia_lush_caves",
|
||||
"antarchy:elythia_meadow",
|
||||
"antarchy:elythia_river",
|
||||
"antarchy:torchflower_fields",
|
||||
"antarchy:moleworm_caves",
|
||||
"antarchy:ouranwood_forest",
|
||||
"antarchy:peach_forest",
|
||||
|
||||
@@ -18,13 +18,17 @@
|
||||
}
|
||||
},
|
||||
"spawn_costs": {
|
||||
"antarchy:mantis": {
|
||||
"antarchy:alpha_mantis": {
|
||||
"energy_budget": 0.1,
|
||||
"charge": 18.0
|
||||
},
|
||||
"antarchy:mantis": {
|
||||
"energy_budget": 0.1,
|
||||
"charge": 15.0
|
||||
},
|
||||
"antarchy:glimmer": {
|
||||
"energy_budget": 0.1,
|
||||
"charge": 9
|
||||
}
|
||||
},
|
||||
"carvers": {
|
||||
@@ -104,6 +108,12 @@
|
||||
"weight": 16,
|
||||
"minCount": 1,
|
||||
"maxCount": 3
|
||||
},
|
||||
{
|
||||
"type": "antarchy:glimmer",
|
||||
"weight": 2,
|
||||
"minCount": 1,
|
||||
"maxCount": 1
|
||||
}
|
||||
],
|
||||
"ambient": [
|
||||
|
||||
@@ -23,7 +23,12 @@
|
||||
"offset": 2.0
|
||||
}
|
||||
},
|
||||
"spawn_costs": {},
|
||||
"spawn_costs": {
|
||||
"antarchy:glimmer": {
|
||||
"energy_budget": 0.1,
|
||||
"charge": 9
|
||||
}
|
||||
},
|
||||
"carvers": {
|
||||
"air": [],
|
||||
"liquid": []
|
||||
@@ -96,6 +101,12 @@
|
||||
"weight": 5,
|
||||
"minCount": 1,
|
||||
"maxCount": 2
|
||||
},
|
||||
{
|
||||
"type": "antarchy:glimmer",
|
||||
"weight": 1,
|
||||
"minCount": 1,
|
||||
"maxCount": 1
|
||||
}
|
||||
],
|
||||
"ambient": [
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
],
|
||||
[]
|
||||
],
|
||||
"creature_spawn_probability": 0.16,
|
||||
"creature_spawn_probability": 0.4,
|
||||
"spawners": {
|
||||
"monster": [],
|
||||
"creature": [
|
||||
|
||||
@@ -27,6 +27,10 @@
|
||||
"antarchy:basilisk": {
|
||||
"energy_budget": 0.1,
|
||||
"charge": 14.0
|
||||
},
|
||||
"antarchy:glimmer": {
|
||||
"energy_budget": 0.1,
|
||||
"charge": 9
|
||||
}
|
||||
},
|
||||
"carvers": {
|
||||
@@ -74,7 +78,7 @@
|
||||
"antarchy:triffid_patch"
|
||||
]
|
||||
],
|
||||
"creature_spawn_probability": 0.05,
|
||||
"creature_spawn_probability": 0.07,
|
||||
"spawners": {
|
||||
"monster": [
|
||||
{
|
||||
@@ -108,6 +112,12 @@
|
||||
"weight": 6,
|
||||
"minCount": 1,
|
||||
"maxCount": 2
|
||||
},
|
||||
{
|
||||
"type": "antarchy:glimmer",
|
||||
"weight": 1,
|
||||
"minCount": 1,
|
||||
"maxCount": 1
|
||||
}
|
||||
],
|
||||
"ambient": [
|
||||
|
||||
@@ -18,6 +18,10 @@
|
||||
}
|
||||
},
|
||||
"spawn_costs": {
|
||||
"antarchy:glimmer": {
|
||||
"energy_budget": 0.1,
|
||||
"charge": 9
|
||||
}
|
||||
},
|
||||
"carvers": {
|
||||
"air": [],
|
||||
@@ -69,14 +73,14 @@
|
||||
],
|
||||
[]
|
||||
],
|
||||
"creature_spawn_probability": 0.18,
|
||||
"creature_spawn_probability": 0.28,
|
||||
"spawners": {
|
||||
"monster": [
|
||||
],
|
||||
"creature": [
|
||||
{
|
||||
"type": "antarchy:elka",
|
||||
"weight": 15,
|
||||
"weight": 22,
|
||||
"minCount": 1,
|
||||
"maxCount": 3
|
||||
},
|
||||
@@ -85,15 +89,15 @@
|
||||
"weight": 25,
|
||||
"minCount": 3,
|
||||
"maxCount": 6
|
||||
},
|
||||
{
|
||||
"type": "antarchy:glimmer",
|
||||
"weight": 2,
|
||||
"minCount": 1,
|
||||
"maxCount": 1
|
||||
}
|
||||
],
|
||||
"ambient": [
|
||||
{
|
||||
"type": "antarchy:butterfly",
|
||||
"weight": 7,
|
||||
"minCount": 1,
|
||||
"maxCount": 2
|
||||
}
|
||||
],
|
||||
"axolotls": [],
|
||||
"underground_water_creature": [],
|
||||
|
||||
@@ -25,6 +25,11 @@
|
||||
},
|
||||
"spawn_costs": {
|
||||
|
||||
"antarchy:glimmer": {
|
||||
"energy_budget": 0.1,
|
||||
"charge": 9
|
||||
}
|
||||
|
||||
},
|
||||
"carvers": {
|
||||
"air": [
|
||||
@@ -112,6 +117,12 @@
|
||||
"weight": 4,
|
||||
"minCount": 1,
|
||||
"maxCount": 1
|
||||
},
|
||||
{
|
||||
"type": "antarchy:glimmer",
|
||||
"weight": 1,
|
||||
"minCount": 1,
|
||||
"maxCount": 1
|
||||
}
|
||||
],
|
||||
"ambient": [
|
||||
|
||||
@@ -1,94 +0,0 @@
|
||||
{
|
||||
"has_precipitation": false,
|
||||
"temperature": 0.84,
|
||||
"downfall": 1.0,
|
||||
"effects": {
|
||||
"fog_color": 8084735,
|
||||
"water_color": 5021432,
|
||||
"water_fog_color": 2502722,
|
||||
"sky_color": 8084735,
|
||||
"foliage_color": 2867501,
|
||||
"grass_color": 4304168,
|
||||
"grass_color_modifier": "none",
|
||||
"mood_sound": {
|
||||
"sound": "minecraft:ambient.basalt_deltas.mood",
|
||||
"tick_delay": 8000,
|
||||
"block_search_extent": 8,
|
||||
"offset": 2.0
|
||||
}
|
||||
},
|
||||
"spawn_costs": {},
|
||||
"carvers": {
|
||||
"air": [],
|
||||
"liquid": []
|
||||
},
|
||||
"features": [
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[
|
||||
"minecraft:ore_coal_upper",
|
||||
"minecraft:ore_coal_lower",
|
||||
"minecraft:ore_iron_upper",
|
||||
"minecraft:ore_iron_middle",
|
||||
"minecraft:ore_iron_small",
|
||||
"minecraft:ore_gold",
|
||||
"minecraft:ore_gold_lower",
|
||||
"minecraft:ore_redstone",
|
||||
"minecraft:ore_redstone_lower",
|
||||
"minecraft:ore_diamond",
|
||||
"minecraft:ore_diamond_medium",
|
||||
"minecraft:ore_diamond_large",
|
||||
"minecraft:ore_diamond_buried",
|
||||
"minecraft:ore_lapis",
|
||||
"minecraft:ore_lapis_buried",
|
||||
"minecraft:ore_copper"
|
||||
],
|
||||
[
|
||||
"antarchy:elythia_underground",
|
||||
"minecraft:large_dripstone",
|
||||
"minecraft:pointed_dripstone"
|
||||
],
|
||||
[],
|
||||
[
|
||||
"antarchy:elythia_torchflower_fields_flora",
|
||||
"antarchy:elythia_brown_ant_nests",
|
||||
"antarchy:elythia_rainbow_ant_nests"
|
||||
],
|
||||
[]
|
||||
],
|
||||
"creature_spawn_probability": 0.08,
|
||||
"spawners": {
|
||||
"monster": [],
|
||||
"creature": [
|
||||
{
|
||||
"type": "antarchy:golden_apple_cow",
|
||||
"weight": 14,
|
||||
"minCount": 2,
|
||||
"maxCount": 4
|
||||
},
|
||||
{
|
||||
"type": "antarchy:enchanted_golden_apple_cow",
|
||||
"weight": 8,
|
||||
"minCount": 2,
|
||||
"maxCount": 3
|
||||
}
|
||||
],
|
||||
"ambient": [
|
||||
{
|
||||
"type": "antarchy:butterfly",
|
||||
"weight": 24,
|
||||
"minCount": 3,
|
||||
"maxCount": 6
|
||||
}
|
||||
],
|
||||
"axolotls": [],
|
||||
"underground_water_creature": [],
|
||||
"water_creature": [],
|
||||
"water_ambient": [],
|
||||
"misc": []
|
||||
}
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
{
|
||||
"type": "antarchy:elythia_torchflower_fields_flora",
|
||||
"config": {}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"type": "antarchy:lumen_spires",
|
||||
"config": {}
|
||||
}
|
||||
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"feature": "antarchy:elythia_torchflower_fields_flora",
|
||||
"feature": "antarchy:lumen_spires",
|
||||
"placement": [
|
||||
{
|
||||
"type": "minecraft:count",
|
||||
"count": 4
|
||||
"type": "minecraft:rarity_filter",
|
||||
"chance": 48
|
||||
},
|
||||
{
|
||||
"type": "minecraft:in_square"
|
||||
@@ -3,7 +3,7 @@
|
||||
"placement": [
|
||||
{
|
||||
"type": "minecraft:rarity_filter",
|
||||
"chance": 128
|
||||
"chance": 420
|
||||
},
|
||||
{
|
||||
"type": "minecraft:in_square"
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"placement": [
|
||||
{
|
||||
"type": "minecraft:rarity_filter",
|
||||
"chance": 72
|
||||
"chance": 144
|
||||
},
|
||||
{
|
||||
"type": "minecraft:in_square"
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"placement": [
|
||||
{
|
||||
"type": "minecraft:rarity_filter",
|
||||
"chance": 40
|
||||
"chance": 80
|
||||
},
|
||||
{
|
||||
"type": "minecraft:in_square"
|
||||
|
||||
@@ -3,7 +3,14 @@
|
||||
"values": [
|
||||
"#c:foods/soup",
|
||||
"antarchy:blood_crystal_apple",
|
||||
"antarchy:cornbread",
|
||||
"antarchy:popcorn",
|
||||
"antarchy:peach_pie",
|
||||
"antarchy:raw_venison",
|
||||
"antarchy:cooked_venison",
|
||||
"antarchy:mud_pie",
|
||||
"antarchy:high_fructose_corn_syrup",
|
||||
"antarchy:spirit_apple",
|
||||
"antarchy:rainbow_sugar",
|
||||
"antarchy:cornea_ear",
|
||||
"antarchy:moleworm",
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"antarchy:blush_moss_block",
|
||||
"minecraft:moss_block"
|
||||
]
|
||||
}
|
||||
@@ -1,7 +1,9 @@
|
||||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"antarchy:camellia",
|
||||
"antarchy:orange_milkweed",
|
||||
"antarchy:pink_milkweed"
|
||||
"antarchy:pink_milkweed",
|
||||
"antarchy:spider_lily"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"antarchy:spider_lily"
|
||||
]
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"antarchy:camellia",
|
||||
"antarchy:orange_milkweed",
|
||||
"antarchy:pink_milkweed"
|
||||
]
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"antarchy:camellia",
|
||||
"antarchy:orange_milkweed",
|
||||
"antarchy:pink_milkweed"
|
||||
"antarchy:pink_milkweed",
|
||||
"antarchy:spider_lily"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"antarchy:spider_lily"
|
||||
]
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"antarchy:camellia",
|
||||
"antarchy:orange_milkweed",
|
||||
"antarchy:pink_milkweed"
|
||||
]
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
package com.craisinlord.antarchy.fabric;
|
||||
import com.craisinlord.antarchy.fabric.registry.AntarchyFabricEntities;
|
||||
|
||||
import com.craisinlord.antarchy.Antarchy;
|
||||
import com.craisinlord.antarchy.content.item.BloodCrystalShardItem;
|
||||
@@ -138,25 +139,25 @@ public final class AntarchyFabric implements ModInitializer {
|
||||
BiomeModifications.addSpawn(
|
||||
BiomeSelectors.tag(MISSILE_SQUID_SPAWN_BIOMES),
|
||||
net.minecraft.world.entity.MobCategory.MONSTER,
|
||||
AntarchyFabricContent.MISSILE_SQUID.get(),
|
||||
AntarchyFabricEntities.MISSILE_SQUID.get(),
|
||||
2, 1, 2
|
||||
);
|
||||
BiomeModifications.addSpawn(
|
||||
BiomeSelectors.tag(OCTOPUS_BOMB_SPAWN_BIOMES),
|
||||
net.minecraft.world.entity.MobCategory.MONSTER,
|
||||
AntarchyFabricContent.OCTOPUS_BOMB.get(),
|
||||
AntarchyFabricEntities.OCTOPUS_BOMB.get(),
|
||||
2, 1, 2
|
||||
);
|
||||
BiomeModifications.addSpawn(
|
||||
BiomeSelectors.tag(MANTIS_OVERWORLD_SPAWN_BIOMES),
|
||||
net.minecraft.world.entity.MobCategory.MONSTER,
|
||||
AntarchyFabricContent.MANTIS.get(),
|
||||
AntarchyFabricEntities.MANTIS.get(),
|
||||
8, 1, 1
|
||||
);
|
||||
BiomeModifications.addSpawn(
|
||||
BiomeSelectors.tag(MANTIS_OVERWORLD_SPAWN_BIOMES),
|
||||
net.minecraft.world.entity.MobCategory.MONSTER,
|
||||
AntarchyFabricContent.ALPHA_MANTIS.get(),
|
||||
AntarchyFabricEntities.ALPHA_MANTIS.get(),
|
||||
1, 1, 1
|
||||
);
|
||||
BiomeModifications.addFeature(
|
||||
@@ -207,31 +208,31 @@ public final class AntarchyFabric implements ModInitializer {
|
||||
BiomeModifications.addSpawn(
|
||||
BiomeSelectors.tag(APPLE_COW_SPAWN_BIOMES),
|
||||
net.minecraft.world.entity.MobCategory.CREATURE,
|
||||
AntarchyFabricContent.APPLE_COW.get(),
|
||||
AntarchyFabricEntities.APPLE_COW.get(),
|
||||
10, 2, 4
|
||||
);
|
||||
BiomeModifications.addSpawn(
|
||||
BiomeSelectors.tag(GOLDEN_APPLE_COW_SPAWN_BIOMES),
|
||||
net.minecraft.world.entity.MobCategory.CREATURE,
|
||||
AntarchyFabricContent.GOLDEN_APPLE_COW.get(),
|
||||
AntarchyFabricEntities.GOLDEN_APPLE_COW.get(),
|
||||
3, 1, 3
|
||||
);
|
||||
BiomeModifications.addSpawn(
|
||||
BiomeSelectors.tag(FLYING_SQUIRREL_SPAWN_BIOMES),
|
||||
net.minecraft.world.entity.MobCategory.CREATURE,
|
||||
AntarchyFabricContent.FLYING_SQUIRREL.get(),
|
||||
AntarchyFabricEntities.FLYING_SQUIRREL.get(),
|
||||
8, 1, 3
|
||||
);
|
||||
BiomeModifications.addSpawn(
|
||||
BiomeSelectors.tag(FLOWER_FOREST_BUTTERFLY_SPAWN_BIOMES),
|
||||
net.minecraft.world.entity.MobCategory.AMBIENT,
|
||||
AntarchyFabricContent.BUTTERFLY.get(),
|
||||
AntarchyFabricEntities.BUTTERFLY.get(),
|
||||
28, 2, 5
|
||||
);
|
||||
BiomeModifications.addSpawn(
|
||||
BiomeSelectors.tag(FLOWER_FOREST_CATERPILLAR_SPAWN_BIOMES),
|
||||
net.minecraft.world.entity.MobCategory.CREATURE,
|
||||
AntarchyFabricContent.CATERPILLAR.get(),
|
||||
AntarchyFabricEntities.CATERPILLAR.get(),
|
||||
24, 2, 4
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
package com.craisinlord.antarchy.fabric;
|
||||
import com.craisinlord.antarchy.fabric.registry.AntarchyFabricBlocks;
|
||||
import com.craisinlord.antarchy.fabric.registry.AntarchyFabricItems;
|
||||
|
||||
import com.craisinlord.antarchy.content.entity.ReverieEntity;
|
||||
import com.craisinlord.antarchy.config.AntarchySettings;
|
||||
@@ -48,20 +50,20 @@ public final class AntarchyFabricEvents {
|
||||
CaterpillarCommand.register(dispatcher);
|
||||
});
|
||||
|
||||
DispenserBlock.registerBehavior(AntarchyFabricContent.SQUIDZOOKA.get(), new SquidzookaDispenseBehavior());
|
||||
DispenserBlock.registerBehavior(AntarchyFabricContent.WATER_CANNON.get(), new WaterCannonDispenseBehavior());
|
||||
DispenserBlock.registerBehavior(AntarchyFabricItems.SQUIDZOOKA.get(), new SquidzookaDispenseBehavior());
|
||||
DispenserBlock.registerBehavior(AntarchyFabricItems.WATER_CANNON.get(), new WaterCannonDispenseBehavior());
|
||||
|
||||
ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.UMBRAL_MOSS_BLOCK.get().asItem(), 0.65f);
|
||||
ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.UMBRAL_MOSS_CARPET.get().asItem(), 0.3f);
|
||||
ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.BLUSH_MOSS_BLOCK.get().asItem(), 0.65f);
|
||||
ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.BLUSH_MOSS_CARPET.get().asItem(), 0.3f);
|
||||
ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.HUSHWEED.get().asItem(), 0.65f);
|
||||
ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.CORNEA_EAR.get(), 0.65f);
|
||||
ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.PEACH_LEAVES.get().asItem(), 0.3f);
|
||||
ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.PEACH_SAPLING_ITEM.get(), 0.3f);
|
||||
ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.CORN.get(), 0.65f);
|
||||
ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.CORN_SEEDS.get(), 0.3f);
|
||||
ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.PEACH.get(), 0.65f);
|
||||
ComposterBlock.COMPOSTABLES.put(AntarchyFabricBlocks.UMBRAL_MOSS_BLOCK.get().asItem(), 0.65f);
|
||||
ComposterBlock.COMPOSTABLES.put(AntarchyFabricBlocks.UMBRAL_MOSS_CARPET.get().asItem(), 0.3f);
|
||||
ComposterBlock.COMPOSTABLES.put(AntarchyFabricBlocks.BLUSH_MOSS_BLOCK.get().asItem(), 0.65f);
|
||||
ComposterBlock.COMPOSTABLES.put(AntarchyFabricBlocks.BLUSH_MOSS_CARPET.get().asItem(), 0.3f);
|
||||
ComposterBlock.COMPOSTABLES.put(AntarchyFabricBlocks.HUSHWEED.get().asItem(), 0.65f);
|
||||
ComposterBlock.COMPOSTABLES.put(AntarchyFabricItems.CORNEA_EAR.get(), 0.65f);
|
||||
ComposterBlock.COMPOSTABLES.put(AntarchyFabricBlocks.PEACH_LEAVES.get().asItem(), 0.3f);
|
||||
ComposterBlock.COMPOSTABLES.put(AntarchyFabricItems.PEACH_SAPLING_ITEM.get(), 0.3f);
|
||||
ComposterBlock.COMPOSTABLES.put(AntarchyFabricItems.CORN.get(), 0.65f);
|
||||
ComposterBlock.COMPOSTABLES.put(AntarchyFabricItems.CORN_SEEDS.get(), 0.3f);
|
||||
ComposterBlock.COMPOSTABLES.put(AntarchyFabricItems.PEACH.get(), 0.65f);
|
||||
|
||||
ServerLivingEntityEvents.AFTER_DEATH.register((entity, damageSource) -> {
|
||||
if (entity instanceof ServerPlayer sp) {
|
||||
|
||||
@@ -129,10 +129,15 @@ public final class BloodglassManager {
|
||||
int cap = Math.max(0, AntarchySettings.bloodCrystalHardMaxShields()
|
||||
- access.antarchy$getArmorShieldsActive()
|
||||
- access.antarchy$getArmorShieldLostCount());
|
||||
access.antarchy$setAppleShieldsActive(Math.min(amplifier + 1, cap));
|
||||
access.antarchy$setAppleShieldLostCount(0);
|
||||
access.antarchy$setAppleRechargeTimer(0);
|
||||
if (player instanceof ServerPlayer sp) syncBloodglass(sp);
|
||||
int targetCap = Math.min(amplifier + 1, cap);
|
||||
int currentCap = access.antarchy$getAppleShieldsActive() + access.antarchy$getAppleShieldLostCount();
|
||||
// Only grant newly-added capacity (e.g. first application, or a higher amplifier).
|
||||
// A mere duration refresh of an already-active ward must not reset shields that are
|
||||
// already lost, nor restart their recharge timer.
|
||||
if (targetCap > currentCap) {
|
||||
access.antarchy$setAppleShieldsActive(access.antarchy$getAppleShieldsActive() + (targetCap - currentCap));
|
||||
if (player instanceof ServerPlayer sp) syncBloodglass(sp);
|
||||
}
|
||||
}
|
||||
|
||||
public static void handleWardRemoved(Player player) {
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
package com.craisinlord.antarchy.fabric.client;
|
||||
import com.craisinlord.antarchy.fabric.registry.AntarchyFabricBlocks;
|
||||
import com.craisinlord.antarchy.fabric.registry.AntarchyFabricEntities;
|
||||
import com.craisinlord.antarchy.fabric.registry.AntarchyFabricItems;
|
||||
import com.craisinlord.antarchy.fabric.registry.AntarchyFabricMisc;
|
||||
|
||||
import com.craisinlord.antarchy.Antarchy;
|
||||
import com.craisinlord.antarchy.content.client.HerculesBeetleImpactShakeClientState;
|
||||
@@ -52,7 +56,7 @@ public final class AntarchyFabricClientBootstrap {
|
||||
|
||||
public static void register() {
|
||||
AntarchyKeyBindings.register();
|
||||
MenuScreens.register(AntarchyFabricContent.DORRIE_INVENTORY_MENU.get(), com.craisinlord.antarchy.content.client.screen.DorrieInventoryScreen::new);
|
||||
MenuScreens.register(AntarchyFabricMisc.DORRIE_INVENTORY_MENU.get(), com.craisinlord.antarchy.content.client.screen.DorrieInventoryScreen::new);
|
||||
registerRenderers();
|
||||
registerEntityLayers();
|
||||
registerColors();
|
||||
@@ -65,60 +69,61 @@ public final class AntarchyFabricClientBootstrap {
|
||||
|
||||
private static void registerRenderers() {
|
||||
BlockEntityRendererRegistry.register(
|
||||
(net.minecraft.world.level.block.entity.BlockEntityType) AntarchyFabricContent.DREAM_CAMPFIRE_BLOCK_ENTITY.get(),
|
||||
(net.minecraft.world.level.block.entity.BlockEntityType) AntarchyFabricBlocks.DREAM_CAMPFIRE_BLOCK_ENTITY.get(),
|
||||
(BlockEntityRendererProvider) CampfireRenderer::new
|
||||
);
|
||||
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.EASTER_BUNNY.get(), EasterBunnyRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.FLYING_SQUIRREL.get(), FlyingSquirrelRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.CATERPILLAR.get(), CaterpillarRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.BUTTERFLY.get(), ButterflyRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.REVERIE.get(), ReverieRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.BRUTALFLY.get(), BrutalflyRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.RED_ANT.get(), AntRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.BROWN_ANT.get(), AntRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.RAINBOW_ANT.get(), AntRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.MOLEWORM.get(), MolewormRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.MANTIS.get(), MantisRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.ALPHA_MANTIS.get(), AlphaMantisRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.MOLEVORE.get(), MolevoreRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.TRIFFID.get(), TriffidRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.OURANWOOD_BOAT_ENTITY.get(), context -> new OuranwoodBoatRenderer<>(context, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/boat/ouranwood.png"), false));
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.OURANWOOD_CHEST_BOAT_ENTITY.get(), context -> new OuranwoodBoatRenderer<>(context, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/chest_boat/ouranwood.png"), true));
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.PEACH_BOAT_ENTITY.get(), context -> new PeachBoatRenderer<>(context, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/boat/peach.png"), false));
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.PEACH_CHEST_BOAT_ENTITY.get(), context -> new PeachBoatRenderer<>(context, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/chest_boat/peach.png"), true));
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.APPLE_COW.get(), AppleCowRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.GOLDEN_APPLE_COW.get(), AppleCowRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.ENCHANTED_GOLDEN_APPLE_COW.get(), AppleCowRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.DIAMOND_MINECART.get(), DiamondMinecartRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.DR_TRAYAURUS.get(), context -> new DrTrayaurusRenderer(context, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/dr_trayaurus.png")));
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.CLOUD_SHARK.get(), CloudSharkRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.KRAKEN.get(), KrakenRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.KRAKEN_PART.get(), MultipartPartRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.MISSILE_SQUID.get(), MissileSquidRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.OCTOPUS_BOMB.get(), OctopusBombRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.NIGHTMARE.get(), NightmareRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.LUCID.get(), LucidRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.BED_BUG.get(), BedBugRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.WASP.get(), WaspRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.BOMBER.get(), BomberRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.BASILISK.get(), BasiliskRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.SHRINK_RAY_PROJECTILE.get(), SizeRayProjectileRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.GROWTH_RAY_PROJECTILE.get(), SizeRayProjectileRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.LUCID_BOLT.get(), LucidBoltRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.LUCID_PEARL_PROJECTILE.get(), ThrownItemRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.HUSH_PROJECTILE.get(), HushProjectileRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.BRUTALFLY_ORB.get(), BrutalflyOrbRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.UPWARD_FALLING_BLOCK.get(), UpwardFallingBlockRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.SCORPION.get(), ScorpionRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.EMPEROR_SCORPION.get(), EmperorScorpionRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.TORETERROR.get(), ToreterrorRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.WATER_BOMB.get(), WaterBombRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.CHEEP.get(), com.craisinlord.antarchy.content.client.renderer.CheepRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.DORRIE.get(), com.craisinlord.antarchy.content.client.renderer.DorrieRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.OURANWOOD_DEER.get(), com.craisinlord.antarchy.content.client.renderer.OuranwoodDeerRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.GLIMMER.get(), com.craisinlord.antarchy.content.client.renderer.glimmer.GlimmerRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricContent.ELKA.get(), com.craisinlord.antarchy.content.client.renderer.ElkaRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.EASTER_BUNNY.get(), EasterBunnyRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.FLYING_SQUIRREL.get(), FlyingSquirrelRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.CATERPILLAR.get(), CaterpillarRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.BUTTERFLY.get(), ButterflyRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.REVERIE.get(), ReverieRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.BRUTALFLY.get(), BrutalflyRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.RED_ANT.get(), AntRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.BROWN_ANT.get(), AntRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.RAINBOW_ANT.get(), AntRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.MOLEWORM.get(), MolewormRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.MANTIS.get(), MantisRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.ALPHA_MANTIS.get(), AlphaMantisRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.MOLEVORE.get(), MolevoreRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.TRIFFID.get(), TriffidRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.OURANWOOD_BOAT_ENTITY.get(), context -> new OuranwoodBoatRenderer<>(context, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/boat/ouranwood.png"), false));
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.OURANWOOD_CHEST_BOAT_ENTITY.get(), context -> new OuranwoodBoatRenderer<>(context, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/chest_boat/ouranwood.png"), true));
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.PEACH_BOAT_ENTITY.get(), context -> new PeachBoatRenderer<>(context, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/boat/peach.png"), false));
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.PEACH_CHEST_BOAT_ENTITY.get(), context -> new PeachBoatRenderer<>(context, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/chest_boat/peach.png"), true));
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.APPLE_COW.get(), AppleCowRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.GOLDEN_APPLE_COW.get(), AppleCowRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.ENCHANTED_GOLDEN_APPLE_COW.get(), AppleCowRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.DIAMOND_MINECART.get(), DiamondMinecartRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.DR_TRAYAURUS.get(), context -> new DrTrayaurusRenderer(context, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/dr_trayaurus.png")));
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.CLOUD_SHARK.get(), CloudSharkRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.KRAKEN.get(), KrakenRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.KRAKEN_PART.get(), MultipartPartRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.MISSILE_SQUID.get(), MissileSquidRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.OCTOPUS_BOMB.get(), OctopusBombRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.NIGHTMARE.get(), NightmareRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.LUCID.get(), LucidRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.BED_BUG.get(), BedBugRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.WASP.get(), WaspRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.BOMBER.get(), BomberRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.BASILISK.get(), BasiliskRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.SHRINK_RAY_PROJECTILE.get(), SizeRayProjectileRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.GROWTH_RAY_PROJECTILE.get(), SizeRayProjectileRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.LUCID_BOLT.get(), LucidBoltRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.LUCID_PEARL_PROJECTILE.get(), ThrownItemRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.HUSH_PROJECTILE.get(), HushProjectileRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.BRUTALFLY_ORB.get(), BrutalflyOrbRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.UPWARD_FALLING_BLOCK.get(), UpwardFallingBlockRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.SCORPION.get(), ScorpionRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.EMPEROR_SCORPION.get(), EmperorScorpionRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.TORETERROR.get(), ToreterrorRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.WATER_BOMB.get(), WaterBombRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.CHEEP.get(), com.craisinlord.antarchy.content.client.renderer.CheepRenderer::new);
|
||||
// Dorrie is not part of this update yet.
|
||||
// EntityRendererRegistry.register(AntarchyFabricEntities.DORRIE.get(), com.craisinlord.antarchy.content.client.renderer.DorrieRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.OURANWOOD_DEER.get(), com.craisinlord.antarchy.content.client.renderer.OuranwoodDeerRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.GLIMMER.get(), com.craisinlord.antarchy.content.client.renderer.glimmer.GlimmerRenderer::new);
|
||||
EntityRendererRegistry.register(AntarchyFabricEntities.ELKA.get(), com.craisinlord.antarchy.content.client.renderer.ElkaRenderer::new);
|
||||
|
||||
EntityModelLayerRegistry.registerModelLayer(OuranwoodBoatRenderer.boatLayer(), BoatModel::createBodyModel);
|
||||
EntityModelLayerRegistry.registerModelLayer(OuranwoodBoatRenderer.chestBoatLayer(), ChestBoatModel::createBodyModel);
|
||||
@@ -131,24 +136,26 @@ public final class AntarchyFabricClientBootstrap {
|
||||
(state, level, pos, tintIndex) -> level != null && pos != null
|
||||
? BiomeColors.getAverageFoliageColor(level, pos)
|
||||
: FoliageColor.getDefaultColor(),
|
||||
AntarchyFabricContent.OURANWOOD_LEAVES.get()
|
||||
AntarchyFabricBlocks.OURANWOOD_LEAVES.get()
|
||||
);
|
||||
ColorProviderRegistry.BLOCK.register((state, level, pos, tintIndex) -> 0xFF4A0000, AntarchyFabricContent.ANTIWATER_BLOCK.get());
|
||||
ColorProviderRegistry.BLOCK.register((state, level, pos, tintIndex) -> 0xFF4A0000, AntarchyFabricBlocks.ANTIWATER_BLOCK.get());
|
||||
ColorProviderRegistry.BLOCK.register(
|
||||
(state, level, pos, tintIndex) -> level != null && pos != null
|
||||
? BiomeColors.getAverageGrassColor(level, pos)
|
||||
: net.minecraft.world.level.GrassColor.getDefaultColor()
|
||||
: net.minecraft.world.level.GrassColor.getDefaultColor(),
|
||||
AntarchyFabricBlocks.SPIDER_LILY.get()
|
||||
);
|
||||
ColorProviderRegistry.ITEM.register((stack, tintIndex) -> FoliageColor.getDefaultColor(), AntarchyFabricContent.OURANWOOD_LEAVES_ITEM.get());
|
||||
ColorProviderRegistry.ITEM.register((stack, tintIndex) -> FoliageColor.getDefaultColor(), AntarchyFabricItems.OURANWOOD_LEAVES_ITEM.get());
|
||||
ColorProviderRegistry.ITEM.register(
|
||||
(stack, tintIndex) -> net.minecraft.world.level.GrassColor.getDefaultColor()
|
||||
(stack, tintIndex) -> tintIndex == 0 ? net.minecraft.world.level.GrassColor.getDefaultColor() : -1,
|
||||
AntarchyFabricItems.SPIDER_LILY_ITEM.get()
|
||||
);
|
||||
}
|
||||
|
||||
private static void registerFluids() {
|
||||
FluidRenderHandlerRegistry.INSTANCE.register(
|
||||
AntarchyFabricContent.BILE.get(),
|
||||
AntarchyFabricContent.FLOWING_BILE.get(),
|
||||
AntarchyFabricMisc.BILE.get(),
|
||||
AntarchyFabricMisc.FLOWING_BILE.get(),
|
||||
new SimpleFluidRenderHandler(
|
||||
ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/bile/bile_still"),
|
||||
ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/bile/bile_flowing"),
|
||||
@@ -158,8 +165,8 @@ public final class AntarchyFabricClientBootstrap {
|
||||
);
|
||||
|
||||
FluidRenderHandlerRegistry.INSTANCE.register(
|
||||
AntarchyFabricContent.ICHOR.get(),
|
||||
AntarchyFabricContent.FLOWING_ICHOR.get(),
|
||||
AntarchyFabricMisc.ICHOR.get(),
|
||||
AntarchyFabricMisc.FLOWING_ICHOR.get(),
|
||||
new SimpleFluidRenderHandler(
|
||||
ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/antiwater_still"),
|
||||
ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/antiwater_flow"),
|
||||
@@ -169,8 +176,8 @@ public final class AntarchyFabricClientBootstrap {
|
||||
);
|
||||
|
||||
FluidRenderHandlerRegistry.INSTANCE.register(
|
||||
AntarchyFabricContent.ANTIWATER.get(),
|
||||
AntarchyFabricContent.FLOWING_ANTIWATER.get(),
|
||||
AntarchyFabricMisc.ANTIWATER.get(),
|
||||
AntarchyFabricMisc.FLOWING_ANTIWATER.get(),
|
||||
new SimpleFluidRenderHandler(
|
||||
ResourceLocation.withDefaultNamespace("block/water_still"),
|
||||
ResourceLocation.withDefaultNamespace("block/water_flow"),
|
||||
@@ -196,8 +203,8 @@ public final class AntarchyFabricClientBootstrap {
|
||||
);
|
||||
|
||||
FluidRenderHandlerRegistry.INSTANCE.register(
|
||||
AntarchyFabricContent.LUMEN.get(),
|
||||
AntarchyFabricContent.FLOWING_LUMEN.get(),
|
||||
AntarchyFabricMisc.LUMEN.get(),
|
||||
AntarchyFabricMisc.FLOWING_LUMEN.get(),
|
||||
new SimpleFluidRenderHandler(
|
||||
ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/lumen_still"),
|
||||
ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/lumen_flow"),
|
||||
@@ -209,95 +216,97 @@ public final class AntarchyFabricClientBootstrap {
|
||||
|
||||
private static void registerParticles() {
|
||||
ParticleFactoryRegistry registry = ParticleFactoryRegistry.getInstance();
|
||||
registry.register(AntarchyFabricContent.DREAM_FIRE_FLAME.get(), DreamFlameParticle.Provider::new);
|
||||
registry.register(AntarchyFabricContent.STINKY_GAS.get(), HypnoticGasParticle.Provider::new);
|
||||
registry.register(AntarchyFabricContent.STINKY_FLY.get(), FireflyParticle.Provider::new);
|
||||
registry.register(AntarchyFabricContent.PEACH_LEAVES_PARTICLE.get(), PeachLeavesParticle.Provider::new);
|
||||
registry.register(AntarchyFabricContent.HYPNOTIC_GAS.get(), HypnoticGasParticle.Provider::new);
|
||||
registry.register(AntarchyFabricContent.HYPNOTIC_GAS_DOWN.get(), sprites -> new HypnoticGasParticle.Provider(sprites, true));
|
||||
registry.register(AntarchyFabricContent.HYPNOTIC_GAS_CLOUD.get(), new HypnoticGasCloudParticle.Provider());
|
||||
registry.register(AntarchyFabricContent.HYPNOTIC_GAS_CLOUD_DOWN.get(), new HypnoticGasCloudParticle.Provider(true));
|
||||
registry.register(AntarchyFabricContent.INVERTED_GEYSER_BASE.get(), InvertedGeyserBaseParticle.Provider::new);
|
||||
registry.register(AntarchyFabricContent.INVERTED_GEYSER_PLUME.get(), InvertedGeyserPlumeParticle.Provider::new);
|
||||
registry.register(AntarchyFabricContent.INVERTED_GEYSER_POOF.get(), InvertedGeyserBaseParticle.Provider::new);
|
||||
registry.register(AntarchyFabricContent.INVERTED_GEYSER_ERUPTION.get(), new InvertedGeyserEruptionParticle.Provider());
|
||||
registry.register(AntarchyFabricContent.FIREFLY.get(), FireflyParticle.Provider::new);
|
||||
registry.register(AntarchyFabricContent.ORANGE_ASH.get(), OrangeAshParticle.Provider::new);
|
||||
registry.register(AntarchyFabricMisc.DREAM_FIRE_FLAME.get(), DreamFlameParticle.Provider::new);
|
||||
registry.register(AntarchyFabricMisc.STINKY_GAS.get(), HypnoticGasParticle.Provider::new);
|
||||
registry.register(AntarchyFabricMisc.STINKY_FLY.get(), FireflyParticle.Provider::new);
|
||||
registry.register(AntarchyFabricMisc.PEACH_LEAVES_PARTICLE.get(), PeachLeavesParticle.Provider::new);
|
||||
registry.register(AntarchyFabricMisc.HYPNOTIC_GAS.get(), HypnoticGasParticle.Provider::new);
|
||||
registry.register(AntarchyFabricMisc.HYPNOTIC_GAS_DOWN.get(), sprites -> new HypnoticGasParticle.Provider(sprites, true));
|
||||
registry.register(AntarchyFabricMisc.HYPNOTIC_GAS_CLOUD.get(), new HypnoticGasCloudParticle.Provider());
|
||||
registry.register(AntarchyFabricMisc.HYPNOTIC_GAS_CLOUD_DOWN.get(), new HypnoticGasCloudParticle.Provider(true));
|
||||
registry.register(AntarchyFabricMisc.INVERTED_GEYSER_BASE.get(), InvertedGeyserBaseParticle.Provider::new);
|
||||
registry.register(AntarchyFabricMisc.INVERTED_GEYSER_PLUME.get(), InvertedGeyserPlumeParticle.Provider::new);
|
||||
registry.register(AntarchyFabricMisc.INVERTED_GEYSER_POOF.get(), InvertedGeyserBaseParticle.Provider::new);
|
||||
registry.register(AntarchyFabricMisc.INVERTED_GEYSER_ERUPTION.get(), new InvertedGeyserEruptionParticle.Provider());
|
||||
registry.register(AntarchyFabricMisc.FIREFLY.get(), FireflyParticle.Provider::new);
|
||||
registry.register(AntarchyFabricMisc.ORANGE_ASH.get(), OrangeAshParticle.Provider::new);
|
||||
}
|
||||
|
||||
private static void registerRenderLayers() {
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.OURANWOOD_LEAVES.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.OURANWOOD_DOOR.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.OURANWOOD_TRAPDOOR.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.OURANWOOD_ACORN_BLOCK.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.PEACH_LEAVES.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.PEACH_HANGING_PEACH.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.PEACH_DOOR.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.PEACH_TRAPDOOR.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.PEACH_SAPLING.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.OURANWOOD_LEAVES.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.OURANWOOD_DOOR.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.OURANWOOD_TRAPDOOR.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.OURANWOOD_ACORN_BLOCK.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.PEACH_LEAVES.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.PEACH_HANGING_PEACH.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.PEACH_DOOR.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.PEACH_TRAPDOOR.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.PEACH_SAPLING.get(), RenderType.cutout());
|
||||
// BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.OURANWOOD_VINE.get(), RenderType.cutout());
|
||||
// BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.OURANWOOD_VINE_PLANT.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.DUPLICATOR_SAPLING.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.ORANGE_MILKWEED.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.PINK_MILKWEED.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.HUSHWEED.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.CORNEA_STALK.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.CORN_CROP.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.WILD_CORN.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.FALLEN_KING_CROWN_BLOCK.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.ANTIMETAL_SCAFFOLDING.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.UMBRAL_MOSS_CARPET.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.NYXITE_SPIKE.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.SMALL_BLOOD_CRYSTAL_BUD.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.MEDIUM_BLOOD_CRYSTAL_BUD.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.LARGE_BLOOD_CRYSTAL_BUD.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.BLOOD_CRYSTAL_CRYSTAL.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.DREAM_TORCH.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.DREAM_WALL_TORCH.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.DREAM_LANTERN.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.DREAM_CAMPFIRE.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.DREAM_FIRE.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.DREAM_CEILING_FIRE.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.ANTIWATER_BLOCK.get(), RenderType.translucent());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.LUMEN_BLOCK.get(), RenderType.translucent());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.ELYTHIA_PORTAL.get(), RenderType.translucent());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.THORAXIS_PORTAL.get(), RenderType.translucent());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.TRIFFID_GOO_BLOCK.get(), RenderType.translucent());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.URANIUM_DOOR.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.TITANIUM_DOOR.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.URANIUM_TRAPDOOR.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.TITANIUM_TRAPDOOR.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.URANIUM_BARS.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.TITANIUM_BARS.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.CLOUD_BLOCK.get(), RenderType.translucent());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.DUPLICATOR_SAPLING.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.ORANGE_MILKWEED.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.PINK_MILKWEED.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.CAMELLIA.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.SPIDER_LILY.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.HUSHWEED.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.CORNEA_STALK.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.CORN_CROP.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.WILD_CORN.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.FALLEN_KING_CROWN_BLOCK.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.ANTIMETAL_SCAFFOLDING.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.UMBRAL_MOSS_CARPET.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.NYXITE_SPIKE.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.SMALL_BLOOD_CRYSTAL_BUD.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.MEDIUM_BLOOD_CRYSTAL_BUD.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.LARGE_BLOOD_CRYSTAL_BUD.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.BLOOD_CRYSTAL_CRYSTAL.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.DREAM_TORCH.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.DREAM_WALL_TORCH.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.DREAM_LANTERN.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.DREAM_CAMPFIRE.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.DREAM_FIRE.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.DREAM_CEILING_FIRE.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.ANTIWATER_BLOCK.get(), RenderType.translucent());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.LUMEN_BLOCK.get(), RenderType.translucent());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.ELYTHIA_PORTAL.get(), RenderType.translucent());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.THORAXIS_PORTAL.get(), RenderType.translucent());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.TRIFFID_GOO_BLOCK.get(), RenderType.translucent());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.URANIUM_DOOR.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.TITANIUM_DOOR.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.URANIUM_TRAPDOOR.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.TITANIUM_TRAPDOOR.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.URANIUM_BARS.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.TITANIUM_BARS.get(), RenderType.cutout());
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricBlocks.CLOUD_BLOCK.get(), RenderType.translucent());
|
||||
BlockRenderLayerMap.INSTANCE.putFluids(
|
||||
RenderType.translucent(),
|
||||
AntarchyFabricContent.BILE.get(),
|
||||
AntarchyFabricContent.FLOWING_BILE.get(),
|
||||
AntarchyFabricContent.ICHOR.get(),
|
||||
AntarchyFabricContent.FLOWING_ICHOR.get(),
|
||||
AntarchyFabricContent.LUMEN.get(),
|
||||
AntarchyFabricContent.FLOWING_LUMEN.get(),
|
||||
AntarchyFabricContent.ANTIWATER.get(),
|
||||
AntarchyFabricContent.FLOWING_ANTIWATER.get()
|
||||
AntarchyFabricMisc.BILE.get(),
|
||||
AntarchyFabricMisc.FLOWING_BILE.get(),
|
||||
AntarchyFabricMisc.ICHOR.get(),
|
||||
AntarchyFabricMisc.FLOWING_ICHOR.get(),
|
||||
AntarchyFabricMisc.LUMEN.get(),
|
||||
AntarchyFabricMisc.FLOWING_LUMEN.get(),
|
||||
AntarchyFabricMisc.ANTIWATER.get(),
|
||||
AntarchyFabricMisc.FLOWING_ANTIWATER.get()
|
||||
);
|
||||
}
|
||||
|
||||
private static void registerItemProperties() {
|
||||
ItemProperties.register(
|
||||
AntarchyFabricContent.ULTIMATE_BOW.get(),
|
||||
AntarchyFabricItems.ULTIMATE_BOW.get(),
|
||||
ResourceLocation.withDefaultNamespace("pull"),
|
||||
(stack, level, entity, seed) -> entity == null || entity.getUseItem() != stack
|
||||
? 0.0F
|
||||
: (stack.getItem().getUseDuration(stack, entity) - entity.getUseItemRemainingTicks()) / 20.0F
|
||||
);
|
||||
ItemProperties.register(
|
||||
AntarchyFabricContent.ULTIMATE_BOW.get(),
|
||||
AntarchyFabricItems.ULTIMATE_BOW.get(),
|
||||
ResourceLocation.withDefaultNamespace("pulling"),
|
||||
(stack, level, entity, seed) -> entity != null && entity.isUsingItem() && entity.getUseItem() == stack ? 1.0F : 0.0F
|
||||
);
|
||||
ItemProperties.register(
|
||||
AntarchyFabricContent.ULTIMATE_CROSSBOW.get(),
|
||||
AntarchyFabricItems.ULTIMATE_CROSSBOW.get(),
|
||||
ResourceLocation.withDefaultNamespace("pull"),
|
||||
(stack, level, entity, seed) -> {
|
||||
if (entity == null || CrossbowItem.isCharged(stack) || entity.getUseItem() != stack) {
|
||||
@@ -308,17 +317,17 @@ public final class AntarchyFabricClientBootstrap {
|
||||
}
|
||||
);
|
||||
ItemProperties.register(
|
||||
AntarchyFabricContent.ULTIMATE_CROSSBOW.get(),
|
||||
AntarchyFabricItems.ULTIMATE_CROSSBOW.get(),
|
||||
ResourceLocation.withDefaultNamespace("pulling"),
|
||||
(stack, level, entity, seed) -> entity != null && entity.isUsingItem() && entity.getUseItem() == stack && !CrossbowItem.isCharged(stack) ? 1.0F : 0.0F
|
||||
);
|
||||
ItemProperties.register(
|
||||
AntarchyFabricContent.ULTIMATE_CROSSBOW.get(),
|
||||
AntarchyFabricItems.ULTIMATE_CROSSBOW.get(),
|
||||
ResourceLocation.withDefaultNamespace("charged"),
|
||||
(stack, level, entity, seed) -> CrossbowItem.isCharged(stack) ? 1.0F : 0.0F
|
||||
);
|
||||
ItemProperties.register(
|
||||
AntarchyFabricContent.ULTIMATE_CROSSBOW.get(),
|
||||
AntarchyFabricItems.ULTIMATE_CROSSBOW.get(),
|
||||
ResourceLocation.withDefaultNamespace("firework"),
|
||||
(stack, level, entity, seed) -> CrossbowItem.isCharged(stack) && ChargedProjectiles.of(stack).contains(Items.FIREWORK_ROCKET) ? 1.0F : 0.0F
|
||||
);
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
package com.craisinlord.antarchy.fabric.client;
|
||||
import com.craisinlord.antarchy.fabric.registry.AntarchyFabricMisc;
|
||||
import com.craisinlord.antarchy.fabric.registry.AntarchyFabricSounds;
|
||||
|
||||
import com.craisinlord.antarchy.config.AntarchySettings;
|
||||
import com.craisinlord.antarchy.content.AntarchyTags;
|
||||
@@ -24,7 +26,7 @@ import java.util.Random;
|
||||
|
||||
public final class DreadClientHandler {
|
||||
private static final Holder<net.minecraft.world.effect.MobEffect> DREAD_EFFECT =
|
||||
BuiltInRegistries.MOB_EFFECT.wrapAsHolder(AntarchyFabricContent.DREAD.get());
|
||||
BuiltInRegistries.MOB_EFFECT.wrapAsHolder(AntarchyFabricMisc.DREAD.get());
|
||||
private static final int FOOTSTEP_MIN_INTERVAL_TICKS = 10;
|
||||
private static final int FOOTSTEP_MAX_INTERVAL_TICKS = 22;
|
||||
private static final int APPARITION_MIN_DURATION_TICKS = 16;
|
||||
@@ -285,7 +287,7 @@ public final class DreadClientHandler {
|
||||
player.getX(),
|
||||
player.getY() + 1.0D,
|
||||
player.getZ(),
|
||||
AntarchyFabricContent.NIGHTMARE_BITE.get(),
|
||||
AntarchyFabricSounds.NIGHTMARE_BITE.get(),
|
||||
SoundSource.HOSTILE,
|
||||
0.4F,
|
||||
0.88F + RANDOM.nextFloat() * 0.12F,
|
||||
|
||||