re-organized files

moved creative menu logic all to common
fixed fabric fluids
made termites a little more forgiving
worked on fixing herc beetle
This commit is contained in:
craisinlord committed 2026-07-22 02:39:32 -05:00
1 parent d5fd81f1c3
commit db93a3ced9
161 files changed
+2588 -1337

No files matched your search

@@ -137,14 +137,6 @@ public final class AntarchyFabric implements ModInitializer {
Registries.PLACED_FEATURE,
ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "seashell_patch_rare")
);
private static final TagKey<net.minecraft.world.level.biome.Biome> HAS_STAR_CORAL = TagKey.create(
Registries.BIOME,
ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "has_star_coral")
);
private static final ResourceKey<PlacedFeature> STAR_CORAL_PATCH = ResourceKey.create(
Registries.PLACED_FEATURE,
ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "star_coral_patch")
);
@Override
public void onInitialize() {
AntarchyFabricNetworking.register();
@@ -284,11 +276,6 @@ public final class AntarchyFabric implements ModInitializer {
GenerationStep.Decoration.VEGETAL_DECORATION,
SEASHELL_PATCH_RARE
);
BiomeModifications.addFeature(
BiomeSelectors.tag(HAS_STAR_CORAL),
GenerationStep.Decoration.VEGETAL_DECORATION,
STAR_CORAL_PATCH
);
BiomeModifications.addSpawn(
BiomeSelectors.tag(APPLE_COW_SPAWN_BIOMES),
net.minecraft.world.entity.MobCategory.CREATURE,
@@ -274,7 +274,15 @@ public final class AntarchyFabricContent {
AntarchyFabricSounds.BRUTALFLY_SPIT,
AntarchyFabricSounds.ROLLY_POLLY_WHEEL_MODE,
AntarchyFabricSounds.ROLLY_POLLY_NORMAL_MODE,
AntarchyFabricSounds.ROLLY_POLLY_ROLL
AntarchyFabricSounds.ROLLY_POLLY_ROLL,
AntarchyFabricSounds.JERRY_YOUNG_IDLE,
AntarchyFabricSounds.JERRY_YOUNG_HURT,
AntarchyFabricSounds.JERRY_YOUNG_DEATH,
AntarchyFabricSounds.JERRY_YOUNG_ATTACK,
AntarchyFabricSounds.JERRY_ADULT_IDLE,
AntarchyFabricSounds.JERRY_ADULT_HURT,
AntarchyFabricSounds.JERRY_ADULT_DEATH,
AntarchyFabricSounds.JERRY_ADULT_ATTACK
);
AntarchyObjects.setOctopusBomb(AntarchyFabricEntities.OCTOPUS_BOMB);
@@ -8,7 +8,7 @@ import com.craisinlord.antarchy.content.AntarchyObjects;
import com.craisinlord.antarchy.content.block.DuctTapeBlock;
import com.craisinlord.antarchy.content.item.AttitudeAdjusterItem;
import com.craisinlord.antarchy.content.item.AttitudeAdjusterSlamManager;
import com.craisinlord.antarchy.content.block.PotentNyxiteBlock;
import com.craisinlord.antarchy.content.fluid.AntarchyFluidChecks;
import com.craisinlord.antarchy.content.entity.MissileSquidEntity;
import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity;
import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi;
@@ -26,10 +26,10 @@ import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
import net.fabricmc.fabric.api.event.player.AttackEntityCallback;
import net.fabricmc.fabric.api.event.player.PlayerBlockBreakEvents;
import net.minecraft.server.level.ServerPlayer;
import com.craisinlord.antarchy.content.SquidzookaDispenseBehavior;
import com.craisinlord.antarchy.content.RpoLauncherDispenseBehavior;
import com.craisinlord.antarchy.content.SizeRayDispenseBehavior;
import com.craisinlord.antarchy.content.WaterCannonDispenseBehavior;
import com.craisinlord.antarchy.content.dispenser.SquidzookaDispenseBehavior;
import com.craisinlord.antarchy.content.dispenser.RpoLauncherDispenseBehavior;
import com.craisinlord.antarchy.content.dispenser.SizeRayDispenseBehavior;
import com.craisinlord.antarchy.content.dispenser.WaterCannonDispenseBehavior;
import net.minecraft.world.level.block.ComposterBlock;
import net.minecraft.world.level.block.DispenserBlock;
import net.minecraft.core.BlockPos;
@@ -245,7 +245,7 @@ public final class AntarchyFabricEvents {
for (int y = min.getY(); y <= max.getY(); y++) {
for (int z = min.getZ(); z <= max.getZ(); z++) {
cursor.set(x, y, z);
if (PotentNyxiteBlock.isIchor(entity.level().getFluidState(cursor))) {
if (AntarchyFluidChecks.isIchor(entity.level().getFluidState(cursor))) {
return true;
}
}
@@ -214,10 +214,10 @@ public final class AntarchyFabricClientBootstrap {
AntarchyFabricMisc.ICHOR.get(),
AntarchyFabricMisc.FLOWING_ICHOR.get(),
new SimpleFluidRenderHandler(
ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/antiwater_still"),
ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/antiwater_flow"),
ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/bile/bile_still"),
ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/bile/bile_flowing"),
ResourceLocation.withDefaultNamespace("block/water_overlay"),
0xFF2A0306
0xFF3D0408
)
);
@@ -476,6 +476,7 @@ public final class AntarchyFabricClientBootstrap {
JumpyBootsHudRenderer.render(guiGraphics);
TriffidGooHudRenderer.render(guiGraphics);
DorrieJumpHudRenderer.render(guiGraphics);
HerculesBeetleChargeHudRenderer.render(guiGraphics);
});
WorldRenderEvents.AFTER_TRANSLUCENT.register(context -> {
@@ -0,0 +1,50 @@
package com.craisinlord.antarchy.fabric.client;
import com.craisinlord.antarchy.content.entity.HerculesBeetleEntity;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Mth;
import net.minecraft.world.entity.player.Player;
public final class HerculesBeetleChargeHudRenderer {
private static final ResourceLocation CHARGE_BAR_BACKGROUND =
ResourceLocation.withDefaultNamespace("textures/gui/sprites/hud/jump_bar_background.png");
private static final ResourceLocation CHARGE_BAR_PROGRESS =
ResourceLocation.withDefaultNamespace("textures/gui/sprites/hud/jump_bar_progress.png");
private static final int BAR_WIDTH = 182;
private static final int BAR_HEIGHT = 5;
private HerculesBeetleChargeHudRenderer() {
}
public static void render(GuiGraphics guiGraphics) {
Minecraft mc = Minecraft.getInstance();
Player player = mc.player;
if (player == null || mc.screen != null || player.isDeadOrDying()) {
return;
}
if (!(player.getVehicle() instanceof HerculesBeetleEntity beetle)) {
return;
}
int charge = beetle.getMountedCharge();
if (charge <= 0) {
return;
}
int width = mc.getWindow().getGuiScaledWidth();
int height = mc.getWindow().getGuiScaledHeight();
int x0 = width / 2 - BAR_WIDTH / 2;
int y0 = height - 39;
float chargeRatio = Mth.clamp(charge / 100.0F, 0.0F, 1.0F);
int filledWidth = Mth.clamp((int) (chargeRatio * BAR_WIDTH), 0, BAR_WIDTH);
guiGraphics.blit(CHARGE_BAR_BACKGROUND, x0, y0, 0, 0, BAR_WIDTH, BAR_HEIGHT, BAR_WIDTH, BAR_HEIGHT);
if (filledWidth > 0) {
guiGraphics.setColor(1.0F, 0.78F, 0.2F, 0.45F + chargeRatio * 0.55F);
guiGraphics.blit(CHARGE_BAR_PROGRESS, x0, y0, 0, 0, filledWidth, BAR_HEIGHT, BAR_WIDTH, BAR_HEIGHT);
guiGraphics.setColor(1.0F, 1.0F, 1.0F, 1.0F);
}
}
}
@@ -9,12 +9,9 @@ import net.minecraft.client.Minecraft;
import net.minecraft.client.player.LocalPlayer;
public final class HerculesBeetleClientHandler {
private static final int MAX_CHARGE_TICKS = 40;
private static boolean wasPressingJump;
private static boolean wasPressingAttack;
private static boolean wasCharging;
private static int chargeTicks;
private HerculesBeetleClientHandler() {
}
@@ -45,11 +42,8 @@ public final class HerculesBeetleClientHandler {
wasPressingAttack = pressingAttack;
boolean charging = AntarchyKeyBindings.isHerculesBeetleChargePressed();
if (charging) {
chargeTicks = Math.min(chargeTicks + 1, MAX_CHARGE_TICKS);
} else if (wasCharging && chargeTicks > 0) {
ClientPlayNetworking.send(new HerculesBeetleMountedChargePayload(chargeTicks));
chargeTicks = 0;
if (charging != wasCharging) {
ClientPlayNetworking.send(new HerculesBeetleMountedChargePayload(charging));
}
wasCharging = charging;
}
@@ -61,6 +55,5 @@ public final class HerculesBeetleClientHandler {
}
wasPressingAttack = false;
wasCharging = false;
chargeTicks = 0;
}
}
@@ -1,6 +1,7 @@
package com.craisinlord.antarchy.fabric.mixin;
import com.craisinlord.antarchy.content.block.PotentNyxiteBlock;
import com.craisinlord.antarchy.content.fluid.AntarchyFluidChecks;
import com.craisinlord.antarchy.fabric.util.CustomFluidPhysicsChecks;
import net.minecraft.core.BlockPos;
import net.minecraft.world.entity.item.ItemEntity;
import net.minecraft.world.level.material.FluidState;
@@ -20,10 +21,12 @@ public abstract class AntiwaterItemEntityMixin {
}
Vec3 motion = entity.getDeltaMovement();
Vec3 antiwaterFlow = CustomFluidPhysicsChecks.getAntiwaterFlow(entity);
Vec3 push = antiwaterFlow.lengthSqr() > 1.0E-6D ? antiwaterFlow.normalize().scale(0.02D) : Vec3.ZERO;
entity.setDeltaMovement(
motion.x * 0.99D,
motion.y + (motion.y < 0.06D ? 5.0E-4D : 0.0D),
motion.z * 0.99D
motion.x * 0.99D + push.x,
motion.y * 0.8D + 0.025D + push.y,
motion.z * 0.99D + push.z
);
}
@@ -36,7 +39,7 @@ public abstract class AntiwaterItemEntityMixin {
for (int z = min.getZ(); z <= max.getZ(); z++) {
cursor.set(x, y, z);
FluidState fluidState = entity.level().getFluidState(cursor);
if (PotentNyxiteBlock.isAntiwater(fluidState)) {
if (AntarchyFluidChecks.isAntiwater(fluidState)) {
return true;
}
}
@@ -1,10 +1,11 @@
package com.craisinlord.antarchy.fabric.mixin;
import com.craisinlord.antarchy.content.AntarchyObjects;
import com.craisinlord.antarchy.content.block.PotentNyxiteBlock;
import com.craisinlord.antarchy.content.fluid.AntarchyFluidChecks;
import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi;
import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection;
import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil;
import com.craisinlord.antarchy.fabric.util.CustomFluidPhysicsChecks;
import net.minecraft.core.BlockPos;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.MoverType;
@@ -32,6 +33,11 @@ public abstract class AntiwaterLivingEntityMixin {
entity.move(MoverType.SELF, entity.getDeltaMovement());
Vec3 motion = entity.getDeltaMovement();
double verticalInput = travelVector.y;
if (verticalInput == 0.0D && entity instanceof Player player) {
verticalInput = player.isShiftKeyDown() ? -1.0D : ((LivingEntityJumpingAccessor) entity).antarchy$isJumping() ? 1.0D : 0.0D;
}
if (entity.horizontalCollision && entity.onClimbable()) {
motion = new Vec3(motion.x, 0.2D, motion.z);
}
@@ -43,9 +49,13 @@ public abstract class AntiwaterLivingEntityMixin {
double drag = entity.isSwimming() ? 0.9D : 0.8D;
worldMotion = worldMotion.scale(drag);
Vec3 antiwaterFlow = CustomFluidPhysicsChecks.getAntiwaterFlow(entity);
if (antiwaterFlow.lengthSqr() > 1.0E-6D) {
worldMotion = worldMotion.add(antiwaterFlow.normalize().scale(0.02D));
}
boolean flying = entity instanceof Player player && player.getAbilities().flying;
if (!flying) {
worldMotion = worldMotion.add(0.0D, 0.005D, 0.0D);
worldMotion = worldMotion.add(0.0D, 0.005D + verticalInput * 0.04D, 0.0D);
}
entity.setDeltaMovement(
@@ -89,7 +99,7 @@ public abstract class AntiwaterLivingEntityMixin {
for (int z = min.getZ(); z <= max.getZ(); z++) {
cursor.set(x, y, z);
FluidState fluidState = entity.level().getFluidState(cursor);
if (PotentNyxiteBlock.isAntiwater(fluidState)) {
if (AntarchyFluidChecks.isAntiwater(fluidState)) {
return true;
}
}
@@ -23,14 +23,7 @@ public abstract class DreamSandMovementMixin {
if (!AntarchySettings.dreamSandEnabled() || antarchy$isDreamSandLowGravityBlacklisted(self)) {
access.antarchy$clearDreamSandLowGravity();
} else if (antarchy$isStandingOnDreamSand(self)) {
self.setDeltaMovement(
self.getDeltaMovement().x,
self.getDeltaMovement().y * AntarchySettings.dreamSandJumpVelocityMultiplier(),
self.getDeltaMovement().z
);
access.antarchy$setDreamSandLowGravityActive(true);
access.antarchy$setDreamSandLowGravityTicksRemaining((int) Math.max(1L, Math.round(AntarchySettings.dreamSandEffectDurationSeconds() * 20.0D)));
access.antarchy$setDreamSandLandingGraceTicks(0);
antarchy$startDreamSandLowGravity(self, access);
}
}
@@ -45,7 +38,17 @@ public abstract class DreamSandMovementMixin {
access.antarchy$setDreamSandLandingGraceTicks(landingGraceTicks - 1);
}
if (!AntarchySettings.dreamSandEnabled() || antarchy$isDreamSandLowGravityBlacklisted(self) || !access.antarchy$isDreamSandLowGravityActive()) {
if (!AntarchySettings.dreamSandEnabled() || antarchy$isDreamSandLowGravityBlacklisted(self)) {
return;
}
if (!access.antarchy$isDreamSandLowGravityActive()
&& !self.onGround()
&& antarchy$isStandingOnDreamSand(self)) {
antarchy$startDreamSandLowGravity(self, access);
}
if (!access.antarchy$isDreamSandLowGravityActive()) {
return;
}
@@ -90,7 +93,18 @@ public abstract class DreamSandMovementMixin {
}
private static boolean antarchy$isStandingOnDreamSand(LivingEntity livingEntity) {
return livingEntity.level().getBlockState(livingEntity.getOnPosLegacy()).is(AntarchyFabricBlocks.DREAM_SAND.get());
return livingEntity.getBlockStateOn().is(AntarchyFabricBlocks.DREAM_SAND.get());
}
private static void antarchy$startDreamSandLowGravity(LivingEntity self, DreamSandLowGravityAccess access) {
self.setDeltaMovement(
self.getDeltaMovement().x,
self.getDeltaMovement().y * AntarchySettings.dreamSandJumpVelocityMultiplier(),
self.getDeltaMovement().z
);
access.antarchy$setDreamSandLowGravityActive(true);
access.antarchy$setDreamSandLowGravityTicksRemaining((int) Math.max(1L, Math.round(AntarchySettings.dreamSandEffectDurationSeconds() * 20.0D)));
access.antarchy$setDreamSandLandingGraceTicks(0);
}
private static boolean antarchy$isDreamSandLowGravityBlacklisted(LivingEntity livingEntity) {
@@ -0,0 +1,11 @@
package com.craisinlord.antarchy.fabric.mixin;
import net.minecraft.world.entity.LivingEntity;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(LivingEntity.class)
public interface LivingEntityJumpingAccessor {
@Accessor("jumping")
boolean antarchy$isJumping();
}
@@ -0,0 +1,29 @@
package com.craisinlord.antarchy.fabric.mixin;
import com.craisinlord.antarchy.fabric.util.CustomFluidPhysicsChecks;
import net.minecraft.world.entity.item.ItemEntity;
import net.minecraft.world.phys.Vec3;
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(value = ItemEntity.class, priority = 900)
public abstract class WaterlikeFluidItemEntityMixin {
@Inject(method = "tick", at = @At("TAIL"))
private void antarchy$applyWaterlikeFluidItemMovement(CallbackInfo ci) {
ItemEntity entity = (ItemEntity) (Object) this;
if (CustomFluidPhysicsChecks.isTouchingAntiwater(entity) || !CustomFluidPhysicsChecks.isTouchingWaterlikeFluid(entity)) {
return;
}
Vec3 motion = entity.getDeltaMovement();
Vec3 fluidFlow = CustomFluidPhysicsChecks.getWaterlikeFlow(entity);
Vec3 push = fluidFlow.lengthSqr() > 1.0E-6D ? fluidFlow.normalize().scale(0.03D) : Vec3.ZERO;
entity.setDeltaMovement(
motion.x * 0.99D + push.x,
motion.y + (motion.y < 0.06D ? 5.0E-4D : 0.0D) + push.y,
motion.z * 0.99D + push.z
);
}
}
@@ -0,0 +1,64 @@
package com.craisinlord.antarchy.fabric.mixin;
import com.craisinlord.antarchy.fabric.util.CustomFluidPhysicsChecks;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.MoverType;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.phys.Vec3;
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(value = LivingEntity.class, priority = 900)
public abstract class WaterlikeFluidLivingEntityMixin {
@Inject(method = "travel", at = @At("HEAD"), cancellable = true)
private void antarchy$moveInCustomWaterlikeFluid(Vec3 travelVector, CallbackInfo ci) {
LivingEntity entity = (LivingEntity) (Object) this;
if (CustomFluidPhysicsChecks.isTouchingAntiwater(entity) || !CustomFluidPhysicsChecks.isTouchingWaterlikeFluid(entity)) {
return;
}
double prevY = entity.getY();
float swimSpeed = entity.isSprinting() ? 0.024F : 0.02F;
entity.moveRelative(swimSpeed, travelVector);
entity.move(MoverType.SELF, entity.getDeltaMovement());
Vec3 motion = entity.getDeltaMovement();
double verticalInput = travelVector.y;
if (verticalInput == 0.0D && entity instanceof Player player) {
verticalInput = player.isShiftKeyDown() ? -1.0D : ((LivingEntityJumpingAccessor) entity).antarchy$isJumping() ? 1.0D : 0.0D;
}
if (entity.horizontalCollision && entity.onClimbable()) {
motion = new Vec3(motion.x, 0.2D, motion.z);
}
boolean flying = entity instanceof Player player && player.getAbilities().flying;
double verticalDrift = verticalInput * 0.04D;
if (!flying) {
verticalDrift -= 0.004D;
}
Vec3 nextMotion = new Vec3(
motion.x * 0.8D,
motion.y * 0.8D + verticalDrift,
motion.z * 0.8D
);
Vec3 fluidFlow = CustomFluidPhysicsChecks.getWaterlikeFlow(entity);
if (fluidFlow.lengthSqr() > 1.0E-6D) {
nextMotion = nextMotion.add(fluidFlow.normalize().scale(0.014D));
}
entity.setDeltaMovement(nextMotion);
if (entity.horizontalCollision && entity.isFree(
nextMotion.x,
nextMotion.y + 0.6D - entity.getY() + prevY,
nextMotion.z
)) {
entity.setDeltaMovement(nextMotion.x, 0.3D, nextMotion.z);
}
ci.cancel();
}
}
@@ -1,49 +0,0 @@
package com.craisinlord.antarchy.fabric.mixin.client;
import com.craisinlord.antarchy.content.fluid.BileLiquidBlock;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.shaders.FogShape;
import net.minecraft.client.Camera;
import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.client.renderer.FogRenderer;
import net.minecraft.core.BlockPos;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.level.material.FluidState;
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(FogRenderer.class)
public abstract class AntiwaterFogMixin {
@Inject(method = "setupColor", at = @At("TAIL"))
private static void antarchy$overrideBileColor(Camera camera, float partialTick, ClientLevel level, int renderDistance, float darkenWorldAmount, CallbackInfo ci) {
if (!antarchy$isInBile(camera)) {
return;
}
RenderSystem.clearColor(0.38F, 0.42F, 0.10F, 0.0F);
}
@Inject(method = "setupFog", at = @At("TAIL"))
private static void antarchy$overrideBileFog(Camera camera, FogRenderer.FogMode mode, float renderDistance, boolean thickFog, float partialTick, CallbackInfo ci) {
if (!antarchy$isInBile(camera)) {
return;
}
RenderSystem.setShaderFogStart(0.25F);
RenderSystem.setShaderFogEnd(Math.min(renderDistance, 4.0F));
RenderSystem.setShaderFogShape(FogShape.CYLINDER);
}
private static boolean antarchy$isInBile(Camera camera) {
Entity entity = camera.getEntity();
if (entity == null || entity.level() == null) {
return false;
}
BlockPos pos = BlockPos.containing(camera.getPosition());
FluidState fluidState = entity.level().getFluidState(pos);
return BileLiquidBlock.isBile(fluidState);
}
}
@@ -0,0 +1,89 @@
package com.craisinlord.antarchy.fabric.mixin.client;
import com.craisinlord.antarchy.content.fluid.BileLiquidBlock;
import com.craisinlord.antarchy.content.fluid.AntarchyFluidChecks;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.shaders.FogShape;
import net.minecraft.client.Camera;
import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.client.renderer.FogRenderer;
import net.minecraft.core.BlockPos;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.level.material.FluidState;
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(FogRenderer.class)
public abstract class LiquidFogMixin {
private static final int FLUID_NONE = 0;
private static final int FLUID_BILE = 1;
private static final int FLUID_ANTIWATER = 2;
private static final int FLUID_ICHOR = 3;
private static final int FLUID_LUMEN = 4;
@Inject(method = "setupColor", at = @At("TAIL"))
private static void antarchy$overrideBileColor(Camera camera, float partialTick, ClientLevel level, int renderDistance, float darkenWorldAmount, CallbackInfo ci) {
int fluidKind = antarchy$getFluidKind(camera);
if (fluidKind == FLUID_NONE) {
return;
}
if (fluidKind == FLUID_BILE) {
RenderSystem.clearColor(0.52F, 0.58F, 0.08F, 0.0F);
} else if (fluidKind == FLUID_ANTIWATER) {
RenderSystem.clearColor(0.48F, 0.06F, 0.06F, 0.0F);
} else if (fluidKind == FLUID_ICHOR) {
RenderSystem.clearColor(0.18F, 0.01F, 0.02F, 0.0F);
} else if (fluidKind == FLUID_LUMEN) {
RenderSystem.clearColor(0.42F, 0.82F, 1.0F, 0.0F);
}
}
@Inject(method = "setupFog", at = @At("TAIL"))
private static void antarchy$overrideBileFog(Camera camera, FogRenderer.FogMode mode, float renderDistance, boolean thickFog, float partialTick, CallbackInfo ci) {
int fluidKind = antarchy$getFluidKind(camera);
if (fluidKind == FLUID_NONE) {
return;
}
if (fluidKind == FLUID_BILE) {
RenderSystem.setShaderFogStart(0.2F);
RenderSystem.setShaderFogEnd(Math.min(renderDistance, 4.5F));
} else if (fluidKind == FLUID_ANTIWATER) {
RenderSystem.setShaderFogStart(0.18F);
RenderSystem.setShaderFogEnd(Math.min(renderDistance, 3.5F));
} else if (fluidKind == FLUID_ICHOR) {
RenderSystem.setShaderFogStart(0.08F);
RenderSystem.setShaderFogEnd(Math.min(renderDistance, 2.25F));
} else if (fluidKind == FLUID_LUMEN) {
RenderSystem.setShaderFogStart(0.3F);
RenderSystem.setShaderFogEnd(Math.min(renderDistance, 6.0F));
}
RenderSystem.setShaderFogShape(FogShape.CYLINDER);
}
private static int antarchy$getFluidKind(Camera camera) {
Entity entity = camera.getEntity();
if (entity == null || entity.level() == null) {
return FLUID_NONE;
}
BlockPos pos = BlockPos.containing(camera.getPosition());
FluidState fluidState = entity.level().getFluidState(pos);
if (BileLiquidBlock.isBile(fluidState)) {
return FLUID_BILE;
}
if (AntarchyFluidChecks.isAntiwater(fluidState)) {
return FLUID_ANTIWATER;
}
if (AntarchyFluidChecks.isIchor(fluidState)) {
return FLUID_ICHOR;
}
if (AntarchyFluidChecks.isLumen(fluidState)) {
return FLUID_LUMEN;
}
return FLUID_NONE;
}
}
@@ -3,30 +3,29 @@ package com.craisinlord.antarchy.fabric.mixin.infinity;
import com.craisinlord.antarchy.config.AntarchySettings;
import net.minecraft.core.BlockPos;
import net.minecraft.core.component.DataComponents;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.item.ItemEntity;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.NetherPortalBlock;
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(value = NetherPortalBlock.class, priority = 2000)
public abstract class PortalCreatorMixin {
import net.lerariemann.infinity.util.teleport.PortalCreator;
import net.minecraft.server.level.ServerLevel;
@Mixin(PortalCreator.class)
public interface PortalCreatorMixin {
@Inject(
method = "entityInside",
method = "tryCreatePortalFromItem(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/entity/item/ItemEntity;)V",
at = @At("HEAD"),
cancellable = true
)
private void antarchy$blockInfinityBookActivation(BlockState state, Level level, BlockPos pos, Entity entity, CallbackInfo ci) {
private static void antarchy$blockInfinityBookActivation(ServerLevel level, BlockPos pos, ItemEntity itemEntity, CallbackInfo ci) {
if (!AntarchySettings.disableInfinityBookPortalCreation()) {
return;
}
if (!(entity instanceof ItemEntity itemEntity) || itemEntity.isRemoved()) {
if (itemEntity.isRemoved()) {
return;
}
@@ -391,7 +391,11 @@ public final class AntarchyFabricNetworking {
private static void handleHerculesBeetleMountedCharge(ServerPlayer player, HerculesBeetleMountedChargePayload payload) {
if (player.getVehicle() instanceof HerculesBeetleEntity beetle) {
beetle.handleMountedCharge(player, payload.chargeTicks());
if (payload.pressing()) {
beetle.startMountedCharge(player);
} else {
beetle.releaseMountedCharge(player);
}
}
}
@@ -4,6 +4,7 @@ import com.craisinlord.antarchy.Antarchy;
import com.craisinlord.antarchy.compat.infinity.InfinityCompat;
import com.craisinlord.antarchy.compat.infinity.InfinityCompatVersion;
import com.craisinlord.antarchy.config.AntarchySettings;
import com.craisinlord.antarchy.content.CreativeTabContents;
import com.craisinlord.antarchy.content.AntarchyObjects;
import com.craisinlord.antarchy.content.CreativeTabOrder;
import com.craisinlord.antarchy.content.block.*;
@@ -270,73 +271,17 @@ public final class AntarchyFabricCreativeModeTabs {
private static void populateCreativeTab(CreativeModeTab.Output output) {
ArrayList<Item> sortedItems = new ArrayList<>();
for (var holder : AntarchyFabricItems.ITEMS.getEntries()) {
Item item = holder.get();
if (item != Items.AIR) {
sortedItems.add(item);
}
}
sortedItems.sort(CreativeTabOrder.COMPARATOR);
sortedItems.forEach(item -> {
if (item == AntarchyFabricItems.GLIMMER_BOTTLE.get()) {
addGlimmerBottleVariants(output);
} else {
CreativeTabContents.populateAntarchyTab(new CreativeTabContents.AntarchyTabOutput() {
@Override
public void accept(net.minecraft.world.level.ItemLike item) {
output.accept(item);
}
@Override
public void accept(ItemStack stack) {
output.accept(stack);
}
});
addPotionVariants(output);
}
private static void addGlimmerBottleVariants(CreativeModeTab.Output output) {
for (com.craisinlord.antarchy.content.entity.glimmer.GlimmerVariant variant : com.craisinlord.antarchy.content.entity.glimmer.GlimmerVariant.values()) {
output.accept(com.craisinlord.antarchy.content.item.GlimmerBottleItem.create(variant));
}
}
private static void addPotionVariants(CreativeModeTab.Output output) {
acceptPotionFamily(output, AntarchyFabricMisc.DREAD_POTION);
acceptPotionFamily(output, AntarchyFabricMisc.LONG_DREAD);
acceptPotionFamily(output, AntarchyFabricMisc.INVERSION);
acceptPotionFamily(output, AntarchyFabricMisc.LONG_INVERSION);
acceptPotionFamily(output, AntarchyFabricMisc.STINKY_POTION);
acceptPotionFamily(output, AntarchyFabricMisc.LONG_STINKY);
acceptPotionFamily(output, AntarchyFabricMisc.PARALYSIS);
acceptPotionFamily(output, AntarchyFabricMisc.LONG_PARALYSIS);
acceptPotionFamily(output, AntarchyFabricMisc.HASTE);
acceptPotionFamily(output, AntarchyFabricMisc.STRONG_HASTE);
acceptPotionFamily(output, AntarchyFabricMisc.SHRINKING);
acceptPotionFamily(output, AntarchyFabricMisc.STRONG_SHRINKING);
acceptPotionFamily(output, AntarchyFabricMisc.EXTREME_SHRINKING);
acceptPotionFamily(output, AntarchyFabricMisc.GROWING);
acceptPotionFamily(output, AntarchyFabricMisc.STRONG_GROWING);
acceptPotionFamily(output, AntarchyFabricMisc.EXTREME_GROWING);
}
private static void acceptPotionFamily(CreativeModeTab.Output output, DeferredHolder<Potion, ? extends Potion> potion) {
Holder<Potion> holder = AntarchyFabricContent.potionHolder(potion);
output.accept(PotionContents.createItemStack(Items.POTION, holder));
output.accept(PotionContents.createItemStack(Items.SPLASH_POTION, holder));
output.accept(PotionContents.createItemStack(Items.LINGERING_POTION, holder));
output.accept(PotionContents.createItemStack(Items.TIPPED_ARROW, holder));
}
private static int creativeTabGroup(Item item) {
return CreativeTabOrder.group(item);
}
private static int creativeTabSubOrder(Item item) {
return CreativeTabOrder.subOrder(item);
}
@@ -105,6 +105,7 @@ import com.craisinlord.antarchy.fabric.item.AntimetalScaffoldingItem;
import com.craisinlord.antarchy.content.item.CloudSharkFinSoupItem;
import com.craisinlord.antarchy.content.item.CorneaEarItem;
import com.craisinlord.antarchy.content.item.GravityGunItem;
import com.craisinlord.antarchy.content.item.MantisClawItem;
import com.craisinlord.antarchy.content.item.MinersDreamItem;
import com.craisinlord.antarchy.content.item.DuctTapeBlockItem;
import com.craisinlord.antarchy.content.item.BrutalflyElytraItem;
@@ -610,7 +611,8 @@ public final class AntarchyFabricItems {
public static final DeferredItem<net.minecraft.world.item.BlockItem> DEAD_STAR_CORAL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.DEAD_STAR_CORAL);
public static final DeferredItem<net.minecraft.world.item.BlockItem> DEAD_STAR_CORAL_FAN_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.DEAD_STAR_CORAL_FAN);
public static final DeferredItem<StandingAndWallBlockItem> DEAD_STAR_CORAL_FAN_ITEM = ITEMS.register("dead_star_coral_fan",
() -> new StandingAndWallBlockItem(AntarchyFabricBlocks.DEAD_STAR_CORAL_FAN.get(), AntarchyFabricBlocks.DEAD_STAR_CORAL_WALL_FAN.get(), new Item.Properties(), Direction.UP));
public static final DeferredItem<net.minecraft.world.item.BlockItem> STAR_CORAL_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.STAR_CORAL_BLOCK);
@@ -619,7 +621,8 @@ public final class AntarchyFabricItems {
public static final DeferredItem<net.minecraft.world.item.BlockItem> STAR_CORAL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.STAR_CORAL);
public static final DeferredItem<net.minecraft.world.item.BlockItem> STAR_CORAL_FAN_ITEM = ITEMS.registerSimpleBlockItem(AntarchyFabricBlocks.STAR_CORAL_FAN);
public static final DeferredItem<StandingAndWallBlockItem> STAR_CORAL_FAN_ITEM = ITEMS.register("star_coral_fan",
() -> new StandingAndWallBlockItem(AntarchyFabricBlocks.STAR_CORAL_FAN.get(), AntarchyFabricBlocks.STAR_CORAL_WALL_FAN.get(), new Item.Properties(), Direction.UP));
public static final DeferredItem<net.minecraft.world.item.BlockItem> DUCT_TAPE_ITEM = ITEMS.register("duct_tape",
@@ -872,7 +875,8 @@ public final class AntarchyFabricItems {
));
public static final DeferredItem<Item> MANTIS_CLAW = ITEMS.registerSimpleItem("mantis_claw", new Item.Properties().rarity(Rarity.UNCOMMON));
public static final DeferredItem<MantisClawItem> MANTIS_CLAW = ITEMS.register("mantis_claw",
() -> new MantisClawItem(Tiers.IRON, new Item.Properties().stacksTo(1).rarity(Rarity.UNCOMMON)));
public static final DeferredItem<Item> HERCULES_HORN = ITEMS.registerSimpleItem("hercules_horn", new Item.Properties().rarity(Rarity.UNCOMMON));
@@ -887,11 +891,12 @@ public final class AntarchyFabricItems {
public static final DeferredItem<Item> CHITEN = ITEMS.registerSimpleItem("chiten", new Item.Properties().rarity(Rarity.UNCOMMON));
public static final DeferredItem<Item> 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<Item> JERRY_NUCLEUS = ITEMS.register("jerry_nucleus",
() -> new com.craisinlord.antarchy.content.item.JerryNucleusItem(new Item.Properties().rarity(Rarity.UNCOMMON)
.food(new FoodProperties.Builder()
.nutrition(2)
.saturationModifier(0.1F)
.build())));
public static final DeferredItem<Item> CARAPACE = ITEMS.registerSimpleItem("carapace", new Item.Properties().rarity(Rarity.UNCOMMON));
@@ -1,23 +1,8 @@
package com.craisinlord.antarchy.fabric.registry;
import com.craisinlord.antarchy.Antarchy;
import com.craisinlord.antarchy.compat.infinity.InfinityCompat;
import com.craisinlord.antarchy.compat.infinity.InfinityCompatVersion;
import com.craisinlord.antarchy.config.AntarchySettings;
import com.craisinlord.antarchy.content.AntarchyObjects;
import com.craisinlord.antarchy.content.CreativeTabOrder;
import com.craisinlord.antarchy.content.block.*;
import com.craisinlord.antarchy.content.AntarchySoundEvents;
import com.craisinlord.antarchy.content.item.BloodCrystalArmorItem;
import com.craisinlord.antarchy.content.item.BloodCrystalAppleItem;
import com.craisinlord.antarchy.content.item.BloodCrystalKatanaItem;
import com.craisinlord.antarchy.content.block.entity.AntNestBlockEntity;
import com.craisinlord.antarchy.content.block.entity.DreamCampfireBlockEntity;
import com.craisinlord.antarchy.content.block.entity.HushweedBlockEntity;
import com.craisinlord.antarchy.content.block.entity.PotentNyxiteBlockEntity;
import com.craisinlord.antarchy.content.block.entity.WaspNestBlockEntity;
import com.craisinlord.antarchy.content.fluid.BileLiquidBlock;
import com.craisinlord.antarchy.content.fluid.LumenLiquidBlock;
import com.craisinlord.antarchy.content.recipe.AmericanizeRecipe;
import com.craisinlord.antarchy.content.worldgen.ants.BrownAntNestFeature;
import com.craisinlord.antarchy.content.worldgen.ants.RainbowAntNestFeature;
import com.craisinlord.antarchy.content.worldgen.ants.RedAntNestFeature;
@@ -36,13 +21,6 @@ import com.craisinlord.antarchy.content.worldgen.thoraxis.AntiwaterSpringsFeatur
import com.craisinlord.antarchy.content.worldgen.thoraxis.NyxiteSpikeFeature;
import com.craisinlord.antarchy.content.worldgen.thoraxis.PotentNyxiteFeature;
import com.craisinlord.antarchy.fabric.content.fluid.AntiwaterFluid;
import com.craisinlord.antarchy.fabric.content.fluid.AntiwaterLiquidBlock;
import com.craisinlord.antarchy.fabric.item.DeferredSpawnEggItem;
import com.craisinlord.antarchy.fabric.network.AntarchyFabricNetworking;
import com.craisinlord.antarchy.fabric.registry.DeferredBlock;
import com.craisinlord.antarchy.fabric.registry.DeferredHolder;
import com.craisinlord.antarchy.fabric.registry.DeferredItem;
import com.craisinlord.antarchy.fabric.registry.DeferredRegister;
import com.craisinlord.antarchy.content.effect.DreadMobEffect;
import com.craisinlord.antarchy.content.effect.GoopedMobEffect;
import com.craisinlord.antarchy.content.effect.GrowthMobEffect;
@@ -50,88 +28,6 @@ import com.craisinlord.antarchy.content.effect.InvertedMobEffect;
import com.craisinlord.antarchy.content.effect.ParalyzedMobEffect;
import com.craisinlord.antarchy.content.effect.ShrinkMobEffect;
import com.craisinlord.antarchy.content.effect.StinkyMobEffect;
import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.AppleCow;
import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.EnchantedGoldenAppleCow;
import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.GoldenAppleCow;
import com.craisinlord.antarchy.content.entity.cloud_shark.CloudSharkEntity;
import com.craisinlord.antarchy.content.entity.BedBugEntity;
import com.craisinlord.antarchy.content.entity.ButterflyEntity;
import com.craisinlord.antarchy.content.entity.CaterpillarEntity;
import com.craisinlord.antarchy.content.entity.DiamondMinecartEntity;
import com.craisinlord.antarchy.content.entity.DrTrayaurusEntity;
import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyEntity;
import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyOrbEntity;
import com.craisinlord.antarchy.content.entity.EasterBunnyEntity;
import com.craisinlord.antarchy.content.entity.flying_squirrel.FlyingSquirrelEntity;
import com.craisinlord.antarchy.content.entity.ReverieEntity;
import com.craisinlord.antarchy.content.entity.MissileSquidEntity;
import com.craisinlord.antarchy.content.entity.lucid.LucidEntity;
import com.craisinlord.antarchy.content.entity.lucid.LucidBoltEntity;
import com.craisinlord.antarchy.content.entity.lucid.LucidEyeProjectileEntity;
import com.craisinlord.antarchy.content.entity.HushProjectileEntity;
import com.craisinlord.antarchy.content.entity.JumpyBugEntity;
import com.craisinlord.antarchy.content.entity.StinkBugEntity;
import com.craisinlord.antarchy.content.entity.OuranwoodBoatEntity;
import com.craisinlord.antarchy.content.entity.OuranwoodChestBoatEntity;
import com.craisinlord.antarchy.content.entity.AlphaMantisEntity;
import com.craisinlord.antarchy.content.entity.MantisEntity;
import com.craisinlord.antarchy.content.entity.RollyPollyEntity;
import com.craisinlord.antarchy.content.entity.basilisk.BasiliskEntity;
import com.craisinlord.antarchy.content.entity.EmperorScorpionEntity;
import com.craisinlord.antarchy.content.entity.ScorpionEntity;
import com.craisinlord.antarchy.content.item.LucidEyeItem;
import com.craisinlord.antarchy.content.item.LucidPearlItem;
import com.craisinlord.antarchy.content.entity.nightmare.NightmareEntity;
import com.craisinlord.antarchy.content.entity.ToreterrorEntity;
import com.craisinlord.antarchy.content.entity.WaterBombEntity;
import com.craisinlord.antarchy.content.item.PrimordialArmorItem;
import com.craisinlord.antarchy.content.item.WaterCannonItem;
import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity;
import com.craisinlord.antarchy.content.entity.OctopusBombEntity;
import com.craisinlord.antarchy.content.entity.MolevoreEntity;
import com.craisinlord.antarchy.content.entity.MolewormEntity;
import com.craisinlord.antarchy.content.entity.BomberEntity;
import com.craisinlord.antarchy.content.entity.SizeRayProjectileEntity;
import com.craisinlord.antarchy.content.entity.TriffidEntity;
import com.craisinlord.antarchy.content.entity.WaspEntity;
import com.craisinlord.antarchy.content.entity.ant.BaseAntEntity;
import com.craisinlord.antarchy.content.entity.ant.BrownAntEntity;
import com.craisinlord.antarchy.content.entity.ant.RainbowAntEntity;
import com.craisinlord.antarchy.content.entity.ant.RedAntEntity;
import com.craisinlord.antarchy.content.item.BattleAxeItem;
import com.craisinlord.antarchy.content.item.BasiliskDaggerItem;
import com.craisinlord.antarchy.content.item.BigBerthaItem;
import com.craisinlord.antarchy.content.item.AntimetalBlockItem;
import com.craisinlord.antarchy.fabric.item.AntimetalScaffoldingItem;
import com.craisinlord.antarchy.content.item.CloudSharkFinSoupItem;
import com.craisinlord.antarchy.content.item.CorneaEarItem;
import com.craisinlord.antarchy.content.item.GravityGunItem;
import com.craisinlord.antarchy.content.item.MinersDreamItem;
import com.craisinlord.antarchy.content.item.DuctTapeBlockItem;
import com.craisinlord.antarchy.content.item.BrutalflyElytraItem;
import com.craisinlord.antarchy.content.item.MobComingSoonTooltipItem;
import com.craisinlord.antarchy.content.item.MogglesItem;
import com.craisinlord.antarchy.content.item.ultimate.UltimateAxeItem;
import com.craisinlord.antarchy.content.item.ultimate.UltimateHoeItem;
import com.craisinlord.antarchy.content.item.ultimate.UltimatePickaxeItem;
import com.craisinlord.antarchy.content.item.ultimate.UtlimateShovelItem;
import com.craisinlord.antarchy.content.item.ultimate.UltimateSwordItem;
import com.craisinlord.antarchy.content.item.DiamondMinecartItem;
import com.craisinlord.antarchy.content.item.ReverieBottleItem;
import com.craisinlord.antarchy.content.item.ScorpionWhipItem;
import com.craisinlord.antarchy.content.item.ScorpionWhipTetherSync;
import com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakeSync;
import com.craisinlord.antarchy.content.item.SizeRayItem;
import com.craisinlord.antarchy.content.item.SquidzookaItem;
import com.craisinlord.antarchy.content.item.SimpleToolTier;
import com.craisinlord.antarchy.content.item.ultimate.UltimateArmorItem;
import com.craisinlord.antarchy.content.item.ultimate.UltimateBowItem;
import com.craisinlord.antarchy.content.item.ultimate.UltimateCrossbowItem;
import com.craisinlord.antarchy.content.item.NightmareArmorItem;
import com.craisinlord.antarchy.content.item.NightmareSwordItem;
import com.craisinlord.antarchy.content.item.OuranwoodBoatOnlyItem;
import com.craisinlord.antarchy.content.item.OuranwoodChestBoatItem;
import com.craisinlord.antarchy.content.item.RainbowSugarItem;
import com.craisinlord.antarchy.content.worldgen.elythia.CoralSpikeFeature;
import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaBiomeSource;
import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaRiverCarveFunction;
@@ -181,82 +77,36 @@ import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisSpikeConfigura
import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisSpikeFeature;
import com.craisinlord.antarchy.content.client.particle.InvertedGeyserBaseParticleOptions;
import com.craisinlord.antarchy.content.client.particle.InvertedGeyserParticleOptions;
import com.craisinlord.antarchy.content.portal.PermanentPortalType;
import java.util.List;
import java.util.ArrayList;
import java.util.Comparator;
import com.mojang.serialization.MapCodec;
import net.fabricmc.fabric.api.object.builder.v1.entity.FabricDefaultAttributeRegistry;
import net.fabricmc.fabric.api.registry.FabricBrewingRecipeRegistryBuilder;
import net.minecraft.advancements.critereon.EntitySubPredicate;
import net.minecraft.core.Holder;
import net.minecraft.core.registries.Registries;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.world.item.alchemy.Potion;
import net.minecraft.world.item.alchemy.PotionContents;
import net.minecraft.world.effect.MobEffect;
import net.minecraft.world.effect.MobEffectInstance;
import net.minecraft.world.effect.MobEffects;
import net.minecraft.tags.TagKey;
import net.minecraft.world.damagesource.DamageType;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.MobCategory;
import net.minecraft.world.entity.ai.attributes.Attribute;
import net.minecraft.world.entity.ai.attributes.AttributeSupplier;
import net.minecraft.world.entity.ai.attributes.Attributes;
import net.minecraft.world.entity.animal.Cow;
import net.minecraft.world.entity.animal.Rabbit;
import net.minecraft.world.entity.SpawnPlacementTypes;
import net.minecraft.world.entity.SpawnPlacements;
import net.minecraft.world.entity.npc.Villager;
import net.minecraft.world.entity.monster.Monster;
import net.minecraft.world.item.ArmorItem;
import net.minecraft.world.item.ArmorMaterial;
import net.minecraft.world.item.BucketItem;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraft.world.item.Rarity;
import net.minecraft.world.item.StandingAndWallBlockItem;
import net.minecraft.world.food.FoodProperties;
import net.minecraft.world.item.Tier;
import net.minecraft.world.item.Tiers;
import net.minecraft.world.item.alchemy.Potions;
import net.minecraft.world.item.crafting.Ingredient;
import net.minecraft.world.flag.FeatureFlags;
import net.minecraft.core.Direction;
import net.minecraft.core.particles.ParticleType;
import net.minecraft.core.particles.SimpleParticleType;
import net.minecraft.util.valueproviders.UniformInt;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.AmethystClusterBlock;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.DropExperienceBlock;
import net.minecraft.world.level.block.GlowLichenBlock;
import net.minecraft.world.level.block.HorizontalDirectionalBlock;
import net.minecraft.world.level.block.LiquidBlock;
import net.minecraft.world.level.block.RotatedPillarBlock;
import net.minecraft.world.level.block.SoundType;
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.block.state.StateDefinition;
import net.minecraft.world.level.biome.BiomeSource;
import net.minecraft.world.level.levelgen.DensityFunction;
import net.minecraft.world.level.levelgen.feature.Feature;
import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration;
import net.minecraft.world.level.levelgen.feature.configurations.SimpleBlockConfiguration;
import net.minecraft.world.level.levelgen.Heightmap;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.world.level.material.Fluid;
import net.minecraft.world.item.context.BlockPlaceContext;
import net.minecraft.world.level.block.Mirror;
import net.minecraft.world.level.block.Rotation;
import com.craisinlord.antarchy.fabric.AntarchyFabricContent;
public final class AntarchyFabricMisc {
@@ -350,8 +200,8 @@ public final class AntarchyFabricMisc {
.build());
public static final DeferredHolder<net.minecraft.world.item.crafting.RecipeSerializer<?>, net.minecraft.world.item.crafting.RecipeSerializer<com.craisinlord.antarchy.content.AmericanizeRecipe>> AMERICANIZE_SERIALIZER =
RECIPE_SERIALIZERS.register("americanize", () -> com.craisinlord.antarchy.content.AmericanizeRecipe.SERIALIZER);
public static final DeferredHolder<net.minecraft.world.item.crafting.RecipeSerializer<?>, net.minecraft.world.item.crafting.RecipeSerializer<AmericanizeRecipe>> AMERICANIZE_SERIALIZER =
RECIPE_SERIALIZERS.register("americanize", () -> AmericanizeRecipe.SERIALIZER);
public static final DeferredHolder<ArmorMaterial, ArmorMaterial> ULTIMATE_ARMOR_MATERIAL = ARMOR_MATERIALS.register("ultimate",
@@ -641,6 +641,14 @@ public final class AntarchyFabricSounds {
public static final DeferredHolder<SoundEvent, SoundEvent> ROLLY_POLLY_WHEEL_MODE = registerSoundEvent("rolly_polly_wheel_mode");
public static final DeferredHolder<SoundEvent, SoundEvent> ROLLY_POLLY_NORMAL_MODE = registerSoundEvent("rolly_polly_normal_mode");
public static final DeferredHolder<SoundEvent, SoundEvent> ROLLY_POLLY_ROLL = registerSoundEvent("rolly_polly_roll");
public static final DeferredHolder<SoundEvent, SoundEvent> JERRY_YOUNG_IDLE = registerSoundEvent("jerry_young_idle");
public static final DeferredHolder<SoundEvent, SoundEvent> JERRY_YOUNG_HURT = registerSoundEvent("jerry_young_hurt");
public static final DeferredHolder<SoundEvent, SoundEvent> JERRY_YOUNG_DEATH = registerSoundEvent("jerry_young_death");
public static final DeferredHolder<SoundEvent, SoundEvent> JERRY_YOUNG_ATTACK = registerSoundEvent("jerry_young_attack");
public static final DeferredHolder<SoundEvent, SoundEvent> JERRY_ADULT_IDLE = registerSoundEvent("jerry_adult_idle");
public static final DeferredHolder<SoundEvent, SoundEvent> JERRY_ADULT_HURT = registerSoundEvent("jerry_adult_hurt");
public static final DeferredHolder<SoundEvent, SoundEvent> JERRY_ADULT_DEATH = registerSoundEvent("jerry_adult_death");
public static final DeferredHolder<SoundEvent, SoundEvent> JERRY_ADULT_ATTACK = registerSoundEvent("jerry_adult_attack");
public static final DeferredHolder<SoundEvent, SoundEvent> CREEPING_HORROR_GROWL = registerSoundEvent("creeping_horror_growl");
@@ -0,0 +1,91 @@
package com.craisinlord.antarchy.fabric.util;
import com.craisinlord.antarchy.content.fluid.AntarchyFluidChecks;
import net.minecraft.core.BlockPos;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.level.material.FluidState;
import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
public final class CustomFluidPhysicsChecks {
private CustomFluidPhysicsChecks() {
}
public static boolean isTouchingAntiwater(Entity entity) {
AABB box = entity.getBoundingBox().inflate(0.05D);
BlockPos min = BlockPos.containing(box.minX, box.minY, box.minZ);
BlockPos max = BlockPos.containing(box.maxX, box.maxY, box.maxZ);
BlockPos.MutableBlockPos cursor = new BlockPos.MutableBlockPos();
for (int x = min.getX(); x <= max.getX(); x++) {
for (int y = min.getY(); y <= max.getY(); y++) {
for (int z = min.getZ(); z <= max.getZ(); z++) {
cursor.set(x, y, z);
FluidState fluidState = entity.level().getFluidState(cursor);
if (AntarchyFluidChecks.isAntiwater(fluidState)) {
return true;
}
}
}
}
return false;
}
public static boolean isTouchingWaterlikeFluid(Entity entity) {
AABB box = entity.getBoundingBox().inflate(0.05D);
BlockPos min = BlockPos.containing(box.minX, box.minY, box.minZ);
BlockPos max = BlockPos.containing(box.maxX, box.maxY, box.maxZ);
BlockPos.MutableBlockPos cursor = new BlockPos.MutableBlockPos();
for (int x = min.getX(); x <= max.getX(); x++) {
for (int y = min.getY(); y <= max.getY(); y++) {
for (int z = min.getZ(); z <= max.getZ(); z++) {
cursor.set(x, y, z);
FluidState fluidState = entity.level().getFluidState(cursor);
if (AntarchyFluidChecks.usesWaterLikePhysics(fluidState)) {
return true;
}
}
}
}
return false;
}
public static Vec3 getAntiwaterFlow(Entity entity) {
return getAverageFlow(entity, true);
}
public static Vec3 getWaterlikeFlow(Entity entity) {
return getAverageFlow(entity, false);
}
private static Vec3 getAverageFlow(Entity entity, boolean antiwater) {
AABB box = entity.getBoundingBox().inflate(0.05D);
BlockPos min = BlockPos.containing(box.minX, box.minY, box.minZ);
BlockPos max = BlockPos.containing(box.maxX, box.maxY, box.maxZ);
BlockPos.MutableBlockPos cursor = new BlockPos.MutableBlockPos();
Vec3 totalFlow = Vec3.ZERO;
int matches = 0;
for (int x = min.getX(); x <= max.getX(); x++) {
for (int y = min.getY(); y <= max.getY(); y++) {
for (int z = min.getZ(); z <= max.getZ(); z++) {
cursor.set(x, y, z);
FluidState fluidState = entity.level().getFluidState(cursor);
boolean matchesFluid = antiwater
? AntarchyFluidChecks.isAntiwater(fluidState)
: AntarchyFluidChecks.usesWaterLikePhysics(fluidState);
if (!matchesFluid) {
continue;
}
totalFlow = totalFlow.add(fluidState.getFlow(entity.level(), cursor));
matches++;
}
}
}
if (matches == 0 || totalFlow.lengthSqr() < 1.0E-6D) {
return Vec3.ZERO;
}
return totalFlow.scale(1.0D / matches);
}
}
@@ -6,6 +6,9 @@
"mixins": [
"AntiwaterLivingEntityMixin",
"AntiwaterItemEntityMixin",
"LivingEntityJumpingAccessor",
"WaterlikeFluidLivingEntityMixin",
"WaterlikeFluidItemEntityMixin",
"AntimetalInversionMixin",
"AntimetalScaffoldingMixin",
"ElytraStartFlyingMixin",
@@ -25,7 +28,7 @@
"client.BrutalflyElytraExperienceBarMixin",
"client.BloodglassChatOrderMixin",
"client.DuctTapeInputMixin",
"client.AntiwaterFogMixin",
"client.LiquidFogMixin",
"client.GravityGunMouseScrollMixin",
"client.KeybindingConflictFixMixin",
"client.CrossbowArmPoseMixin",
@@ -1,10 +1,3 @@
{
"values": [
"antarchy:ichor",
"antarchy:flowing_ichor",
"antarchy:lumen",
"antarchy:flowing_lumen",
"antarchy:bile",
"antarchy:flowing_bile"
]
"values": []
}