Move gravity direction system to Anthology

Gravity API, mixins, projectile compat, inverted effect, gravity sync and
/gravity now live in the Anthology library. Antarchy registers the Underside
region, antiwater, stale-inversion cleanup and portal gun camera roll through
GravityHooks, and depends on the local Anthology jar in anthology_jars/.
This commit is contained in:
craisinlord committed 2026-10-12 15:37:13 -05:00
1 parent 0cad456efd
commit bba2a56671
140 files changed
+570 -4947

No files matched your search

+1
View File
@@ -39,6 +39,7 @@ dependencies {
modApi "net.fabricmc.fabric-api:fabric-api:${fabric_api_version_1_21_1}"
modLocalRuntime "maven.modrinth:midnightlib:${midnightlib}"
modImplementation "software.bernie.geckolib:geckolib-fabric-1.21.1:${geckolib_version}"
modImplementation(files("$rootDir/anthology_jars/anthology-${anthology_version}+1.21.1-fabric.jar"))
modImplementation(files("$rootDir/infinite_dimensions_jars/antos-fabric-1.21.1-${antos_version}.jar"))
if (providers.gradleProperty('antarchySodiumCompatTest').orNull == 'true') {
modLocalRuntime(files("$rootDir/infinite_dimensions_jars/sodium-fabric-0.8.13+mc1.21.1.jar"))
@@ -1,5 +1,6 @@
package com.craisinlord.antarchy.fabric;
import com.craisinlord.anthology.effect.AnthologyEffects;
import com.craisinlord.antarchy.Antarchy;
import com.craisinlord.antarchy.compat.infinity.InfinityCompat;
import com.craisinlord.antarchy.compat.infinity.InfinityConfigRefresh;
@@ -508,7 +509,7 @@ public final class AntarchyFabricContent {
() -> AntarchyFabricItems.STINK_BUG_ITEM.get(),
() -> AntarchyFabricMisc.mobEffectHolder(AntarchyFabricMisc.DREAD),
() -> AntarchyFabricMisc.mobEffectHolder(AntarchyFabricMisc.PARALYZED),
() -> AntarchyFabricMisc.mobEffectHolder(AntarchyFabricMisc.INVERTED),
AnthologyEffects::inverted,
() -> AntarchyFabricMisc.mobEffectHolder(AntarchyFabricMisc.STINKY),
() -> AntarchyFabricBlocks.OURANWOOD_ACORN_BLOCK.get(),
() -> AntarchyFabricBlocks.MOSSY_OURANWOOD_LOG.get(),
@@ -542,10 +543,10 @@ public final class AntarchyFabricContent {
);
LucidEyeProjectileEntity.defaultItemSupplier = () -> AntarchyFabricItems.LUCID_PEARL.get();
LucidEntity.invertedEffectSupplier = () -> AntarchyFabricMisc.mobEffectHolder(AntarchyFabricMisc.INVERTED);
LucidEntity.invertedEffectSupplier = AnthologyEffects::inverted;
LucidEntity.boltEntityTypeSupplier = () -> AntarchyFabricEntities.LUCID_BOLT.get();
LucidBoltEntity.invertedEffectSupplier = () -> AntarchyFabricMisc.mobEffectHolder(AntarchyFabricMisc.INVERTED);
LucidEyeProjectileEntity.invertedEffectSupplier = () -> AntarchyFabricMisc.mobEffectHolder(AntarchyFabricMisc.INVERTED);
LucidBoltEntity.invertedEffectSupplier = AnthologyEffects::inverted;
LucidEyeProjectileEntity.invertedEffectSupplier = AnthologyEffects::inverted;
VortexEntity.windVortexTypeSupplier = () -> AntarchyFabricEntities.WIND_VORTEX.get();
VortexChargeProjectileEntity.defaultItemSupplier = () -> AntarchyFabricItems.VORTEX_CHARGE.get();
VortexChargeProjectileEntity.projectileTypeSupplier = () -> AntarchyFabricEntities.VORTEX_CHARGE_PROJECTILE.get();
@@ -560,7 +561,6 @@ public final class AntarchyFabricContent {
TigerEyeCamouflageSync.setSendToPlayer((player, payload) -> net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking.send(player, payload));
TigerEyeCamouflageSync.setSyncSelfAndTracking(AntarchyFabricNetworking::syncTigerEyeCamouflage);
BloodCrystalKatanaItem.setTrailCallback(AntarchyFabricNetworking::syncKatanaTrail);
com.craisinlord.antarchy.content.gravity.AntarchyGravityApi.setSyncDispatcher(AntarchyFabricNetworking::syncGravityEntity);
com.craisinlord.antarchy.content.time.TimeDilationApi.setSyncDispatcher(
com.craisinlord.antarchy.fabric.network.AntarchyFabricTimeDilationNetworking::syncRate
);
@@ -12,9 +12,9 @@ import com.craisinlord.antarchy.content.item.AttitudeAdjusterSlamManager;
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;
import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection;
import com.craisinlord.antarchy.content.gravity.AntarchyGravityTransition;
import com.craisinlord.anthology.gravity.GravityApi;
import com.craisinlord.anthology.gravity.GravityDirection;
import com.craisinlord.anthology.gravity.GravityTransition;
import com.craisinlord.antarchy.content.horde.CavarynHordeManager;
import com.craisinlord.antarchy.content.portal.PermanentPortalManager;
import com.craisinlord.antarchy.content.portalgun.PortalGunProjectileEntity;
@@ -22,7 +22,6 @@ import com.craisinlord.antarchy.content.portalgun.PortalGunSavedData;
import com.craisinlord.antarchy.content.command.CavarynCommand;
import com.craisinlord.antarchy.content.command.CaterpillarCommand;
import com.craisinlord.antarchy.content.command.DimensionalTearCommand;
import com.craisinlord.antarchy.content.command.GravityCommand;
import com.craisinlord.antarchy.content.command.QueenLocateCommand;
import com.craisinlord.antarchy.content.command.RoyalCommand;
import com.craisinlord.antarchy.content.time.TimeDilationCommand;
@@ -69,7 +68,7 @@ import java.util.Set;
import java.util.UUID;
public final class AntarchyFabricEvents {
private static final AntarchyGravityTransition INVERTED_CLEAR_TRANSITION = new AntarchyGravityTransition(12);
private static final GravityTransition INVERTED_CLEAR_TRANSITION = new GravityTransition(12);
private static final Set<UUID> invertedPlayers = new HashSet<>();
private AntarchyFabricEvents() {
@@ -100,7 +99,6 @@ public final class AntarchyFabricEvents {
});
CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> {
CavarynCommand.register(dispatcher);
GravityCommand.register(dispatcher);
CaterpillarCommand.register(dispatcher);
DimensionalTearCommand.register(dispatcher);
QueenLocateCommand.register(dispatcher);
@@ -324,9 +322,9 @@ public final class AntarchyFabricEvents {
continue;
}
if (AntarchyGravityApi.getGravityDirection(player) == AntarchyGravityDirection.UP
|| AntarchyGravityApi.isGravityForced(player)) {
AntarchyGravityApi.setGravityDirection(player, AntarchyGravityDirection.DOWN, INVERTED_CLEAR_TRANSITION);
if (GravityApi.getGravityDirection(player) == GravityDirection.UP
|| GravityApi.isGravityForced(player)) {
GravityApi.setGravityDirection(player, GravityDirection.DOWN, INVERTED_CLEAR_TRANSITION);
}
notifyNearbyReveriesOfInversionChange(player);
}
@@ -24,6 +24,7 @@ public final class AntarchyFabricClient implements ClientModInitializer {
@Override
public void onInitializeClient() {
com.craisinlord.antarchy.Antarchy.physicalClient = true;
com.craisinlord.antarchy.content.movement.AntarchyGravityHooks.registerClient();
ModelLoadingPlugin.register(plugin -> plugin.addModels(SeparateLargeItemModels.all()));
ClientTickEvents.END_CLIENT_TICK.register(client -> QueenMusicHandler.tick(client, AntarchyFabricSounds.THE_QUEEN.get()));
AntarchyFabricClientNetworking.register();
@@ -4,8 +4,8 @@ import com.craisinlord.antarchy.content.entity.multipart.MultipartEntityOwner;
import com.craisinlord.antarchy.content.entity.multipart.MultipartFramework;
import com.craisinlord.antarchy.content.entity.multipart.MultipartPartAccess;
import com.craisinlord.antarchy.content.entity.multipart.MultipartPartDefinition;
import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi;
import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil;
import com.craisinlord.anthology.gravity.GravityApi;
import com.craisinlord.anthology.gravity.GravityRotationUtil;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult;
@@ -66,13 +66,13 @@ public class MultipartPartEntity extends Entity implements MultipartPartAccess {
return;
}
AntarchyGravityApi.applySyncedState(
GravityApi.applySyncedState(
this,
AntarchyGravityApi.getGravityDirection(parent),
AntarchyGravityApi.getPrevGravityDirection(parent),
AntarchyGravityApi.isGravityForced(parent),
AntarchyGravityApi.getTransitionDuration(parent),
AntarchyGravityApi.getTransitionRemaining(parent)
GravityApi.getGravityDirection(parent),
GravityApi.getPrevGravityDirection(parent),
GravityApi.isGravityForced(parent),
GravityApi.getTransitionDuration(parent),
GravityApi.getTransitionRemaining(parent)
);
double oldX = this.getX();
@@ -85,7 +85,7 @@ public class MultipartPartEntity extends Entity implements MultipartPartAccess {
forward.x * definition.forwardOffset() + right.x * definition.lateralOffset(),
definition.yOffset(),
forward.z * definition.forwardOffset() + right.z * definition.lateralOffset());
Vec3 offset = AntarchyGravityRotationUtil.vecPlayerToWorld(localOffset, AntarchyGravityApi.getGravityDirection(parent));
Vec3 offset = GravityRotationUtil.vecPlayerToWorld(localOffset, GravityApi.getGravityDirection(parent));
Vec3 position = parent.position().add(offset);
this.setPos(position.x, position.y, position.z);
this.setYRot(parent.getYRot());
@@ -2,9 +2,9 @@ package com.craisinlord.antarchy.fabric.mixin;
import com.craisinlord.antarchy.content.AntarchyObjects;
import com.craisinlord.antarchy.content.AntarchyTags;
import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi;
import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection;
import com.craisinlord.antarchy.content.gravity.AntarchyGravityTransition;
import com.craisinlord.anthology.gravity.GravityApi;
import com.craisinlord.anthology.gravity.GravityDirection;
import com.craisinlord.anthology.gravity.GravityTransition;
import net.minecraft.core.BlockPos;
import net.minecraft.core.particles.DustParticleOptions;
import net.minecraft.server.level.ServerLevel;
@@ -65,7 +65,7 @@ public abstract class AntimetalInversionMixin {
LivingEntity entity = (LivingEntity) (Object) this;
if (entity.level().isClientSide()) return;
if (!effectInstance.is(AntarchyObjects.INVERTED_EFFECT.get())) return;
AntarchyGravityApi.setGravityDirection(entity, AntarchyGravityDirection.DOWN, new AntarchyGravityTransition(12));
GravityApi.setGravityDirection(entity, GravityDirection.DOWN, new GravityTransition(12));
}
private static void antarchy$spawnInversionParticles(LivingEntity entity) {
@@ -1,9 +1,9 @@
package com.craisinlord.antarchy.fabric.mixin;
import com.craisinlord.antarchy.content.AntarchyObjects;
import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi;
import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection;
import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil;
import com.craisinlord.anthology.gravity.GravityApi;
import com.craisinlord.anthology.gravity.GravityDirection;
import com.craisinlord.anthology.gravity.GravityRotationUtil;
import com.craisinlord.antarchy.fabric.util.CustomFluidPhysicsChecks;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.MoverType;
@@ -38,9 +38,9 @@ public abstract class AntiwaterLivingEntityMixin {
motion = new Vec3(motion.x, 0.2D, motion.z);
}
AntarchyGravityDirection gravityDirection = antarchy$getEffectiveGravityDirection(entity);
GravityDirection gravityDirection = antarchy$getEffectiveGravityDirection(entity);
Vec3 worldMotion = gravityDirection.isInverted()
? AntarchyGravityRotationUtil.vecPlayerToWorld(motion, gravityDirection)
? GravityRotationUtil.vecPlayerToWorld(motion, gravityDirection)
: motion;
double drag = entity.isSwimming() ? 0.9D : 0.8D;
@@ -56,7 +56,7 @@ public abstract class AntiwaterLivingEntityMixin {
entity.setDeltaMovement(
gravityDirection.isInverted()
? AntarchyGravityRotationUtil.vecWorldToPlayer(worldMotion, gravityDirection)
? GravityRotationUtil.vecWorldToPlayer(worldMotion, gravityDirection)
: worldMotion
);
@@ -68,7 +68,7 @@ public abstract class AntiwaterLivingEntityMixin {
Vec3 boostedWorldMotion = new Vec3(worldMotion.x, 0.3D, worldMotion.z);
entity.setDeltaMovement(
gravityDirection.isInverted()
? AntarchyGravityRotationUtil.vecWorldToPlayer(boostedWorldMotion, gravityDirection)
? GravityRotationUtil.vecWorldToPlayer(boostedWorldMotion, gravityDirection)
: boostedWorldMotion
);
}
@@ -76,12 +76,12 @@ public abstract class AntiwaterLivingEntityMixin {
ci.cancel();
}
private AntarchyGravityDirection antarchy$getEffectiveGravityDirection(LivingEntity entity) {
AntarchyGravityDirection gravityDirection = AntarchyGravityApi.getGravityDirection(entity);
private GravityDirection antarchy$getEffectiveGravityDirection(LivingEntity entity) {
GravityDirection gravityDirection = GravityApi.getGravityDirection(entity);
if (gravityDirection.isInverted() || !entity.hasEffect(AntarchyObjects.INVERTED_EFFECT.get())) {
return gravityDirection;
}
return AntarchyGravityDirection.UP;
return GravityDirection.UP;
}
}
@@ -1,6 +1,6 @@
package com.craisinlord.antarchy.fabric.mixin;
import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi;
import com.craisinlord.anthology.gravity.GravityApi;
import com.craisinlord.antarchy.content.enchantment.AntarchyEnchantments;
import com.craisinlord.antarchy.content.item.SpringyBootsItem;
import com.craisinlord.antarchy.fabric.util.SpringyBootsFabricHelper;
@@ -21,7 +21,7 @@ public abstract class SpringyBootsFallDamageMixin {
if (!(self instanceof Player player)) {
return;
}
if (!AntarchyGravityApi.isGravityInverted(player)) {
if (!GravityApi.isGravityInverted(player)) {
return;
}
if (AntarchyEnchantments.featherRisingLevel(player) <= 0) {
@@ -47,8 +47,6 @@ public final class AntarchyFabricClientNetworking {
com.craisinlord.antarchy.content.portalgun.PortalGunMoonAimSync.setClientReporter(com.craisinlord.antarchy.content.client.MoonSkyTracker::report);
ClientPlayNetworking.registerGlobalReceiver(PortalGunIndicatorPayload.TYPE, (payload, context) ->
context.client().execute(() -> com.craisinlord.antarchy.content.client.PortalGunIndicatorClientState.update(payload)));
ClientPlayNetworking.registerGlobalReceiver(GravityStatePayload.TYPE, (payload, context) ->
context.client().execute(() -> AntarchyFabricNetworking.handleGravityState(context.player(), payload)));
ClientPlayNetworking.registerGlobalReceiver(BloodglassStatePayload.TYPE, (payload, context) ->
context.client().execute(() -> BloodglassClientState.update(payload.shieldsActive(), payload.shieldsMax())));
ClientPlayNetworking.registerGlobalReceiver(TigerEyeCamouflageStatePayload.TYPE, (payload, context) ->
@@ -6,7 +6,6 @@ import com.craisinlord.antarchy.content.entity.multipart.MultipartEntityOwner;
import com.craisinlord.antarchy.content.entity.multipart.MultipartFramework;
import com.craisinlord.antarchy.content.entity.multipart.network.MultipartAttackPayload;
import com.craisinlord.antarchy.content.entity.multipart.network.MultipartInteractPayload;
import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi;
import com.craisinlord.antarchy.content.entity.HerculesBeetleEntity;
import com.craisinlord.antarchy.content.item.BrutalflyElytraFlightHelper;
import com.craisinlord.antarchy.content.item.BrutalflyElytraItem;
@@ -75,7 +74,6 @@ public final class AntarchyFabricNetworking {
private static void registerPayloadTypes() {
PayloadTypeRegistry.playS2C().register(AntarchyGameResultPayload.TYPE, AntarchyGameResultPayload.STREAM_CODEC);
PayloadTypeRegistry.playS2C().register(PortalGunIndicatorPayload.TYPE, PortalGunIndicatorPayload.STREAM_CODEC);
PayloadTypeRegistry.playS2C().register(GravityStatePayload.TYPE, GravityStatePayload.STREAM_CODEC);
PayloadTypeRegistry.playS2C().register(BloodglassStatePayload.TYPE, BloodglassStatePayload.STREAM_CODEC);
PayloadTypeRegistry.playS2C().register(TigerEyeCamouflageStatePayload.TYPE, TigerEyeCamouflageStatePayload.STREAM_CODEC);
PayloadTypeRegistry.playS2C().register(BloodCrystalKatanaTrailPayload.TYPE, BloodCrystalKatanaTrailPayload.STREAM_CODEC);
@@ -186,35 +184,6 @@ public final class AntarchyFabricNetworking {
context.server().execute(() -> handleMultipartInteract(context.player(), payload)));
}
public static void syncGravityToPlayer(ServerPlayer target, Entity entity) {
ServerPlayNetworking.send(target, new GravityStatePayload(
entity.getId(),
AntarchyGravityApi.getGravityDirection(entity),
AntarchyGravityApi.getPrevGravityDirection(entity),
AntarchyGravityApi.isGravityForced(entity),
AntarchyGravityApi.getTransitionDuration(entity),
AntarchyGravityApi.getTransitionRemaining(entity)
));
}
public static void syncGravityEntity(Entity entity) {
GravityStatePayload payload = new GravityStatePayload(
entity.getId(),
AntarchyGravityApi.getGravityDirection(entity),
AntarchyGravityApi.getPrevGravityDirection(entity),
AntarchyGravityApi.isGravityForced(entity),
AntarchyGravityApi.getTransitionDuration(entity),
AntarchyGravityApi.getTransitionRemaining(entity)
);
for (ServerPlayer player : PlayerLookup.tracking(entity)) {
ServerPlayNetworking.send(player, payload);
}
if (entity instanceof ServerPlayer player) {
ServerPlayNetworking.send(player, payload);
}
}
public static void syncBloodglass(ServerPlayer player, int shieldsActive, int shieldsMax) {
ServerPlayNetworking.send(player, new BloodglassStatePayload(shieldsActive, shieldsMax));
}
@@ -253,24 +222,6 @@ public final class AntarchyFabricNetworking {
ServerPlayNetworking.send(player, payload);
}
public static void handleGravityState(Entity contextPlayer, GravityStatePayload payload) {
Entity entity = contextPlayer.level().getEntity(payload.entityId());
if (entity == null && contextPlayer.getId() == payload.entityId()) {
entity = contextPlayer;
}
if (entity == null) {
return;
}
AntarchyGravityApi.applySyncedState(
entity,
payload.direction(),
payload.previousDirection(),
payload.forced(),
payload.transitionDuration(),
payload.transitionRemaining()
);
}
private static void handleGravityGunPrimary(ServerPlayer player, GravityGunPrimaryPayload payload) {
if (!(player.getMainHandItem().getItem() instanceof GravityGunItem gravityGunItem)) {
return;
@@ -1,5 +1,6 @@
package com.craisinlord.antarchy.fabric.registry;
import com.craisinlord.anthology.effect.AnthologyEffects;
import com.craisinlord.antarchy.Antarchy;
import com.craisinlord.antarchy.config.AntarchySettings;
import com.craisinlord.antarchy.content.recipe.AmericanizeRecipe;
@@ -31,7 +32,6 @@ import com.craisinlord.antarchy.content.effect.BleedingMobEffect;
import com.craisinlord.antarchy.content.effect.BloodMoonMobEffect;
import com.craisinlord.antarchy.content.effect.GoopedMobEffect;
import com.craisinlord.antarchy.content.effect.GrowthMobEffect;
import com.craisinlord.antarchy.content.effect.InvertedMobEffect;
import com.craisinlord.antarchy.content.effect.CommandedMobEffect;
import com.craisinlord.antarchy.content.effect.DilatedMobEffect;
import com.craisinlord.antarchy.content.effect.ContractedMobEffect;
@@ -457,7 +457,6 @@ public final class AntarchyFabricMisc {
public static final DeferredHolder<MobEffect, ParalyzedMobEffect> PARALYZED = MOB_EFFECTS.register("paralyzed", ParalyzedMobEffect::new);
public static final DeferredHolder<MobEffect, InvertedMobEffect> INVERTED = MOB_EFFECTS.register("inverted", InvertedMobEffect::new);
public static final DeferredHolder<MobEffect, CommandedMobEffect> COMMANDED = MOB_EFFECTS.register("commanded", CommandedMobEffect::new);
public static final DeferredHolder<MobEffect, DilatedMobEffect> DILATED = MOB_EFFECTS.register("dilated", DilatedMobEffect::new);
@@ -490,11 +489,11 @@ public final class AntarchyFabricMisc {
public static final DeferredHolder<Potion, Potion> INVERSION = POTIONS.register("inversion",
() -> new Potion(new MobEffectInstance(mobEffectHolder(INVERTED), 600)));
() -> new Potion(new MobEffectInstance(AnthologyEffects.inverted(), 600)));
public static final DeferredHolder<Potion, Potion> LONG_INVERSION = POTIONS.register("long_inversion",
() -> new Potion("inversion", new MobEffectInstance(mobEffectHolder(INVERTED), 2400)));
() -> new Potion("inversion", new MobEffectInstance(AnthologyEffects.inverted(), 2400)));
public static final DeferredHolder<Potion, Potion> COMMAND = POTIONS.register("command",
() -> new Potion(new MobEffectInstance(mobEffectHolder(COMMANDED), 600)));
public static final DeferredHolder<Potion, Potion> LONG_COMMAND = POTIONS.register("long_command",
@@ -33,6 +33,7 @@
],
"depends": {
"antos": ">=1.2.1",
"anthology": ">=1.0.0",
"fabricloader": ">=${fabric_loader_version}",
"minecraft": "~${minecraft_version}",
"java": ">=21",