From d5fd81f1c334ef1c00d8da5ed3d3b762cfa810fd Mon Sep 17 00:00:00 2001 From: craisinlord Date: Tue, 21 Jul 2026 02:03:34 -0500 Subject: [PATCH] fixed NML crash jerry fixes made drinking milk reset size ray fixed logspam for setblock far away fixed fabric brutalfly charge bar fixed blood crystal hearts being on top of chat overlay fixed glimmers immune to kill and damage commands fixed ult crossbow player data corruption rarely happening made nyxite spikes broken facing up fall upward and UpwardFallingBlockEntity fixed incorrect map colors for blocks fixed common rarity for uranium and titanium blocks --- .../antarchy/config/AntarchySettings.java | 2 +- .../antarchy/content/AntarchySoundEvents.java | 3 + .../content/block/GiantLilyPadBlock.java | 34 +++++ .../antarchy/content/block/JerryEggBlock.java | 2 +- .../content/block/NyxiteSpikeBlock.java | 5 +- .../content/client/HordeClientState.java | 50 +++++++- .../client/renderer/JerryRenderer.java | 5 +- .../antarchy/content/entity/JerryEntity.java | 120 ++++++++++++++++-- .../entity/UpwardFallingBlockEntity.java | 1 - .../content/entity/WaterBombEntity.java | 2 +- .../content/entity/glimmer/GlimmerEntity.java | 4 +- .../horde/CavarynHordeDefinitions.java | 11 +- .../content/horde/CavarynHordeManager.java | 112 ++++++++++++---- .../antarchy/content/item/SizeRayItem.java | 1 + .../item/ultimate/UltimateCrossbowItem.java | 78 ++++++++++-- .../thoraxis/ThoraxisBiomeSource.java | 34 +++-- .../mixins/FarChunkSetBlockWarningMixin.java | 16 +++ .../mixins/MilkBucketSizeResetMixin.java | 26 ++++ .../resources/antarchy-common.mixins.json | 2 + .../antarchy/blockstates/antiwater.json | 20 +++ .../resources/assets/antarchy/lang/de_de.json | 1 + .../resources/assets/antarchy/lang/en_us.json | 4 + .../resources/assets/antarchy/lang/es_es.json | 1 + .../resources/assets/antarchy/lang/fr_fr.json | 1 + .../resources/assets/antarchy/lang/it_it.json | 1 + .../resources/assets/antarchy/lang/ja_jp.json | 1 + .../resources/assets/antarchy/lang/ko_kr.json | 1 + .../resources/assets/antarchy/lang/pt_br.json | 1 + .../resources/assets/antarchy/lang/ru_ru.json | 1 + .../resources/assets/antarchy/lang/zh_cn.json | 1 + .../resources/assets/antarchy/lang/zh_tw.json | 1 + .../antarchy/models/block/jerry_egg.json | 4 +- .../models/block/ouranwood_hanging_sign.json | 2 +- .../antarchy/models/block/ouranwood_sign.json | 2 +- .../block/ouranwood_wall_hanging_sign.json | 2 +- .../models/block/ouranwood_wall_sign.json | 2 +- .../resources/assets/antarchy/sounds.json | 8 ++ .../sounds/ambient/cavaryn/heartbeat.ogg | Bin 0 -> 18217 bytes .../sounds/mob/rolly_polly/nromal_mode.ogg | Bin 6486 -> 6486 bytes .../antarchy/sounds/mob/rolly_polly/roll1.ogg | Bin 13284 -> 13284 bytes .../sounds/mob/rolly_polly/wheel_mode.ogg | Bin 10322 -> 10322 bytes .../antarchy/textures/block/jerry_egg.png | Bin 3031 -> 3234 bytes .../block/jerry_egg_break_particle.png | Bin 0 -> 652 bytes .../antarchy/advancement/visit_cavaryn.json | 32 +++++ .../biowart_caves/awakening.json | 17 +++ .../cavaryn_hordes/biowart_caves/dormant.json | 17 +++ .../cavaryn_hordes/biowart_caves/final.json | 20 +++ .../cavaryn_hordes/biowart_caves/wave_1.json | 10 ++ .../cavaryn_hordes/biowart_caves/wave_2.json | 16 +++ .../cavaryn_hordes/biowart_caves/wave_3.json | 22 ++++ .../tags/entity_type/horde_jerry.json | 5 + .../tags/item/hercules_beetle_food.json | 2 +- .../worldgen/biome/biowart_caves.json | 12 +- .../worldgen/biome/brooding_tunnels.json | 6 +- .../data/antarchy/worldgen/biome/cavaryn.json | 6 +- .../worldgen/biome/glimmering_pools.json | 6 +- .../antarchy/worldgen/biome/rolly_caves.json | 9 +- .../placed_feature/jerry_egg_patch.json | 4 +- .../fabric/AntarchyFabricContent.java | 1 + .../client/AntarchyFabricClientBootstrap.java | 1 - .../client/BrutalflyElytraHudRenderer.java | 2 +- .../mixin/JumpyBootsFallDamageMixin.java | 24 ++++ .../client/BloodglassChatOrderMixin.java | 18 +++ .../BrutalflyElytraExperienceBarMixin.java | 21 +++ .../fabric/registry/AntarchyFabricBlocks.java | 75 +++++------ .../registry/AntarchyFabricEntities.java | 2 +- .../fabric/registry/AntarchyFabricItems.java | 63 ++++----- .../fabric/registry/AntarchyFabricSounds.java | 3 + .../fabric/registry/DeferredRegister.java | 4 + .../resources/antarchy-fabric.mixins.json | 2 + .../antarchy/neoforge/AntarchyNeoforge.java | 1 + .../neoforge/AntarchyToolsConfig.java | 2 +- .../client/AntarchyNeoForgeClient.java | 4 +- .../registry/AntarchyNeoforgeBlocks.java | 71 ++++++----- .../AntarchyNeoforgeCreativeModeTabs.java | 2 + .../registry/AntarchyNeoforgeEntites.java | 2 +- .../registry/AntarchyNeoforgeItems.java | 87 ++++++++----- .../registry/AntarchyNeoforgeSounds.java | 1 + 78 files changed, 897 insertions(+), 235 deletions(-) create mode 100644 common/src/main/java/com/craisinlord/antarchy/mixins/FarChunkSetBlockWarningMixin.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/mixins/MilkBucketSizeResetMixin.java create mode 100644 common/src/main/resources/assets/antarchy/blockstates/antiwater.json create mode 100644 common/src/main/resources/assets/antarchy/sounds/ambient/cavaryn/heartbeat.ogg create mode 100644 common/src/main/resources/assets/antarchy/textures/block/jerry_egg_break_particle.png create mode 100644 common/src/main/resources/data/antarchy/advancement/visit_cavaryn.json create mode 100644 common/src/main/resources/data/antarchy/cavaryn_hordes/biowart_caves/awakening.json create mode 100644 common/src/main/resources/data/antarchy/cavaryn_hordes/biowart_caves/dormant.json create mode 100644 common/src/main/resources/data/antarchy/cavaryn_hordes/biowart_caves/final.json create mode 100644 common/src/main/resources/data/antarchy/cavaryn_hordes/biowart_caves/wave_1.json create mode 100644 common/src/main/resources/data/antarchy/cavaryn_hordes/biowart_caves/wave_2.json create mode 100644 common/src/main/resources/data/antarchy/cavaryn_hordes/biowart_caves/wave_3.json create mode 100644 common/src/main/resources/data/antarchy/tags/entity_type/horde_jerry.json create mode 100644 fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/BloodglassChatOrderMixin.java create mode 100644 fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/BrutalflyElytraExperienceBarMixin.java diff --git a/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java b/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java index e109f2e3..3ef9c91e 100644 --- a/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java +++ b/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java @@ -83,7 +83,7 @@ public final class AntarchySettings { private static double bigBerthaBasiliskCooldownSeconds = 7.0D; private static double bigBerthaLucidInvertedDurationSeconds = 3.0D; private static double bigBerthaLucidInvertedDamageBonusPercent = 25.0D; - private static double potentNyxiteInvertedDurationSeconds = 2.0D; + private static double potentNyxiteInvertedDurationSeconds = 60.0D; private static int ultimateToolEnchantability = 25; private static int ultimateArmorEnchantability = 10; private static int ultimateBowEnchantability = 20; diff --git a/common/src/main/java/com/craisinlord/antarchy/content/AntarchySoundEvents.java b/common/src/main/java/com/craisinlord/antarchy/content/AntarchySoundEvents.java index b2090f4b..86424c80 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/AntarchySoundEvents.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/AntarchySoundEvents.java @@ -134,6 +134,7 @@ public final class AntarchySoundEvents { public static Supplier STINKY_FLY = (Supplier) UNBOUND; public static Supplier STINK_BUG_FART = (Supplier) UNBOUND; public static Supplier STINK_BUG_IDLE = (Supplier) UNBOUND; + public static Supplier CAVARYN_HEARTBEAT = (Supplier) UNBOUND; public static Supplier ROLLY_POLLY_IDLE = (Supplier) UNBOUND; public static Supplier CREEPING_HORROR_GROWL = (Supplier) UNBOUND; public static Supplier CREEPING_HORROR_HURT = (Supplier) UNBOUND; @@ -289,6 +290,7 @@ public final class AntarchySoundEvents { Supplier stinkyFly, Supplier stinkBugFart, Supplier stinkBugIdle, + Supplier cavarynHeartbeat, Supplier rollyPollyIdle, Supplier creepingHorrorGrowl, Supplier creepingHorrorHurt, @@ -440,6 +442,7 @@ public final class AntarchySoundEvents { STINKY_FLY = stinkyFly; STINK_BUG_FART = stinkBugFart; STINK_BUG_IDLE = stinkBugIdle; + CAVARYN_HEARTBEAT = cavarynHeartbeat; ROLLY_POLLY_IDLE = rollyPollyIdle; CREEPING_HORROR_GROWL = creepingHorrorGrowl; CREEPING_HORROR_HURT = creepingHorrorHurt; diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/GiantLilyPadBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/GiantLilyPadBlock.java index b96f964d..684a8b7a 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/block/GiantLilyPadBlock.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/GiantLilyPadBlock.java @@ -13,6 +13,8 @@ import net.minecraft.util.RandomSource; import net.minecraft.util.StringRepresentable; import net.minecraft.world.InteractionHand; import net.minecraft.world.ItemInteractionResult; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.BlockPlaceContext; @@ -31,6 +33,7 @@ import net.minecraft.world.level.block.state.properties.BooleanProperty; import net.minecraft.world.level.block.state.properties.EnumProperty; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.Vec2; +import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; import org.jetbrains.annotations.Nullable; @@ -44,6 +47,9 @@ public final class GiantLilyPadBlock extends Block implements BonemealableBlock private static final VoxelShape SHAPE = Block.box(0.0D, 0.0D, 0.0D, 16.0D, 0.5D, 16.0D); private static final ThreadLocal REMOVING_STRUCTURE = ThreadLocal.withInitial(() -> false); private static final Map OFFSETS = createOffsets(); + private static final double BOUNCE_FACTOR = 0.35D; + private static final double FORWARD_BOOST_MULTIPLIER = 1.05D; + private static final double MAX_BOOSTED_HORIZONTAL_SPEED = 0.6D; public GiantLilyPadBlock(BlockBehaviour.Properties properties) { super(properties); @@ -148,6 +154,34 @@ public final class GiantLilyPadBlock extends Block implements BonemealableBlock return ItemInteractionResult.CONSUME; } + @Override + public void stepOn(Level level, BlockPos pos, BlockState state, Entity entity) { + super.stepOn(level, pos, state, entity); + if (!level.isClientSide) { + Vec3 movement = entity.getDeltaMovement(); + double horizontalSpeed = movement.horizontalDistance(); + if (horizontalSpeed > 0.02D && horizontalSpeed < MAX_BOOSTED_HORIZONTAL_SPEED) { + double boosted = Math.min(horizontalSpeed * FORWARD_BOOST_MULTIPLIER, MAX_BOOSTED_HORIZONTAL_SPEED); + double scale = boosted / horizontalSpeed; + entity.setDeltaMovement(movement.x * scale, movement.y, movement.z * scale); + } + } + } + + @Override + public void updateEntityAfterFallOn(BlockGetter level, Entity entity) { + if (entity.isSuppressingBounce()) { + super.updateEntityAfterFallOn(level, entity); + return; + } + + Vec3 movement = entity.getDeltaMovement(); + if (movement.y < 0.0D) { + double bounce = entity instanceof LivingEntity ? BOUNCE_FACTOR : BOUNCE_FACTOR * 0.7D; + entity.setDeltaMovement(movement.x, -movement.y * bounce, movement.z); + } + } + @Override public void animateTick(BlockState state, Level level, BlockPos pos, RandomSource random) { if (!state.getValue(HAS_LOTUS) || random.nextInt(10) != 0) { diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/JerryEggBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/JerryEggBlock.java index 78ef5040..3a0c37cd 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/block/JerryEggBlock.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/JerryEggBlock.java @@ -32,7 +32,7 @@ public class JerryEggBlock extends Block { public static final BooleanProperty ROTATED = BooleanProperty.create("rotated"); private static final ResourceLocation JERRY_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "jerry"); private static final int HATCH_CHECK_INTERVAL = 1200; - private static final VoxelShape SHAPE = Block.box(1.0D, 0.0D, 0.0D, 15.0D, 16.0D, 16.0D); + private static final VoxelShape SHAPE = Block.box(1.5D, 0.0D, 1.5D, 14.5D, 16.0D, 14.5D); public JerryEggBlock(BlockBehaviour.Properties properties) { super(properties); diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/NyxiteSpikeBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/NyxiteSpikeBlock.java index 81a59050..1f207d1a 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/block/NyxiteSpikeBlock.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/NyxiteSpikeBlock.java @@ -1,6 +1,7 @@ package com.craisinlord.antarchy.content.block; import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.entity.UpwardFallingBlockEntity; import com.mojang.serialization.MapCodec; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -11,7 +12,6 @@ import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.PointedDripstoneBlock; import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockState; @@ -119,8 +119,7 @@ public class NyxiteSpikeBlock extends PointedDripstoneBlock { BlockPos.MutableBlockPos cursor = pos.mutable(); while (isNyxiteSpikeWithDirection(level.getBlockState(cursor), Direction.UP)) { BlockState spikeState = level.getBlockState(cursor); - dropResources(spikeState, level, cursor); - level.removeBlock(cursor, false); + UpwardFallingBlockEntity.fallUp(level, cursor, spikeState); cursor.move(Direction.UP); } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/HordeClientState.java b/common/src/main/java/com/craisinlord/antarchy/content/client/HordeClientState.java index f14c5312..ebd9b5dc 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/client/HordeClientState.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/HordeClientState.java @@ -1,11 +1,13 @@ package com.craisinlord.antarchy.content.client; import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.AntarchySoundEvents; import net.minecraft.client.Minecraft; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundSource; import net.minecraft.util.Mth; import net.minecraft.world.level.Level; import net.minecraft.world.phys.Vec3; @@ -15,14 +17,18 @@ public final class HordeClientState { Registries.DIMENSION, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "cavaryn") ); + private static final int STALE_SYNC_TICKS = 20 * 15; private static float targetIntensity; private static float intensity; + private static int heartbeatDelayTicks; + private static int ticksSinceSync; private HordeClientState() { } public static void update(float syncedIntensity) { targetIntensity = Mth.clamp(syncedIntensity, 0.0F, 1.0F); + ticksSinceSync = 0; } public static float intensity() { @@ -31,15 +37,21 @@ public final class HordeClientState { public static void tick() { Minecraft minecraft = Minecraft.getInstance(); - if (minecraft.level == null || minecraft.player == null || !minecraft.level.dimension().equals(CAVARYN)) { - targetIntensity = 0.0F; + if (minecraft.level == null || minecraft.player == null || !minecraft.level.dimension().equals(CAVARYN) || !minecraft.player.isAlive()) { + reset(); } intensity += (targetIntensity - intensity) * 0.08F; - if (intensity < 0.01F) { + if (minecraft.level == null || minecraft.player == null || minecraft.isPaused()) { return; } - if (minecraft.level == null || minecraft.player == null || minecraft.isPaused()) { + if (minecraft.level.dimension().equals(CAVARYN)) { + if (++ticksSinceSync >= STALE_SYNC_TICKS) { + targetIntensity = 0.0F; + } + tickHeartbeat(minecraft); + } + if (intensity < 0.01F) { return; } @@ -52,4 +64,34 @@ public final class HordeClientState { minecraft.level.addParticle(ParticleTypes.MYCELIUM, x, y, z, 0.0D, 0.015D + intensity * 0.025D, 0.0D); } } + + private static void reset() { + targetIntensity = 0.0F; + intensity = 0.0F; + heartbeatDelayTicks = 0; + ticksSinceSync = 0; + } + + private static void tickHeartbeat(Minecraft minecraft) { + if (heartbeatDelayTicks > 0) { + heartbeatDelayTicks--; + return; + } + + float soundIntensity = Mth.clamp(intensity, 0.0F, 1.0F); + float scaledIntensity = soundIntensity * soundIntensity; + float volume = 0.08F + scaledIntensity * 1.42F; + float pitch = 0.85F + soundIntensity * 0.45F; + heartbeatDelayTicks = Mth.clamp((int) (150.0F - scaledIntensity * 132.0F), 18, 150); + minecraft.level.playLocalSound( + minecraft.player.getX(), + minecraft.player.getY(), + minecraft.player.getZ(), + AntarchySoundEvents.CAVARYN_HEARTBEAT.get(), + SoundSource.AMBIENT, + volume, + pitch, + false + ); + } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/JerryRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/JerryRenderer.java index b377b997..6010efad 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/JerryRenderer.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/JerryRenderer.java @@ -17,9 +17,6 @@ public class JerryRenderer extends GeoEntityRenderer { @Override public RenderType getRenderType(JerryEntity animatable, ResourceLocation texture, @Nullable MultiBufferSource bufferSource, float partialTick) { - JerryEntity.Stage stage = animatable.getStage(); - return stage == JerryEntity.Stage.INFANT || stage == JerryEntity.Stage.MATURE - ? RenderType.entityTranslucent(texture) - : RenderType.entityCutoutNoCull(texture); + return RenderType.entityTranslucent(texture); } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/JerryEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/JerryEntity.java index c3686f3c..e48ab971 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/JerryEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/JerryEntity.java @@ -1,11 +1,15 @@ package com.craisinlord.antarchy.content.entity; import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.horde.CavarynHordeManager; import net.minecraft.nbt.CompoundTag; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; +import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.util.ByIdMap; import net.minecraft.util.Mth; import net.minecraft.util.StringRepresentable; @@ -71,6 +75,8 @@ public class JerryEntity extends Monster implements GeoEntity { private int stageAgeTicks; private int attachDamageTicks; private int attackCooldownTicks; + private int alphaDiveCooldownTicks; + private boolean attachedToTarget; public JerryEntity(EntityType entityType, Level level) { super(entityType, level); @@ -145,6 +151,9 @@ public class JerryEntity extends Monster implements GeoEntity { if (this.attackCooldownTicks > 0) { this.attackCooldownTicks--; } + if (this.alphaDiveCooldownTicks > 0) { + this.alphaDiveCooldownTicks--; + } Stage stage = this.getStage(); if (stage == Stage.INFANT || stage == Stage.MATURE) { @@ -156,20 +165,43 @@ public class JerryEntity extends Monster implements GeoEntity { private void tickGrowth() { Stage stage = this.getStage(); - if (stage == Stage.ALPHA || stage == Stage.GAMMA) { + if (stage == Stage.GAMMA) { return; } - this.stageAgeTicks++; + this.stageAgeTicks += this.growthTickAmount(); if (this.stageAgeTicks < GROWTH_TICKS) { return; } this.stageAgeTicks = 0; - this.setStage(stage == Stage.INFANT ? Stage.MATURE : (this.random.nextBoolean() ? Stage.ALPHA : Stage.GAMMA)); + this.setStage(switch (stage) { + case INFANT -> Stage.MATURE; + case MATURE -> Stage.ALPHA; + case ALPHA -> Stage.GAMMA; + case GAMMA -> Stage.GAMMA; + }); + } + + private int growthTickAmount() { + if (!(this.level() instanceof ServerLevel serverLevel)) { + return 1; + } + + int hordeLevel = 0; + for (ServerPlayer player : serverLevel.players()) { + if (player.isSpectator() || player.distanceToSqr(this) > 96.0D * 96.0D) { + continue; + } + hordeLevel = Math.max(hordeLevel, CavarynHordeManager.getHordeLevel(player)); + } + + float intensity = Mth.clamp(hordeLevel / (float) CavarynHordeManager.maxHordeLevel(), 0.0F, 1.0F); + return 1 + Math.round(intensity * intensity * 99.0F); } private void tickAttachedForm(Stage stage) { LivingEntity target = this.getTarget(); if (target == null || !target.isAlive()) { + this.attachedToTarget = false; this.drift(); return; } @@ -182,13 +214,18 @@ public class JerryEntity extends Monster implements GeoEntity { this.setDeltaMovement(this.getDeltaMovement().scale(0.55D).add(motion)); } if (distance < 1.15D) { + this.attachedToTarget = true; this.setPos(targetPos.x, targetPos.y, targetPos.z); this.setDeltaMovement(Vec3.ZERO); if (++this.attachDamageTicks >= ATTACH_DAMAGE_INTERVAL) { this.attachDamageTicks = 0; + Vec3 targetMotion = target.getDeltaMovement(); target.hurt(this.damageSources().mobAttack(this), (float) stage.attackDamage()); + target.setDeltaMovement(targetMotion); + target.hurtMarked = true; } } else { + this.attachedToTarget = false; this.attachDamageTicks = 0; } } @@ -201,14 +238,27 @@ public class JerryEntity extends Monster implements GeoEntity { } Stage stage = this.getStage(); - Vec3 targetPos = target.getEyePosition().add(0.0D, -0.35D, 0.0D); + Vec3 targetPos = target.getEyePosition(); + Vec3 hoverPos = targetPos.add(0.0D, 5.0D, 0.0D); + Vec3 toHover = hoverPos.subtract(this.position()); Vec3 toTarget = targetPos.subtract(this.position()); - double distance = toTarget.length(); + double hoverDistance = toHover.length(); + double targetDistance = toTarget.length(); + double horizontalDistance = this.position().subtract(targetPos).horizontalDistance(); this.faceTarget(target); - if (distance > 0.01D) { - this.setDeltaMovement(this.getDeltaMovement().scale(0.65D).add(toTarget.normalize().scale(0.22D))); + if (this.alphaDiveCooldownTicks > 0) { + this.setDeltaMovement(this.getDeltaMovement().scale(0.8D).add(toTarget.normalize().scale(0.28D)).add(0.0D, -0.08D, 0.0D)); + } else if (hoverDistance > 0.01D) { + Vec3 desiredMotion = toHover.normalize().scale(0.20D); + this.setDeltaMovement(this.getDeltaMovement().scale(0.72D).add(desiredMotion)); } - if (distance < 2.1D && this.attackCooldownTicks <= 0) { + + if (this.alphaDiveCooldownTicks <= 0 && targetDistance < 9.0D && horizontalDistance < 7.0D) { + this.alphaDiveCooldownTicks = 30; + this.setDeltaMovement(this.getDeltaMovement().add(0.0D, -0.55D, 0.0D).add(toTarget.normalize().scale(0.42D))); + } + + if (targetDistance < 2.3D && this.attackCooldownTicks <= 0) { this.faceTarget(target); this.attackCooldownTicks = 24; this.entityData.set(ATTACK_ANIM_TICKS, ATTACK_ANIM_DURATION); @@ -252,9 +302,23 @@ public class JerryEntity extends Monster implements GeoEntity { @Override public InteractionResult mobInteract(Player player, InteractionHand hand) { ItemStack stack = player.getItemInHand(hand); - if (this.isAdultStage() && stack.getItem() instanceof SpawnEggItem spawnEggItem && spawnEggItem.getType(stack) == this.getType()) { + if (stack.is(BuiltInRegistries.ITEM.get(ResourceLocation.fromNamespaceAndPath(com.craisinlord.antarchy.Antarchy.MODID, "jerry_nucleus")))) { + if (!this.level().isClientSide) { + Stage nextStage = this.nextGrowthStage(); + if (nextStage != this.getStage()) { + this.setStage(nextStage); + this.stageAgeTicks = 0; + if (!player.getAbilities().instabuild) { + stack.shrink(1); + } + } + } + return InteractionResult.sidedSuccess(this.level().isClientSide); + } + + if (stack.getItem() instanceof SpawnEggItem spawnEggItem && spawnEggItem.getType(stack) == this.getType()) { if (this.level() instanceof ServerLevel serverLevel && this.getType().create(serverLevel) instanceof JerryEntity infant) { - infant.setStage(Stage.INFANT); + infant.setStage(this.isAdultStage() ? Stage.INFANT : this.randomAdultStage()); infant.moveTo(this.getX(), this.getY(), this.getZ(), this.random.nextFloat() * 360.0F, 0.0F); infant.finalizeSpawn(serverLevel, serverLevel.getCurrentDifficultyAt(infant.blockPosition()), MobSpawnType.MOB_SUMMONED, null); serverLevel.addFreshEntity(infant); @@ -304,6 +368,24 @@ public class JerryEntity extends Monster implements GeoEntity { return false; } + @Override + public boolean isPushable() { + return !this.isAttachedYoungStage() && super.isPushable(); + } + + @Override + public void push(Entity entity) { + if (this.isAttachedYoungStage()) { + return; + } + super.push(entity); + } + + @Override + public boolean canBeCollidedWith() { + return !this.isAttachedYoungStage() && super.canBeCollidedWith(); + } + @Override protected void checkFallDamage(double y, boolean onGround, BlockState state, net.minecraft.core.BlockPos pos) { } @@ -354,6 +436,24 @@ public class JerryEntity extends Monster implements GeoEntity { return stage == Stage.ALPHA || stage == Stage.GAMMA; } + private Stage nextGrowthStage() { + return switch (this.getStage()) { + case INFANT -> Stage.MATURE; + case MATURE -> Stage.ALPHA; + case ALPHA -> Stage.GAMMA; + case GAMMA -> Stage.GAMMA; + }; + } + + private Stage randomAdultStage() { + return this.random.nextBoolean() ? Stage.ALPHA : Stage.GAMMA; + } + + private boolean isAttachedYoungStage() { + Stage stage = this.getStage(); + return this.attachedToTarget && (stage == Stage.INFANT || stage == Stage.MATURE); + } + private class GammaMeleeGoal extends MeleeAttackGoal { GammaMeleeGoal() { super(JerryEntity.this, 1.35D, false); diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/UpwardFallingBlockEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/UpwardFallingBlockEntity.java index 57665291..79e97e33 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/UpwardFallingBlockEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/UpwardFallingBlockEntity.java @@ -21,7 +21,6 @@ import java.util.function.Supplier; public class UpwardFallingBlockEntity extends Entity { - /** Set by the platform registration before any block tick fires. */ public static Supplier> TYPE; private static final EntityDataAccessor DATA_BLOCK_STATE = diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/WaterBombEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/WaterBombEntity.java index dd3a5810..e2de6b7b 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/WaterBombEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/WaterBombEntity.java @@ -124,7 +124,7 @@ public class WaterBombEntity extends ThrowableProjectile { level.removeBlock(hitPos, false); } else if (level.isEmptyBlock(hitPos) && level.getBlockState(hitPos.below()).isSolid()) { level.setBlock(hitPos, Blocks.WATER.defaultBlockState().setValue(LiquidBlock.LEVEL, 1), 3); - level.scheduleTick(hitPos, Fluids.WATER, 2); + level.scheduleTick(hitPos, Fluids.FLOWING_WATER, 2); } } this.discard(); diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerEntity.java index 2afb0a49..1d4a423a 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerEntity.java @@ -22,6 +22,8 @@ import net.minecraft.world.DifficultyInstance; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.damagesource.DamageTypes; +import net.minecraft.tags.DamageTypeTags; import net.minecraft.world.entity.AgeableMob; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityDimensions; @@ -132,7 +134,7 @@ public class GlimmerEntity extends TamableAnimal implements GeoEntity { @Override public boolean isInvulnerableTo(DamageSource damageSource) { - return true; + return !damageSource.is(DamageTypeTags.BYPASSES_INVULNERABILITY) && !damageSource.is(DamageTypes.GENERIC); } @Override diff --git a/common/src/main/java/com/craisinlord/antarchy/content/horde/CavarynHordeDefinitions.java b/common/src/main/java/com/craisinlord/antarchy/content/horde/CavarynHordeDefinitions.java index 28faaf6a..3b4d7f06 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/horde/CavarynHordeDefinitions.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/horde/CavarynHordeDefinitions.java @@ -113,7 +113,7 @@ public final class CavarynHordeDefinitions { for (int i = 0; i < count; i++) { EntityType type = entry.randomType(random); if (type != null) { - choices.add(new SpawnChoice(type, entry.trackCompletion, entry.heavyArrivalEffect)); + choices.add(new SpawnChoice(type, entry.trackCompletion, entry.heavyArrivalEffect, entry.jerryStage)); } } } @@ -137,7 +137,7 @@ public final class CavarynHordeDefinitions { } } - public record SpawnChoice(EntityType type, boolean trackCompletion, boolean heavyArrivalEffect) { + public record SpawnChoice(EntityType type, boolean trackCompletion, boolean heavyArrivalEffect, String jerryStage) { } private static final class Entry { @@ -153,10 +153,11 @@ public final class CavarynHordeDefinitions { private final boolean warning; private final boolean trackCompletion; private final boolean heavyArrivalEffect; + private final String jerryStage; private Entry(TagKey> entityTag, int weight, int baseCount, int highAttentionBaseCount, int perPlayerCount, int perPlayers, int perPlayersCount, int minCount, int maxCount, boolean warning, - boolean trackCompletion, boolean heavyArrivalEffect) { + boolean trackCompletion, boolean heavyArrivalEffect, String jerryStage) { this.entityTag = entityTag; this.weight = Math.max(1, weight); this.baseCount = baseCount; @@ -169,6 +170,7 @@ public final class CavarynHordeDefinitions { this.warning = warning; this.trackCompletion = trackCompletion; this.heavyArrivalEffect = heavyArrivalEffect; + this.jerryStage = jerryStage; } private static Entry fromJson(JsonObject json) { @@ -191,7 +193,8 @@ public final class CavarynHordeDefinitions { getInt(json, "max_count", Integer.MAX_VALUE), getBoolean(json, "warning", false), getBoolean(json, "track_completion", false), - getBoolean(json, "heavy_arrival_effect", false) + getBoolean(json, "heavy_arrival_effect", false), + getString(json, "jerry_stage", "") ); } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/horde/CavarynHordeManager.java b/common/src/main/java/com/craisinlord/antarchy/content/horde/CavarynHordeManager.java index 98754980..60c54757 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/horde/CavarynHordeManager.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/horde/CavarynHordeManager.java @@ -3,6 +3,7 @@ package com.craisinlord.antarchy.content.horde; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.AntarchyTags; +import com.craisinlord.antarchy.content.entity.JerryEntity; import com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakeSync; import com.craisinlord.antarchy.content.network.HordeIntensitySync; import java.util.ArrayList; @@ -38,6 +39,7 @@ import net.minecraft.world.entity.monster.Enemy; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.saveddata.SavedData; import net.minecraft.world.phys.AABB; @@ -48,6 +50,10 @@ public final class CavarynHordeManager { Registries.DIMENSION, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "cavaryn") ); + private static final ResourceKey BIOWART_CAVES = ResourceKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "biowart_caves") + ); private static final ResourceLocation DORMANT_HORDE = hordeId("dormant"); private static final ResourceLocation AWAKENING_HORDE = hordeId("awakening"); private static final ResourceLocation WAVE_ONE_HORDE = hordeId("wave_1"); @@ -58,6 +64,10 @@ public final class CavarynHordeManager { private static final int GROUP_RADIUS_BLOCKS = 128; private static final int ATTENTION_THRESHOLD = 100; + private static final int HOSTILE_KILL_ATTENTION = 4; + private static final int MOB_KILL_ATTENTION = 3; + private static final int EGG_OR_NEST_BREAK_ATTENTION = 5; + private static final int BLOCK_BREAK_ATTENTION = 1; private static final int STALE_ATTENTION_PRUNE_TICKS = 20 * 60 * 20; private static final int PLAYER_CHECK_INTERVAL = 20; private static final int AREA_ATTENTION_INTERVAL = 20 * 45; @@ -105,7 +115,7 @@ public final class CavarynHordeManager { if (isPlayerInActiveEncounter(level, player)) { return; } - addAttention(level, player, killed instanceof Enemy || killed.getType().getCategory() == MobCategory.MONSTER ? 18 : 8); + addAttention(level, player, scaleActionAttention(level, killed instanceof Enemy || killed.getType().getCategory() == MobCategory.MONSTER ? HOSTILE_KILL_ATTENTION : MOB_KILL_ATTENTION)); } public static void recordBlockBreak(ServerPlayer player, BlockState brokenState, BlockPos pos) { @@ -115,7 +125,7 @@ public final class CavarynHordeManager { if (!isHordeBiome(level, pos) || isPlayerInActiveEncounter(level, player)) { return; } - addAttention(level, player, isEggOrNest(brokenState) ? 22 : 2); + addAttention(level, player, scaleActionAttention(level, isEggOrNest(brokenState) ? EGG_OR_NEST_BREAK_ATTENTION : BLOCK_BREAK_ATTENTION)); } public static boolean isHordeBiome(ServerLevelAccessor level, BlockPos pos) { @@ -207,7 +217,7 @@ public final class CavarynHordeManager { if (encounter == null) { tickDormantPressure(level, data, player, attention, currentArea, gameTime); } - HordeIntensitySync.send(player, encounter != null ? encounter.intensity(gameTime) : attention.attention / (float) ATTENTION_THRESHOLD); + HordeIntensitySync.send(player, attention.attention / (float) ATTENTION_THRESHOLD); } for (Map.Entry entry : data.players.entrySet()) { @@ -272,7 +282,7 @@ public final class CavarynHordeManager { return; } - CavarynHordeDefinitions.Definition definition = CavarynHordeDefinitions.get(level, DORMANT_HORDE); + CavarynHordeDefinitions.Definition definition = CavarynHordeDefinitions.get(level, hordeForPosition(level, player.blockPosition(), DORMANT_HORDE)); int existing = countNearbyDirectHordeMobs(level, player.blockPosition(), 48.0D); if (existing >= definition.resolvedMaxActive(level, scaleSpawnCount(level, MAX_DORMANT_MOBS_PER_AREA))) { data.areaSpawnCooldowns.put(areaKey, gameTime + DORMANT_MIN_SPAWN_INTERVAL); @@ -310,6 +320,15 @@ public final class CavarynHordeManager { data.setDirty(); } + private static int scaleActionAttention(ServerLevel level, int amount) { + float multiplier = switch (level.getDifficulty()) { + case HARD -> 1.5F; + case EASY -> 0.75F; + default -> 1.0F; + }; + return Math.max(1, Math.round(amount * multiplier)); + } + private static void startEncounter(ServerLevel level, HordeData data, ServerPlayer seedPlayer) { Encounter existing = findNearbyEncounter(data, seedPlayer.blockPosition()); if (existing != null) { @@ -336,6 +355,37 @@ public final class CavarynHordeManager { data.setDirty(); } + private static List buildTargetedSpawnList(ServerLevel level, ResourceLocation horde, List targets, int players, boolean highAttention) { + Map> targetsByHorde = new HashMap<>(); + for (ServerPlayer target : targets) { + ResourceLocation targetHorde = hordeForPosition(level, target.blockPosition(), horde); + targetsByHorde.computeIfAbsent(targetHorde, ignored -> new ArrayList<>()).add(target); + } + + List choices = new ArrayList<>(); + for (Map.Entry> entry : targetsByHorde.entrySet()) { + List groupTargets = entry.getValue(); + int groupPlayers = Math.max(1, Math.min(players, groupTargets.size())); + List groupChoices = CavarynHordeDefinitions.get(level, entry.getKey()) + .buildSpawnList(level, groupPlayers, highAttention, level.random); + for (CavarynHordeDefinitions.SpawnChoice choice : groupChoices) { + ServerPlayer target = groupTargets.get(level.random.nextInt(groupTargets.size())); + choices.add(new TargetedSpawnChoice(choice, target)); + } + } + java.util.Collections.shuffle(choices); + return choices; + } + + private static boolean shouldWarnForTargets(ServerLevel level, ResourceLocation horde, List targets) { + for (ServerPlayer target : targets) { + if (CavarynHordeDefinitions.get(level, hordeForPosition(level, target.blockPosition(), horde)).shouldWarn()) { + return true; + } + } + return false; + } + private static void spawnAwakeningSkirmish(ServerLevel level, Encounter encounter, List targets) { if (level.getDifficulty() == Difficulty.PEACEFUL) { return; @@ -346,15 +396,13 @@ public final class CavarynHordeManager { return; } - List choices = CavarynHordeDefinitions.get(level, AWAKENING_HORDE) - .buildSpawnList(level, players, false, level.random); + List choices = buildTargetedSpawnList(level, AWAKENING_HORDE, targets, players, false); int spawned = 0; - for (CavarynHordeDefinitions.SpawnChoice choice : choices) { + for (TargetedSpawnChoice choice : choices) { if (spawned >= capacity) { break; } - ServerPlayer target = targets.get(level.random.nextInt(targets.size())); - if (spawnDirectMob(level, encounter, choice, target)) { + if (spawnDirectMob(level, encounter, choice.choice(), choice.target())) { spawned++; } } @@ -371,19 +419,18 @@ public final class CavarynHordeManager { return; } - CavarynHordeDefinitions.Definition definition = CavarynHordeDefinitions.get(level, hordeForWave(encounter.wave)); - if (definition.shouldWarn()) { - warnHercules(level, encounter.center, targets); + ResourceLocation horde = hordeForWave(encounter.wave); + if (shouldWarnForTargets(level, horde, targets)) { + warnHercules(level, encounter.center, targets); } - List choices = definition.buildSpawnList(level, players, false, level.random); + List choices = buildTargetedSpawnList(level, horde, targets, players, false); int spawned = 0; - for (CavarynHordeDefinitions.SpawnChoice choice : choices) { + for (TargetedSpawnChoice choice : choices) { if (spawned >= capacity) { break; } - ServerPlayer target = targets.get(level.random.nextInt(targets.size())); - if (spawnDirectMob(level, encounter, choice, target)) { + if (spawnDirectMob(level, encounter, choice.choice(), choice.target())) { spawned++; } } @@ -401,6 +448,7 @@ public final class CavarynHordeManager { } mob.moveTo(spawnPos.getX() + 0.5D, spawnPos.getY(), spawnPos.getZ() + 0.5D, level.random.nextFloat() * 360.0F, 0.0F); mob.finalizeSpawn(level, level.getCurrentDifficultyAt(spawnPos), MobSpawnType.EVENT, null); + applyJerryStage(mob, choice.jerryStage(), level.random); if (mob.canAttack(target)) { mob.setTarget(target); } @@ -425,6 +473,27 @@ public final class CavarynHordeManager { return true; } + private static void applyJerryStage(Mob mob, String stageName, RandomSource random) { + if (!(mob instanceof JerryEntity jerry) || stageName == null || stageName.isBlank()) { + return; + } + + JerryEntity.Stage stage = switch (stageName) { + case "random" -> JerryEntity.Stage.values()[random.nextInt(JerryEntity.Stage.values().length)]; + case "random_young" -> random.nextBoolean() ? JerryEntity.Stage.INFANT : JerryEntity.Stage.MATURE; + case "random_adult" -> random.nextBoolean() ? JerryEntity.Stage.ALPHA : JerryEntity.Stage.GAMMA; + default -> JerryEntity.Stage.byName(stageName); + }; + jerry.setStage(stage); + } + + private static ResourceLocation hordeForPosition(ServerLevel level, BlockPos pos, ResourceLocation horde) { + if (level.getBiome(pos).is(BIOWART_CAVES)) { + return ResourceLocation.fromNamespaceAndPath(horde.getNamespace(), "biowart_caves/" + horde.getPath()); + } + return horde; + } + private static int countNearbyDirectHordeMobs(ServerLevel level, BlockPos center, double radius) { AABB box = new AABB(center).inflate(radius); return level.getEntitiesOfClass(Mob.class, box, mob -> CavarynHordeDefinitions.isConfiguredHordeType(level, mob.getType())).size(); @@ -598,6 +667,9 @@ public final class CavarynHordeManager { RECOVERY } + private record TargetedSpawnChoice(CavarynHordeDefinitions.SpawnChoice choice, ServerPlayer target) { + } + public static final class HordeData extends SavedData { private static final String PLAYERS_KEY = "Players"; private static final String ENCOUNTERS_KEY = "Encounters"; @@ -716,14 +788,6 @@ public final class CavarynHordeManager { private final Set hordeMobIds = new HashSet<>(); private final Set herculesIds = new HashSet<>(); - private float intensity(long gameTime) { - return switch (this.phase) { - case AWAKENING -> Mth.clamp((gameTime - this.startedAt) / (float) AWAKENING_TICKS, 0.25F, 1.0F); - case SWARMING, HERCULES -> 1.0F; - case RECOVERY -> Mth.clamp((this.recoveryEndsAt - gameTime) / (float) RECOVERY_TICKS, 0.0F, 0.75F); - }; - } - private CompoundTag save() { CompoundTag tag = new CompoundTag(); tag.putUUID("Id", this.id); diff --git a/common/src/main/java/com/craisinlord/antarchy/content/item/SizeRayItem.java b/common/src/main/java/com/craisinlord/antarchy/content/item/SizeRayItem.java index 2a75c178..aa903223 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/item/SizeRayItem.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/item/SizeRayItem.java @@ -202,6 +202,7 @@ public class SizeRayItem extends ProjectileWeaponItem implements GeoItem { ? "tooltip.antarchy.shrink_ray" : "tooltip.antarchy.growth_ray"; tooltipComponents.add(Component.translatable(tooltipKey).withStyle(ChatFormatting.GRAY)); + tooltipComponents.add(Component.translatable("tooltip.antarchy.size_ray_milk_reset").withStyle(ChatFormatting.GRAY)); } @Override diff --git a/common/src/main/java/com/craisinlord/antarchy/content/item/ultimate/UltimateCrossbowItem.java b/common/src/main/java/com/craisinlord/antarchy/content/item/ultimate/UltimateCrossbowItem.java index 7ab52592..d5bd65b3 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/item/ultimate/UltimateCrossbowItem.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/item/ultimate/UltimateCrossbowItem.java @@ -4,6 +4,9 @@ import com.craisinlord.antarchy.config.AntarchySettings; import net.minecraft.ChatFormatting; import net.minecraft.core.component.DataComponents; import net.minecraft.network.chat.Component; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.Tag; import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; import net.minecraft.util.Mth; @@ -18,6 +21,7 @@ import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.item.component.ChargedProjectiles; +import net.minecraft.world.item.component.CustomData; import net.minecraft.world.item.enchantment.Enchantments; import net.minecraft.world.item.enchantment.ItemEnchantments; import net.minecraft.world.level.Level; @@ -30,6 +34,8 @@ public class UltimateCrossbowItem extends CrossbowItem { private static final int FIRE_COOLDOWN_TICKS = 5; // 4 shots/sec private static final float SHOOTING_POWER = 3.15F; private static final double VANILLA_CROSSBOW_ARROW_DAMAGE = 7.0D; + private static final String RESERVE_PROJECTILES_TAG = "UltimateCrossbowProjectiles"; + private static final String PROJECTILE_ITEM_TAG = "Item"; public UltimateCrossbowItem(Item.Properties properties) { super(properties); @@ -84,15 +90,14 @@ public class UltimateCrossbowItem extends CrossbowItem { for (int i = 0; i < toLoad; i++) { projectiles.add(ammoType.copyWithCount(1)); } - stack.set(DataComponents.CHARGED_PROJECTILES, ChargedProjectiles.of(projectiles)); + saveLoadedProjectiles(stack, player.registryAccess(), projectiles); level.playSound(null, player.getX(), player.getY(), player.getZ(), SoundEvents.CROSSBOW_LOADING_END.value(), SoundSource.PLAYERS, 1.0F, 1.0F); } private void fireOneShot(Level level, Player player, InteractionHand hand, ItemStack stack) { - ChargedProjectiles charged = stack.getOrDefault(DataComponents.CHARGED_PROJECTILES, ChargedProjectiles.EMPTY); - List all = new ArrayList<>(charged.getItems().stream().filter(s -> !s.isEmpty()).toList()); + List all = getLoadedProjectiles(stack, player.registryAccess()); if (all.isEmpty()) return; ItemStack arrow = all.remove(0); @@ -110,10 +115,7 @@ public class UltimateCrossbowItem extends CrossbowItem { this.performShooting(level, player, hand, stack, SHOOTING_POWER, 1.0F, null); // performShooting clears CHARGED_PROJECTILES; restore remaining valid arrows if any - List remaining = all.stream().filter(s -> !s.isEmpty()).toList(); - if (!remaining.isEmpty()) { - stack.set(DataComponents.CHARGED_PROJECTILES, ChargedProjectiles.of(remaining)); - } + saveLoadedProjectiles(stack, player.registryAccess(), all); } @Override @@ -139,10 +141,10 @@ public class UltimateCrossbowItem extends CrossbowItem { @Override public void appendHoverText(ItemStack stack, Item.TooltipContext context, List tooltipComponents, TooltipFlag tooltipFlag) { - ChargedProjectiles charged = stack.getOrDefault(DataComponents.CHARGED_PROJECTILES, ChargedProjectiles.EMPTY); - if (!charged.isEmpty()) { - int count = charged.getItems().size(); - Component arrowName = charged.getItems().get(0).getHoverName(); + List loadedProjectiles = getLoadedProjectiles(stack, context.registries()); + if (!loadedProjectiles.isEmpty()) { + int count = loadedProjectiles.size(); + Component arrowName = loadedProjectiles.get(0).getHoverName(); tooltipComponents.add(Component.translatable("item.antarchy.ultimate_crossbow.arrows_remaining", count, arrowName) .withStyle(ChatFormatting.GRAY)); } @@ -214,4 +216,58 @@ public class UltimateCrossbowItem extends CrossbowItem { public int getEnchantmentValue() { return AntarchySettings.ultimateCrossbowEnchantability(); } + + private static List getLoadedProjectiles(ItemStack crossbow, net.minecraft.core.HolderLookup.Provider registries) { + List projectiles = new ArrayList<>(); + ChargedProjectiles charged = crossbow.getOrDefault(DataComponents.CHARGED_PROJECTILES, ChargedProjectiles.EMPTY); + for (ItemStack projectile : charged.getItems()) { + if (!projectile.isEmpty() && projectiles.size() < MAX_ARROWS) { + projectiles.add(projectile.copyWithCount(1)); + } + } + + CompoundTag customData = crossbow.getOrDefault(DataComponents.CUSTOM_DATA, CustomData.EMPTY).copyTag(); + ListTag reserve = customData.getList(RESERVE_PROJECTILES_TAG, Tag.TAG_COMPOUND); + for (int i = 0; i < reserve.size() && projectiles.size() < MAX_ARROWS; i++) { + ItemStack projectile = ItemStack.parseOptional(registries, reserve.getCompound(i).getCompound(PROJECTILE_ITEM_TAG)); + if (!projectile.isEmpty()) { + projectiles.add(projectile.copyWithCount(1)); + } + } + return projectiles; + } + + private static void saveLoadedProjectiles(ItemStack crossbow, net.minecraft.core.HolderLookup.Provider registries, List projectiles) { + List sanitizedProjectiles = projectiles.stream() + .filter(projectile -> !projectile.isEmpty()) + .limit(MAX_ARROWS) + .map(projectile -> projectile.copyWithCount(1)) + .toList(); + + if (sanitizedProjectiles.isEmpty()) { + crossbow.set(DataComponents.CHARGED_PROJECTILES, ChargedProjectiles.EMPTY); + clearReserveProjectiles(crossbow); + return; + } + + crossbow.set(DataComponents.CHARGED_PROJECTILES, ChargedProjectiles.of(List.of(sanitizedProjectiles.get(0)))); + ListTag reserve = new ListTag(); + for (int i = 1; i < sanitizedProjectiles.size(); i++) { + CompoundTag entry = new CompoundTag(); + entry.put(PROJECTILE_ITEM_TAG, sanitizedProjectiles.get(i).save(registries)); + reserve.add(entry); + } + + CustomData.update(DataComponents.CUSTOM_DATA, crossbow, tag -> { + if (reserve.isEmpty()) { + tag.remove(RESERVE_PROJECTILES_TAG); + } else { + tag.put(RESERVE_PROJECTILES_TAG, reserve); + } + }); + } + + private static void clearReserveProjectiles(ItemStack crossbow) { + CustomData.update(DataComponents.CUSTOM_DATA, crossbow, tag -> tag.remove(RESERVE_PROJECTILES_TAG)); + } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisBiomeSource.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisBiomeSource.java index f97fb11e..29eb9a45 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisBiomeSource.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisBiomeSource.java @@ -59,11 +59,12 @@ public final class ThoraxisBiomeSource extends BiomeSource { private final int dreamDunesMaxQuartY; private final int umbralHillsMaxQuartY; private final int lucidPoolsMinQuartY; - private final Holder nightmareWastesBiome; - private final Holder dreamDunesBiome; - private final Holder umbralHillsBiome; - private final Holder lucidPoolsBiome; - private final Holder cloudSeaBiome; + private volatile boolean biomesResolved; + private Holder nightmareWastesBiome; + private Holder dreamDunesBiome; + private Holder umbralHillsBiome; + private Holder lucidPoolsBiome; + private Holder cloudSeaBiome; private static final ThreadLocal CLOUD_SEA_CACHE = ThreadLocal.withInitial(() -> new Long2DoubleOpenHashMap(512)); @@ -81,11 +82,23 @@ public final class ThoraxisBiomeSource extends BiomeSource { this.dreamDunesMaxQuartY = QuartPos.fromBlock(dreamDunesMaxY); this.umbralHillsMaxQuartY = QuartPos.fromBlock(umbralHillsMaxY); this.lucidPoolsMinQuartY = QuartPos.fromBlock(lucidPoolsMinY); - this.nightmareWastesBiome = this.findBiome(NIGHTMARE_WASTES); - this.dreamDunesBiome = this.findBiome(DREAM_DUNES); - this.umbralHillsBiome = this.findBiome(UMBRAL_HILLS); - this.lucidPoolsBiome = this.findBiome(LUCID_POOLS); - this.cloudSeaBiome = this.findBiome(CLOUD_SEA); + } + + private void resolveBiomesIfNeeded() { + if (this.biomesResolved) { + return; + } + synchronized (this) { + if (this.biomesResolved) { + return; + } + this.nightmareWastesBiome = this.findBiome(NIGHTMARE_WASTES); + this.dreamDunesBiome = this.findBiome(DREAM_DUNES); + this.umbralHillsBiome = this.findBiome(UMBRAL_HILLS); + this.lucidPoolsBiome = this.findBiome(LUCID_POOLS); + this.cloudSeaBiome = this.findBiome(CLOUD_SEA); + this.biomesResolved = true; + } } private Climate.ParameterList> parameters() { @@ -116,6 +129,7 @@ public final class ThoraxisBiomeSource extends BiomeSource { @Override public Holder getNoiseBiome(int x, int y, int z, Climate.Sampler sampler) { + this.resolveBiomesIfNeeded(); if (this.cloudSeaBiome != null && cachedIsCloudSeaZone(x, z)) { return this.cloudSeaBiome; } diff --git a/common/src/main/java/com/craisinlord/antarchy/mixins/FarChunkSetBlockWarningMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/FarChunkSetBlockWarningMixin.java new file mode 100644 index 00000000..42b74700 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/mixins/FarChunkSetBlockWarningMixin.java @@ -0,0 +1,16 @@ +package com.craisinlord.antarchy.mixins; + +import net.minecraft.server.level.WorldGenRegion; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Mixin(WorldGenRegion.class) +public abstract class FarChunkSetBlockWarningMixin { + @Redirect( + method = "ensureCanWrite", + at = @At(value = "INVOKE", target = "Lnet/minecraft/Util;logAndPauseIfInIde(Ljava/lang/String;)V") + ) + private void antarchy$suppressFarChunkWarning(String message) { + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/mixins/MilkBucketSizeResetMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/MilkBucketSizeResetMixin.java new file mode 100644 index 00000000..d44ccb05 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/mixins/MilkBucketSizeResetMixin.java @@ -0,0 +1,26 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.entity.SizeRayProjectileEntity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.AttributeInstance; +import net.minecraft.world.entity.ai.attributes.Attributes; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(LivingEntity.class) +public abstract class MilkBucketSizeResetMixin { + @Inject(method = "removeAllEffects", at = @At("TAIL")) + private void antarchy$resetSizeRayScale(CallbackInfoReturnable cir) { + LivingEntity self = (LivingEntity) (Object) this; + if (self.level().isClientSide) { + return; + } + + AttributeInstance scaleAttribute = self.getAttribute(Attributes.SCALE); + if (scaleAttribute != null) { + SizeRayProjectileEntity.writeModifier(scaleAttribute, 0.0D); + } + } +} diff --git a/common/src/main/resources/antarchy-common.mixins.json b/common/src/main/resources/antarchy-common.mixins.json index 837d5aad..899ada7f 100644 --- a/common/src/main/resources/antarchy-common.mixins.json +++ b/common/src/main/resources/antarchy-common.mixins.json @@ -12,6 +12,7 @@ "DreamFireBlockMixin", "DreamSandFallingSpeedMixin", "DreamSandLowGravityMixin", + "FarChunkSetBlockWarningMixin", "FireVisualBaseFireBlockMixin", "FireVisualEntityMixin", "FlintAndSteelPortalIgnitionMixin", @@ -19,6 +20,7 @@ "FrogVariantBootstrapMixin", "GlowSquidLumenSpawnMixin", "GlowVinesUnderLeavesMixin", + "MilkBucketSizeResetMixin", "GoopedStepSoundMixin", "ExperimentalSettingsLevelSummaryMixin", "NightmareSwordDamageMixin", diff --git a/common/src/main/resources/assets/antarchy/blockstates/antiwater.json b/common/src/main/resources/assets/antarchy/blockstates/antiwater.json new file mode 100644 index 00000000..777d6ac3 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/antiwater.json @@ -0,0 +1,20 @@ +{ + "variants": { + "level=0": { "model": "minecraft:block/water" }, + "level=1": { "model": "minecraft:block/water" }, + "level=2": { "model": "minecraft:block/water" }, + "level=3": { "model": "minecraft:block/water" }, + "level=4": { "model": "minecraft:block/water" }, + "level=5": { "model": "minecraft:block/water" }, + "level=6": { "model": "minecraft:block/water" }, + "level=7": { "model": "minecraft:block/water" }, + "level=8": { "model": "minecraft:block/water" }, + "level=9": { "model": "minecraft:block/water" }, + "level=10": { "model": "minecraft:block/water" }, + "level=11": { "model": "minecraft:block/water" }, + "level=12": { "model": "minecraft:block/water" }, + "level=13": { "model": "minecraft:block/water" }, + "level=14": { "model": "minecraft:block/water" }, + "level=15": { "model": "minecraft:block/water" } + } +} 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 7ea2f918..170f9ebd 100644 --- a/common/src/main/resources/assets/antarchy/lang/de_de.json +++ b/common/src/main/resources/assets/antarchy/lang/de_de.json @@ -406,6 +406,7 @@ "item.antarchy.growth_ray": "Wachstumsstrahler", "tooltip.antarchy.shrink_ray": "Schrumpft Ziele dauerhaft. Gedrückt halten zum Aufladen.", "tooltip.antarchy.growth_ray": "Vergrößert Ziele dauerhaft. Gedrückt halten zum Aufladen.", + "tooltip.antarchy.size_ray_milk_reset": "Milch trinken setzt diesen Effekt zurück.", "tooltip.antarchy.reverie_bottle.capture": "Rechtsklicke mit einer Glasflasche auf eine Reverie, um sie einzufangen.", "tooltip.antarchy.reverie_bottle.release": "Rechtsklick, um die Reverie freizulassen.", "item.antarchy.gravity_gun": "Gravitationskanone", 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 ed0e1e47..07f89612 100644 --- a/common/src/main/resources/assets/antarchy/lang/en_us.json +++ b/common/src/main/resources/assets/antarchy/lang/en_us.json @@ -408,6 +408,7 @@ "item.antarchy.growth_ray": "Growth Ray", "tooltip.antarchy.shrink_ray": "Permanently shrinks targets. Hold down to charge.", "tooltip.antarchy.growth_ray": "Permanently Grows Targets. Hold down to charge.", + "tooltip.antarchy.size_ray_milk_reset": "Drinking milk resets this effect.", "tooltip.antarchy.reverie_bottle.capture": "Right click a Reverie with a glass bottle to store it.", "tooltip.antarchy.reverie_bottle.release": "Right click to release the Reverie.", "item.antarchy.gravity_gun": "Gravity Gun", @@ -567,6 +568,8 @@ "advancements.antarchy.visit_elythia.description": "Use a brown ant to reach Elythia.", "advancements.antarchy.visit_thoraxis.title": "Ant-ger Management", "advancements.antarchy.visit_thoraxis.description": "Use a red ant to reach Thoraxis.", + "advancements.antarchy.visit_cavaryn.title": "Antfestation Problem", + "advancements.antarchy.visit_cavaryn.description": "Enter the infested dimension of Cavaryn.", "advancements.antarchy.fallen_kingdom_castle.title": "I Used to Rule the World...", "advancements.antarchy.fallen_kingdom_castle.description": "Discover the Fallen Kingdom Castle.", "advancements.antarchy.fallen_king_crown.title": "Chunks would load when I gave the word...", @@ -935,6 +938,7 @@ "subtitles.antarchy.lurking_terror_bite": "Lurking Terror bites", "subtitles.antarchy.lurking_terror_fly_loop": "Lurking Terror flies", "subtitles.antarchy.stink_bug_fart": "Stink Bug farts", + "subtitles.antarchy.cavaryn_heartbeat": "Cavaryn pulses", "subtitles.antarchy.stink_bug_idle": "Stink Bug idles", "subtitles.antarchy.rolly_polly_idle": "Rolly Polly idles", "subtitles.antarchy.rolly_polly_wheel_mode": "Rolly Polly curls up", 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 20a0869f..8d98cae7 100644 --- a/common/src/main/resources/assets/antarchy/lang/es_es.json +++ b/common/src/main/resources/assets/antarchy/lang/es_es.json @@ -406,6 +406,7 @@ "item.antarchy.growth_ray": "Rayo de crecimiento", "tooltip.antarchy.shrink_ray": "Encoge permanentemente a los objetivos. Mantén pulsado para cargar.", "tooltip.antarchy.growth_ray": "Aumenta permanentemente a los objetivos. Mantén pulsado para cargar.", + "tooltip.antarchy.size_ray_milk_reset": "Beber leche restablece este efecto.", "tooltip.antarchy.reverie_bottle.capture": "Haz clic derecho en una Reverie con una botella de cristal para guardarla.", "tooltip.antarchy.reverie_bottle.release": "Clic derecho para liberar a la Reverie.", "item.antarchy.gravity_gun": "Pistola gravitatoria", 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 f1ce6514..3bec1a97 100644 --- a/common/src/main/resources/assets/antarchy/lang/fr_fr.json +++ b/common/src/main/resources/assets/antarchy/lang/fr_fr.json @@ -406,6 +406,7 @@ "item.antarchy.growth_ray": "Rayon de croissance", "tooltip.antarchy.shrink_ray": "Rétrécit définitivement les cibles. Maintenez pour charger.", "tooltip.antarchy.growth_ray": "Agrandit définitivement les cibles. Maintenez pour charger.", + "tooltip.antarchy.size_ray_milk_reset": "Boire du lait réinitialise cet effet.", "tooltip.antarchy.reverie_bottle.capture": "Faites un clic droit sur une Reverie avec une fiole en verre pour la capturer.", "tooltip.antarchy.reverie_bottle.release": "Clic droit pour libérer la Reverie.", "item.antarchy.gravity_gun": "Canon à gravité", 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 8f81036a..e8d39feb 100644 --- a/common/src/main/resources/assets/antarchy/lang/it_it.json +++ b/common/src/main/resources/assets/antarchy/lang/it_it.json @@ -406,6 +406,7 @@ "item.antarchy.growth_ray": "Raggio di crescita", "tooltip.antarchy.shrink_ray": "Rimpicciolisce permanentemente i bersagli. Tieni premuto per caricare.", "tooltip.antarchy.growth_ray": "Ingrandisce permanentemente i bersagli. Tieni premuto per caricare.", + "tooltip.antarchy.size_ray_milk_reset": "Bere il latte annulla questo effetto.", "tooltip.antarchy.reverie_bottle.capture": "Fai clic destro su una Reverie con una bottiglia di vetro per catturarla.", "tooltip.antarchy.reverie_bottle.release": "Fai clic destro per liberare la Reverie.", "item.antarchy.gravity_gun": "Cannone gravitazionale", 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 fa29e9fa..64e2d44a 100644 --- a/common/src/main/resources/assets/antarchy/lang/ja_jp.json +++ b/common/src/main/resources/assets/antarchy/lang/ja_jp.json @@ -406,6 +406,7 @@ "item.antarchy.growth_ray": "成長光線銃", "tooltip.antarchy.shrink_ray": "対象を永久に縮小します。長押しでチャージします。", "tooltip.antarchy.growth_ray": "対象を永久に巨大化します。長押しでチャージします。", + "tooltip.antarchy.size_ray_milk_reset": "牛乳を飲むとこの効果はリセットされます。", "tooltip.antarchy.reverie_bottle.capture": "ガラス瓶を持ってレヴェリーを右クリックすると収納できます。", "tooltip.antarchy.reverie_bottle.release": "右クリックでレヴェリーを解放します。", "item.antarchy.gravity_gun": "重力銃", 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 482c2f4e..3b14981c 100644 --- a/common/src/main/resources/assets/antarchy/lang/ko_kr.json +++ b/common/src/main/resources/assets/antarchy/lang/ko_kr.json @@ -406,6 +406,7 @@ "item.antarchy.growth_ray": "성장 광선총", "tooltip.antarchy.shrink_ray": "대상을 영구적으로 축소합니다. 길게 눌러 충전합니다.", "tooltip.antarchy.growth_ray": "대상을 영구적으로 성장시킵니다. 길게 눌러 충전합니다.", + "tooltip.antarchy.size_ray_milk_reset": "우유를 마시면 이 효과가 초기화됩니다.", "tooltip.antarchy.reverie_bottle.capture": "유리병으로 레버리를 우클릭하여 담습니다.", "tooltip.antarchy.reverie_bottle.release": "우클릭하여 레버리를 풀어줍니다.", "item.antarchy.gravity_gun": "중력총", 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 ed9225e4..1ab826af 100644 --- a/common/src/main/resources/assets/antarchy/lang/pt_br.json +++ b/common/src/main/resources/assets/antarchy/lang/pt_br.json @@ -406,6 +406,7 @@ "item.antarchy.growth_ray": "Raio de Crescimento", "tooltip.antarchy.shrink_ray": "Encolhe alvos permanentemente. Segure para carregar.", "tooltip.antarchy.growth_ray": "Aumenta alvos permanentemente. Segure para carregar.", + "tooltip.antarchy.size_ray_milk_reset": "Beber leite redefine este efeito.", "tooltip.antarchy.reverie_bottle.capture": "Clique com o botão direito em uma Reverie com um frasco de vidro para guardá-la.", "tooltip.antarchy.reverie_bottle.release": "Clique com o botão direito para soltar a Reverie.", "item.antarchy.gravity_gun": "Arma Gravitacional", 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 a6c378bf..6ceee79f 100644 --- a/common/src/main/resources/assets/antarchy/lang/ru_ru.json +++ b/common/src/main/resources/assets/antarchy/lang/ru_ru.json @@ -382,6 +382,7 @@ "item.antarchy.growth_ray": "Увеличитель", "tooltip.antarchy.shrink_ray": "Навсегда уменьшает цель. Зажмите, чтобы зарядить.", "tooltip.antarchy.growth_ray": "Навсегда увеличивает цель. Зажмите, чтобы зарядить.", + "tooltip.antarchy.size_ray_milk_reset": "Питьё молока сбрасывает этот эффект.", "tooltip.antarchy.reverie_bottle.capture": "Нажмите ПКМ стеклянной бутылочкой по грёзе, чтобы поймать её.", "tooltip.antarchy.reverie_bottle.release": "Нажмите ПКМ, чтобы выпустить грёзу.", "item.antarchy.gravity_gun": "Гравитационная пушка", 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 6ee17d2c..ff9ccc93 100644 --- a/common/src/main/resources/assets/antarchy/lang/zh_cn.json +++ b/common/src/main/resources/assets/antarchy/lang/zh_cn.json @@ -406,6 +406,7 @@ "item.antarchy.growth_ray": "生长射线枪", "tooltip.antarchy.shrink_ray": "永久缩小目标。按住以蓄力。", "tooltip.antarchy.growth_ray": "永久放大目标。按住以蓄力。", + "tooltip.antarchy.size_ray_milk_reset": "喝牛奶可重置此效果。", "tooltip.antarchy.reverie_bottle.capture": "手持玻璃瓶右键雷弗里即可将其收纳。", "tooltip.antarchy.reverie_bottle.release": "右键释放雷弗里。", "item.antarchy.gravity_gun": "重力枪", 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 4b28e833..b30ef25d 100644 --- a/common/src/main/resources/assets/antarchy/lang/zh_tw.json +++ b/common/src/main/resources/assets/antarchy/lang/zh_tw.json @@ -406,6 +406,7 @@ "item.antarchy.growth_ray": "生長射線槍", "tooltip.antarchy.shrink_ray": "永久縮小目標。按住以蓄力。", "tooltip.antarchy.growth_ray": "永久放大目標。按住以蓄力。", + "tooltip.antarchy.size_ray_milk_reset": "喝牛奶可重置此效果。", "tooltip.antarchy.reverie_bottle.capture": "手持玻璃瓶右鍵雷弗裡即可將其收納。", "tooltip.antarchy.reverie_bottle.release": "右鍵釋放雷弗裡。", "item.antarchy.gravity_gun": "重力槍", diff --git a/common/src/main/resources/assets/antarchy/models/block/jerry_egg.json b/common/src/main/resources/assets/antarchy/models/block/jerry_egg.json index f73564b1..08d5c1a6 100644 --- a/common/src/main/resources/assets/antarchy/models/block/jerry_egg.json +++ b/common/src/main/resources/assets/antarchy/models/block/jerry_egg.json @@ -4,7 +4,7 @@ "texture_size": [64, 64], "textures": { "1": "antarchy:block/jerry_egg", - "particle": "antarchy:block/biomite" + "particle": "antarchy:block/jerry_egg_break_particle" }, "elements": [ { @@ -56,4 +56,4 @@ } } ] -} \ No newline at end of file +} diff --git a/common/src/main/resources/assets/antarchy/models/block/ouranwood_hanging_sign.json b/common/src/main/resources/assets/antarchy/models/block/ouranwood_hanging_sign.json index 66978fbd..6daa926e 100644 --- a/common/src/main/resources/assets/antarchy/models/block/ouranwood_hanging_sign.json +++ b/common/src/main/resources/assets/antarchy/models/block/ouranwood_hanging_sign.json @@ -1,5 +1,5 @@ { "textures": { - "particle": "antarchy:models/ouranwood/ouranwood_hanging_sign" + "particle": "antarchy:block/ouranwood/ouranwood_planks" } } diff --git a/common/src/main/resources/assets/antarchy/models/block/ouranwood_sign.json b/common/src/main/resources/assets/antarchy/models/block/ouranwood_sign.json index 3da2694c..6daa926e 100644 --- a/common/src/main/resources/assets/antarchy/models/block/ouranwood_sign.json +++ b/common/src/main/resources/assets/antarchy/models/block/ouranwood_sign.json @@ -1,5 +1,5 @@ { "textures": { - "particle": "antarchy:models/ouranwood/ouranwood_sign" + "particle": "antarchy:block/ouranwood/ouranwood_planks" } } diff --git a/common/src/main/resources/assets/antarchy/models/block/ouranwood_wall_hanging_sign.json b/common/src/main/resources/assets/antarchy/models/block/ouranwood_wall_hanging_sign.json index 66978fbd..6daa926e 100644 --- a/common/src/main/resources/assets/antarchy/models/block/ouranwood_wall_hanging_sign.json +++ b/common/src/main/resources/assets/antarchy/models/block/ouranwood_wall_hanging_sign.json @@ -1,5 +1,5 @@ { "textures": { - "particle": "antarchy:models/ouranwood/ouranwood_hanging_sign" + "particle": "antarchy:block/ouranwood/ouranwood_planks" } } diff --git a/common/src/main/resources/assets/antarchy/models/block/ouranwood_wall_sign.json b/common/src/main/resources/assets/antarchy/models/block/ouranwood_wall_sign.json index 3da2694c..6daa926e 100644 --- a/common/src/main/resources/assets/antarchy/models/block/ouranwood_wall_sign.json +++ b/common/src/main/resources/assets/antarchy/models/block/ouranwood_wall_sign.json @@ -1,5 +1,5 @@ { "textures": { - "particle": "antarchy:models/ouranwood/ouranwood_sign" + "particle": "antarchy:block/ouranwood/ouranwood_planks" } } diff --git a/common/src/main/resources/assets/antarchy/sounds.json b/common/src/main/resources/assets/antarchy/sounds.json index 03bfe42d..3636e670 100644 --- a/common/src/main/resources/assets/antarchy/sounds.json +++ b/common/src/main/resources/assets/antarchy/sounds.json @@ -1826,6 +1826,14 @@ } ] }, + "cavaryn_heartbeat": { + "subtitle": "subtitles.antarchy.cavaryn_heartbeat", + "sounds": [ + { + "name": "antarchy:ambient/cavaryn/heartbeat" + } + ] + }, "triffid_attack": { "subtitle": "subtitles.antarchy.triffid_attack", "sounds": [ diff --git a/common/src/main/resources/assets/antarchy/sounds/ambient/cavaryn/heartbeat.ogg b/common/src/main/resources/assets/antarchy/sounds/ambient/cavaryn/heartbeat.ogg new file mode 100644 index 0000000000000000000000000000000000000000..4b73fceb2e5ad76164748fd0f0aca175228464ba GIT binary patch literal 18217 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 E0L`gJ?XjFkWY{!t+o diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/rolly_polly/roll1.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/rolly_polly/roll1.ogg index d9f414516b97addc53917ef6923c513306c38c06..cb2bb41b1bf413a9ec034c930c3d339f9e9c0dad 100644 GIT binary patch delta 104 icmaEo{v>@u0L$smEYl~31cWjG0V9Z@CfNA%wGjZ={t6}l delta 104 zcmaEo{v>@u0858NILE}0fKVm|1_oOo4)F}}akULD$S*1>)=}`xOUchK(oqOWOv*`B y2uaP$%LIxB<>%yN=A|nHfQft{%PBD@N5Q~|8)QI4M1-whzCwtLFXP6auZ;k$b|BdR diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/rolly_polly/wheel_mode.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/rolly_polly/wheel_mode.ogg index 374adaff35ad78082f473060b7149df4315f808d..746adfb88d40a204a704fb46e71e314ab68c5706 100644 GIT binary patch delta 104 icmcZ7#M7UIK(r=$JI8tAit=jSVzG#FC{;}NJk+gF)1fi zAtW^~FB2#ll%JE6nU}5*04DN*ET_br90da-Zjb>H5fQe2`3fN}zKk1xMydk<&PyPo diff --git a/common/src/main/resources/assets/antarchy/textures/block/jerry_egg.png b/common/src/main/resources/assets/antarchy/textures/block/jerry_egg.png index 40102682a48882945017c6e756b6fe49ac359a9b..a9a3220fd9411d27d4aa49b2c313e2d813ea4253 100644 GIT binary patch delta 3231 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 U2yvdkiU0rr07*qoM6N<$g465k)c^nh diff --git a/common/src/main/resources/assets/antarchy/textures/block/jerry_egg_break_particle.png b/common/src/main/resources/assets/antarchy/textures/block/jerry_egg_break_particle.png new file mode 100644 index 0000000000000000000000000000000000000000..db2054c4be7ec1fe52c2318881ab06e0d3864ccf GIT binary patch literal 652 zcmV;70(1R|P)tJAwxX)x*k*P{~Gj`P{gcutck+E_h-6)n{QKaY7p|2Un zp`rqhcb~C?-vi0x>&mhatDTOl4*p8bFUnTm*Yh<$lEs;;w%z^&FXqe7Z{mBN{@}2E zylEA5@c$0p9KB^%j@-2eTQ?g#!y3o~&u=uy9D2snuD~iZ0X*!^1m>l0?Fa5o-58n`^+DsfnF}9pLF#bE?kV1TdKevI88H!y2XX{={ty zt0V9a_TSAkZL#R<*4aET85ofu2;}Xd>y~<)lFefMyq$b`O*>c1Wih58AA19hrA|*X za4$)z7tig8F&IZj$d{2XCrvY{dPcfwDnLBvIf)Y~n03>6Q#0CHpBq)+IF1yoxx!%) z#=v&wgw@K%m+5ySSvov#|MXMI4*>~8atDmzIs0DG6L!VUVAYTBE)pV$QnZ$d5QyaV z$-cXdreK7z*+KW@yfyLZdp5sF2$V`C={teZg2=D~oP cir) { + LivingEntity self = (LivingEntity) (Object) this; + if (!(self instanceof Player player)) { + return; + } + if (!AntarchyGravityApi.isGravityInverted(player)) { + return; + } + if (!(player.getItemBySlot(EquipmentSlot.FEET).getItem() instanceof BloodCrystalArmorItem)) { + return; + } + + player.fallDistance = 0.0F; + cir.setReturnValue(false); + } + @ModifyVariable(method = "causeFallDamage", at = @At("HEAD"), ordinal = 0, argsOnly = true) private float antarchy$reduceJumpyBootsFallDamage(float fallDistance) { LivingEntity self = (LivingEntity) (Object) this; diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/BloodglassChatOrderMixin.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/BloodglassChatOrderMixin.java new file mode 100644 index 00000000..00db62f9 --- /dev/null +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/BloodglassChatOrderMixin.java @@ -0,0 +1,18 @@ +package com.craisinlord.antarchy.fabric.mixin.client; + +import com.craisinlord.antarchy.fabric.client.BloodglassHudRenderer; +import net.minecraft.client.DeltaTracker; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.GuiGraphics; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(Gui.class) +public abstract class BloodglassChatOrderMixin { + @Inject(method = "renderChat", at = @At("HEAD")) + private void antarchy$renderBloodglassBeforeChat(GuiGraphics guiGraphics, DeltaTracker deltaTracker, CallbackInfo ci) { + BloodglassHudRenderer.render(guiGraphics); + } +} diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/BrutalflyElytraExperienceBarMixin.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/BrutalflyElytraExperienceBarMixin.java new file mode 100644 index 00000000..e052c9bd --- /dev/null +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/BrutalflyElytraExperienceBarMixin.java @@ -0,0 +1,21 @@ +package com.craisinlord.antarchy.fabric.mixin.client; + +import com.craisinlord.antarchy.content.item.BrutalflyElytraItem; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.player.LocalPlayer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(Gui.class) +public abstract class BrutalflyElytraExperienceBarMixin { + @Inject(method = "isExperienceBarVisible", at = @At("RETURN"), cancellable = true) + private void antarchy$hideExperienceBarForBrutalfly(CallbackInfoReturnable cir) { + LocalPlayer player = Minecraft.getInstance().player; + if (player != null && BrutalflyElytraItem.isWearingBrutalflyElytra(player) && player.isFallFlying()) { + cir.setReturnValue(false); + } + } +} 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 934e546a..b062546b 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 @@ -246,6 +246,7 @@ import net.minecraft.world.level.block.VineBlock; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.MapColor; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.biome.BiomeSource; import net.minecraft.world.level.levelgen.DensityFunction; @@ -677,7 +678,7 @@ public final class AntarchyFabricBlocks { public static final DeferredBlock MYRMITE_COAL_ORE = BLOCKS.register("myrmite_coal_ore", - () -> createOre(Blocks.COAL_ORE, 0, 2)); + () -> createOre(Blocks.COAL_ORE, 0, 2, MapColor.COLOR_GRAY)); public static final DeferredBlock BROODSTONE = BLOCKS.register("broodstone", @@ -733,11 +734,11 @@ public final class AntarchyFabricBlocks { public static final DeferredBlock BROODSTONE_URANIUM_ORE = BLOCKS.register("broodstone_uranium_ore", - () -> createOre(Blocks.DEEPSLATE_EMERALD_ORE, 4, 8)); + () -> createOre(Blocks.DEEPSLATE_EMERALD_ORE, 4, 8, MapColor.COLOR_YELLOW)); public static final DeferredBlock BROODSTONE_TITANIUM_ORE = BLOCKS.register("broodstone_titanium_ore", - () -> createOre(Blocks.DEEPSLATE_DIAMOND_ORE, 4, 8)); + () -> createOre(Blocks.DEEPSLATE_DIAMOND_ORE, 4, 8, MapColor.COLOR_LIGHT_BLUE)); public static final DeferredBlock CHITEN_BLOCK = BLOCKS.register("chiten_block", @@ -911,99 +912,99 @@ public final class AntarchyFabricBlocks { public static final DeferredBlock URANIUM_ORE = BLOCKS.register("uranium_ore", - () -> createOre(Blocks.EMERALD_ORE, 4, 8)); + () -> createOre(Blocks.EMERALD_ORE, 4, 8, MapColor.COLOR_YELLOW)); public static final DeferredBlock DEEPSLATE_URANIUM_ORE = BLOCKS.register("deepslate_uranium_ore", - () -> createOre(Blocks.DEEPSLATE_EMERALD_ORE, 4, 8)); + () -> createOre(Blocks.DEEPSLATE_EMERALD_ORE, 4, 8, MapColor.COLOR_YELLOW)); public static final DeferredBlock TITANIUM_ORE = BLOCKS.register("titanium_ore", - () -> createOre(Blocks.DIAMOND_ORE, 4, 8)); + () -> createOre(Blocks.DIAMOND_ORE, 4, 8, MapColor.COLOR_LIGHT_BLUE)); public static final DeferredBlock DEEPSLATE_TITANIUM_ORE = BLOCKS.register("deepslate_titanium_ore", - () -> createOre(Blocks.DEEPSLATE_DIAMOND_ORE, 4, 8)); + () -> createOre(Blocks.DEEPSLATE_DIAMOND_ORE, 4, 8, MapColor.COLOR_LIGHT_BLUE)); public static final DeferredBlock URANIUM_BLOCK = BLOCKS.register("uranium_block", - () -> createStorageBlock(Blocks.EMERALD_BLOCK)); + () -> createStorageBlock(Blocks.EMERALD_BLOCK, MapColor.COLOR_YELLOW)); public static final DeferredBlock TITANIUM_BLOCK = BLOCKS.register("titanium_block", - () -> createStorageBlock(Blocks.DIAMOND_BLOCK)); + () -> createStorageBlock(Blocks.DIAMOND_BLOCK, MapColor.COLOR_LIGHT_BLUE)); public static final DeferredBlock RAW_URANIUM_BLOCK = BLOCKS.register("raw_uranium_block", - () -> createRawStorageBlock(Blocks.EMERALD_ORE)); + () -> createRawStorageBlock(Blocks.EMERALD_ORE, MapColor.COLOR_YELLOW)); public static final DeferredBlock RAW_TITANIUM_BLOCK = BLOCKS.register("raw_titanium_block", - () -> createRawStorageBlock(Blocks.DIAMOND_ORE)); + () -> createRawStorageBlock(Blocks.DIAMOND_ORE, MapColor.COLOR_LIGHT_BLUE)); public static final DeferredBlock CUT_URANIUM = BLOCKS.register("cut_uranium", - () -> createHorizontalFacingStorageBlock(Blocks.CUT_COPPER)); + () -> createHorizontalFacingStorageBlock(Blocks.CUT_COPPER, MapColor.COLOR_YELLOW)); public static final DeferredBlock CUT_TITANIUM = BLOCKS.register("cut_titanium", - () -> createHorizontalFacingStorageBlock(Blocks.CUT_COPPER)); + () -> createHorizontalFacingStorageBlock(Blocks.CUT_COPPER, MapColor.COLOR_LIGHT_BLUE)); public static final DeferredBlock CUT_URANIUM_SLAB = BLOCKS.register("cut_uranium_slab", - () -> new net.minecraft.world.level.block.SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_COPPER_SLAB))); + () -> new net.minecraft.world.level.block.SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_COPPER_SLAB).mapColor(MapColor.COLOR_YELLOW))); public static final DeferredBlock CUT_TITANIUM_SLAB = BLOCKS.register("cut_titanium_slab", - () -> new net.minecraft.world.level.block.SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_COPPER_SLAB))); + () -> new net.minecraft.world.level.block.SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_COPPER_SLAB).mapColor(MapColor.COLOR_LIGHT_BLUE))); public static final DeferredBlock CUT_URANIUM_STAIRS = BLOCKS.register("cut_uranium_stairs", - () -> new net.minecraft.world.level.block.StairBlock(CUT_URANIUM.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_COPPER_STAIRS))); + () -> new net.minecraft.world.level.block.StairBlock(CUT_URANIUM.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_COPPER_STAIRS).mapColor(MapColor.COLOR_YELLOW))); public static final DeferredBlock CUT_TITANIUM_STAIRS = BLOCKS.register("cut_titanium_stairs", - () -> new net.minecraft.world.level.block.StairBlock(CUT_TITANIUM.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_COPPER_STAIRS))); + () -> new net.minecraft.world.level.block.StairBlock(CUT_TITANIUM.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_COPPER_STAIRS).mapColor(MapColor.COLOR_LIGHT_BLUE))); public static final DeferredBlock CHISELED_URANIUM = BLOCKS.register("chiseled_uranium", - () -> createHorizontalFacingStorageBlock(Blocks.CHISELED_COPPER)); + () -> createHorizontalFacingStorageBlock(Blocks.CHISELED_COPPER, MapColor.COLOR_YELLOW)); public static final DeferredBlock CHISELED_TITANIUM = BLOCKS.register("chiseled_titanium", - () -> createHorizontalFacingStorageBlock(Blocks.CHISELED_COPPER)); + () -> createHorizontalFacingStorageBlock(Blocks.CHISELED_COPPER, MapColor.COLOR_LIGHT_BLUE)); public static final DeferredBlock URANIUM_BULB = BLOCKS.register("uranium_bulb", - () -> new SignalSavingBulbBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.COPPER_BULB))); + () -> new SignalSavingBulbBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.COPPER_BULB).mapColor(MapColor.COLOR_YELLOW))); public static final DeferredBlock TITANIUM_BULB = BLOCKS.register("titanium_bulb", - () -> new SignalSavingBulbBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.COPPER_BULB))); + () -> new SignalSavingBulbBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.COPPER_BULB).mapColor(MapColor.COLOR_LIGHT_BLUE))); public static final DeferredBlock URANIUM_DOOR = BLOCKS.register("uranium_door", - () -> new net.minecraft.world.level.block.DoorBlock(net.minecraft.world.level.block.state.properties.BlockSetType.IRON, BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_DOOR))); + () -> new net.minecraft.world.level.block.DoorBlock(net.minecraft.world.level.block.state.properties.BlockSetType.IRON, BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_DOOR).mapColor(MapColor.COLOR_YELLOW))); public static final DeferredBlock TITANIUM_DOOR = BLOCKS.register("titanium_door", - () -> new net.minecraft.world.level.block.DoorBlock(net.minecraft.world.level.block.state.properties.BlockSetType.IRON, BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_DOOR))); + () -> new net.minecraft.world.level.block.DoorBlock(net.minecraft.world.level.block.state.properties.BlockSetType.IRON, BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_DOOR).mapColor(MapColor.COLOR_LIGHT_BLUE))); public static final DeferredBlock URANIUM_TRAPDOOR = BLOCKS.register("uranium_trapdoor", - () -> new net.minecraft.world.level.block.TrapDoorBlock(net.minecraft.world.level.block.state.properties.BlockSetType.IRON, BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_TRAPDOOR))); + () -> new net.minecraft.world.level.block.TrapDoorBlock(net.minecraft.world.level.block.state.properties.BlockSetType.IRON, BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_TRAPDOOR).mapColor(MapColor.COLOR_YELLOW))); public static final DeferredBlock TITANIUM_TRAPDOOR = BLOCKS.register("titanium_trapdoor", - () -> new net.minecraft.world.level.block.TrapDoorBlock(net.minecraft.world.level.block.state.properties.BlockSetType.IRON, BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_TRAPDOOR))); + () -> new net.minecraft.world.level.block.TrapDoorBlock(net.minecraft.world.level.block.state.properties.BlockSetType.IRON, BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_TRAPDOOR).mapColor(MapColor.COLOR_LIGHT_BLUE))); public static final DeferredBlock URANIUM_BARS = BLOCKS.register("uranium_bars", - () -> new net.minecraft.world.level.block.IronBarsBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_BARS))); + () -> new net.minecraft.world.level.block.IronBarsBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_BARS).mapColor(MapColor.COLOR_YELLOW))); public static final DeferredBlock TITANIUM_BARS = BLOCKS.register("titanium_bars", - () -> new net.minecraft.world.level.block.IronBarsBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_BARS))); + () -> new net.minecraft.world.level.block.IronBarsBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_BARS).mapColor(MapColor.COLOR_LIGHT_BLUE))); public static final DeferredBlock ANTIMETAL = BLOCKS.register("antimetal", @@ -1295,26 +1296,26 @@ public final class AntarchyFabricBlocks { - private static Block createOre(Block copyFrom) { - return new Block(BlockBehaviour.Properties.ofFullCopy(copyFrom).requiresCorrectToolForDrops()); + private static Block createOre(Block copyFrom, MapColor mapColor) { + return new Block(BlockBehaviour.Properties.ofFullCopy(copyFrom).mapColor(mapColor).requiresCorrectToolForDrops()); } - private static Block createOre(Block copyFrom, int minExperience, int maxExperience) { - return new DropExperienceBlock(UniformInt.of(minExperience, maxExperience), BlockBehaviour.Properties.ofFullCopy(copyFrom).requiresCorrectToolForDrops()); + private static Block createOre(Block copyFrom, int minExperience, int maxExperience, MapColor mapColor) { + return new DropExperienceBlock(UniformInt.of(minExperience, maxExperience), BlockBehaviour.Properties.ofFullCopy(copyFrom).mapColor(mapColor).requiresCorrectToolForDrops()); } - private static Block createStorageBlock(Block copyFrom) { - return new Block(BlockBehaviour.Properties.ofFullCopy(copyFrom).requiresCorrectToolForDrops()); + private static Block createStorageBlock(Block copyFrom, MapColor mapColor) { + return new Block(BlockBehaviour.Properties.ofFullCopy(copyFrom).mapColor(mapColor).requiresCorrectToolForDrops()); } - private static Block createHorizontalFacingStorageBlock(Block copyFrom) { - return new SimpleHorizontalFacingBlock(BlockBehaviour.Properties.ofFullCopy(copyFrom).requiresCorrectToolForDrops()); + private static Block createHorizontalFacingStorageBlock(Block copyFrom, MapColor mapColor) { + return new SimpleHorizontalFacingBlock(BlockBehaviour.Properties.ofFullCopy(copyFrom).mapColor(mapColor).requiresCorrectToolForDrops()); } @@ -1355,8 +1356,8 @@ public final class AntarchyFabricBlocks { - private static Block createRawStorageBlock(Block copyFrom) { - return new Block(BlockBehaviour.Properties.ofFullCopy(copyFrom).requiresCorrectToolForDrops()); + private static Block createRawStorageBlock(Block copyFrom, MapColor mapColor) { + return new Block(BlockBehaviour.Properties.ofFullCopy(copyFrom).mapColor(mapColor).requiresCorrectToolForDrops()); } 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 2c8d33f7..3c81943a 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.AMBIENT) + () -> EntityType.Builder.of(StinkBugEntity::new, MobCategory.CREATURE) .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 1955c584..1c97fcb1 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 @@ -466,78 +466,78 @@ public final class AntarchyFabricItems { public static final DeferredItem TERMITE_NEST_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TERMITE_NEST); - public static final DeferredItem URANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.URANIUM_ORE); + public static final DeferredItem URANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.URANIUM_ORE, new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem DEEPSLATE_URANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.DEEPSLATE_URANIUM_ORE); + public static final DeferredItem DEEPSLATE_URANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.DEEPSLATE_URANIUM_ORE, new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem TITANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TITANIUM_ORE); + public static final DeferredItem TITANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TITANIUM_ORE, new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem DEEPSLATE_TITANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.DEEPSLATE_TITANIUM_ORE); + public static final DeferredItem DEEPSLATE_TITANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.DEEPSLATE_TITANIUM_ORE, new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem URANIUM_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.URANIUM_BLOCK); + public static final DeferredItem URANIUM_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.URANIUM_BLOCK, new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem TITANIUM_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TITANIUM_BLOCK); + public static final DeferredItem TITANIUM_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TITANIUM_BLOCK, new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem RAW_URANIUM_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.RAW_URANIUM_BLOCK); + public static final DeferredItem RAW_URANIUM_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.RAW_URANIUM_BLOCK, new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem RAW_TITANIUM_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.RAW_TITANIUM_BLOCK); + public static final DeferredItem RAW_TITANIUM_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.RAW_TITANIUM_BLOCK, new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem CUT_URANIUM_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CUT_URANIUM); + public static final DeferredItem CUT_URANIUM_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CUT_URANIUM, new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem CUT_TITANIUM_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CUT_TITANIUM); + public static final DeferredItem CUT_TITANIUM_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CUT_TITANIUM, new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem CUT_URANIUM_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CUT_URANIUM_SLAB); + public static final DeferredItem CUT_URANIUM_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CUT_URANIUM_SLAB, new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem CUT_TITANIUM_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CUT_TITANIUM_SLAB); + public static final DeferredItem CUT_TITANIUM_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CUT_TITANIUM_SLAB, new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem CUT_URANIUM_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CUT_URANIUM_STAIRS); + public static final DeferredItem CUT_URANIUM_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CUT_URANIUM_STAIRS, new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem CUT_TITANIUM_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CUT_TITANIUM_STAIRS); + public static final DeferredItem CUT_TITANIUM_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CUT_TITANIUM_STAIRS, new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem CHISELED_URANIUM_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CHISELED_URANIUM); + public static final DeferredItem CHISELED_URANIUM_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CHISELED_URANIUM, new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem CHISELED_TITANIUM_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CHISELED_TITANIUM); + public static final DeferredItem CHISELED_TITANIUM_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.CHISELED_TITANIUM, new Item.Properties().rarity(Rarity.UNCOMMON)); public static final DeferredItem URANIUM_BULB_ITEM = ITEMS.register("uranium_bulb", - () -> new com.craisinlord.antarchy.content.item.SignalSavingBulbItem(AntarchyFabricBlocks.URANIUM_BULB.get(), new Item.Properties())); + () -> new com.craisinlord.antarchy.content.item.SignalSavingBulbItem(AntarchyFabricBlocks.URANIUM_BULB.get(), new Item.Properties().rarity(Rarity.UNCOMMON))); public static final DeferredItem TITANIUM_BULB_ITEM = ITEMS.register("titanium_bulb", - () -> new com.craisinlord.antarchy.content.item.SignalSavingBulbItem(AntarchyFabricBlocks.TITANIUM_BULB.get(), new Item.Properties())); + () -> new com.craisinlord.antarchy.content.item.SignalSavingBulbItem(AntarchyFabricBlocks.TITANIUM_BULB.get(), new Item.Properties().rarity(Rarity.UNCOMMON))); - public static final DeferredItem URANIUM_DOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.URANIUM_DOOR); + public static final DeferredItem URANIUM_DOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.URANIUM_DOOR, new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem TITANIUM_DOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TITANIUM_DOOR); + public static final DeferredItem TITANIUM_DOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TITANIUM_DOOR, new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem URANIUM_TRAPDOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.URANIUM_TRAPDOOR); + public static final DeferredItem URANIUM_TRAPDOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.URANIUM_TRAPDOOR, new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem TITANIUM_TRAPDOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TITANIUM_TRAPDOOR); + public static final DeferredItem TITANIUM_TRAPDOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TITANIUM_TRAPDOOR, new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem URANIUM_BARS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.URANIUM_BARS); + public static final DeferredItem URANIUM_BARS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.URANIUM_BARS, new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem TITANIUM_BARS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TITANIUM_BARS); + public static final DeferredItem TITANIUM_BARS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.TITANIUM_BARS, new Item.Properties().rarity(Rarity.UNCOMMON)); public static final DeferredItem ANTIMETAL_ITEM = ITEMS.register("antimetal", @@ -652,8 +652,8 @@ public final class AntarchyFabricItems { 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); + public static final DeferredItem BROODSTONE_URANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BROODSTONE_URANIUM_ORE, new Item.Properties().rarity(Rarity.UNCOMMON)); + public static final DeferredItem BROODSTONE_TITANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.BROODSTONE_TITANIUM_ORE, new Item.Properties().rarity(Rarity.UNCOMMON)); public static final DeferredItem POLISHED_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.POLISHED_NYXITE); @@ -887,7 +887,11 @@ public final class AntarchyFabricItems { public static final DeferredItem CHITEN = ITEMS.registerSimpleItem("chiten", new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem JERRY_NUCLEUS = ITEMS.registerSimpleItem("jerry_nucleus", new Item.Properties().rarity(Rarity.UNCOMMON)); + public static final DeferredItem JERRY_NUCLEUS = ITEMS.registerSimpleItem("jerry_nucleus", new Item.Properties().rarity(Rarity.UNCOMMON) + .food(new FoodProperties.Builder() + .nutrition(2) + .saturationModifier(0.1F) + .build())); public static final DeferredItem CARAPACE = ITEMS.registerSimpleItem("carapace", new Item.Properties().rarity(Rarity.UNCOMMON)); @@ -950,8 +954,9 @@ public final class AntarchyFabricItems { public static final DeferredItem RAW_BUG_MEAT = ITEMS.register("raw_bug_meat", () -> new Item(new Item.Properties() .food(new FoodProperties.Builder() - .nutrition(3) - .saturationModifier(0.3F) + .nutrition(4) + .saturationModifier(0.1F) + .effect(new MobEffectInstance(MobEffects.HUNGER, 600), 0.8F) .build()))); public static final DeferredItem COOKED_BUG_MEAT = ITEMS.register("cooked_bug_meat", () -> new Item(new Item.Properties() diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSounds.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSounds.java index 00a1839e..ae94c7d8 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSounds.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricSounds.java @@ -634,6 +634,9 @@ public final class AntarchyFabricSounds { public static final DeferredHolder STINK_BUG_IDLE = registerSoundEvent("stink_bug_idle"); + public static final DeferredHolder CAVARYN_HEARTBEAT = registerSoundEvent("cavaryn_heartbeat"); + + public static final DeferredHolder ROLLY_POLLY_IDLE = registerSoundEvent("rolly_polly_idle"); public static final DeferredHolder ROLLY_POLLY_WHEEL_MODE = registerSoundEvent("rolly_polly_wheel_mode"); public static final DeferredHolder ROLLY_POLLY_NORMAL_MODE = registerSoundEvent("rolly_polly_normal_mode"); diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/DeferredRegister.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/DeferredRegister.java index 477addf2..fddebde1 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/DeferredRegister.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/registry/DeferredRegister.java @@ -43,6 +43,10 @@ public class DeferredRegister { public DeferredItem registerSimpleBlockItem(DeferredBlock block) { return this.register(block.getId().getPath(), () -> new BlockItem(block.get(), new Item.Properties())); } + + public DeferredItem registerSimpleBlockItem(DeferredBlock block, Item.Properties properties) { + return this.register(block.getId().getPath(), () -> new BlockItem(block.get(), properties)); + } } @FunctionalInterface diff --git a/fabric/src/main/resources/antarchy-fabric.mixins.json b/fabric/src/main/resources/antarchy-fabric.mixins.json index acbb192d..a40c15d4 100644 --- a/fabric/src/main/resources/antarchy-fabric.mixins.json +++ b/fabric/src/main/resources/antarchy-fabric.mixins.json @@ -22,6 +22,8 @@ ], "client": [ "client.CameraShakeMixin", + "client.BrutalflyElytraExperienceBarMixin", + "client.BloodglassChatOrderMixin", "client.DuctTapeInputMixin", "client.AntiwaterFogMixin", "client.GravityGunMouseScrollMixin", diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java index 4b3f0739..df8cc612 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java @@ -152,6 +152,7 @@ public class AntarchyNeoforge { AntarchyNeoforgeSounds.STINKY_FLY, AntarchyNeoforgeSounds.STINK_BUG_FART, AntarchyNeoforgeSounds.STINK_BUG_IDLE, + AntarchyNeoforgeSounds.CAVARYN_HEARTBEAT, AntarchyNeoforgeSounds.ROLLY_POLLY_IDLE, AntarchyNeoforgeSounds.CREEPING_HORROR_GROWL, AntarchyNeoforgeSounds.CREEPING_HORROR_HURT, diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyToolsConfig.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyToolsConfig.java index 5e48ba93..7c29a83a 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyToolsConfig.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyToolsConfig.java @@ -513,7 +513,7 @@ public final class AntarchyToolsConfig { b.push("potentNyxite"); POTENT_NYXITE_INVERTED_DURATION_SECONDS = b .comment("How long the Inverted effect from Potent Nyxite eruptions lasts, in seconds.") - .defineInRange("invertedDurationSeconds", 10.0D, 0.0D, 3600.0D); + .defineInRange("invertedDurationSeconds", 60.0D, 0.0D, 3600.0D); b.pop(); b.push("corneaEar"); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java index 721f2d45..e6f4185e 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java @@ -58,6 +58,7 @@ import net.neoforged.neoforge.client.event.RegisterColorHandlersEvent; import net.neoforged.neoforge.client.event.RegisterMenuScreensEvent; import net.neoforged.neoforge.client.event.EntityRenderersEvent; import net.neoforged.neoforge.client.event.RegisterGuiLayersEvent; +import net.neoforged.neoforge.client.gui.VanillaGuiLayers; import net.neoforged.neoforge.client.extensions.common.IClientItemExtensions; import net.neoforged.neoforge.client.extensions.common.IClientFluidTypeExtensions; import net.neoforged.neoforge.client.extensions.common.RegisterClientExtensionsEvent; @@ -312,7 +313,8 @@ public final class AntarchyNeoForgeClient { ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "brutalfly_elytra"), (guiGraphics, partialTick) -> BrutalflyElytraHudRenderer.render(guiGraphics) ); - event.registerAboveAll( + event.registerBelow( + VanillaGuiLayers.CHAT, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "bloodglass_hearts"), (guiGraphics, partialTick) -> BloodglassHudRenderer.render(guiGraphics) ); 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 f5c38607..402df618 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 @@ -28,6 +28,7 @@ import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BlockSetType; +import net.minecraft.world.level.material.MapColor; import net.minecraft.world.level.block.state.properties.WoodType; import net.minecraft.world.level.material.FlowingFluid; import net.minecraft.world.level.material.FluidState; @@ -257,7 +258,7 @@ public final class AntarchyNeoforgeBlocks { public static final DeferredBlock BIOWART_TENDRILS = BLOCKS.register("biowart_tendrils", () -> new BiowartTendrilsBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_CARPET).lightLevel(state -> 2).noCollission().noOcclusion())); public static final DeferredBlock MYRMITE_COAL_ORE = BLOCKS.register("myrmite_coal_ore", - () -> createOre(Blocks.COAL_ORE, 0, 2)); + () -> createOre(Blocks.COAL_ORE, 0, 2, MapColor.COLOR_GRAY)); public static final DeferredBlock BROODSTONE = BLOCKS.register("broodstone", () -> new Block(broodstoneProperties())); public static final DeferredBlock POLISHED_BROODSTONE = BLOCKS.register("polished_broodstone", @@ -285,9 +286,9 @@ public final class AntarchyNeoforgeBlocks { public static final DeferredBlock BROODSTONE_BRICK_WALL = BLOCKS.register("broodstone_brick_wall", () -> new WallBlock(broodstoneProperties())); public static final DeferredBlock BROODSTONE_URANIUM_ORE = BLOCKS.register("broodstone_uranium_ore", - () -> createOre(Blocks.DEEPSLATE_EMERALD_ORE, 4, 8)); + () -> createOre(Blocks.DEEPSLATE_EMERALD_ORE, 4, 8, MapColor.COLOR_YELLOW)); public static final DeferredBlock BROODSTONE_TITANIUM_ORE = BLOCKS.register("broodstone_titanium_ore", - () -> createOre(Blocks.DEEPSLATE_DIAMOND_ORE, 4, 8)); + () -> createOre(Blocks.DEEPSLATE_DIAMOND_ORE, 4, 8, MapColor.COLOR_LIGHT_BLUE)); public static final DeferredBlock CHITEN_BLOCK = BLOCKS.register("chiten_block", () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.BONE_BLOCK).requiresCorrectToolForDrops())); public static final DeferredBlock UMBRAL_MOSS_BLOCK = BLOCKS.register("umbral_moss_block", @@ -382,53 +383,53 @@ public final class AntarchyNeoforgeBlocks { public static final DeferredBlock TERMITE_NEST = BLOCKS.register("termite_nest", () -> new AntNestBlock(AntarchyNeoforgeEntites.TERMITE, AntarchyNeoforgeItems::antNestBlockEntityType, BlockBehaviour.Properties.ofFullCopy(Blocks.DIRT).noLootTable())); public static final DeferredBlock URANIUM_ORE = BLOCKS.register("uranium_ore", - () -> createOre(Blocks.EMERALD_ORE, 4, 8)); + () -> createOre(Blocks.EMERALD_ORE, 4, 8, MapColor.COLOR_YELLOW)); public static final DeferredBlock DEEPSLATE_URANIUM_ORE = BLOCKS.register("deepslate_uranium_ore", - () -> createOre(Blocks.DEEPSLATE_EMERALD_ORE, 4, 8)); + () -> createOre(Blocks.DEEPSLATE_EMERALD_ORE, 4, 8, MapColor.COLOR_YELLOW)); public static final DeferredBlock TITANIUM_ORE = BLOCKS.register("titanium_ore", - () -> createOre(Blocks.DIAMOND_ORE, 4, 8)); + () -> createOre(Blocks.DIAMOND_ORE, 4, 8, MapColor.COLOR_LIGHT_BLUE)); public static final DeferredBlock DEEPSLATE_TITANIUM_ORE = BLOCKS.register("deepslate_titanium_ore", - () -> createOre(Blocks.DEEPSLATE_DIAMOND_ORE, 4, 8)); + () -> createOre(Blocks.DEEPSLATE_DIAMOND_ORE, 4, 8, MapColor.COLOR_LIGHT_BLUE)); public static final DeferredBlock URANIUM_BLOCK = BLOCKS.register("uranium_block", - () -> createStorageBlock(Blocks.EMERALD_BLOCK)); + () -> createStorageBlock(Blocks.EMERALD_BLOCK, MapColor.COLOR_YELLOW)); public static final DeferredBlock TITANIUM_BLOCK = BLOCKS.register("titanium_block", - () -> createStorageBlock(Blocks.DIAMOND_BLOCK)); + () -> createStorageBlock(Blocks.DIAMOND_BLOCK, MapColor.COLOR_LIGHT_BLUE)); public static final DeferredBlock RAW_URANIUM_BLOCK = BLOCKS.register("raw_uranium_block", - () -> createRawStorageBlock(Blocks.EMERALD_ORE)); + () -> createRawStorageBlock(Blocks.EMERALD_ORE, MapColor.COLOR_YELLOW)); public static final DeferredBlock RAW_TITANIUM_BLOCK = BLOCKS.register("raw_titanium_block", - () -> createRawStorageBlock(Blocks.DIAMOND_ORE)); + () -> createRawStorageBlock(Blocks.DIAMOND_ORE, MapColor.COLOR_LIGHT_BLUE)); public static final DeferredBlock CUT_URANIUM = BLOCKS.register("cut_uranium", - () -> createHorizontalFacingStorageBlock(Blocks.CUT_COPPER)); + () -> createHorizontalFacingStorageBlock(Blocks.CUT_COPPER, MapColor.COLOR_YELLOW)); public static final DeferredBlock CUT_TITANIUM = BLOCKS.register("cut_titanium", - () -> createHorizontalFacingStorageBlock(Blocks.CUT_COPPER)); + () -> createHorizontalFacingStorageBlock(Blocks.CUT_COPPER, MapColor.COLOR_LIGHT_BLUE)); public static final DeferredBlock CUT_URANIUM_SLAB = BLOCKS.register("cut_uranium_slab", - () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_COPPER_SLAB))); + () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_COPPER_SLAB).mapColor(MapColor.COLOR_YELLOW))); public static final DeferredBlock CUT_TITANIUM_SLAB = BLOCKS.register("cut_titanium_slab", - () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_COPPER_SLAB))); + () -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_COPPER_SLAB).mapColor(MapColor.COLOR_LIGHT_BLUE))); public static final DeferredBlock CUT_URANIUM_STAIRS = BLOCKS.register("cut_uranium_stairs", - () -> new StairBlock(CUT_URANIUM.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_COPPER_STAIRS))); + () -> new StairBlock(CUT_URANIUM.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_COPPER_STAIRS).mapColor(MapColor.COLOR_YELLOW))); public static final DeferredBlock CUT_TITANIUM_STAIRS = BLOCKS.register("cut_titanium_stairs", - () -> new StairBlock(CUT_TITANIUM.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_COPPER_STAIRS))); + () -> new StairBlock(CUT_TITANIUM.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_COPPER_STAIRS).mapColor(MapColor.COLOR_LIGHT_BLUE))); public static final DeferredBlock CHISELED_URANIUM = BLOCKS.register("chiseled_uranium", - () -> createHorizontalFacingStorageBlock(Blocks.CHISELED_COPPER)); + () -> createHorizontalFacingStorageBlock(Blocks.CHISELED_COPPER, MapColor.COLOR_YELLOW)); public static final DeferredBlock CHISELED_TITANIUM = BLOCKS.register("chiseled_titanium", - () -> createHorizontalFacingStorageBlock(Blocks.CHISELED_COPPER)); + () -> createHorizontalFacingStorageBlock(Blocks.CHISELED_COPPER, MapColor.COLOR_LIGHT_BLUE)); public static final DeferredBlock URANIUM_BULB = BLOCKS.register("uranium_bulb", - () -> new SignalSavingBulbBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.COPPER_BULB))); + () -> new SignalSavingBulbBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.COPPER_BULB).mapColor(MapColor.COLOR_YELLOW))); public static final DeferredBlock TITANIUM_BULB = BLOCKS.register("titanium_bulb", - () -> new SignalSavingBulbBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.COPPER_BULB))); + () -> new SignalSavingBulbBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.COPPER_BULB).mapColor(MapColor.COLOR_LIGHT_BLUE))); public static final DeferredBlock URANIUM_DOOR = BLOCKS.register("uranium_door", - () -> new DoorBlock(BlockSetType.IRON, BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_DOOR))); + () -> new DoorBlock(BlockSetType.IRON, BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_DOOR).mapColor(MapColor.COLOR_YELLOW))); public static final DeferredBlock TITANIUM_DOOR = BLOCKS.register("titanium_door", - () -> new DoorBlock(BlockSetType.IRON, BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_DOOR))); + () -> new DoorBlock(BlockSetType.IRON, BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_DOOR).mapColor(MapColor.COLOR_LIGHT_BLUE))); public static final DeferredBlock URANIUM_TRAPDOOR = BLOCKS.register("uranium_trapdoor", - () -> new TrapDoorBlock(BlockSetType.IRON, BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_TRAPDOOR))); + () -> new TrapDoorBlock(BlockSetType.IRON, BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_TRAPDOOR).mapColor(MapColor.COLOR_YELLOW))); public static final DeferredBlock TITANIUM_TRAPDOOR = BLOCKS.register("titanium_trapdoor", - () -> new TrapDoorBlock(BlockSetType.IRON, BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_TRAPDOOR))); + () -> new TrapDoorBlock(BlockSetType.IRON, BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_TRAPDOOR).mapColor(MapColor.COLOR_LIGHT_BLUE))); public static final DeferredBlock URANIUM_BARS = BLOCKS.register("uranium_bars", - () -> new IronBarsBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_BARS))); + () -> new IronBarsBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_BARS).mapColor(MapColor.COLOR_YELLOW))); public static final DeferredBlock TITANIUM_BARS = BLOCKS.register("titanium_bars", - () -> new IronBarsBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_BARS))); + () -> new IronBarsBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_BARS).mapColor(MapColor.COLOR_LIGHT_BLUE))); public static final DeferredBlock ANTIMETAL = BLOCKS.register("antimetal", () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.BASALT))); public static final DeferredBlock POLISHED_ANTIMETAL = BLOCKS.register("polished_antimetal", @@ -577,20 +578,20 @@ public final class AntarchyNeoforgeBlocks { .isViewBlocking((state, level, pos) -> false); } - private static Block createOre(Block copyFrom, int minExperience, int maxExperience) { - return new DropExperienceBlock(UniformInt.of(minExperience, maxExperience), BlockBehaviour.Properties.ofFullCopy(copyFrom).requiresCorrectToolForDrops()); + private static Block createOre(Block copyFrom, int minExperience, int maxExperience, MapColor mapColor) { + return new DropExperienceBlock(UniformInt.of(minExperience, maxExperience), BlockBehaviour.Properties.ofFullCopy(copyFrom).mapColor(mapColor).requiresCorrectToolForDrops()); } - static Block createStorageBlock(Block copyFrom) { - return new Block(BlockBehaviour.Properties.ofFullCopy(copyFrom).requiresCorrectToolForDrops()); + static Block createStorageBlock(Block copyFrom, MapColor mapColor) { + return new Block(BlockBehaviour.Properties.ofFullCopy(copyFrom).mapColor(mapColor).requiresCorrectToolForDrops()); } - static Block createHorizontalFacingStorageBlock(Block copyFrom) { - return new SimpleHorizontalFacingBlock(BlockBehaviour.Properties.ofFullCopy(copyFrom).requiresCorrectToolForDrops()); + static Block createHorizontalFacingStorageBlock(Block copyFrom, MapColor mapColor) { + return new SimpleHorizontalFacingBlock(BlockBehaviour.Properties.ofFullCopy(copyFrom).mapColor(mapColor).requiresCorrectToolForDrops()); } - static Block createRawStorageBlock(Block copyFrom) { - return new Block(BlockBehaviour.Properties.ofFullCopy(copyFrom).requiresCorrectToolForDrops()); + static Block createRawStorageBlock(Block copyFrom, MapColor mapColor) { + return new Block(BlockBehaviour.Properties.ofFullCopy(copyFrom).mapColor(mapColor).requiresCorrectToolForDrops()); } private static Block smallBloodCrystalBudBlock() { 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 8893e369..9542860f 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 @@ -188,6 +188,8 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.KING_SCALE.get()); event.accept(AntarchyNeoforgeItems.QUEEN_SCALE.get()); event.accept(AntarchyNeoforgeItems.CHITEN.get()); + event.accept(AntarchyNeoforgeItems.JERRY_NUCLEUS.get()); + event.accept(AntarchyNeoforgeItems.CARAPACE.get()); event.accept(AntarchyNeoforgeItems.STINK_BUG.get()); event.accept(AntarchyNeoforgeItems.BRUTALFLY_WING.get()); event.accept(AntarchyNeoforgeItems.PRIMORDIAL_SCUTE.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 329c8de6..612f9cce 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 @@ -153,7 +153,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.AMBIENT) + () -> EntityType.Builder.of(StinkBugEntity::new, MobCategory.CREATURE) .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 7942d8ea..d49f8d61 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 @@ -213,32 +213,54 @@ public final class AntarchyNeoforgeItems { public static final DeferredItem BROWN_ANT_NEST_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.BROWN_ANT_NEST); public static final DeferredItem RAINBOW_ANT_NEST_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.RAINBOW_ANT_NEST); public static final DeferredItem TERMITE_NEST_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.TERMITE_NEST); - public static final DeferredItem URANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.URANIUM_ORE); - public static final DeferredItem DEEPSLATE_URANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.DEEPSLATE_URANIUM_ORE); - public static final DeferredItem TITANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.TITANIUM_ORE); - public static final DeferredItem DEEPSLATE_TITANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.DEEPSLATE_TITANIUM_ORE); - public static final DeferredItem URANIUM_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.URANIUM_BLOCK); - public static final DeferredItem TITANIUM_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.TITANIUM_BLOCK); - public static final DeferredItem RAW_URANIUM_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.RAW_URANIUM_BLOCK); - public static final DeferredItem RAW_TITANIUM_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.RAW_TITANIUM_BLOCK); - public static final DeferredItem CUT_URANIUM_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CUT_URANIUM); - public static final DeferredItem CUT_TITANIUM_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CUT_TITANIUM); - public static final DeferredItem CUT_URANIUM_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CUT_URANIUM_SLAB); - public static final DeferredItem CUT_TITANIUM_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CUT_TITANIUM_SLAB); - public static final DeferredItem CUT_URANIUM_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CUT_URANIUM_STAIRS); - public static final DeferredItem CUT_TITANIUM_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CUT_TITANIUM_STAIRS); - public static final DeferredItem CHISELED_URANIUM_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CHISELED_URANIUM); - public static final DeferredItem CHISELED_TITANIUM_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CHISELED_TITANIUM); + public static final DeferredItem URANIUM_ORE_ITEM = ITEMS.register("uranium_ore", + () -> new net.minecraft.world.item.BlockItem(AntarchyNeoforgeBlocks.URANIUM_ORE.get(), new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final DeferredItem DEEPSLATE_URANIUM_ORE_ITEM = ITEMS.register("deepslate_uranium_ore", + () -> new net.minecraft.world.item.BlockItem(AntarchyNeoforgeBlocks.DEEPSLATE_URANIUM_ORE.get(), new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final DeferredItem TITANIUM_ORE_ITEM = ITEMS.register("titanium_ore", + () -> new net.minecraft.world.item.BlockItem(AntarchyNeoforgeBlocks.TITANIUM_ORE.get(), new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final DeferredItem DEEPSLATE_TITANIUM_ORE_ITEM = ITEMS.register("deepslate_titanium_ore", + () -> new net.minecraft.world.item.BlockItem(AntarchyNeoforgeBlocks.DEEPSLATE_TITANIUM_ORE.get(), new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final DeferredItem URANIUM_BLOCK_ITEM = ITEMS.register("uranium_block", + () -> new net.minecraft.world.item.BlockItem(AntarchyNeoforgeBlocks.URANIUM_BLOCK.get(), new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final DeferredItem TITANIUM_BLOCK_ITEM = ITEMS.register("titanium_block", + () -> new net.minecraft.world.item.BlockItem(AntarchyNeoforgeBlocks.TITANIUM_BLOCK.get(), new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final DeferredItem RAW_URANIUM_BLOCK_ITEM = ITEMS.register("raw_uranium_block", + () -> new net.minecraft.world.item.BlockItem(AntarchyNeoforgeBlocks.RAW_URANIUM_BLOCK.get(), new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final DeferredItem RAW_TITANIUM_BLOCK_ITEM = ITEMS.register("raw_titanium_block", + () -> new net.minecraft.world.item.BlockItem(AntarchyNeoforgeBlocks.RAW_TITANIUM_BLOCK.get(), new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final DeferredItem CUT_URANIUM_ITEM = ITEMS.register("cut_uranium", + () -> new net.minecraft.world.item.BlockItem(AntarchyNeoforgeBlocks.CUT_URANIUM.get(), new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final DeferredItem CUT_TITANIUM_ITEM = ITEMS.register("cut_titanium", + () -> new net.minecraft.world.item.BlockItem(AntarchyNeoforgeBlocks.CUT_TITANIUM.get(), new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final DeferredItem CUT_URANIUM_SLAB_ITEM = ITEMS.register("cut_uranium_slab", + () -> new net.minecraft.world.item.BlockItem(AntarchyNeoforgeBlocks.CUT_URANIUM_SLAB.get(), new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final DeferredItem CUT_TITANIUM_SLAB_ITEM = ITEMS.register("cut_titanium_slab", + () -> new net.minecraft.world.item.BlockItem(AntarchyNeoforgeBlocks.CUT_TITANIUM_SLAB.get(), new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final DeferredItem CUT_URANIUM_STAIRS_ITEM = ITEMS.register("cut_uranium_stairs", + () -> new net.minecraft.world.item.BlockItem(AntarchyNeoforgeBlocks.CUT_URANIUM_STAIRS.get(), new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final DeferredItem CUT_TITANIUM_STAIRS_ITEM = ITEMS.register("cut_titanium_stairs", + () -> new net.minecraft.world.item.BlockItem(AntarchyNeoforgeBlocks.CUT_TITANIUM_STAIRS.get(), new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final DeferredItem CHISELED_URANIUM_ITEM = ITEMS.register("chiseled_uranium", + () -> new net.minecraft.world.item.BlockItem(AntarchyNeoforgeBlocks.CHISELED_URANIUM.get(), new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final DeferredItem CHISELED_TITANIUM_ITEM = ITEMS.register("chiseled_titanium", + () -> new net.minecraft.world.item.BlockItem(AntarchyNeoforgeBlocks.CHISELED_TITANIUM.get(), new Item.Properties().rarity(Rarity.UNCOMMON))); public static final DeferredItem URANIUM_BULB_ITEM = ITEMS.register("uranium_bulb", - () -> new com.craisinlord.antarchy.content.item.SignalSavingBulbItem(AntarchyNeoforgeBlocks.URANIUM_BULB.get(), new Item.Properties())); + () -> new com.craisinlord.antarchy.content.item.SignalSavingBulbItem(AntarchyNeoforgeBlocks.URANIUM_BULB.get(), new Item.Properties().rarity(Rarity.UNCOMMON))); public static final DeferredItem TITANIUM_BULB_ITEM = ITEMS.register("titanium_bulb", - () -> new com.craisinlord.antarchy.content.item.SignalSavingBulbItem(AntarchyNeoforgeBlocks.TITANIUM_BULB.get(), new Item.Properties())); - public static final DeferredItem URANIUM_DOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.URANIUM_DOOR); - public static final DeferredItem TITANIUM_DOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.TITANIUM_DOOR); - public static final DeferredItem URANIUM_TRAPDOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.URANIUM_TRAPDOOR); - public static final DeferredItem TITANIUM_TRAPDOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.TITANIUM_TRAPDOOR); - public static final DeferredItem URANIUM_BARS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.URANIUM_BARS); - public static final DeferredItem TITANIUM_BARS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.TITANIUM_BARS); + () -> new com.craisinlord.antarchy.content.item.SignalSavingBulbItem(AntarchyNeoforgeBlocks.TITANIUM_BULB.get(), new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final DeferredItem URANIUM_DOOR_ITEM = ITEMS.register("uranium_door", + () -> new net.minecraft.world.item.BlockItem(AntarchyNeoforgeBlocks.URANIUM_DOOR.get(), new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final DeferredItem TITANIUM_DOOR_ITEM = ITEMS.register("titanium_door", + () -> new net.minecraft.world.item.BlockItem(AntarchyNeoforgeBlocks.TITANIUM_DOOR.get(), new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final DeferredItem URANIUM_TRAPDOOR_ITEM = ITEMS.register("uranium_trapdoor", + () -> new net.minecraft.world.item.BlockItem(AntarchyNeoforgeBlocks.URANIUM_TRAPDOOR.get(), new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final DeferredItem TITANIUM_TRAPDOOR_ITEM = ITEMS.register("titanium_trapdoor", + () -> new net.minecraft.world.item.BlockItem(AntarchyNeoforgeBlocks.TITANIUM_TRAPDOOR.get(), new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final DeferredItem URANIUM_BARS_ITEM = ITEMS.register("uranium_bars", + () -> new net.minecraft.world.item.BlockItem(AntarchyNeoforgeBlocks.URANIUM_BARS.get(), new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final DeferredItem TITANIUM_BARS_ITEM = ITEMS.register("titanium_bars", + () -> new net.minecraft.world.item.BlockItem(AntarchyNeoforgeBlocks.TITANIUM_BARS.get(), new Item.Properties().rarity(Rarity.UNCOMMON))); public static final DeferredItem ANTIMETAL_ITEM = ITEMS.register("antimetal", () -> new AntimetalBlockItem(AntarchyNeoforgeBlocks.ANTIMETAL.get(), new Item.Properties())); public static final DeferredItem POLISHED_ANTIMETAL_ITEM = ITEMS.register("polished_antimetal", @@ -293,8 +315,10 @@ public final class AntarchyNeoforgeItems { 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 BROODSTONE_URANIUM_ORE_ITEM = ITEMS.register("broodstone_uranium_ore", + () -> new net.minecraft.world.item.BlockItem(AntarchyNeoforgeBlocks.BROODSTONE_URANIUM_ORE.get(), new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final DeferredItem BROODSTONE_TITANIUM_ORE_ITEM = ITEMS.register("broodstone_titanium_ore", + () -> new net.minecraft.world.item.BlockItem(AntarchyNeoforgeBlocks.BROODSTONE_TITANIUM_ORE.get(), new Item.Properties().rarity(Rarity.UNCOMMON))); public static final DeferredItem POLISHED_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.POLISHED_NYXITE); public static final DeferredItem CHISELED_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CHISELED_NYXITE); public static final DeferredItem NYXITE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.NYXITE_BRICKS); @@ -402,7 +426,11 @@ public final class AntarchyNeoforgeItems { public static final DeferredItem QUEEN_SCALE = ITEMS.register("queen_scale", () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.RARE))); public static final DeferredItem CHITEN = ITEMS.registerSimpleItem("chiten", new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem JERRY_NUCLEUS = ITEMS.registerSimpleItem("jerry_nucleus", new Item.Properties().rarity(Rarity.UNCOMMON)); + public static final DeferredItem JERRY_NUCLEUS = ITEMS.registerSimpleItem("jerry_nucleus", new Item.Properties().rarity(Rarity.UNCOMMON) + .food(new FoodProperties.Builder() + .nutrition(2) + .saturationModifier(0.1F) + .build())); public static final DeferredItem CARAPACE = ITEMS.registerSimpleItem("carapace", new Item.Properties().rarity(Rarity.UNCOMMON)); public static final DeferredItem STINK_BUG = ITEMS.registerSimpleItem("stink_bug", new Item.Properties().rarity(Rarity.UNCOMMON)); public static final DeferredItem JUMPY_BUG_LEG = ITEMS.registerSimpleItem("jumpy_bug_leg", new Item.Properties().rarity(Rarity.UNCOMMON)); @@ -442,8 +470,9 @@ public final class AntarchyNeoforgeItems { public static final DeferredItem RAW_BUG_MEAT = ITEMS.register("raw_bug_meat", () -> new Item(new Item.Properties() .food(new FoodProperties.Builder() - .nutrition(3) - .saturationModifier(0.3F) + .nutrition(4) + .saturationModifier(0.1F) + .effect(() -> new MobEffectInstance(MobEffects.HUNGER, 600), 0.8F) .build()))); public static final DeferredItem COOKED_BUG_MEAT = ITEMS.register("cooked_bug_meat", () -> new Item(new Item.Properties() diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSounds.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSounds.java index 11675cac..6614e6c6 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSounds.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSounds.java @@ -136,6 +136,7 @@ public final class AntarchyNeoforgeSounds { public static final DeferredHolder STINKY_FLY = registerSoundEvent("stinky_fly"); public static final DeferredHolder STINK_BUG_FART = registerSoundEvent("stink_bug_fart"); public static final DeferredHolder STINK_BUG_IDLE = registerSoundEvent("stink_bug_idle"); + public static final DeferredHolder CAVARYN_HEARTBEAT = registerSoundEvent("cavaryn_heartbeat"); public static final DeferredHolder ROLLY_POLLY_IDLE = registerSoundEvent("rolly_polly_idle"); public static final DeferredHolder ROLLY_POLLY_WHEEL_MODE = registerSoundEvent("rolly_polly_wheel_mode"); public static final DeferredHolder ROLLY_POLLY_NORMAL_MODE = registerSoundEvent("rolly_polly_normal_mode");