diff --git a/common/src/main/java/com/craisinlord/antarchy/content/CreativeTabOrder.java b/common/src/main/java/com/craisinlord/antarchy/content/CreativeTabOrder.java index 6cb8900f..c5e0ca33 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/CreativeTabOrder.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/CreativeTabOrder.java @@ -36,15 +36,16 @@ public final class CreativeTabOrder { "shellstone_stairs", "shellstone_slab", "shellstone_wall", "polished_shellstone_stairs", "polished_shellstone_slab", "polished_shellstone_wall", "shellstone_brick_stairs", "shellstone_brick_slab", "shellstone_brick_wall", - "mossy_shellstone_brick_stairs", "mossy_shellstone_brick_slab", "mossy_shellstone_brick_wall" -> 2; + "mossy_shellstone_brick_stairs", "mossy_shellstone_brick_slab", "mossy_shellstone_brick_wall", + "blush_moss_block", "blush_moss_carpet", + "lumen_froglight", "roseate_froglight" -> 2; case "antimetal", "polished_antimetal" -> 3; case "dream_sand", "dream_sandstone", "chiseled_dream_sandstone", "cut_dream_sandstone", "smooth_dream_sandstone", "dream_sandstone_stairs", "dream_sandstone_slab", "dream_sandstone_wall", "smooth_dream_sandstone_stairs", "smooth_dream_sandstone_slab", "cut_dream_sandstone_slab" -> 4; - case "umbral_moss_block", "umbral_moss_carpet", - "blush_moss_block", "blush_moss_carpet" -> 4; + case "umbral_moss_block", "umbral_moss_carpet" -> 4; case "uranium_ore", "deepslate_uranium_ore", "broodstone_uranium_ore", "titanium_ore", "deepslate_titanium_ore", "broodstone_titanium_ore", "uranium_block", "titanium_block", @@ -61,7 +62,7 @@ public final class CreativeTabOrder { "broodstone_stairs", "broodstone_slab", "broodstone_wall", "polished_broodstone_stairs", "polished_broodstone_slab", "polished_broodstone_wall", "broodstone_brick_stairs", "broodstone_brick_slab", "broodstone_brick_wall", - "chiten_block", "chiten_spike", "amber_moss_block", "amber_moss_carpet", + "myrmite_coal_ore", "chiten_block", "chiten_spike", "amber_moss_block", "amber_moss_carpet", "glowcap_mushroom", "glowcap_mushroom_block" -> 8; case "ouranwood_leaves", "peach_leaves" -> 9; case "duplicator_sapling", "ouranwood_acorn", "peach_sapling", "corn_seeds" -> 10; @@ -70,8 +71,7 @@ public final class CreativeTabOrder { "red_ant_nest", "brown_ant_nest", "rainbow_ant_nest", "termite_nest", "star_coral", "star_coral_fan", "star_coral_block", "dead_star_coral", "dead_star_coral_fan", "dead_star_coral_block" -> 11; - case "dream_torch", "dream_lantern", "dream_campfire", "dream_fire", "dream_fire_ceiling", - "lumen_froglight", "roseate_froglight" -> 12; + case "dream_torch", "dream_lantern", "dream_campfire", "dream_fire", "dream_fire_ceiling" -> 12; case "antimetal_scaffolding" -> 13; case "infested_rooted_dirt", "infested_coarse_dirt", "bed_bug_egg", "creeping_horror_egg", "lurking_terror_egg", "jumpy_bug_egg" -> 14; case "ultimate_pickaxe", "ultimate_axe", "ultimate_shovel", "ultimate_hoe", @@ -207,12 +207,13 @@ public final class CreativeTabOrder { case "broodstone_brick_stairs" -> 17; case "broodstone_brick_slab" -> 18; case "broodstone_brick_wall" -> 19; - case "chiten_block" -> 20; - case "chiten_spike" -> 21; - case "amber_moss_block" -> 22; - case "amber_moss_carpet" -> 23; - case "glowcap_mushroom" -> 24; - case "glowcap_mushroom_block" -> 25; + case "myrmite_coal_ore" -> 20; + case "chiten_block" -> 21; + case "chiten_spike" -> 22; + case "amber_moss_block" -> 23; + case "amber_moss_carpet" -> 24; + case "glowcap_mushroom" -> 25; + case "glowcap_mushroom_block" -> 26; case "uranium_ore" -> 0; case "deepslate_uranium_ore" -> 1; case "broodstone_uranium_ore" -> 2; @@ -248,8 +249,10 @@ public final class CreativeTabOrder { case "dream_campfire" -> 2; case "dream_fire" -> 3; case "dream_fire_ceiling" -> 4; - case "lumen_froglight" -> 5; - case "roseate_froglight" -> 6; + case "blush_moss_block" -> 18; + case "blush_moss_carpet" -> 19; + case "lumen_froglight" -> 20; + case "roseate_froglight" -> 21; case "infested_rooted_dirt" -> 0; case "infested_coarse_dirt" -> 1; case "bed_bug_egg" -> 2; diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/CreepingHorrorEggBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/CreepingHorrorEggBlock.java index 7f1ffa4f..91b5af76 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/block/CreepingHorrorEggBlock.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/CreepingHorrorEggBlock.java @@ -36,7 +36,7 @@ public class CreepingHorrorEggBlock extends Block { public static final MapCodec CODEC = Block.simpleCodec(CreepingHorrorEggBlock::new); public static final IntegerProperty HATCH = BlockStateProperties.HATCH; public static final IntegerProperty EGGS = BlockStateProperties.EGGS; - private static final float PANIC_HATCH_CHANCE = 0.50F; + private static final float PANIC_HATCH_CHANCE = 0.25F; private static final int MAX_HATCH = 2; private static final int MAX_EGGS = 4; private static final VoxelShape SINGLE_SHAPE = Block.box(3.0D, 0.0D, 3.0D, 13.0D, 7.0D, 13.0D); diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/CritterCageBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/CritterCageBlock.java index 1f2857b1..311d623e 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/block/CritterCageBlock.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/CritterCageBlock.java @@ -26,7 +26,7 @@ import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; public class CritterCageBlock extends BaseEntityBlock { - private static final VoxelShape SHAPE = Block.box(1.0D, 1.0D, 1.0D, 15.0D, 15.0D, 15.0D); + private static final VoxelShape SHAPE = Block.box(1.0D, 1.0D, 1.0D, 15.0D, 14.0D, 15.0D); private final MapCodec codec; diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/JumpyBugEggBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/JumpyBugEggBlock.java index 0d0c8dd5..e506d77a 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/block/JumpyBugEggBlock.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/JumpyBugEggBlock.java @@ -12,6 +12,7 @@ import net.minecraft.world.entity.EntityType; import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; import net.minecraft.util.RandomSource; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; @@ -36,6 +37,9 @@ public class JumpyBugEggBlock extends Block { public static final BooleanProperty HANGING = BlockStateProperties.HANGING; public static final BooleanProperty ROTATED = BooleanProperty.create("rotated"); private static final int MAX_HATCH = 2; + private static final double PLAYER_PROXIMITY_RADIUS = 12.0D; + private static final float PLAYER_PROXIMITY_HATCH_CHANCE = 0.25F; + private static final int PLAYER_PROXIMITY_CHECK_INTERVAL = 200; private static final VoxelShape FLOOR_SHAPE = Block.box(1.0D, 0.0D, 1.0D, 15.0D, 16.0D, 15.0D); private static final VoxelShape CEILING_SHAPE = Block.box(1.0D, 0.0D, 1.0D, 15.0D, 16.0D, 15.0D); private static final ResourceLocation JUMPY_BUG_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "jumpy_bug"); @@ -115,6 +119,13 @@ public class JumpyBugEggBlock extends Block { } private boolean shouldUpdateHatchLevel(Level level, BlockPos pos, BlockState state) { + if (level.random.nextInt(PLAYER_PROXIMITY_CHECK_INTERVAL) == 0) { + Player nearbyPlayer = level.getNearestPlayer(pos.getX() + 0.5D, pos.getY() + 0.5D, pos.getZ() + 0.5D, PLAYER_PROXIMITY_RADIUS, false); + if (nearbyPlayer != null && level.random.nextFloat() < PLAYER_PROXIMITY_HATCH_CHANCE) { + return true; + } + } + BlockPos checkPos = state.getValue(HANGING) ? pos.above() : pos.below(); boolean onAmberMoss = level.getBlockState(checkPos).getBlock() instanceof AmberMossBlock; return level.random.nextInt(onAmberMoss ? 150 : 500) == 0; diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/LurkingTerrorEggBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/LurkingTerrorEggBlock.java index 26c43a6b..f352b6c0 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/block/LurkingTerrorEggBlock.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/LurkingTerrorEggBlock.java @@ -36,7 +36,7 @@ public class LurkingTerrorEggBlock extends Block { public static final MapCodec CODEC = Block.simpleCodec(LurkingTerrorEggBlock::new); public static final IntegerProperty HATCH = BlockStateProperties.HATCH; public static final IntegerProperty EGGS = BlockStateProperties.EGGS; - private static final float PANIC_HATCH_CHANCE = 0.50F; + private static final float PANIC_HATCH_CHANCE = 0.25F; private static final int MAX_HATCH = 2; private static final int MAX_EGGS = 4; private static final VoxelShape SINGLE_SHAPE = Block.box(3.0D, 0.0D, 3.0D, 13.0D, 7.0D, 13.0D); diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/DrTrayaurusEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/DrTrayaurusEntity.java index c7fb4e7d..d186471b 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/DrTrayaurusEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/DrTrayaurusEntity.java @@ -1,6 +1,7 @@ package com.craisinlord.antarchy.content.entity; import com.craisinlord.antarchy.content.entity.trades.DrTrayaurusTradeManager; +import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerLevel; import net.minecraft.sounds.SoundEvent; @@ -25,12 +26,33 @@ import org.jetbrains.annotations.Nullable; public class DrTrayaurusEntity extends AbstractVillager { private static final Component DISPLAY_NAME = Component.literal("Dr. Trayaurus"); + private static final String TRADES_INITIALIZED_KEY = "TradesInitialized"; + private boolean tradesInitialized; public DrTrayaurusEntity(EntityType entityType, Level level) { super(entityType, level); this.setCustomName(DISPLAY_NAME); } + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putBoolean(TRADES_INITIALIZED_KEY, this.tradesInitialized); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + this.tradesInitialized = tag.getBoolean(TRADES_INITIALIZED_KEY); + if (this.tradesInitialized) { + super.readAdditionalSaveData(tag); + return; + } + + CompoundTag withoutOffers = tag.copy(); + withoutOffers.remove("Offers"); + super.readAdditionalSaveData(withoutOffers); + } + @Override protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); @@ -82,6 +104,7 @@ public class DrTrayaurusEntity extends AbstractVillager { offers.clear(); offers.addAll(DrTrayaurusTradeManager.createOffers()); this.overrideXp(1); + this.tradesInitialized = true; } @Override diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/ant/AntTeleportHelper.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/ant/AntTeleportHelper.java index 3f28b427..524779ca 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/ant/AntTeleportHelper.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/ant/AntTeleportHelper.java @@ -126,13 +126,13 @@ public final class AntTeleportHelper { } if (entityTypeId.equals(ResourceLocation.fromNamespaceAndPath("antarchy", "brown_ant"))) { - return teleportPlayerToDimension(player, AntarchySettings.brownAntDestinationDimension()); + return teleportToOrFromConfiguredDimension(player, AntarchySettings.brownAntDestinationDimension()); } if (entityTypeId.equals(ResourceLocation.fromNamespaceAndPath("antarchy", "red_ant"))) { - return teleportPlayerToDimension(player, AntarchySettings.redAntDestinationDimension()); + return teleportToOrFromConfiguredDimension(player, AntarchySettings.redAntDestinationDimension()); } if (entityTypeId.equals(ResourceLocation.fromNamespaceAndPath("antarchy", "termite"))) { - return teleportPlayerToDimension(player, AntarchySettings.termiteDestinationDimension()); + return teleportToOrFromConfiguredDimension(player, AntarchySettings.termiteDestinationDimension()); } if (entityTypeId.equals(ResourceLocation.fromNamespaceAndPath("antarchy", "rainbow_ant"))) { return RainbowAntEntity.teleportPlayerFromStoredData(player, entityData); @@ -141,6 +141,20 @@ public final class AntTeleportHelper { return InteractionResult.PASS; } + private static InteractionResult teleportToOrFromConfiguredDimension(ServerPlayer player, ResourceKey configuredDimensionKey) { + ServerLevel destination = player.serverLevel().dimension() == configuredDimensionKey + ? resolveReturnDestinationLevel(player) + : player.server.getLevel(configuredDimensionKey); + if (destination == null) { + return InteractionResult.PASS; + } + + Vec3 destinationPos = getDestinationPosition(player, destination); + teleportPlayerWithCompanions(player, destination, destinationPos); + player.playSound(SoundEvents.ENDERMAN_TELEPORT, 1.0F, 1.0F); + return InteractionResult.CONSUME; + } + static InteractionResult handleInteraction(BaseAntEntity ant, Player player, ItemStack itemStack) { if (ant.requiresActivationReagent() && !ant.isTeleportActivatedState()) { if (!(player instanceof ServerPlayer serverPlayer)) { @@ -167,18 +181,7 @@ public final class AntTeleportHelper { return InteractionResult.SUCCESS; } - ServerLevel configuredDestination = resolveConfiguredDestinationLevel(ant, serverPlayer.serverLevel()); - ServerLevel destination = configuredDestination != null && serverPlayer.serverLevel().dimension() == configuredDestination.dimension() - ? resolveReturnDestinationLevel(serverPlayer) - : configuredDestination; - if (destination == null) { - return InteractionResult.PASS; - } - - Vec3 destinationPos = getDestinationPosition(serverPlayer, destination); - teleportPlayerWithCompanions(serverPlayer, destination, destinationPos); - serverPlayer.playSound(SoundEvents.ENDERMAN_TELEPORT, 1.0F, 1.0F); - return InteractionResult.CONSUME; + return teleportToOrFromConfiguredDimension(serverPlayer, ant.destinationDimension()); } private static InteractionResult activateTeleport(BaseAntEntity ant, ServerPlayer player, ItemStack stack) { @@ -192,11 +195,6 @@ public final class AntTeleportHelper { return InteractionResult.CONSUME; } - @Nullable - private static ServerLevel resolveConfiguredDestinationLevel(BaseAntEntity ant, ServerLevel serverLevel) { - return serverLevel.getServer().getLevel(ant.destinationDimension()); - } - public static ServerLevel resolveReturnDestinationLevel(ServerPlayer player) { ResourceKey respawnDimension = player.getRespawnDimension(); ServerLevel destination = player.server.getLevel(respawnDimension); diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/GroundMoltingVinesFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/GroundMoltingVinesFeature.java new file mode 100644 index 00000000..c64bbe36 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/GroundMoltingVinesFeature.java @@ -0,0 +1,121 @@ +package com.craisinlord.antarchy.content.worldgen.cavaryn; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.block.MoltingVinesBlock; +import com.mojang.serialization.Codec; +import java.util.Optional; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +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 GroundMoltingVinesFeature extends Feature { + private static final ResourceLocation MOLTING_VINES_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "molting_vines"); + private static final int SEARCH_RADIUS = 8; + private static final int SEARCH_ATTEMPTS = 24; + private static final int VERTICAL_SCAN = 12; + private static final int MIN_LENGTH = 2; + private static final int MAX_LENGTH = 5; + private static final int BROODFRUIT_CHANCE = 4; + + public GroundMoltingVinesFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + Block block = getBlock(MOLTING_VINES_ID); + if (!(block instanceof MoltingVinesBlock moltingVinesBlock)) { + return false; + } + + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos basePos = findBase(level, context.origin(), random); + if (basePos == null) { + return false; + } + + return placeColumn(level, moltingVinesBlock, basePos, random); + } + + private static BlockPos findBase(WorldGenLevel level, BlockPos origin, RandomSource random) { + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + int minY = level.getMinBuildHeight() + 2; + int maxY = level.getMaxBuildHeight() - 2; + for (int attempt = 0; attempt < SEARCH_ATTEMPTS; attempt++) { + int x = origin.getX() + random.nextInt(SEARCH_RADIUS * 2 + 1) - SEARCH_RADIUS; + int z = origin.getZ() + random.nextInt(SEARCH_RADIUS * 2 + 1) - SEARCH_RADIUS; + int startY = origin.getY() + random.nextInt(VERTICAL_SCAN * 2 + 1) - VERTICAL_SCAN; + startY = Math.max(minY, Math.min(maxY, startY)); + + for (int y = startY; y >= Math.max(minY, startY - VERTICAL_SCAN); y--) { + mutable.set(x, y, z); + if (!level.getBlockState(mutable).canBeReplaced()) { + continue; + } + BlockPos belowPos = mutable.below(); + BlockState belowState = level.getBlockState(belowPos); + if (!belowState.isFaceSturdy(level, belowPos, Direction.UP)) { + continue; + } + if (!level.getBlockState(mutable.above()).canBeReplaced()) { + continue; + } + return mutable.immutable(); + } + } + return null; + } + + private static boolean placeColumn(WorldGenLevel level, MoltingVinesBlock block, BlockPos basePos, RandomSource random) { + int maxLength = MIN_LENGTH + random.nextInt(MAX_LENGTH - MIN_LENGTH + 1); + int length = 0; + BlockPos.MutableBlockPos mutable = basePos.mutable(); + while (length < maxLength && mutable.getY() < level.getMaxBuildHeight()) { + BlockState existing = level.getBlockState(mutable); + if (!existing.canBeReplaced()) { + break; + } + length++; + mutable.move(0, 1, 0); + } + + if (length < MIN_LENGTH) { + return false; + } + + int fruitIndex = -1; + if (length >= 3 && random.nextInt(BROODFRUIT_CHANCE) == 0) { + fruitIndex = 1 + random.nextInt(length - 2); + } + + for (int offset = 0; offset < length; offset++) { + BlockPos pos = basePos.above(offset); + BlockState state = block.defaultBlockState() + .setValue(MoltingVinesBlock.GROWTH_DIRECTION, Direction.UP) + .setValue(MoltingVinesBlock.DISTANCE, Math.min(offset, 6)) + .setValue(MoltingVinesBlock.TOP_CAP, offset == length - 1) + .setValue(MoltingVinesBlock.BOTTOM_CAP, false) + .setValue(MoltingVinesBlock.BROODFRUIT, offset == fruitIndex); + if (!state.canSurvive(level, pos)) { + return false; + } + level.setBlock(pos, state, 3); + } + + return true; + } + + private static Block getBlock(ResourceLocation id) { + Optional block = BuiltInRegistries.BLOCK.getOptional(id); + return block.orElse(null); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/JumpyBugEggCeilingFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/JumpyBugEggCeilingFeature.java index ba89077b..c547b9fe 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/JumpyBugEggCeilingFeature.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/JumpyBugEggCeilingFeature.java @@ -19,9 +19,9 @@ import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConf public final class JumpyBugEggCeilingFeature extends Feature { private static final ResourceLocation JUMPY_BUG_EGG_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "jumpy_bug_egg"); private static final int SEARCH_RADIUS = 8; - private static final int VERTICAL_SCAN = 6; - private static final int SEARCH_ATTEMPTS = 10; - private static final float PLACE_CHANCE = 0.5F; + private static final int VERTICAL_SCAN = 24; + private static final int SEARCH_ATTEMPTS = 24; + private static final int MAX_PLACEMENTS = 3; public JumpyBugEggCeilingFeature(Codec codec) { super(codec); @@ -39,26 +39,33 @@ public final class JumpyBugEggCeilingFeature extends Feature PLACE_CHANCE) { - continue; - } - + for (int attempt = 0; attempt < SEARCH_ATTEMPTS && placements < MAX_PLACEMENTS; attempt++) { int x = origin.getX() + random.nextInt(SEARCH_RADIUS * 2 + 1) - SEARCH_RADIUS; int z = origin.getZ() + random.nextInt(SEARCH_RADIUS * 2 + 1) - SEARCH_RADIUS; - int y = origin.getY() + random.nextInt(VERTICAL_SCAN * 2 + 1) - VERTICAL_SCAN; - mutable.set(x, y, z); + int startY = origin.getY() + random.nextInt(VERTICAL_SCAN * 2 + 1) - VERTICAL_SCAN; + int minY = Math.max(level.getMinBuildHeight() + 1, startY - VERTICAL_SCAN); + int maxY = Math.min(level.getMaxBuildHeight() - 2, startY + VERTICAL_SCAN); - if (!isValidCeilingSpot(level, mutable)) { - continue; + BlockPos spot = null; + for (int y = maxY; y >= minY; y--) { + mutable.set(x, y, z); + if (isValidCeilingSpot(level, mutable)) { + spot = mutable.immutable(); + break; + } } + if (spot == null) { + continue; + } BlockState eggState = eggBlock.defaultBlockState() .setValue(JumpyBugEggBlock.HANGING, true) .setValue(JumpyBugEggBlock.ROTATED, random.nextBoolean()); - level.setBlock(mutable, eggState, 3); + level.setBlock(spot, eggState, 3); placedAny = true; + placements++; } return placedAny; diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java index 92d021ab..a362c2c2 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java @@ -59,6 +59,19 @@ public class ElythiaBiomeSource extends BiomeSource { ); private static final int[] SURFACE_FALLBACK_BLOCK_YS = new int[]{192, 160, 128, 96, 64, 32, 0}; + private static final class ColumnBiomeCache { + long key = Long.MIN_VALUE; + Holder value; + } + + private final ThreadLocal molewormSurfaceFallbackCache = ThreadLocal.withInitial(ColumnBiomeCache::new); + private final ThreadLocal peachForestSurfaceFallbackCache = ThreadLocal.withInitial(ColumnBiomeCache::new); + private final ThreadLocal landFallbackCache = ThreadLocal.withInitial(ColumnBiomeCache::new); + + private static long packColumnKey(int x, int z) { + return ((long) x << 32) ^ (z & 0xFFFFFFFFL); + } + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( MultiNoiseBiomeSource.DIRECT_CODEC.forGetter(ElythiaBiomeSource::parameters), Codec.INT.optionalFieldOf("moleworm_caves_max_y", 72).forGetter(ElythiaBiomeSource::molewormCavesMaxY), @@ -75,6 +88,7 @@ public class ElythiaBiomeSource extends BiomeSource { private final int seaLevel; private final int molewormCavesMaxQuartY; private final int surfaceBiomeSampleQuartY; + private final int oceanMaxQuartY; private final int seaLevelQuartY; private final int undergroundGuardMaxQuartY; private final Holder oceanHolder; @@ -91,6 +105,7 @@ public class ElythiaBiomeSource extends BiomeSource { this.seaLevel = seaLevel; this.molewormCavesMaxQuartY = QuartPos.fromBlock(molewormCavesMaxY); this.surfaceBiomeSampleQuartY = QuartPos.fromBlock(surfaceBiomeSampleY); + this.oceanMaxQuartY = QuartPos.fromBlock(oceanMaxY); 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 @@ -144,7 +159,7 @@ public class ElythiaBiomeSource extends BiomeSource { // Cap moleworm caves below their max Y — replace with surface biome above it if (biome.is(MOLEWORM_CAVES) && y > this.molewormCavesMaxQuartY) { - return resolveSurfaceFallback(x, y, z, sampler, MOLEWORM_CAVES, GLIMMERING_POOLS); + return resolveSurfaceFallback(x, z, sampler, this.molewormSurfaceFallbackCache, MOLEWORM_CAVES, GLIMMERING_POOLS); } // Use continentalness o classify the column. @@ -152,7 +167,7 @@ public class ElythiaBiomeSource extends BiomeSource { // and ambient effects work correctly above the water surface. // Cave biomes are always preserved even in ocean columns. Climate.TargetPoint target = sampler.sample(x, this.seaLevelQuartY, z); - if (target.continentalness() < OCEAN_CONTINENTALNESS_THRESHOLD) { + if (target.continentalness() < OCEAN_CONTINENTALNESS_THRESHOLD && y <= this.oceanMaxQuartY) { if (biome.is(MOLEWORM_CAVES) || biome.is(ELYTHIA_LUSH_CAVES)) return biome; Holder seaLevelBiome = this.delegate.getNoiseBiome(x, this.seaLevelQuartY, z, sampler); // MultiNoise can return a land biome at sea-level depth — force ocean if so @@ -183,7 +198,7 @@ public class ElythiaBiomeSource extends BiomeSource { // 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 resolveSurfaceFallback(x, z, sampler, this.peachForestSurfaceFallbackCache, PEACH_FOREST, GLIMMERING_POOLS); } return biome; @@ -258,32 +273,52 @@ public class ElythiaBiomeSource extends BiomeSource { } @SafeVarargs - private Holder resolveSurfaceFallback(int x, int y, int z, Climate.Sampler sampler, ResourceKey... excluded) { - Holder fallback = this.delegate.getNoiseBiome(x, this.surfaceBiomeSampleQuartY, z, sampler); - if (!isExcluded(fallback, excluded)) { - return fallback; + private Holder resolveSurfaceFallback(int x, int z, Climate.Sampler sampler, ThreadLocal cacheHolder, ResourceKey... excluded) { + ColumnBiomeCache cache = cacheHolder.get(); + long key = packColumnKey(x, z); + if (cache.key == key) { + return cache.value; } - for (int sampleBlockY : SURFACE_FALLBACK_BLOCK_YS) { - Holder candidate = this.delegate.getNoiseBiome(x, QuartPos.fromBlock(sampleBlockY), z, sampler); - if (!isExcluded(candidate, excluded)) { - return candidate; + Holder result = this.delegate.getNoiseBiome(x, this.surfaceBiomeSampleQuartY, z, sampler); + if (isExcluded(result, excluded)) { + for (int sampleBlockY : SURFACE_FALLBACK_BLOCK_YS) { + Holder candidate = this.delegate.getNoiseBiome(x, QuartPos.fromBlock(sampleBlockY), z, sampler); + if (!isExcluded(candidate, excluded)) { + result = candidate; + break; + } } } - return fallback; + cache.key = key; + cache.value = result; + return result; } private Holder resolveLandFallback(int x, int z, Climate.Sampler sampler) { - Holder fallback = this.delegate.getNoiseBiome(x, this.surfaceBiomeSampleQuartY, z, sampler); - if (!isOceanOrCave(fallback)) return fallback; - - for (int sampleBlockY : SURFACE_FALLBACK_BLOCK_YS) { - Holder candidate = this.delegate.getNoiseBiome(x, QuartPos.fromBlock(sampleBlockY), z, sampler); - if (!isOceanOrCave(candidate)) return candidate; + ColumnBiomeCache cache = this.landFallbackCache.get(); + long key = packColumnKey(x, z); + if (cache.key == key) { + return cache.value; } - return defaultLandHolder != null ? defaultLandHolder : fallback; + Holder result = this.delegate.getNoiseBiome(x, this.surfaceBiomeSampleQuartY, z, sampler); + if (isOceanOrCave(result)) { + Holder resolved = null; + for (int sampleBlockY : SURFACE_FALLBACK_BLOCK_YS) { + Holder candidate = this.delegate.getNoiseBiome(x, QuartPos.fromBlock(sampleBlockY), z, sampler); + if (!isOceanOrCave(candidate)) { + resolved = candidate; + break; + } + } + result = resolved != null ? resolved : (defaultLandHolder != null ? defaultLandHolder : result); + } + + cache.key = key; + cache.value = result; + return result; } @SafeVarargs diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaFloraFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaFloraFeature.java index 8d9ad11e..da81c72e 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaFloraFeature.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaFloraFeature.java @@ -350,6 +350,12 @@ public class ElythiaFloraFeature extends Feature { if (plantPos == null) { continue; } + + BlockPos groundPos = plantPos.below(); + if (!isValidPlantSpot(level, plantPos, groundPos)) { + continue; + } + if (bushEligible && random.nextFloat() < 0.12F) { if (placeDouble(level, plantPos, torchflowerBush().defaultBlockState())) { placed = true; diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/GiantLilyPadPatchFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/GiantLilyPadPatchFeature.java index 87ef7512..be7f71a1 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/GiantLilyPadPatchFeature.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/GiantLilyPadPatchFeature.java @@ -15,8 +15,15 @@ import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; public final class GiantLilyPadPatchFeature extends Feature { + private final float lotusChance; + public GiantLilyPadPatchFeature(Codec codec) { + this(codec, 1.0F); + } + + public GiantLilyPadPatchFeature(Codec codec, float lotusChance) { super(codec); + this.lotusChance = lotusChance; } @Override @@ -43,7 +50,9 @@ public final class GiantLilyPadPatchFeature extends Feature { private static final int NOISE_SAMPLES = 12; + private static final ResourceLocation CAMELLIA_ID = ResourceLocation.fromNamespaceAndPath("antarchy", "camellia"); + private static final ResourceLocation SPIDER_LILY_ID = ResourceLocation.fromNamespaceAndPath("antarchy", "spider_lily"); public PeachForestPondFeature(Codec codec) { super(codec); @@ -67,12 +73,14 @@ public class PeachForestPondFeature extends Feature 0.8D || random.nextFloat() > 0.45F) { + continue; + } + + BlockPos spawnPos = center.offset(x, 1, z); + if (!level.getFluidState(spawnPos.below()).is(FluidTags.WATER) || !level.isEmptyBlock(spawnPos)) { + continue; + } + + BlockState frogspawn = Blocks.FROGSPAWN.defaultBlockState(); + if (!frogspawn.canSurvive(level, spawnPos)) { + continue; + } + + level.setBlock(spawnPos, frogspawn, 2); + } + } + private static boolean isSoil(BlockState state) { return state.is(BlockTags.DIRT) || state.is(Blocks.GRASS_BLOCK) || state.is(Blocks.MOSS_BLOCK) || state.is(Blocks.ROOTED_DIRT); } diff --git a/common/src/main/resources/assets/antarchy/animations/kraken.animation.json b/common/src/main/resources/assets/antarchy/animations/kraken.animation.json index f60646db..e5877521 100644 --- a/common/src/main/resources/assets/antarchy/animations/kraken.animation.json +++ b/common/src/main/resources/assets/antarchy/animations/kraken.animation.json @@ -6553,56 +6553,6 @@ }, "lerp_mode": "catmullrom" } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4583": { - "vector": [0, 0, 0] - }, - "0.5": { - "vector": [0, 27, 0] - }, - "0.5417": { - "vector": [0, -33, 0] - }, - "0.5833": { - "vector": [0, 14, 0] - }, - "0.6667": { - "vector": [0, -19, 0] - }, - "0.75": { - "pre": { - "vector": [0, 5, 0] - }, - "post": { - "vector": [0, 5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [0, -10, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } } }, "l_shoulder": { @@ -7188,4 +7138,4 @@ } } } -} \ No newline at end of file +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/myrmite_coal_ore.json b/common/src/main/resources/assets/antarchy/blockstates/myrmite_coal_ore.json new file mode 100644 index 00000000..8c47bcfb --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/myrmite_coal_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/myrmite_coal_ore" + } + } +} diff --git a/common/src/main/resources/assets/antarchy/lang/de_de.json b/common/src/main/resources/assets/antarchy/lang/de_de.json index 8d8fd11e..fe1d96ec 100644 --- a/common/src/main/resources/assets/antarchy/lang/de_de.json +++ b/common/src/main/resources/assets/antarchy/lang/de_de.json @@ -901,6 +901,7 @@ "block.antarchy.broodstone_brick_stairs": "Broodstoneziegeltreppe", "block.antarchy.broodstone_brick_slab": "Broodstoneziegelstufe", "block.antarchy.broodstone_brick_wall": "Broodstoneziegelmauer", + "block.antarchy.myrmite_coal_ore": "Myrmite Kohleerz", "block.antarchy.broodstone_uranium_ore": "Broodstone Uran-Erz", "block.antarchy.broodstone_titanium_ore": "Broodstone Titan-Erz", "item.antarchy.raw_bug_meat": "Rohes Insektenfleisch", diff --git a/common/src/main/resources/assets/antarchy/lang/en_us.json b/common/src/main/resources/assets/antarchy/lang/en_us.json index 675318a9..5cd093a0 100644 --- a/common/src/main/resources/assets/antarchy/lang/en_us.json +++ b/common/src/main/resources/assets/antarchy/lang/en_us.json @@ -431,6 +431,7 @@ "item.antarchy.glimmer_spawn_egg": "Glimmer Spawn Egg", "item.antarchy.ouranwood_deer_spawn_egg": "Ouranwood Deer Spawn Egg", "item.antarchy.spirit_apple": "Spirit Apple", + "tooltip.antarchy.spirit_apple": "Tames a Glimmer", "item.antarchy.elka_spawn_egg": "Elka Spawn Egg", "item.antarchy.glimmer_bottle": "Bottle of Glimmer", "item.antarchy.glimmer_bottle.contains": "Contains: %s", @@ -901,6 +902,7 @@ "block.antarchy.broodstone_brick_stairs": "Broodstone Brick Stairs", "block.antarchy.broodstone_brick_slab": "Broodstone Brick Slab", "block.antarchy.broodstone_brick_wall": "Broodstone Brick Wall", + "block.antarchy.myrmite_coal_ore": "Myrmite Coal Ore", "block.antarchy.broodstone_uranium_ore": "Broodstone Uranium Ore", "block.antarchy.broodstone_titanium_ore": "Broodstone Titanium Ore", "item.antarchy.raw_bug_meat": "Raw Bug Meat", diff --git a/common/src/main/resources/assets/antarchy/lang/es_es.json b/common/src/main/resources/assets/antarchy/lang/es_es.json index 3e951d00..1b7899d2 100644 --- a/common/src/main/resources/assets/antarchy/lang/es_es.json +++ b/common/src/main/resources/assets/antarchy/lang/es_es.json @@ -901,6 +901,7 @@ "block.antarchy.broodstone_brick_stairs": "Escaleras de ladrillos de Broodstone", "block.antarchy.broodstone_brick_slab": "Losa de ladrillos de Broodstone", "block.antarchy.broodstone_brick_wall": "Muro de ladrillos de Broodstone", + "block.antarchy.myrmite_coal_ore": "Mena de carbón de Myrmite", "block.antarchy.broodstone_uranium_ore": "Mena de Broodstone Uranio", "block.antarchy.broodstone_titanium_ore": "Mena de Broodstone Titanio", "item.antarchy.raw_bug_meat": "Carne de insecto cruda", diff --git a/common/src/main/resources/assets/antarchy/lang/fr_fr.json b/common/src/main/resources/assets/antarchy/lang/fr_fr.json index 4311d8a3..f32de39b 100644 --- a/common/src/main/resources/assets/antarchy/lang/fr_fr.json +++ b/common/src/main/resources/assets/antarchy/lang/fr_fr.json @@ -901,6 +901,7 @@ "block.antarchy.broodstone_brick_stairs": "Escalier en briques de Broodstone", "block.antarchy.broodstone_brick_slab": "Dalle en briques de Broodstone", "block.antarchy.broodstone_brick_wall": "Muret en briques de Broodstone", + "block.antarchy.myrmite_coal_ore": "Minerai de charbon de Myrmite", "block.antarchy.broodstone_uranium_ore": "Minerai de Broodstone Uranium", "block.antarchy.broodstone_titanium_ore": "Minerai de Broodstone Titane", "item.antarchy.raw_bug_meat": "Viande d’insecte crue", diff --git a/common/src/main/resources/assets/antarchy/lang/it_it.json b/common/src/main/resources/assets/antarchy/lang/it_it.json index 75f1c38b..d5726af2 100644 --- a/common/src/main/resources/assets/antarchy/lang/it_it.json +++ b/common/src/main/resources/assets/antarchy/lang/it_it.json @@ -901,6 +901,7 @@ "block.antarchy.broodstone_brick_stairs": "Scale di mattoni di Broodstone", "block.antarchy.broodstone_brick_slab": "Lastra di mattoni di Broodstone", "block.antarchy.broodstone_brick_wall": "Muretto di mattoni di Broodstone", + "block.antarchy.myrmite_coal_ore": "Minerale di carbone di Myrmite", "block.antarchy.broodstone_uranium_ore": "Minerale di uranio di Broodstone", "block.antarchy.broodstone_titanium_ore": "Minerale di titanio di Broodstone", "item.antarchy.raw_bug_meat": "Carne d’insetto cruda", diff --git a/common/src/main/resources/assets/antarchy/lang/ja_jp.json b/common/src/main/resources/assets/antarchy/lang/ja_jp.json index 0d8e0d12..f00641bb 100644 --- a/common/src/main/resources/assets/antarchy/lang/ja_jp.json +++ b/common/src/main/resources/assets/antarchy/lang/ja_jp.json @@ -901,6 +901,7 @@ "block.antarchy.broodstone_brick_stairs": "ブルードストーンレンガの階段", "block.antarchy.broodstone_brick_slab": "ブルードストーンレンガのハーフブロック", "block.antarchy.broodstone_brick_wall": "ブルードストーンレンガの塀", + "block.antarchy.myrmite_coal_ore": "ミルマイト 石炭鉱石", "block.antarchy.broodstone_uranium_ore": "ブルードストーン ウランの鉱石", "block.antarchy.broodstone_titanium_ore": "ブルードストーン チタンの鉱石", "item.antarchy.raw_bug_meat": "生の虫肉", diff --git a/common/src/main/resources/assets/antarchy/lang/ko_kr.json b/common/src/main/resources/assets/antarchy/lang/ko_kr.json index 9079e07f..8fdaf453 100644 --- a/common/src/main/resources/assets/antarchy/lang/ko_kr.json +++ b/common/src/main/resources/assets/antarchy/lang/ko_kr.json @@ -901,6 +901,7 @@ "block.antarchy.broodstone_brick_stairs": "브루드스톤 벽돌 계단", "block.antarchy.broodstone_brick_slab": "브루드스톤 벽돌 반 블록", "block.antarchy.broodstone_brick_wall": "브루드스톤 벽돌 담장", + "block.antarchy.myrmite_coal_ore": "미르마이트 석탄 광석", "block.antarchy.broodstone_uranium_ore": "브루드스톤 우라늄 광석", "block.antarchy.broodstone_titanium_ore": "브루드스톤 티타늄 광석", "item.antarchy.raw_bug_meat": "익히지 않은 벌레 고기", diff --git a/common/src/main/resources/assets/antarchy/lang/pt_br.json b/common/src/main/resources/assets/antarchy/lang/pt_br.json index 4971d5d6..c889f9f5 100644 --- a/common/src/main/resources/assets/antarchy/lang/pt_br.json +++ b/common/src/main/resources/assets/antarchy/lang/pt_br.json @@ -901,6 +901,7 @@ "block.antarchy.broodstone_brick_stairs": "Escadas de Tijolos de Broodstone", "block.antarchy.broodstone_brick_slab": "Laje de Tijolos de Broodstone", "block.antarchy.broodstone_brick_wall": "Muro de Tijolos de Broodstone", + "block.antarchy.myrmite_coal_ore": "Minério de carvão de Myrmite", "block.antarchy.broodstone_uranium_ore": "Minério de Broodstone Urânio", "block.antarchy.broodstone_titanium_ore": "Minério de Broodstone Titânio", "item.antarchy.raw_bug_meat": "Carne de Inseto Crua", diff --git a/common/src/main/resources/assets/antarchy/lang/ru_ru.json b/common/src/main/resources/assets/antarchy/lang/ru_ru.json index 46c8795f..a6c378bf 100644 --- a/common/src/main/resources/assets/antarchy/lang/ru_ru.json +++ b/common/src/main/resources/assets/antarchy/lang/ru_ru.json @@ -121,6 +121,7 @@ "block.antarchy.red_ant_nest": "Гнездо красных муравьёв", "block.antarchy.brown_ant_nest": "Гнездо коричневых муравьёв", "block.antarchy.rainbow_ant_nest": "Гнездо радужных муравьёв", + "block.antarchy.myrmite_coal_ore": "Myrmite Coal Ore", "block.antarchy.uranium_ore": "Урановая руда", "block.antarchy.deepslate_uranium_ore": "Глубинная урановая руда", "block.antarchy.titanium_ore": "Титановая руда", @@ -825,4 +826,4 @@ "advancements.antarchy.squidzooka_craft.description": "Создайте сквидзуку.", "advancements.antarchy.gravity_gun_craft.title": "Мастер притяжения", "advancements.antarchy.gravity_gun_craft.description": "Создайте гравитационную пушку." -} \ No newline at end of file +} diff --git a/common/src/main/resources/assets/antarchy/lang/zh_cn.json b/common/src/main/resources/assets/antarchy/lang/zh_cn.json index 67ce799b..206dd81e 100644 --- a/common/src/main/resources/assets/antarchy/lang/zh_cn.json +++ b/common/src/main/resources/assets/antarchy/lang/zh_cn.json @@ -901,6 +901,7 @@ "block.antarchy.broodstone_brick_stairs": "布鲁德斯通砖楼梯", "block.antarchy.broodstone_brick_slab": "布鲁德斯通砖台阶", "block.antarchy.broodstone_brick_wall": "布鲁德斯通砖墙", + "block.antarchy.myrmite_coal_ore": "米尔迈特煤矿石", "block.antarchy.broodstone_uranium_ore": "布鲁德斯通 铀矿石", "block.antarchy.broodstone_titanium_ore": "布鲁德斯通 钛矿石", "item.antarchy.raw_bug_meat": "生虫肉", diff --git a/common/src/main/resources/assets/antarchy/lang/zh_tw.json b/common/src/main/resources/assets/antarchy/lang/zh_tw.json index 32bc83c3..0cd92756 100644 --- a/common/src/main/resources/assets/antarchy/lang/zh_tw.json +++ b/common/src/main/resources/assets/antarchy/lang/zh_tw.json @@ -901,6 +901,7 @@ "block.antarchy.broodstone_brick_stairs": "布魯德斯通磚樓梯", "block.antarchy.broodstone_brick_slab": "布魯德斯通磚臺階", "block.antarchy.broodstone_brick_wall": "布魯德斯通磚牆", + "block.antarchy.myrmite_coal_ore": "米爾邁特煤礦石", "block.antarchy.broodstone_uranium_ore": "布魯德斯通 鈾礦石", "block.antarchy.broodstone_titanium_ore": "布魯德斯通 鈦礦石", "item.antarchy.raw_bug_meat": "生蟲肉", diff --git a/common/src/main/resources/assets/antarchy/models/block/myrmite_coal_ore.json b/common/src/main/resources/assets/antarchy/models/block/myrmite_coal_ore.json new file mode 100644 index 00000000..47ee96fb --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/myrmite_coal_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/myrmite_coal_ore" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/item/myrmite_coal_ore.json b/common/src/main/resources/assets/antarchy/models/item/myrmite_coal_ore.json new file mode 100644 index 00000000..5e50d09a --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/myrmite_coal_ore.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/myrmite_coal_ore" +} diff --git a/common/src/main/resources/assets/antarchy/textures/block/bile/bile_vein.png b/common/src/main/resources/assets/antarchy/textures/block/bile/bile_vein.png index d085b074..02397070 100644 Binary files a/common/src/main/resources/assets/antarchy/textures/block/bile/bile_vein.png and b/common/src/main/resources/assets/antarchy/textures/block/bile/bile_vein.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/bile/bile_vein_long.png b/common/src/main/resources/assets/antarchy/textures/block/bile/bile_vein_long.png new file mode 100644 index 00000000..d085b074 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/block/bile/bile_vein_long.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/bile/bile_vein_static.png b/common/src/main/resources/assets/antarchy/textures/block/bile/bile_vein_static.png deleted file mode 100644 index 02397070..00000000 Binary files a/common/src/main/resources/assets/antarchy/textures/block/bile/bile_vein_static.png and /dev/null differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/myrmite_coal_ore.png b/common/src/main/resources/assets/antarchy/textures/block/myrmite_coal_ore.png new file mode 100644 index 00000000..2f24f398 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/block/myrmite_coal_ore.png differ diff --git a/common/src/main/resources/data/antarchy/dimension/cavaryn.json b/common/src/main/resources/data/antarchy/dimension/cavaryn.json index 6d3e52ae..d8346bba 100644 --- a/common/src/main/resources/data/antarchy/dimension/cavaryn.json +++ b/common/src/main/resources/data/antarchy/dimension/cavaryn.json @@ -14,7 +14,7 @@ ], "humidity": [ -1.0, - 0.85 + 0.55 ], "continentalness": [ -1.0, @@ -43,7 +43,7 @@ 1.0 ], "humidity": [ - 0.85, + 0.5, 1.0 ], "continentalness": [ @@ -55,8 +55,8 @@ 1.0 ], "weirdness": [ - -1.0, - 1.0 + -0.45, + 0.45 ], "depth": [ -2.0, diff --git a/common/src/main/resources/data/antarchy/dimension/elythia.json b/common/src/main/resources/data/antarchy/dimension/elythia.json index 4b966674..0013c281 100644 --- a/common/src/main/resources/data/antarchy/dimension/elythia.json +++ b/common/src/main/resources/data/antarchy/dimension/elythia.json @@ -19,7 +19,7 @@ "erosion": 0.2, "weirdness": 0.16, "depth": 0.3, - "offset": 0.3 + "offset": 0.27 } }, { @@ -31,7 +31,7 @@ "erosion": 0.38, "weirdness": -0.55, "depth": 0.3, - "offset": 0.3 + "offset": 0.27 } }, { @@ -43,7 +43,7 @@ "erosion": 0.10, "weirdness": 0.65, "depth": 0.3, - "offset": 0.3 + "offset": 0.27 } }, { diff --git a/common/src/main/resources/data/antarchy/loot_table/blocks/myrmite_coal_ore.json b/common/src/main/resources/data/antarchy/loot_table/blocks/myrmite_coal_ore.json new file mode 100644 index 00000000..6da2ca1d --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/blocks/myrmite_coal_ore.json @@ -0,0 +1,52 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "name": "antarchy:myrmite_coal_ore", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "components": { + "minecraft:enchantments": { + "levels": { + "minecraft:silk_touch": 1 + } + } + } + } + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:coal", + "functions": [ + { + "function": "minecraft:apply_bonus", + "enchantment": "minecraft:fortune", + "formula": "minecraft:ore_drops" + }, + { + "function": "minecraft:explosion_decay" + } + ] + } + ] + } + ] + } + ] +} diff --git a/common/src/main/resources/data/antarchy/tags/worldgen/biome/is_cavaryn.json b/common/src/main/resources/data/antarchy/tags/worldgen/biome/is_cavaryn.json index 34d6084e..18f8377d 100644 --- a/common/src/main/resources/data/antarchy/tags/worldgen/biome/is_cavaryn.json +++ b/common/src/main/resources/data/antarchy/tags/worldgen/biome/is_cavaryn.json @@ -1,6 +1,7 @@ { "values": [ "antarchy:cavaryn", + "antarchy:glowcap_caves", "antarchy:brooding_tunnels", "antarchy:rolly_caves" ] diff --git a/common/src/main/resources/data/antarchy/trayaurus_trades/default.json b/common/src/main/resources/data/antarchy/trayaurus_trades/default.json index 7c3696bd..e08354ab 100644 --- a/common/src/main/resources/data/antarchy/trayaurus_trades/default.json +++ b/common/src/main/resources/data/antarchy/trayaurus_trades/default.json @@ -2,11 +2,11 @@ "trades": [ { "buy": { - "item": "antarchy:emerald", + "item": "minecraft:emerald", "count": 7 }, "sell": { - "item": "minecraft:root_beer", + "item": "antarchy:root_beer", "count": 1 }, "max_uses": 16, @@ -15,7 +15,7 @@ }, { "buy": { - "item": "antarchy:cooked_corn_dog", + "item": "antarchy:cooked_corndog", "count": 3 }, "sell": { diff --git a/common/src/main/resources/data/antarchy/worldgen/biome/brooding_tunnels.json b/common/src/main/resources/data/antarchy/worldgen/biome/brooding_tunnels.json index 5172fc4a..a7cf57b6 100644 --- a/common/src/main/resources/data/antarchy/worldgen/biome/brooding_tunnels.json +++ b/common/src/main/resources/data/antarchy/worldgen/biome/brooding_tunnels.json @@ -24,12 +24,12 @@ }, "spawn_costs": { "antarchy:jumpy_bug": { - "energy_budget": 0.2, - "charge": 9 + "energy_budget": 0.4, + "charge": 7 }, "antarchy:spit_bug": { - "energy_budget": 0.7, - "charge": 6 + "energy_budget": 0.9, + "charge": 2 } }, "carvers": { @@ -57,10 +57,11 @@ "antarchy:brooding_tunnels_creepvine", "antarchy:brooding_tunnels_hanging_creeproots", "antarchy:molting_vines", + "antarchy:ground_molting_vines", "antarchy:jumpy_bug_egg_ceiling" ] ], - "creature_spawn_probability": 0.06, + "creature_spawn_probability": 0.12, "spawners": { "monster": [ { @@ -77,7 +78,14 @@ } ], "creature": [], - "ambient": [], + "ambient": [ + { + "type": "antarchy:stink_bug", + "weight": 10, + "minCount": 1, + "maxCount": 3 + } + ], "axolotls": [], "underground_water_creature": [], "water_creature": [], diff --git a/common/src/main/resources/data/antarchy/worldgen/biome/cavaryn.json b/common/src/main/resources/data/antarchy/worldgen/biome/cavaryn.json index 696c2b8b..e0da68c7 100644 --- a/common/src/main/resources/data/antarchy/worldgen/biome/cavaryn.json +++ b/common/src/main/resources/data/antarchy/worldgen/biome/cavaryn.json @@ -39,7 +39,11 @@ [], [], [], - [], + [ + "antarchy:myrmite_coal_ore", + "antarchy:broodstone_uranium_ore", + "antarchy:broodstone_titanium_ore" + ], [], [ "antarchy:cavaryn_bile_veins", @@ -76,7 +80,8 @@ "maxCount": 1 } ], - "creature": [ + "creature": [], + "ambient": [ { "type": "antarchy:stink_bug", "weight": 10, @@ -84,7 +89,6 @@ "maxCount": 3 } ], - "ambient": [], "axolotls": [], "underground_water_creature": [], "water_creature": [], diff --git a/common/src/main/resources/data/antarchy/worldgen/biome/glowcap_caves.json b/common/src/main/resources/data/antarchy/worldgen/biome/glowcap_caves.json index 879cfe25..d6df1bf4 100644 --- a/common/src/main/resources/data/antarchy/worldgen/biome/glowcap_caves.json +++ b/common/src/main/resources/data/antarchy/worldgen/biome/glowcap_caves.json @@ -63,16 +63,15 @@ "maxCount": 5 } ], - "creature": [ + "creature": [], + "ambient": [ { "type": "antarchy:stink_bug", - "weight": 32, + "weight": 40, "minCount": 2, "maxCount": 4 } ], - "ambient": [ - ], "axolotls": [], "underground_water_creature": [], "water_creature": [], diff --git a/common/src/main/resources/data/antarchy/worldgen/biome/peach_forest.json b/common/src/main/resources/data/antarchy/worldgen/biome/peach_forest.json index 26bd17d6..06c3a159 100644 --- a/common/src/main/resources/data/antarchy/worldgen/biome/peach_forest.json +++ b/common/src/main/resources/data/antarchy/worldgen/biome/peach_forest.json @@ -69,7 +69,8 @@ "antarchy:peach_large_tree", "antarchy:peach_tree", "antarchy:peach_forest_flora", - "antarchy:elythia_rainbow_ant_nests" + "antarchy:elythia_rainbow_ant_nests", + "antarchy:giant_lily_pad_patch_peach_forest" ], [] ], diff --git a/common/src/main/resources/data/antarchy/worldgen/biome/rolly_caves.json b/common/src/main/resources/data/antarchy/worldgen/biome/rolly_caves.json index c48d89b0..cd038b6e 100644 --- a/common/src/main/resources/data/antarchy/worldgen/biome/rolly_caves.json +++ b/common/src/main/resources/data/antarchy/worldgen/biome/rolly_caves.json @@ -59,14 +59,7 @@ "creature_spawn_probability": 0.08, "spawners": { "monster": [], - "creature": [ - { - "type": "antarchy:rolly_polly", - "weight": 20, - "minCount": 1, - "maxCount": 2 - } - ], + "creature": [], "ambient": [], "axolotls": [], "underground_water_creature": [], diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/giant_lily_pad_patch_peach_forest.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/giant_lily_pad_patch_peach_forest.json new file mode 100644 index 00000000..9d3e15fe --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/giant_lily_pad_patch_peach_forest.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:giant_lily_pad_patch_peach_forest", + "config": {} +} diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/glowcap_caves_floor_patch.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/glowcap_caves_floor_patch.json index f060e58a..d82b93c4 100644 --- a/common/src/main/resources/data/antarchy/worldgen/configured_feature/glowcap_caves_floor_patch.json +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/glowcap_caves_floor_patch.json @@ -38,13 +38,13 @@ "type": "minecraft:weighted_state_provider", "entries": [ { - "weight": 21, + "weight": 24, "data": { "Name": "antarchy:amber_moss_carpet" } }, { - "weight": 11, + "weight": 12, "data": { "Name": "minecraft:short_grass" } diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/ground_molting_vines.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/ground_molting_vines.json new file mode 100644 index 00000000..289e8743 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/ground_molting_vines.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:ground_molting_vines", + "config": {} +} diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/myrmite_coal_ore.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/myrmite_coal_ore.json new file mode 100644 index 00000000..fd6b9ffe --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/myrmite_coal_ore.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:ore", + "config": { + "size": 12, + "discard_chance_on_air_exposure": 0.0, + "targets": [ + { + "target": { + "predicate_type": "minecraft:block_match", + "block": "antarchy:myrmite" + }, + "state": { + "Name": "antarchy:myrmite_coal_ore" + } + } + ] + } +} diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_moleworm_cave_entrances.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_moleworm_cave_entrances.json index 880e3a50..5205107a 100644 --- a/common/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_moleworm_cave_entrances.json +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_moleworm_cave_entrances.json @@ -3,7 +3,7 @@ "placement": [ { "type": "minecraft:rarity_filter", - "chance": 5 + "chance": 4 }, { "type": "minecraft:in_square" diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/giant_lily_pad_patch_peach_forest.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/giant_lily_pad_patch_peach_forest.json new file mode 100644 index 00000000..176eba6c --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/giant_lily_pad_patch_peach_forest.json @@ -0,0 +1,9 @@ +{ + "feature": "antarchy:giant_lily_pad_patch_peach_forest", + "placement": [ + { "type": "minecraft:rarity_filter", "chance": 6 }, + { "type": "minecraft:in_square" }, + { "type": "minecraft:heightmap", "heightmap": "MOTION_BLOCKING_NO_LEAVES" }, + { "type": "minecraft:biome" } + ] +} diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/ground_molting_vines.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/ground_molting_vines.json new file mode 100644 index 00000000..4f4e0661 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/ground_molting_vines.json @@ -0,0 +1,31 @@ +{ + "feature": "antarchy:ground_molting_vines", + "placement": [ + { + "type": "minecraft:count", + "count": { + "type": "minecraft:uniform", + "min_inclusive": 3, + "max_inclusive": 6 + } + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "above_bottom": 8 + }, + "max_inclusive": { + "below_top": 8 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/jumpy_bug_egg_ceiling.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/jumpy_bug_egg_ceiling.json index 3d59c6b4..66272825 100644 --- a/common/src/main/resources/data/antarchy/worldgen/placed_feature/jumpy_bug_egg_ceiling.json +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/jumpy_bug_egg_ceiling.json @@ -2,8 +2,12 @@ "feature": "antarchy:jumpy_bug_egg_ceiling", "placement": [ { - "type": "minecraft:rarity_filter", - "chance": 6 + "type": "minecraft:count", + "count": { + "type": "minecraft:uniform", + "min_inclusive": 1, + "max_inclusive": 2 + } }, { "type": "minecraft:in_square" diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/myrmite_coal_ore.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/myrmite_coal_ore.json new file mode 100644 index 00000000..55fbe7aa --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/myrmite_coal_ore.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:myrmite_coal_ore", + "placement": [ + { + "type": "minecraft:count", + "count": 14 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "absolute": 5 + }, + "max_inclusive": { + "absolute": 190 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_petals.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_petals.json index fa38da85..e03dcf94 100644 --- a/common/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_petals.json +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/peach_forest_petals.json @@ -12,6 +12,15 @@ "type": "minecraft:heightmap", "heightmap": "WORLD_SURFACE_WG" }, + { + "type": "minecraft:block_predicate_filter", + "predicate": { + "type": "minecraft:would_survive", + "state": { + "Name": "minecraft:pink_petals" + } + } + }, { "type": "minecraft:biome" } diff --git a/common/src/main/resources/data/antarchy/worldgen/structure_set/elythia_rare.json b/common/src/main/resources/data/antarchy/worldgen/structure_set/elythia_rare.json index 83b57ead..b37f29c0 100644 --- a/common/src/main/resources/data/antarchy/worldgen/structure_set/elythia_rare.json +++ b/common/src/main/resources/data/antarchy/worldgen/structure_set/elythia_rare.json @@ -6,15 +6,15 @@ }, { "structure": "antarchy:fallen_kingdom_castle", - "weight": 1 + "weight": 2 }, { "structure": "antarchy:ruined_arena", - "weight": 1 + "weight": 3 }, { "structure": "antarchy:toreterror_arena", - "weight": 1 + "weight": 3 } ], "placement": { diff --git a/common/src/main/resources/data/c/tags/block/ores.json b/common/src/main/resources/data/c/tags/block/ores.json index 7ee4e077..48c82ae3 100644 --- a/common/src/main/resources/data/c/tags/block/ores.json +++ b/common/src/main/resources/data/c/tags/block/ores.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ + "#c:ores/coal", "#c:ores/titanium", "#c:ores/uranium" ] diff --git a/common/src/main/resources/data/c/tags/block/ores/coal.json b/common/src/main/resources/data/c/tags/block/ores/coal.json new file mode 100644 index 00000000..dd5065b6 --- /dev/null +++ b/common/src/main/resources/data/c/tags/block/ores/coal.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:myrmite_coal_ore" + ] +} diff --git a/common/src/main/resources/data/c/tags/block/ores_in_ground/myrmite.json b/common/src/main/resources/data/c/tags/block/ores_in_ground/myrmite.json new file mode 100644 index 00000000..dd5065b6 --- /dev/null +++ b/common/src/main/resources/data/c/tags/block/ores_in_ground/myrmite.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:myrmite_coal_ore" + ] +} diff --git a/common/src/main/resources/data/c/tags/item/ores.json b/common/src/main/resources/data/c/tags/item/ores.json index 7ee4e077..48c82ae3 100644 --- a/common/src/main/resources/data/c/tags/item/ores.json +++ b/common/src/main/resources/data/c/tags/item/ores.json @@ -1,6 +1,7 @@ { "replace": false, "values": [ + "#c:ores/coal", "#c:ores/titanium", "#c:ores/uranium" ] diff --git a/common/src/main/resources/data/c/tags/item/ores/coal.json b/common/src/main/resources/data/c/tags/item/ores/coal.json new file mode 100644 index 00000000..dd5065b6 --- /dev/null +++ b/common/src/main/resources/data/c/tags/item/ores/coal.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:myrmite_coal_ore" + ] +} diff --git a/common/src/main/resources/data/c/tags/item/ores_in_ground/myrmite.json b/common/src/main/resources/data/c/tags/item/ores_in_ground/myrmite.json new file mode 100644 index 00000000..dd5065b6 --- /dev/null +++ b/common/src/main/resources/data/c/tags/item/ores_in_ground/myrmite.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:myrmite_coal_ore" + ] +} diff --git a/common/src/main/resources/data/minecraft/tags/block/mineable/pickaxe.json b/common/src/main/resources/data/minecraft/tags/block/mineable/pickaxe.json index 2a7b1279..8534b13b 100644 --- a/common/src/main/resources/data/minecraft/tags/block/mineable/pickaxe.json +++ b/common/src/main/resources/data/minecraft/tags/block/mineable/pickaxe.json @@ -94,6 +94,7 @@ "antarchy:broodstone_brick_stairs", "antarchy:broodstone_brick_slab", "antarchy:broodstone_brick_wall", + "antarchy:myrmite_coal_ore", "antarchy:broodstone_uranium_ore", "antarchy:broodstone_titanium_ore", "antarchy:bile_vein", diff --git a/common/src/main/resources/data/minecraft/tags/block/needs_stone_tool.json b/common/src/main/resources/data/minecraft/tags/block/needs_stone_tool.json index 33cea4cb..9f87c045 100644 --- a/common/src/main/resources/data/minecraft/tags/block/needs_stone_tool.json +++ b/common/src/main/resources/data/minecraft/tags/block/needs_stone_tool.json @@ -19,6 +19,7 @@ "antarchy:shellstone_brick_stairs", "antarchy:shellstone_brick_slab", "antarchy:shellstone_brick_wall", + "antarchy:myrmite_coal_ore", "antarchy:chiten_block", "antarchy:bile_vein" ] diff --git a/common/src/main/resources/data/minecraft/tags/entity_type/arthropod.json b/common/src/main/resources/data/minecraft/tags/entity_type/arthropod.json index 445a31c7..26157504 100644 --- a/common/src/main/resources/data/minecraft/tags/entity_type/arthropod.json +++ b/common/src/main/resources/data/minecraft/tags/entity_type/arthropod.json @@ -15,7 +15,6 @@ "antarchy:hercules_beetle", "antarchy:creeping_horror", "antarchy:lurking_terror", - "antarchy:rolly_polly", "antarchy:scorpion", "antarchy:emperor_scorpion" ] diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabric.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabric.java index b8caac03..06cc3954 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabric.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabric.java @@ -2,18 +2,28 @@ package com.craisinlord.antarchy.fabric; import com.craisinlord.antarchy.fabric.registry.AntarchyFabricEntities; import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.trades.DrTrayaurusTradeManager; import com.craisinlord.antarchy.content.item.BloodCrystalShardItem; import com.craisinlord.antarchy.fabric.network.AntarchyFabricNetworking; import net.fabricmc.fabric.api.biome.v1.BiomeModifications; import net.fabricmc.fabric.api.biome.v1.BiomeSelectors; +import net.fabricmc.fabric.api.resource.IdentifiableResourceReloadListener; +import net.fabricmc.fabric.api.resource.ResourceManagerHelper; import net.fabricmc.api.ModInitializer; import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.packs.PackType; +import net.minecraft.server.packs.resources.PreparableReloadListener; +import net.minecraft.server.packs.resources.ResourceManager; import net.minecraft.tags.TagKey; +import net.minecraft.util.profiling.ProfilerFiller; import net.minecraft.world.level.levelgen.GenerationStep; import net.minecraft.world.level.levelgen.placement.PlacedFeature; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.Executor; + public final class AntarchyFabric implements ModInitializer { private static final TagKey SHELLSTONE_BIOMES = TagKey.create( Registries.BIOME, @@ -146,6 +156,24 @@ public final class AntarchyFabric implements ModInitializer { BloodglassManager.register(); Antarchy.init(); BloodCrystalShardItem.SYNC_BLOODGLASS = BloodglassManager::syncBloodglass; + registerTradeReloadListener(); + } + + private static void registerTradeReloadListener() { + DrTrayaurusTradeManager delegate = new DrTrayaurusTradeManager(); + ResourceManagerHelper.get(PackType.SERVER_DATA).registerReloadListener(new IdentifiableResourceReloadListener() { + @Override + public ResourceLocation getFabricId() { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "trayaurus_trades"); + } + + @Override + public CompletableFuture reload(PreparableReloadListener.PreparationBarrier barrier, ResourceManager manager, + ProfilerFiller prepareProfiler, ProfilerFiller applyProfiler, + Executor prepareExecutor, Executor applyExecutor) { + return delegate.reload(barrier, manager, prepareProfiler, applyProfiler, prepareExecutor, applyExecutor); + } + }); } private static final TagKey CAVARYN_BIOMES = TagKey.create( diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/StinkySoundHandler.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/StinkySoundHandler.java index e279fb2f..e84dfb6b 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/StinkySoundHandler.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/StinkySoundHandler.java @@ -34,13 +34,15 @@ public final class StinkySoundHandler { return; } - client.level.playSound( - null, - client.player.blockPosition(), + client.level.playLocalSound( + client.player.getX(), + client.player.getY(), + client.player.getZ(), AntarchySoundEvents.STINKY_FLY.get(), SoundSource.AMBIENT, 0.14F + client.level.random.nextFloat() * 0.06F, - 0.92F + client.level.random.nextFloat() * 0.16F + 0.92F + client.level.random.nextFloat() * 0.16F, + false ); nextSoundTick = MIN_INTERVAL + client.level.random.nextInt(MAX_INTERVAL - MIN_INTERVAL + 1); }); diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricBlocks.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricBlocks.java index b46f01b1..941a65cb 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricBlocks.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricBlocks.java @@ -660,6 +660,10 @@ public final class AntarchyFabricBlocks { () -> new Block(nyxiteProperties())); + public static final DeferredBlock MYRMITE_COAL_ORE = BLOCKS.register("myrmite_coal_ore", + () -> createOre(Blocks.COAL_ORE, 0, 2)); + + public static final DeferredBlock BROODSTONE = BLOCKS.register("broodstone", () -> new Block(broodstoneProperties())); diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntities.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntities.java index 0a90bac9..f93a9ac2 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntities.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntities.java @@ -360,7 +360,7 @@ public final class AntarchyFabricEntities { public static final DeferredHolder, EntityType> STINK_BUG = ENTITY_TYPES.register("stink_bug", - () -> EntityType.Builder.of(StinkBugEntity::new, MobCategory.CREATURE) + () -> EntityType.Builder.of(StinkBugEntity::new, MobCategory.AMBIENT) .sized(0.35F, 0.2F) .clientTrackingRange(8) .build("stink_bug")); diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricItems.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricItems.java index 18ace057..e7f8b303 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricItems.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricItems.java @@ -647,6 +647,7 @@ public final class AntarchyFabricItems { public static final DeferredItem BROODSTONE_BRICK_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BROODSTONE_BRICK_STAIRS); public static final DeferredItem BROODSTONE_BRICK_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BROODSTONE_BRICK_SLAB); public static final DeferredItem BROODSTONE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BROODSTONE_BRICK_WALL); + public static final DeferredItem MYRMITE_COAL_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.MYRMITE_COAL_ORE); public static final DeferredItem BROODSTONE_URANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BROODSTONE_URANIUM_ORE); public static final DeferredItem BROODSTONE_TITANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BROODSTONE_TITANIUM_ORE); diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java index ecfe57bf..8495d30e 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java @@ -780,6 +780,9 @@ public final class AntarchyFabricMisc { public static final DeferredHolder, com.craisinlord.antarchy.content.worldgen.elythia.GiantLilyPadPatchFeature> GIANT_LILY_PAD_PATCH = FEATURES.register("giant_lily_pad_patch", () -> new com.craisinlord.antarchy.content.worldgen.elythia.GiantLilyPadPatchFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, com.craisinlord.antarchy.content.worldgen.elythia.GiantLilyPadPatchFeature> GIANT_LILY_PAD_PATCH_PEACH_FOREST = FEATURES.register("giant_lily_pad_patch_peach_forest", + () -> new com.craisinlord.antarchy.content.worldgen.elythia.GiantLilyPadPatchFeature(NoneFeatureConfiguration.CODEC, 0.12F)); + public static final DeferredHolder, LumenStreamFeature> LUMEN_STREAM = FEATURES.register("lumen_streams", () -> new LumenStreamFeature(NoneFeatureConfiguration.CODEC)); @@ -841,6 +844,8 @@ public final class AntarchyFabricMisc { public static final DeferredHolder, MoltingVinesFeature> MOLTING_VINES = FEATURES.register("molting_vines", () -> new MoltingVinesFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, com.craisinlord.antarchy.content.worldgen.cavaryn.GroundMoltingVinesFeature> GROUND_MOLTING_VINES = FEATURES.register("ground_molting_vines", + () -> new com.craisinlord.antarchy.content.worldgen.cavaryn.GroundMoltingVinesFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, com.craisinlord.antarchy.content.worldgen.cavaryn.JumpyBugEggCeilingFeature> JUMPY_BUG_EGG_CEILING = FEATURES.register("jumpy_bug_egg_ceiling", () -> new com.craisinlord.antarchy.content.worldgen.cavaryn.JumpyBugEggCeilingFeature(NoneFeatureConfiguration.CODEC)); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/StinkySoundHandler.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/StinkySoundHandler.java index 6df0b334..82431443 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/StinkySoundHandler.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/StinkySoundHandler.java @@ -39,13 +39,15 @@ public final class StinkySoundHandler { return; } - mc.level.playSound( - null, - mc.player.blockPosition(), + mc.level.playLocalSound( + mc.player.getX(), + mc.player.getY(), + mc.player.getZ(), AntarchySoundEvents.STINKY_FLY.get(), SoundSource.AMBIENT, 0.14F + mc.level.random.nextFloat() * 0.06F, - 0.92F + mc.level.random.nextFloat() * 0.16F + 0.92F + mc.level.random.nextFloat() * 0.16F, + false ); nextSoundTick = MIN_INTERVAL + mc.level.random.nextInt(MAX_INTERVAL - MIN_INTERVAL + 1); } diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java index a2c5841c..2f43fff5 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java @@ -248,6 +248,8 @@ public final class AntarchyNeoforgeBlocks { )); public static final DeferredBlock MYRMITE = BLOCKS.register("myrmite", () -> new Block(nyxiteProperties())); + public static final DeferredBlock MYRMITE_COAL_ORE = BLOCKS.register("myrmite_coal_ore", + () -> createOre(Blocks.COAL_ORE, 0, 2)); public static final DeferredBlock BROODSTONE = BLOCKS.register("broodstone", () -> new Block(broodstoneProperties())); public static final DeferredBlock POLISHED_BROODSTONE = BLOCKS.register("polished_broodstone", diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java index c558cfb9..e4c2bbc2 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java @@ -271,6 +271,10 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.MOSSY_SHELLSTONE_BRICK_SLAB_ITEM.get()); event.accept(AntarchyNeoforgeItems.MOSSY_SHELLSTONE_BRICK_WALL_ITEM.get()); event.accept(AntarchyNeoforgeItems.CRACKED_SHELLSTONE_BRICKS_ITEM.get()); + event.accept(AntarchyNeoforgeItems.BLUSH_MOSS_BLOCK_ITEM.get()); + event.accept(AntarchyNeoforgeItems.BLUSH_MOSS_CARPET_ITEM.get()); + event.accept(AntarchyNeoforgeItems.LUMEN_FROGLIGHT_ITEM.get()); + event.accept(AntarchyNeoforgeItems.ROSEATE_FROGLIGHT_ITEM.get()); event.accept(AntarchyNeoforgeItems.NYXITE_ITEM.get()); event.accept(AntarchyNeoforgeItems.NYXITE_STAIRS_ITEM.get()); event.accept(AntarchyNeoforgeItems.NYXITE_SLAB_ITEM.get()); @@ -292,13 +296,9 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.ANTIMETAL_SCAFFOLDING_ITEM.get()); event.accept(AntarchyNeoforgeItems.UMBRAL_MOSS_BLOCK_ITEM.get()); event.accept(AntarchyNeoforgeItems.UMBRAL_MOSS_CARPET_ITEM.get()); - event.accept(AntarchyNeoforgeItems.BLUSH_MOSS_BLOCK_ITEM.get()); - event.accept(AntarchyNeoforgeItems.BLUSH_MOSS_CARPET_ITEM.get()); event.accept(AntarchyNeoforgeItems.DREAM_TORCH_ITEM.get()); event.accept(AntarchyNeoforgeItems.DREAM_LANTERN_ITEM.get()); event.accept(AntarchyNeoforgeItems.DREAM_CAMPFIRE_ITEM.get()); - event.accept(AntarchyNeoforgeItems.LUMEN_FROGLIGHT_ITEM.get()); - event.accept(AntarchyNeoforgeItems.ROSEATE_FROGLIGHT_ITEM.get()); event.accept(AntarchyNeoforgeItems.DREAM_SAND_ITEM.get()); event.accept(AntarchyNeoforgeItems.DREAM_SANDSTONE_ITEM.get()); event.accept(AntarchyNeoforgeItems.CHISELED_DREAM_SANDSTONE_ITEM.get()); @@ -330,6 +330,7 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.BROODSTONE_BRICK_STAIRS_ITEM.get()); event.accept(AntarchyNeoforgeItems.BROODSTONE_BRICK_SLAB_ITEM.get()); event.accept(AntarchyNeoforgeItems.BROODSTONE_BRICK_WALL_ITEM.get()); + event.accept(AntarchyNeoforgeItems.MYRMITE_COAL_ORE_ITEM.get()); event.accept(AntarchyNeoforgeItems.BROODSTONE_URANIUM_ORE_ITEM.get()); event.accept(AntarchyNeoforgeItems.BROODSTONE_TITANIUM_ORE_ITEM.get()); event.accept(AntarchyNeoforgeItems.BILE_VEIN_ITEM.get()); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java index 29004a81..06349069 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java @@ -152,7 +152,7 @@ public final class AntarchyNeoforgeEntites { .clientTrackingRange(8) .build("bed_bug")); public static final DeferredHolder, EntityType> STINK_BUG = ENTITY_TYPES.register("stink_bug", - () -> EntityType.Builder.of(StinkBugEntity::new, MobCategory.CREATURE) + () -> EntityType.Builder.of(StinkBugEntity::new, MobCategory.AMBIENT) .sized(0.35F, 0.2F) .clientTrackingRange(8) .build("stink_bug")); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java index 5b0352f4..a08489e7 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java @@ -288,6 +288,7 @@ public final class AntarchyNeoforgeItems { public static final DeferredItem BROODSTONE_BRICK_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.BROODSTONE_BRICK_STAIRS); public static final DeferredItem BROODSTONE_BRICK_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.BROODSTONE_BRICK_SLAB); public static final DeferredItem BROODSTONE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.BROODSTONE_BRICK_WALL); + public static final DeferredItem MYRMITE_COAL_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.MYRMITE_COAL_ORE); public static final DeferredItem BROODSTONE_URANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.BROODSTONE_URANIUM_ORE); public static final DeferredItem BROODSTONE_TITANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.BROODSTONE_TITANIUM_ORE); public static final DeferredItem POLISHED_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.POLISHED_NYXITE); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java index 4e820e3e..04821095 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java @@ -272,6 +272,8 @@ public final class AntarchyNeoforgeMisc { () -> new LumenLilyPadFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, com.craisinlord.antarchy.content.worldgen.elythia.GiantLilyPadPatchFeature> GIANT_LILY_PAD_PATCH = FEATURES.register("giant_lily_pad_patch", () -> new com.craisinlord.antarchy.content.worldgen.elythia.GiantLilyPadPatchFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, com.craisinlord.antarchy.content.worldgen.elythia.GiantLilyPadPatchFeature> GIANT_LILY_PAD_PATCH_PEACH_FOREST = FEATURES.register("giant_lily_pad_patch_peach_forest", + () -> new com.craisinlord.antarchy.content.worldgen.elythia.GiantLilyPadPatchFeature(NoneFeatureConfiguration.CODEC, 0.12F)); public static final DeferredHolder, LumenStreamFeature> LUMEN_STREAM = FEATURES.register("lumen_streams", () -> new LumenStreamFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, LumenSpireFeature> LUMEN_SPIRE = FEATURES.register("lumen_spires", @@ -312,6 +314,8 @@ public final class AntarchyNeoforgeMisc { public static final DeferredHolder, MoltingVinesFeature> MOLTING_VINES = FEATURES.register("molting_vines", () -> new MoltingVinesFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, com.craisinlord.antarchy.content.worldgen.cavaryn.GroundMoltingVinesFeature> GROUND_MOLTING_VINES = FEATURES.register("ground_molting_vines", + () -> new com.craisinlord.antarchy.content.worldgen.cavaryn.GroundMoltingVinesFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, com.craisinlord.antarchy.content.worldgen.cavaryn.JumpyBugEggCeilingFeature> JUMPY_BUG_EGG_CEILING = FEATURES.register("jumpy_bug_egg_ceiling", () -> new com.craisinlord.antarchy.content.worldgen.cavaryn.JumpyBugEggCeilingFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, com.craisinlord.antarchy.content.worldgen.cavaryn.RollyCavesGiantCavernFeature> ROLLY_CAVES_GIANT_CAVERN = FEATURES.register("rolly_caves_giant_cavern",