From bba2a5667175298850fc0a6773953fc1cf958f87 Mon Sep 17 00:00:00 2001 From: craisinlord Date: Mon, 12 Oct 2026 15:37:13 -0500 Subject: [PATCH 1/2] 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/. --- .../com/craisinlord/antarchy/Antarchy.java | 2 + .../block/AntimetalScaffoldingBlock.java | 4 +- .../block/entity/PotentNyxiteBlockEntity.java | 12 +- .../client/PortalGunClientTransit.java | 6 +- .../content/command/GravityCommand.java | 75 ---- .../content/effect/InvertedMobEffect.java | 49 --- .../content/entity/AlphaMantisEntity.java | 14 +- .../content/entity/AppleCowEntity.java | 14 +- .../antarchy/content/entity/BedBugEntity.java | 12 +- .../antarchy/content/entity/BomberEntity.java | 14 +- .../content/entity/ButterflyEntity.java | 8 +- .../content/entity/CrawlingBlightEntity.java | 14 +- .../antarchy/content/entity/DorrieEntity.java | 16 +- .../content/entity/EmperorScorpionEntity.java | 46 +-- .../content/entity/HerculesBeetleEntity.java | 16 +- .../content/entity/HoverboardEntity.java | 16 +- .../antarchy/content/entity/JerryEntity.java | 14 +- .../content/entity/ManticoreEntity.java | 10 +- .../content/entity/MissileSquidEntity.java | 22 +- .../content/entity/MolevoreEntity.java | 16 +- .../content/entity/OctopusBombEntity.java | 8 +- .../content/entity/OuranwoodDeerEntity.java | 12 +- .../content/entity/ReverieEntity.java | 16 +- .../content/entity/RollyPollyEntity.java | 16 +- .../content/entity/ScorpionEntity.java | 12 +- .../content/entity/SpitBugEntity.java | 12 +- .../content/entity/SpringbugEntity.java | 18 +- .../antarchy/content/entity/WaspEntity.java | 12 +- .../entity/brutalfly/BrutalflyEntity.java | 10 +- .../entity/nightmare/NightmareBiteEntity.java | 18 +- .../entity/nightmare/NightmareEntity.java | 30 +- .../content/entity/royal/KingEntity.java | 34 +- .../content/entity/royal/QueenEntity.java | 56 +-- .../content/entity/royal/RoyalBossEntity.java | 30 +- .../entity/stratoshark/StratosharkEntity.java | 16 +- .../content/entity/vortex/VortexEntity.java | 8 +- .../entity/vortex/WindVortexEntity.java | 14 +- .../gravity/AntarchyGravityAccess.java | 25 -- .../content/gravity/AntarchyGravityApi.java | 238 ----------- .../gravity/AntarchyGravityDirection.java | 44 --- .../gravity/AntarchyGravityRotationUtil.java | 140 ------- .../gravity/AntarchyGravityTransition.java | 9 - .../gravity/AntarchyMountedGravityHelper.java | 74 ---- .../gravity/GravityWalkNodeEvaluator.java | 214 ---------- .../gravity/ProjectileLaunchGravity.java | 13 - .../gravity/ScgunsProjectileAccess.java | 10 - .../item/AntimetalScaffoldingItem.java | 4 +- .../item/AttitudeAdjusterSlamManager.java | 14 +- .../antarchy/content/item/BigBerthaItem.java | 4 +- .../content/item/EyeOfTheStormItem.java | 12 +- .../antarchy/content/item/GravityGunItem.java | 14 +- .../antarchy/content/item/PortalGunItem.java | 8 +- .../content/item/RpoLauncherItem.java | 12 +- .../antarchy/content/item/SquidzookaItem.java | 12 +- .../content/item/WormHookTetherManager.java | 8 +- .../movement/AntarchyGravityHooks.java | 94 +++++ .../content/network/GravityStatePayload.java | 52 --- .../portalgun/PortalGunPortalEntity.java | 10 +- .../portalgun/PortalGunProjectileEntity.java | 8 +- .../portalgun/PortalGunTransitMath.java | 18 +- .../thoraxis/ThoraxisUndersideManager.java | 64 ++- .../mixins/AntarchyRangedAttackPatcher.java | 2 +- .../mixins/DreamSandLowGravityMixin.java | 6 +- .../AlexsCavesCandyCaneHookMixin.java | 54 --- .../AlexsCavesDepthChargeMixin.java | 28 -- .../alexscaves/AlexsCavesTephraMixin.java | 27 -- .../alexscaves/AlexsCavesWaterBoltMixin.java | 27 -- .../ArsNouveauProjectileGravityMixin.java | 45 --- ...IronsSpellbooksProjectileGravityMixin.java | 67 ---- .../scguns/ScgunsArrowGravityMixin.java | 28 -- .../ScgunsProjectileEntityAccessMixin.java | 29 -- .../ScgunsProjectileEntityGravityMixin.java | 80 ---- .../gravity/AbstractArrowGravityMixin.java | 28 -- .../gravity/BehaviorUtilsGravityMixin.java | 73 ---- .../gravity/BubbleColumnGravityMixin.java | 33 -- .../gravity/BucketItemGravityMixin.java | 84 ---- .../gravity/CrossbowItemGravityMixin.java | 59 --- .../mixins/gravity/DirectionFacingMixin.java | 36 -- .../gravity/EntityCollisionContextMixin.java | 65 --- .../gravity/EntityGravityFrameMixin.java | 270 ------------- .../mixins/gravity/EntityGravityMixin.java | 320 --------------- .../gravity/EntityMountedGravityMixin.java | 6 +- .../mixins/gravity/EntityMoveMixin.java | 374 ------------------ .../gravity/EntityProjectileGravityMixin.java | 42 -- .../mixins/gravity/ExplosionGravityMixin.java | 42 -- .../gravity/FireworkRocketGravityMixin.java | 29 -- .../gravity/GroundPathNavigationMixin.java | 89 ----- .../mixins/gravity/LivingEntityMixin.java | 297 -------------- .../gravity/MeleeAttackGoalGravityMixin.java | 101 ----- .../antarchy/mixins/gravity/MobHurtMixin.java | 26 -- .../gravity/MoveControlGravityMixin.java | 48 --- .../gravity/PathNavigationAccessor.java | 23 -- .../mixins/gravity/PlayerGravityMixin.java | 91 ----- .../mixins/gravity/PlayerPoseFitMixin.java | 37 -- .../mixins/gravity/PlayerSneakMixin.java | 100 ----- .../gravity/ProjectileGravityMixin.java | 69 ---- .../gravity/RandomStrollGoalGravityMixin.java | 161 -------- .../ServerGamePacketListenerMixin.java | 82 ---- .../gravity/ServerPlayerGravityMixin.java | 116 ------ .../ThrowableProjectileGravityMixin.java | 28 -- .../gravity/client/CameraGravityMixin.java | 93 ----- .../ClientPacketListenerGravityMixin.java | 38 -- .../EntityRenderDispatcherGravityMixin.java | 117 ------ .../resources/antarchy-common.mixins.json | 39 -- .../resources/assets/antarchy/lang/de_de.json | 2 - .../resources/assets/antarchy/lang/en_us.json | 2 - .../resources/assets/antarchy/lang/es_es.json | 2 - .../resources/assets/antarchy/lang/fr_fr.json | 2 - .../resources/assets/antarchy/lang/it_it.json | 2 - .../resources/assets/antarchy/lang/ja_jp.json | 2 - .../resources/assets/antarchy/lang/ko_kr.json | 2 - .../resources/assets/antarchy/lang/pt_br.json | 2 - .../resources/assets/antarchy/lang/ru_ru.json | 2 - .../resources/assets/antarchy/lang/zh_cn.json | 2 - .../resources/assets/antarchy/lang/zh_tw.json | 2 - .../antarchy/textures/mob_effect/inverted.png | Bin 438 -> 0 bytes .../advancement/in_the_upside_down.json | 2 +- fabric-1.21.1/build.gradle | 1 + .../fabric/AntarchyFabricContent.java | 10 +- .../antarchy/fabric/AntarchyFabricEvents.java | 16 +- .../fabric/client/AntarchyFabricClient.java | 1 + .../entity/multipart/MultipartPartEntity.java | 18 +- .../fabric/mixin/AntimetalInversionMixin.java | 8 +- .../mixin/AntiwaterLivingEntityMixin.java | 20 +- .../mixin/SpringyBootsFallDamageMixin.java | 4 +- .../AntarchyFabricClientNetworking.java | 2 - .../network/AntarchyFabricNetworking.java | 49 --- .../fabric/registry/AntarchyFabricMisc.java | 7 +- .../src/main/resources/fabric.mod.json | 1 + gradle.properties | 1 + neoforge-1.21.1/build.gradle | 2 + .../antarchy/neoforge/AntarchyNeoforge.java | 5 +- .../neoforge/AntarchyNeoforgeEvents.java | 2 - .../client/AntarchyNeoForgeClient.java | 1 + .../content/fluid/AntiwaterFluidType.java | 14 +- .../entity/multipart/MultipartPartEntity.java | 18 +- .../network/AntarchyGravityNetworking.java | 54 --- .../registry/AntarchyNeoForgeEvents.java | 33 +- .../registry/AntarchyNeoforgeMisc.java | 7 +- .../resources/META-INF/neoforge.mods.toml | 7 + 140 files changed, 570 insertions(+), 4947 deletions(-) delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/command/GravityCommand.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/effect/InvertedMobEffect.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyGravityAccess.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyGravityApi.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyGravityDirection.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyGravityRotationUtil.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyGravityTransition.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyMountedGravityHelper.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/gravity/GravityWalkNodeEvaluator.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/gravity/ProjectileLaunchGravity.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/gravity/ScgunsProjectileAccess.java create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/movement/AntarchyGravityHooks.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/GravityStatePayload.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/alexscaves/AlexsCavesCandyCaneHookMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/alexscaves/AlexsCavesDepthChargeMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/alexscaves/AlexsCavesTephraMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/alexscaves/AlexsCavesWaterBoltMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/ars_nouveau/ArsNouveauProjectileGravityMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/irons_spellbooks/IronsSpellbooksProjectileGravityMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/scguns/ScgunsArrowGravityMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/scguns/ScgunsProjectileEntityAccessMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/scguns/ScgunsProjectileEntityGravityMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/AbstractArrowGravityMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/BehaviorUtilsGravityMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/BubbleColumnGravityMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/BucketItemGravityMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/CrossbowItemGravityMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/DirectionFacingMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityCollisionContextMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityGravityFrameMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityGravityMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityMoveMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityProjectileGravityMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ExplosionGravityMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/FireworkRocketGravityMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/GroundPathNavigationMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/LivingEntityMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/MeleeAttackGoalGravityMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/MobHurtMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/MoveControlGravityMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/PathNavigationAccessor.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/PlayerGravityMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/PlayerPoseFitMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/PlayerSneakMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ProjectileGravityMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/RandomStrollGoalGravityMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ServerGamePacketListenerMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ServerPlayerGravityMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ThrowableProjectileGravityMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/client/CameraGravityMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/client/ClientPacketListenerGravityMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/client/EntityRenderDispatcherGravityMixin.java delete mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/mob_effect/inverted.png diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/Antarchy.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/Antarchy.java index 72c67f26..17733245 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/Antarchy.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/Antarchy.java @@ -1,6 +1,7 @@ package com.craisinlord.antarchy; import com.craisinlord.antarchy.content.computer.AntarchyArchiveLocators; +import com.craisinlord.antarchy.content.movement.AntarchyGravityHooks; import com.craisinlord.antarchy.content.util.AttributeRangeInit; import com.craisinlord.antarchy.content.worldgen.VillagePoolAdditions; import com.craisinlord.integrated_api.events.lifecycle.ServerGoingToStartEvent; @@ -17,6 +18,7 @@ public class Antarchy { public static void init() { AttributeRangeInit.apply(); AntarchyArchiveLocators.register(); + AntarchyGravityHooks.register(); ServerGoingToStartEvent.EVENT.addListener(Antarchy::serverAboutToStart); } private static void serverAboutToStart(final ServerGoingToStartEvent event) { diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/AntimetalScaffoldingBlock.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/AntimetalScaffoldingBlock.java index f0d3d6ab..408ee9ab 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/AntimetalScaffoldingBlock.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/AntimetalScaffoldingBlock.java @@ -1,7 +1,7 @@ package com.craisinlord.antarchy.content.block; import com.craisinlord.antarchy.content.entity.UpwardFallingBlockEntity; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; +import com.craisinlord.anthology.gravity.GravityApi; import com.mojang.serialization.MapCodec; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -66,7 +66,7 @@ public class AntimetalScaffoldingBlock extends ScaffoldingBlock { public BlockState getStateForPlacement(BlockPlaceContext context) { BlockPos pos = context.getClickedPos(); Level level = context.getLevel(); - boolean inverted = context.getPlayer() != null && AntarchyGravityApi.isGravityInverted(context.getPlayer()); + boolean inverted = context.getPlayer() != null && GravityApi.isGravityInverted(context.getPlayer()); int distance = getDistance(level, pos, inverted); if (inverted && distance >= 7) { return null; diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/entity/PotentNyxiteBlockEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/entity/PotentNyxiteBlockEntity.java index 8c09372d..04b1035d 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/entity/PotentNyxiteBlockEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/entity/PotentNyxiteBlockEntity.java @@ -6,9 +6,9 @@ import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.block.PotentNyxiteBlock; import com.craisinlord.antarchy.content.block.state.PotentNyxiteState; 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.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityDirection; +import com.craisinlord.anthology.gravity.GravityRotationUtil; import com.craisinlord.antarchy.content.client.particle.InvertedGeyserParticleOptions; import java.util.List; import java.util.function.Predicate; @@ -333,9 +333,9 @@ public class PotentNyxiteBlockEntity extends BlockEntity { continue; } - AntarchyGravityDirection gravityDirection = AntarchyGravityApi.getGravityDirection(entity); + GravityDirection gravityDirection = GravityApi.getGravityDirection(entity); Vec3 currentWorldVelocity = gravityDirection.isInverted() - ? AntarchyGravityRotationUtil.vecPlayerToWorld(entity.getDeltaMovement(), gravityDirection) + ? GravityRotationUtil.vecPlayerToWorld(entity.getDeltaMovement(), gravityDirection) : entity.getDeltaMovement(); double axisVelocity = currentWorldVelocity.y * eruptionDirection.getStepY(); @@ -343,7 +343,7 @@ public class PotentNyxiteBlockEntity extends BlockEntity { Vec3 nextWorldVelocity = currentWorldVelocity.add(worldPush); entity.setDeltaMovement( gravityDirection.isInverted() - ? AntarchyGravityRotationUtil.vecWorldToPlayer(nextWorldVelocity, gravityDirection) + ? GravityRotationUtil.vecWorldToPlayer(nextWorldVelocity, gravityDirection) : nextWorldVelocity ); entity.hurtMarked = true; diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunClientTransit.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunClientTransit.java index eb73c736..5cbdec42 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunClientTransit.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunClientTransit.java @@ -1,7 +1,7 @@ package com.craisinlord.antarchy.content.client; import com.craisinlord.antarchy.content.network.PortalGunTransitPayload; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; +import com.craisinlord.anthology.gravity.GravityApi; import com.craisinlord.antarchy.content.portalgun.PortalGunPortalEntity; import com.craisinlord.antarchy.content.portalgun.PortalGunTransformUtil; import com.craisinlord.antarchy.content.portalgun.PortalGunTransitMath; @@ -34,7 +34,7 @@ public final class PortalGunClientTransit { if (connection == null) { return; } - Vec3 crossingVelocity = AntarchyGravityApi.isGravityInverted(player) + Vec3 crossingVelocity = GravityApi.isGravityInverted(player) ? PortalGunTransitMath.entityVelocityToWorld(player, velocity) : velocity; for (PortalGunPortalEntity portal : PortalGunPortalEntity.findPortalsNearBounds(player.level(), startBox.minmax(currentBox).expandTowards(crossingVelocity).inflate(1.0D))) { @@ -49,7 +49,7 @@ public final class PortalGunClientTransit { connection.send(new ServerboundCustomPayloadPacket(new PortalGunTransitPayload( portal.getId(), PortalGunTransitMath.entityPosition(startBox, player), player.position(), velocity))); PortalGunPortalEntity.PortalTransit transit = portal.computeTransit(player, linked, currentBox, velocity, look); - Vec3 rollLook = AntarchyGravityApi.isGravityInverted(player) + Vec3 rollLook = GravityApi.isGravityInverted(player) ? PortalGunTransitMath.entityVelocityToWorld(player, look) : look; PortalGunRollClientState.onTransit(portal, linked, rollLook); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/command/GravityCommand.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/command/GravityCommand.java deleted file mode 100644 index df009da1..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/command/GravityCommand.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.craisinlord.antarchy.content.command; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityTransition; -import com.mojang.brigadier.CommandDispatcher; -import com.mojang.brigadier.context.CommandContext; -import java.util.Collection; -import net.minecraft.commands.CommandSourceStack; -import net.minecraft.commands.Commands; -import net.minecraft.commands.arguments.EntityArgument; -import net.minecraft.network.chat.Component; -import net.minecraft.world.entity.Entity; - -public final class GravityCommand { - private static final AntarchyGravityTransition COMMAND_TRANSITION = new AntarchyGravityTransition(12); - - private GravityCommand() { - } - - public static void register(CommandDispatcher dispatcher) { - dispatcher.register( - Commands.literal("gravity") - .requires(source -> source.hasPermission(2)) - .then(Commands.literal("get") - .then(Commands.argument("targets", EntityArgument.entities()) - .executes(context -> getGravity(context, EntityArgument.getEntities(context, "targets"))))) - .then(Commands.literal("set") - .then(Commands.argument("targets", EntityArgument.entities()) - .then(Commands.literal("down") - .executes(context -> setGravity(context, EntityArgument.getEntities(context, "targets"), AntarchyGravityDirection.DOWN))) - .then(Commands.literal("up") - .executes(context -> setGravity(context, EntityArgument.getEntities(context, "targets"), AntarchyGravityDirection.UP))))) - .then(Commands.literal("clear") - .then(Commands.argument("targets", EntityArgument.entities()) - .executes(context -> clearGravity(context, EntityArgument.getEntities(context, "targets"))))) - ); - } - - private static int getGravity(CommandContext context, Collection targets) { - for (Entity target : targets) { - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(target); - context.getSource().sendSuccess( - () -> Component.literal(target.getName().getString() + ": " + direction.getSerializedName()), - false - ); - } - - return targets.size(); - } - - private static int setGravity(CommandContext context, Collection targets, AntarchyGravityDirection direction) { - for (Entity target : targets) { - AntarchyGravityApi.setGravityDirection(target, direction, COMMAND_TRANSITION); - } - - context.getSource().sendSuccess( - () -> Component.literal("Set gravity " + direction.getSerializedName() + " for " + targets.size() + " target(s)"), - true - ); - return targets.size(); - } - - private static int clearGravity(CommandContext context, Collection targets) { - for (Entity target : targets) { - AntarchyGravityApi.setGravityDirection(target, AntarchyGravityDirection.DOWN, COMMAND_TRANSITION); - } - - context.getSource().sendSuccess( - () -> Component.literal("Reset gravity for " + targets.size() + " target(s)"), - true - ); - return targets.size(); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/effect/InvertedMobEffect.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/effect/InvertedMobEffect.java deleted file mode 100644 index e9175ed5..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/effect/InvertedMobEffect.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.craisinlord.antarchy.content.effect; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityTransition; -import net.minecraft.world.effect.MobEffect; -import net.minecraft.world.effect.MobEffectCategory; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.EntityType; - -public final class InvertedMobEffect extends MobEffect { - private static final AntarchyGravityTransition EFFECT_TRANSITION = new AntarchyGravityTransition(12); - - public InvertedMobEffect() { - super(MobEffectCategory.HARMFUL, 0x8B0000); - } - - - @Override - public boolean applyEffectTick(LivingEntity entity, int amplifier) { - // Vex flight steering is authored around vanilla gravity and ground contact. Rotating its - // gravity frame makes the native flight controller drive it into terrain. - if (entity.getType() == EntityType.VEX) { - if (!entity.level().isClientSide()) { - AntarchyGravityApi.clearForcedGravity(entity); - } - return true; - } - if (!entity.level().isClientSide()) { - if (AntarchyGravityApi.getGravityDirection(entity) != AntarchyGravityDirection.UP || !AntarchyGravityApi.isGravityForced(entity)) { - AntarchyGravityApi.setForcedGravityDirection(entity, AntarchyGravityDirection.UP, EFFECT_TRANSITION); - } - } else { - // Mob effects are synced by vanilla, so this fires on the client too. - // If the gravity state hasn't been applied yet , apply it directly without position adjustment. - if (!AntarchyGravityApi.isGravityInverted(entity)) { - AntarchyGravityApi.applySyncedState(entity, AntarchyGravityDirection.UP, AntarchyGravityDirection.UP, true, 0, 0); - } - } - return true; - } - - - @Override - public boolean shouldApplyEffectTickThisTick(int duration, int amplifier) { - return true; - } - -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/AlphaMantisEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/AlphaMantisEntity.java index ebbdc864..8f3d93ec 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/AlphaMantisEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/AlphaMantisEntity.java @@ -4,9 +4,9 @@ import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.AntarchyTags; import com.craisinlord.antarchy.content.boss.BossCombatUtil; -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 net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; @@ -477,15 +477,15 @@ public class AlphaMantisEntity extends MantisEntity { } } - private AntarchyGravityDirection gravityDirection() { - return AntarchyGravityApi.getGravityDirection(this); + private GravityDirection gravityDirection() { + return GravityApi.getGravityDirection(this); } private Vec3 toLocal(Vec3 worldVector) { - return AntarchyGravityRotationUtil.vecWorldToPlayer(worldVector, this.gravityDirection()); + return GravityRotationUtil.vecWorldToPlayer(worldVector, this.gravityDirection()); } private Vec3 toWorld(double x, double y, double z) { - return AntarchyGravityRotationUtil.vecPlayerToWorld(x, y, z, this.gravityDirection()); + return GravityRotationUtil.vecPlayerToWorld(x, y, z, this.gravityDirection()); } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/AppleCowEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/AppleCowEntity.java index 78b7fde3..865ea6c3 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/AppleCowEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/AppleCowEntity.java @@ -1,8 +1,8 @@ package com.craisinlord.antarchy.content.entity; -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 net.minecraft.nbt.CompoundTag; import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.EntityDataSerializers; @@ -334,16 +334,16 @@ public abstract class AppleCowEntity extends Cow implements GeoEntity, Shearable this.setDeltaMovement(this.toWorld(0.0D, motion.y < 0.0D ? motion.y : 0.0D, 0.0D)); } - private AntarchyGravityDirection gravityDirection() { - return AntarchyGravityApi.getGravityDirection(this); + private GravityDirection gravityDirection() { + return GravityApi.getGravityDirection(this); } private Vec3 toLocal(Vec3 worldVector) { - return AntarchyGravityRotationUtil.vecWorldToPlayer(worldVector, this.gravityDirection()); + return GravityRotationUtil.vecWorldToPlayer(worldVector, this.gravityDirection()); } private Vec3 toWorld(double x, double y, double z) { - return AntarchyGravityRotationUtil.vecPlayerToWorld(x, y, z, this.gravityDirection()); + return GravityRotationUtil.vecPlayerToWorld(x, y, z, this.gravityDirection()); } private int randomNapCooldown() { diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/BedBugEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/BedBugEntity.java index 114e1a1b..b46a45f6 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/BedBugEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/BedBugEntity.java @@ -5,9 +5,9 @@ import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.block.BedBugEggBlock; import com.craisinlord.antarchy.content.damage.AntarchyDamageSources; -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 net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.server.level.ServerLevel; @@ -394,15 +394,15 @@ public class BedBugEntity extends Animal implements GeoEntity { } private void commitLunge(LivingEntity target, double horizontalSpeed, double verticalSpeed) { - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(this); - Vec3 localLunge = AntarchyGravityRotationUtil.vecWorldToPlayer(target.position().subtract(this.position()), direction); + GravityDirection direction = GravityApi.getGravityDirection(this); + Vec3 localLunge = GravityRotationUtil.vecWorldToPlayer(target.position().subtract(this.position()), direction); Vec3 horizontal = new Vec3(localLunge.x, 0.0D, localLunge.z); if (horizontal.lengthSqr() < 1.0E-4D) { return; } horizontal = horizontal.normalize().scale(horizontalSpeed); Vec3 localImpulse = new Vec3(horizontal.x, verticalSpeed, horizontal.z); - Vec3 worldImpulse = AntarchyGravityRotationUtil.vecPlayerToWorld(localImpulse, direction); + Vec3 worldImpulse = GravityRotationUtil.vecPlayerToWorld(localImpulse, direction); this.setDeltaMovement(this.getDeltaMovement().add(worldImpulse.x, worldImpulse.y, worldImpulse.z)); this.hasImpulse = true; } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/BomberEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/BomberEntity.java index cd32bc2f..02ce3d51 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/BomberEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/BomberEntity.java @@ -2,9 +2,9 @@ package com.craisinlord.antarchy.content.entity; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchySoundEvents; -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 java.util.Objects; import net.minecraft.core.BlockPos; import net.minecraft.core.particles.ParticleTypes; @@ -352,16 +352,16 @@ public class BomberEntity extends Monster implements GeoEntity { return this.toLocal(this.getDeltaMovement()).horizontalDistanceSqr() > 1.0E-4D || this.getNavigation().isInProgress(); } - private AntarchyGravityDirection gravityDirection() { - return AntarchyGravityApi.getGravityDirection(this); + private GravityDirection gravityDirection() { + return GravityApi.getGravityDirection(this); } private Vec3 toLocal(Vec3 worldVector) { - return AntarchyGravityRotationUtil.vecWorldToPlayer(worldVector, this.gravityDirection()); + return GravityRotationUtil.vecWorldToPlayer(worldVector, this.gravityDirection()); } private Vec3 toWorld(double x, double y, double z) { - return AntarchyGravityRotationUtil.vecPlayerToWorld(x, y, z, this.gravityDirection()); + return GravityRotationUtil.vecPlayerToWorld(x, y, z, this.gravityDirection()); } private Vec3 toLocalPlane(Vec3 worldVector) { diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ButterflyEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ButterflyEntity.java index 44848ad8..24597343 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ButterflyEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ButterflyEntity.java @@ -5,8 +5,8 @@ import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.AntarchyTags; import com.craisinlord.antarchy.content.AntarchySoundEvents; -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 java.util.EnumSet; import java.util.Optional; import java.util.function.Predicate; @@ -184,7 +184,7 @@ public class ButterflyEntity extends Animal implements FlyingAnimal, GeoEntity { FlyingPathNavigation navigation = new FlyingPathNavigation(this, level) { @Override public boolean isStableDestination(BlockPos pos) { - BlockPos support = AntarchyGravityApi.isGravityInverted(ButterflyEntity.this) ? pos.above() : pos.below(); + BlockPos support = GravityApi.isGravityInverted(ButterflyEntity.this) ? pos.above() : pos.below(); return !this.level.getBlockState(support).isAir(); } @@ -432,7 +432,7 @@ public class ButterflyEntity extends Animal implements FlyingAnimal, GeoEntity { @Override protected void jumpInLiquid(net.minecraft.tags.TagKey fluidTag) { - this.setDeltaMovement(this.getDeltaMovement().add(AntarchyGravityRotationUtil.vecPlayerToWorld(0.0D, 0.01D, 0.0D, AntarchyGravityApi.getGravityDirection(this)))); + this.setDeltaMovement(this.getDeltaMovement().add(GravityRotationUtil.vecPlayerToWorld(0.0D, 0.01D, 0.0D, GravityApi.getGravityDirection(this)))); } @Override diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/CrawlingBlightEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/CrawlingBlightEntity.java index 86b48eec..5ad3a701 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/CrawlingBlightEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/CrawlingBlightEntity.java @@ -2,9 +2,9 @@ package com.craisinlord.antarchy.content.entity; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchySoundEvents; -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 net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.util.RandomSource; @@ -228,16 +228,16 @@ public class CrawlingBlightEntity extends Monster implements GeoEntity { } } - private AntarchyGravityDirection gravityDirection() { - return AntarchyGravityApi.getGravityDirection(this); + private GravityDirection gravityDirection() { + return GravityApi.getGravityDirection(this); } private Vec3 toLocal(Vec3 worldVector) { - return AntarchyGravityRotationUtil.vecWorldToPlayer(worldVector, this.gravityDirection()); + return GravityRotationUtil.vecWorldToPlayer(worldVector, this.gravityDirection()); } private Vec3 toWorld(double x, double y, double z) { - return AntarchyGravityRotationUtil.vecPlayerToWorld(x, y, z, this.gravityDirection()); + return GravityRotationUtil.vecPlayerToWorld(x, y, z, this.gravityDirection()); } @Override diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/DorrieEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/DorrieEntity.java index fc49ecb3..900e6541 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/DorrieEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/DorrieEntity.java @@ -1,9 +1,9 @@ package com.craisinlord.antarchy.content.entity; import com.craisinlord.antarchy.config.AntarchySettings; -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 java.util.EnumSet; import java.util.List; import net.minecraft.core.BlockPos; @@ -768,20 +768,20 @@ public class DorrieEntity extends Animal implements GeoEntity { || this.getNavigation().isInProgress(); } - private AntarchyGravityDirection gravityDirection() { - return AntarchyGravityApi.getGravityDirection(this); + private GravityDirection gravityDirection() { + return GravityApi.getGravityDirection(this); } private Vec3 toLocal(Vec3 worldVector) { - return AntarchyGravityRotationUtil.vecWorldToPlayer(worldVector, this.gravityDirection()); + return GravityRotationUtil.vecWorldToPlayer(worldVector, this.gravityDirection()); } private Vec3 toWorld(Vec3 localVector) { - return AntarchyGravityRotationUtil.vecPlayerToWorld(localVector, this.gravityDirection()); + return GravityRotationUtil.vecPlayerToWorld(localVector, this.gravityDirection()); } private Vec3 toWorld(double x, double y, double z) { - return AntarchyGravityRotationUtil.vecPlayerToWorld(x, y, z, this.gravityDirection()); + return GravityRotationUtil.vecPlayerToWorld(x, y, z, this.gravityDirection()); } private Vec3 toLocalPlane(Vec3 worldVector) { diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/EmperorScorpionEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/EmperorScorpionEntity.java index e55c2edf..aab28e06 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/EmperorScorpionEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/EmperorScorpionEntity.java @@ -6,9 +6,9 @@ import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.boss.BossCombatUtil; import com.craisinlord.antarchy.content.damage.AntarchyDamageSources; -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.content.worldgen.thoraxis.ThoraxisUndersideManager; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -428,9 +428,9 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { } } case ACTIVE -> { - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(this); - Vec3 motion = AntarchyGravityRotationUtil.vecWorldToPlayer(this.getDeltaMovement(), direction); - this.setDeltaMovement(AntarchyGravityRotationUtil.vecPlayerToWorld(0.0D, motion.y, 0.0D, direction)); + GravityDirection direction = GravityApi.getGravityDirection(this); + Vec3 motion = GravityRotationUtil.vecWorldToPlayer(this.getDeltaMovement(), direction); + this.setDeltaMovement(GravityRotationUtil.vecPlayerToWorld(0.0D, motion.y, 0.0D, direction)); if (--this.hardenDurationTicks <= 0) { this.beginHardeningEnd(); return; @@ -441,9 +441,9 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { } } case END -> { - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(this); - Vec3 motion = AntarchyGravityRotationUtil.vecWorldToPlayer(this.getDeltaMovement(), direction); - this.setDeltaMovement(AntarchyGravityRotationUtil.vecPlayerToWorld(0.0D, motion.y, 0.0D, direction)); + GravityDirection direction = GravityApi.getGravityDirection(this); + Vec3 motion = GravityRotationUtil.vecWorldToPlayer(this.getDeltaMovement(), direction); + this.setDeltaMovement(GravityRotationUtil.vecPlayerToWorld(0.0D, motion.y, 0.0D, direction)); if (--this.hardenStateTicks <= 0) { this.setHardenPhase(HardenPhase.NONE); this.hardenCooldownTicks = Math.max(1, AntarchySettings.emperorScorpionHardenCooldownTicks()); @@ -504,10 +504,10 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { } Vec3 anchor = this.getTarget() != null ? this.getTarget().position() : this.position(); - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(this); + GravityDirection direction = GravityApi.getGravityDirection(this); Vec3 localRing = Vec3.directionFromRotation(0.0F, this.random.nextFloat() * 360.0F) .scale(2.75D + this.random.nextDouble() * 1.75D); - Vec3 worldRing = AntarchyGravityRotationUtil.vecPlayerToWorld(localRing, direction); + Vec3 worldRing = GravityRotationUtil.vecPlayerToWorld(localRing, direction); BlockPos spawnPos = this.findSummonSpawnPos(anchor.add(worldRing)); Vec3 spawnCenter = Vec3.atCenterOf(spawnPos); scorpion.moveTo(spawnCenter.x, spawnCenter.y, spawnCenter.z, this.random.nextFloat() * 360.0F, 0.0F); @@ -522,22 +522,22 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { } private void commitLunge(LivingEntity target, double horizontalSpeed, double verticalSpeed) { - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(this); - Vec3 localLunge = AntarchyGravityRotationUtil.vecWorldToPlayer(target.position().subtract(this.position()), direction); + GravityDirection direction = GravityApi.getGravityDirection(this); + Vec3 localLunge = GravityRotationUtil.vecWorldToPlayer(target.position().subtract(this.position()), direction); Vec3 horizontal = new Vec3(localLunge.x, 0.0D, localLunge.z); if (horizontal.lengthSqr() < 1.0E-4D) { return; } horizontal = horizontal.normalize().scale(horizontalSpeed); Vec3 localImpulse = new Vec3(horizontal.x, verticalSpeed, horizontal.z); - Vec3 worldImpulse = AntarchyGravityRotationUtil.vecPlayerToWorld(localImpulse, direction); + Vec3 worldImpulse = GravityRotationUtil.vecPlayerToWorld(localImpulse, direction); this.setDeltaMovement(this.getDeltaMovement().add(worldImpulse.x, worldImpulse.y, worldImpulse.z)); this.hasImpulse = true; } private BlockPos findSummonSpawnPos(Vec3 center) { BlockPos base = BlockPos.containing(center); - Direction gravityDown = AntarchyGravityRotationUtil.getGravityDownDirection(this); + Direction gravityDown = GravityRotationUtil.getGravityDownDirection(this); Direction gravityUp = gravityDown.getOpposite(); BlockPos fallback = base; for (int step = -2; step <= 2; step++) { @@ -1001,10 +1001,10 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { if (EmperorScorpionEntity.this.isWithinMeleeAttackRange(target) && EmperorScorpionEntity.this.hasLineOfSight(target)) { EmperorScorpionEntity.this.getNavigation().stop(); - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(EmperorScorpionEntity.this); - Vec3 localMotion = AntarchyGravityRotationUtil.vecWorldToPlayer(EmperorScorpionEntity.this.getDeltaMovement(), direction); + GravityDirection direction = GravityApi.getGravityDirection(EmperorScorpionEntity.this); + Vec3 localMotion = GravityRotationUtil.vecWorldToPlayer(EmperorScorpionEntity.this.getDeltaMovement(), direction); Vec3 localStopped = new Vec3(0.0D, localMotion.y, 0.0D); - Vec3 worldStopped = AntarchyGravityRotationUtil.vecPlayerToWorld(localStopped, direction); + Vec3 worldStopped = GravityRotationUtil.vecPlayerToWorld(localStopped, direction); EmperorScorpionEntity.this.setDeltaMovement(worldStopped); AttackType attackType = EmperorScorpionEntity.this.selectAttack(target); if (attackType != AttackType.NONE) { @@ -1024,8 +1024,8 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { } private void approachDirectly(LivingEntity target) { - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(EmperorScorpionEntity.this); - Vec3 localDelta = AntarchyGravityRotationUtil.vecWorldToPlayer(target.position().subtract(EmperorScorpionEntity.this.position()), direction); + GravityDirection direction = GravityApi.getGravityDirection(EmperorScorpionEntity.this); + Vec3 localDelta = GravityRotationUtil.vecWorldToPlayer(target.position().subtract(EmperorScorpionEntity.this.position()), direction); double dx = localDelta.x; double dz = localDelta.z; if (dx * dx + dz * dz < 1.0E-4D) { @@ -1039,15 +1039,15 @@ public class EmperorScorpionEntity extends Monster implements GeoEntity { EmperorScorpionEntity.this.yBodyRot = newYaw; EmperorScorpionEntity.this.yBodyRotO = newYaw; - Vec3 currentMotion = AntarchyGravityRotationUtil.vecWorldToPlayer(EmperorScorpionEntity.this.getDeltaMovement(), direction); + Vec3 currentMotion = GravityRotationUtil.vecWorldToPlayer(EmperorScorpionEntity.this.getDeltaMovement(), direction); float headingError = Math.abs(Mth.wrapDegrees(targetYaw - currentYaw)); if (headingError <= DIRECT_APPROACH_ALIGN_THRESHOLD) { double speed = EmperorScorpionEntity.this.getAttributeValue(Attributes.MOVEMENT_SPEED) * CHASE_SPEED; Vec3 forward = Vec3.directionFromRotation(0.0F, newYaw).scale(speed); - Vec3 worldForward = AntarchyGravityRotationUtil.vecPlayerToWorld(forward.x, currentMotion.y, forward.z, direction); + Vec3 worldForward = GravityRotationUtil.vecPlayerToWorld(forward.x, currentMotion.y, forward.z, direction); EmperorScorpionEntity.this.setDeltaMovement(worldForward); } else { - EmperorScorpionEntity.this.setDeltaMovement(AntarchyGravityRotationUtil.vecPlayerToWorld(0.0D, currentMotion.y, 0.0D, direction)); + EmperorScorpionEntity.this.setDeltaMovement(GravityRotationUtil.vecPlayerToWorld(0.0D, currentMotion.y, 0.0D, direction)); } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/HerculesBeetleEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/HerculesBeetleEntity.java index 472b2051..5c89f30e 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/HerculesBeetleEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/HerculesBeetleEntity.java @@ -6,9 +6,9 @@ import com.craisinlord.antarchy.content.AntarchyGameRules; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.AntarchyTags; import com.craisinlord.antarchy.content.damage.AntarchyDamageSources; -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.content.item.BigBerthaItem; import com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakeSync; import java.util.EnumSet; @@ -1341,20 +1341,20 @@ public class HerculesBeetleEntity extends TamableAnimal implements GeoEntity, Fl .toList(); } - private AntarchyGravityDirection gravityDirection() { - return AntarchyGravityApi.getGravityDirection(this); + private GravityDirection gravityDirection() { + return GravityApi.getGravityDirection(this); } private Vec3 toLocal(Vec3 worldVector) { - return AntarchyGravityRotationUtil.vecWorldToPlayer(worldVector, this.gravityDirection()); + return GravityRotationUtil.vecWorldToPlayer(worldVector, this.gravityDirection()); } private Vec3 toWorld(Vec3 localVector) { - return AntarchyGravityRotationUtil.vecPlayerToWorld(localVector, this.gravityDirection()); + return GravityRotationUtil.vecPlayerToWorld(localVector, this.gravityDirection()); } private Vec3 toWorld(double x, double y, double z) { - return AntarchyGravityRotationUtil.vecPlayerToWorld(x, y, z, this.gravityDirection()); + return GravityRotationUtil.vecPlayerToWorld(x, y, z, this.gravityDirection()); } private Vec3 toLocalPlane(Vec3 worldVector) { diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/HoverboardEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/HoverboardEntity.java index 509567d7..66a618b0 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/HoverboardEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/HoverboardEntity.java @@ -3,9 +3,9 @@ package com.craisinlord.antarchy.content.entity; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchySoundEvents; -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.mixins.LivingEntityJumpingAccessor; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -70,7 +70,7 @@ public class HoverboardEntity extends PathfinderMob implements GeoEntity { @Override public boolean canBeAffected(MobEffectInstance effectInstance) { - return effectInstance.getEffect().value() instanceof com.craisinlord.antarchy.content.effect.InvertedMobEffect; + return effectInstance.getEffect().value() instanceof com.craisinlord.anthology.effect.InvertedMobEffect; } public static AttributeSupplier.Builder createAttributes() { @@ -172,11 +172,11 @@ public class HoverboardEntity extends PathfinderMob implements GeoEntity { if (!this.hasPassenger(passenger)) { return; } - Vec3 riderOffset = AntarchyGravityRotationUtil.vecPlayerToWorld( + Vec3 riderOffset = GravityRotationUtil.vecPlayerToWorld( 0.0D, RIDER_Y_OFFSET, 0.0D, - AntarchyGravityApi.getGravityDirection(this) + GravityApi.getGravityDirection(this) ); moveFunction.accept(passenger, this.getX() + riderOffset.x, this.getY() + riderOffset.y, this.getZ() + riderOffset.z); } @@ -220,7 +220,7 @@ public class HoverboardEntity extends PathfinderMob implements GeoEntity { } private double resolveVerticalMotion(boolean holdingJump) { - AntarchyGravityDirection gravityDirection = AntarchyGravityApi.getGravityDirection(this); + GravityDirection gravityDirection = GravityApi.getGravityDirection(this); double supportHeight = this.findSupportHeight(gravityDirection); double height = gravityDirection.isInverted() ? supportHeight - this.getY() : this.getY() - supportHeight; if (holdingJump) { @@ -236,7 +236,7 @@ public class HoverboardEntity extends PathfinderMob implements GeoEntity { return -SETTLE_DESCEND_SPEED; } - private double findSupportHeight(AntarchyGravityDirection gravityDirection) { + private double findSupportHeight(GravityDirection gravityDirection) { BlockPos.MutableBlockPos pos = new BlockPos.MutableBlockPos(Mth.floor(this.getX()), Mth.floor(this.getY()), Mth.floor(this.getZ())); if (!gravityDirection.isInverted()) { int minY = this.level().getMinBuildHeight(); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/JerryEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/JerryEntity.java index 1d670cfc..4e9d4bcf 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/JerryEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/JerryEntity.java @@ -2,9 +2,9 @@ package com.craisinlord.antarchy.content.entity; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchySoundEvents; -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.content.horde.CavarynHordeManager; import net.minecraft.nbt.CompoundTag; import net.minecraft.core.registries.BuiltInRegistries; @@ -308,16 +308,16 @@ public class JerryEntity extends Monster implements GeoEntity { : super.doHurtTarget(target); } - private AntarchyGravityDirection gravityDirection() { - return AntarchyGravityApi.getGravityDirection(this); + private GravityDirection gravityDirection() { + return GravityApi.getGravityDirection(this); } private Vec3 toLocal(Vec3 worldVector) { - return AntarchyGravityRotationUtil.vecWorldToPlayer(worldVector, this.gravityDirection()); + return GravityRotationUtil.vecWorldToPlayer(worldVector, this.gravityDirection()); } private Vec3 toWorld(double x, double y, double z) { - return AntarchyGravityRotationUtil.vecPlayerToWorld(x, y, z, this.gravityDirection()); + return GravityRotationUtil.vecPlayerToWorld(x, y, z, this.gravityDirection()); } private Vec3 toLocalPlane(Vec3 worldVector) { diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ManticoreEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ManticoreEntity.java index b36b9587..436dc728 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ManticoreEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ManticoreEntity.java @@ -4,8 +4,8 @@ import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.entity.royal.QueenEntity; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityDirection; import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisUndersideManager; import java.util.List; import java.util.UUID; @@ -385,7 +385,7 @@ public class ManticoreEntity extends Monster implements GeoEntity { } private static Vec3 oppositeGravity(Entity entity) { - return AntarchyGravityApi.isGravityInverted(entity) ? new Vec3(0.0D, -1.0D, 0.0D) : new Vec3(0.0D, 1.0D, 0.0D); + return GravityApi.isGravityInverted(entity) ? new Vec3(0.0D, -1.0D, 0.0D) : new Vec3(0.0D, 1.0D, 0.0D); } private void tickQueenSummonInversionRule() { @@ -395,8 +395,8 @@ public class ManticoreEntity extends Monster implements GeoEntity { if (this.hasEffect(AntarchyObjects.INVERTED_EFFECT.get())) { this.removeEffect(AntarchyObjects.INVERTED_EFFECT.get()); } - if (AntarchyGravityApi.isGravityInverted(this) && AntarchyGravityApi.isGravityForced(this)) { - AntarchyGravityApi.setGravityDirection(this, AntarchyGravityDirection.DOWN, false); + if (GravityApi.isGravityInverted(this) && GravityApi.isGravityForced(this)) { + GravityApi.setGravityDirection(this, GravityDirection.DOWN, false); } this.setNoGravity(false); } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/MissileSquidEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/MissileSquidEntity.java index c18a37c0..446b31eb 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/MissileSquidEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/MissileSquidEntity.java @@ -3,10 +3,10 @@ package com.craisinlord.antarchy.content.entity; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchySoundEvents; 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.AntarchyGravityRotationUtil; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityTransition; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityDirection; +import com.craisinlord.anthology.gravity.GravityRotationUtil; +import com.craisinlord.anthology.gravity.GravityTransition; import net.minecraft.core.BlockPos; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.nbt.CompoundTag; @@ -413,8 +413,8 @@ public class MissileSquidEntity extends Monster implements GeoEntity { this.launchOwnerUuid = owner != null ? owner.getUUID() : null; this.setTarget(null); this.setNoGravity(false); - if (owner != null && AntarchyGravityApi.isGravityInverted(owner)) { - AntarchyGravityApi.setAirborneGravityDirection(this, AntarchyGravityApi.getGravityDirection(owner), true, AntarchyGravityTransition.INSTANT); + if (owner != null && GravityApi.isGravityInverted(owner)) { + GravityApi.setAirborneGravityDirection(this, GravityApi.getGravityDirection(owner), true, GravityTransition.INSTANT); } this.setDeltaMovement(velocity); this.hasImpulse = true; @@ -732,20 +732,20 @@ public class MissileSquidEntity extends Monster implements GeoEntity { this.setAnimationState(ANIM_IDLE); } - private AntarchyGravityDirection gravityDirection() { - return AntarchyGravityApi.getGravityDirection(this); + private GravityDirection gravityDirection() { + return GravityApi.getGravityDirection(this); } private Vec3 toLocal(Vec3 worldVector) { - return AntarchyGravityRotationUtil.vecWorldToPlayer(worldVector, this.gravityDirection()); + return GravityRotationUtil.vecWorldToPlayer(worldVector, this.gravityDirection()); } private Vec3 toWorld(double x, double y, double z) { - return AntarchyGravityRotationUtil.vecPlayerToWorld(x, y, z, this.gravityDirection()); + return GravityRotationUtil.vecPlayerToWorld(x, y, z, this.gravityDirection()); } private Vec3 toWorld(Vec3 localVector) { - return AntarchyGravityRotationUtil.vecPlayerToWorld(localVector, this.gravityDirection()); + return GravityRotationUtil.vecPlayerToWorld(localVector, this.gravityDirection()); } private Vec3 toLocalPlane(Vec3 worldVector) { diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/MolevoreEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/MolevoreEntity.java index 13c31f07..da1167c4 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/MolevoreEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/MolevoreEntity.java @@ -4,9 +4,9 @@ import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyTags; import com.craisinlord.antarchy.content.AntarchySoundEvents; -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 java.util.HashSet; import java.util.Set; import java.util.UUID; @@ -687,20 +687,20 @@ public class MolevoreEntity extends Monster implements GeoEntity { return forward.normalize().dot(toTarget.normalize()) >= minimumDot; } - private AntarchyGravityDirection gravityDirection() { - return AntarchyGravityApi.getGravityDirection(this); + private GravityDirection gravityDirection() { + return GravityApi.getGravityDirection(this); } private Vec3 toWorld(double x, double y, double z) { - return AntarchyGravityRotationUtil.vecPlayerToWorld(x, y, z, this.gravityDirection()); + return GravityRotationUtil.vecPlayerToWorld(x, y, z, this.gravityDirection()); } private Vec3 toWorld(Vec3 localVector) { - return AntarchyGravityRotationUtil.vecPlayerToWorld(localVector, this.gravityDirection()); + return GravityRotationUtil.vecPlayerToWorld(localVector, this.gravityDirection()); } private Vec3 toLocalPlane(Vec3 worldVector) { - Vec3 local = AntarchyGravityRotationUtil.vecWorldToPlayer(worldVector, this.gravityDirection()); + Vec3 local = GravityRotationUtil.vecWorldToPlayer(worldVector, this.gravityDirection()); return new Vec3(local.x, 0.0D, local.z); } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/OctopusBombEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/OctopusBombEntity.java index 82492bae..d89e64fe 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/OctopusBombEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/OctopusBombEntity.java @@ -357,12 +357,12 @@ public class OctopusBombEntity extends Monster implements GeoEntity { public void launchAsExplosiveProjectile(net.minecraft.world.entity.Entity launcher, Vec3 velocity) { this.explosiveImpact = true; this.explosiveLauncherId = launcher != null ? launcher.getUUID() : null; - if (launcher != null && com.craisinlord.antarchy.content.gravity.AntarchyGravityApi.isGravityInverted(launcher)) { - com.craisinlord.antarchy.content.gravity.AntarchyGravityApi.setAirborneGravityDirection( + if (launcher != null && com.craisinlord.anthology.gravity.GravityApi.isGravityInverted(launcher)) { + com.craisinlord.anthology.gravity.GravityApi.setAirborneGravityDirection( this, - com.craisinlord.antarchy.content.gravity.AntarchyGravityApi.getGravityDirection(launcher), + com.craisinlord.anthology.gravity.GravityApi.getGravityDirection(launcher), true, - com.craisinlord.antarchy.content.gravity.AntarchyGravityTransition.INSTANT + com.craisinlord.anthology.gravity.GravityTransition.INSTANT ); } this.setDeltaMovement(velocity); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/OuranwoodDeerEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/OuranwoodDeerEntity.java index 32631a33..4378189f 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/OuranwoodDeerEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/OuranwoodDeerEntity.java @@ -3,9 +3,9 @@ package com.craisinlord.antarchy.content.entity; import com.craisinlord.antarchy.config.AntarchySettings; 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.AntarchyGravityRotationUtil; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityDirection; +import com.craisinlord.anthology.gravity.GravityRotationUtil; import java.util.EnumSet; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.syncher.EntityDataAccessor; @@ -245,12 +245,12 @@ public class OuranwoodDeerEntity extends Animal implements GeoEntity { return MIN_QUIRK_COOLDOWN + this.random.nextInt(MAX_QUIRK_COOLDOWN - MIN_QUIRK_COOLDOWN + 1); } - private AntarchyGravityDirection gravityDirection() { - return AntarchyGravityApi.getGravityDirection(this); + private GravityDirection gravityDirection() { + return GravityApi.getGravityDirection(this); } private Vec3 toLocal(Vec3 worldVector) { - return AntarchyGravityRotationUtil.vecWorldToPlayer(worldVector, this.gravityDirection()); + return GravityRotationUtil.vecWorldToPlayer(worldVector, this.gravityDirection()); } @Override diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ReverieEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ReverieEntity.java index 292d603b..55a706ec 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ReverieEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ReverieEntity.java @@ -7,9 +7,9 @@ import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.AntarchyTags; 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.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityDirection; +import com.craisinlord.anthology.gravity.GravityRotationUtil; import com.craisinlord.antarchy.content.movement.DreamSandLowGravityAccess; import java.util.EnumSet; import java.util.List; @@ -663,8 +663,8 @@ public class ReverieEntity extends PathfinderMob implements FlyingAnimal, GeoEnt return false; } - AntarchyGravityDirection gravityDirection = AntarchyGravityApi.getGravityDirection(focus); - Vec3 localMotion = AntarchyGravityRotationUtil.vecWorldToPlayer(focus.getDeltaMovement(), gravityDirection); + GravityDirection gravityDirection = GravityApi.getGravityDirection(focus); + Vec3 localMotion = GravityRotationUtil.vecWorldToPlayer(focus.getDeltaMovement(), gravityDirection); double descentThreshold = Math.max(0.02D, this.cfgDangerousFallSpeed); boolean invertedGravity = gravityDirection.isInverted(); if (invertedGravity ? localMotion.y < descentThreshold : localMotion.y > -descentThreshold) { @@ -1008,7 +1008,7 @@ public class ReverieEntity extends PathfinderMob implements FlyingAnimal, GeoEnt } private int getGravitySupportDistance(Player focus, int maxDistanceBlocks) { - Direction gravityDown = AntarchyGravityRotationUtil.getGravityDownDirection(focus); + Direction gravityDown = GravityRotationUtil.getGravityDownDirection(focus); Direction supportFace = gravityDown.getOpposite(); BlockPos cursor = focus.blockPosition(); for (int distance = 1; distance <= maxDistanceBlocks; distance++) { @@ -1047,7 +1047,7 @@ public class ReverieEntity extends PathfinderMob implements FlyingAnimal, GeoEnt double radius = Mth.lerp(1.0D - orbitBlend, desiredMin * 0.35D, desiredMax * 0.85D); Vec3 tetherAnchor = focus.position().add(focus.getDeltaMovement().scale(0.75D)); double angle = orbitTime * (this.getId() % 2 == 0 ? 1.0D : -1.0D); - double verticalOffset = AntarchyGravityApi.isGravityInverted(focus) ? -2.15D : 1.15D; + double verticalOffset = GravityApi.isGravityInverted(focus) ? -2.15D : 1.15D; double y = tetherAnchor.y + verticalOffset + Math.sin(orbitTime * 0.8D) * 0.2D; return new Vec3( tetherAnchor.x + Math.cos(angle) * radius, @@ -1057,7 +1057,7 @@ public class ReverieEntity extends PathfinderMob implements FlyingAnimal, GeoEnt } private Vec3 getPurpleProtectTarget(Player focus) { - double verticalOffset = AntarchyGravityApi.isGravityInverted(focus) ? -0.95D : 0.95D; + double verticalOffset = GravityApi.isGravityInverted(focus) ? -0.95D : 0.95D; Vec3 tetherAnchor = focus.position().add(focus.getDeltaMovement().scale(0.85D)); Vec3 sideOffset = Vec3.directionFromRotation(0.0F, focus.getYRot() + 90.0F).scale(0.45D); return new Vec3( diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/RollyPollyEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/RollyPollyEntity.java index cbd95196..36afd023 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/RollyPollyEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/RollyPollyEntity.java @@ -4,9 +4,9 @@ import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyTags; import com.craisinlord.antarchy.content.AntarchySoundEvents; -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 java.util.EnumSet; import net.minecraft.core.BlockPos; @@ -875,20 +875,20 @@ public class RollyPollyEntity extends TamableAnimal implements GeoEntity { } } - private AntarchyGravityDirection gravityDirection() { - return AntarchyGravityApi.getGravityDirection(this); + private GravityDirection gravityDirection() { + return GravityApi.getGravityDirection(this); } private Vec3 toLocal(Vec3 worldVector) { - return AntarchyGravityRotationUtil.vecWorldToPlayer(worldVector, this.gravityDirection()); + return GravityRotationUtil.vecWorldToPlayer(worldVector, this.gravityDirection()); } private Vec3 toWorld(Vec3 localVector) { - return AntarchyGravityRotationUtil.vecPlayerToWorld(localVector, this.gravityDirection()); + return GravityRotationUtil.vecPlayerToWorld(localVector, this.gravityDirection()); } private Vec3 toWorld(double x, double y, double z) { - return AntarchyGravityRotationUtil.vecPlayerToWorld(x, y, z, this.gravityDirection()); + return GravityRotationUtil.vecPlayerToWorld(x, y, z, this.gravityDirection()); } private Vec3 toLocalPlane(Vec3 worldVector) { diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ScorpionEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ScorpionEntity.java index b55695c3..156b64fb 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ScorpionEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ScorpionEntity.java @@ -2,9 +2,9 @@ package com.craisinlord.antarchy.content.entity; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchySoundEvents; -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.content.worldgen.thoraxis.ThoraxisUndersideManager; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; @@ -229,15 +229,15 @@ public class ScorpionEntity extends Monster implements GeoEntity { } private void commitLunge(LivingEntity target, double horizontalSpeed, double verticalSpeed) { - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(this); - Vec3 localLunge = AntarchyGravityRotationUtil.vecWorldToPlayer(target.position().subtract(this.position()), direction); + GravityDirection direction = GravityApi.getGravityDirection(this); + Vec3 localLunge = GravityRotationUtil.vecWorldToPlayer(target.position().subtract(this.position()), direction); Vec3 horizontal = new Vec3(localLunge.x, 0.0D, localLunge.z); if (horizontal.lengthSqr() < 1.0E-4D) { return; } horizontal = horizontal.normalize().scale(horizontalSpeed); Vec3 localImpulse = new Vec3(horizontal.x, verticalSpeed, horizontal.z); - Vec3 worldImpulse = AntarchyGravityRotationUtil.vecPlayerToWorld(localImpulse, direction); + Vec3 worldImpulse = GravityRotationUtil.vecPlayerToWorld(localImpulse, direction); this.setDeltaMovement(this.getDeltaMovement().add(worldImpulse.x, worldImpulse.y, worldImpulse.z)); this.hasImpulse = true; } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/SpitBugEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/SpitBugEntity.java index d500a640..34987969 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/SpitBugEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/SpitBugEntity.java @@ -3,9 +3,9 @@ package com.craisinlord.antarchy.content.entity; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.damage.AntarchyDamageSources; -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 net.minecraft.core.BlockPos; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.network.syncher.EntityDataAccessor; @@ -235,12 +235,12 @@ public class SpitBugEntity extends Monster implements GeoEntity { this.playSound(AntarchySoundEvents.SPIT_BUG_SPIT.get(), 1.0F, 0.85F + this.random.nextFloat() * 0.15F); } - private AntarchyGravityDirection gravityDirection() { - return AntarchyGravityApi.getGravityDirection(this); + private GravityDirection gravityDirection() { + return GravityApi.getGravityDirection(this); } private Vec3 toWorld(double x, double y, double z) { - return AntarchyGravityRotationUtil.vecPlayerToWorld(x, y, z, this.gravityDirection()); + return GravityRotationUtil.vecPlayerToWorld(x, y, z, this.gravityDirection()); } private final class SpitAttackGoal extends Goal { diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/SpringbugEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/SpringbugEntity.java index 167a61c4..9819a87a 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/SpringbugEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/SpringbugEntity.java @@ -3,9 +3,9 @@ package com.craisinlord.antarchy.content.entity; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.damage.AntarchyDamageSources; -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.mojang.serialization.Codec; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -412,7 +412,7 @@ public class SpringbugEntity extends Monster implements GeoEntity { this.getNavigation().stop(); this.setDeltaMovement(Vec3.ZERO); this.move(MoverType.SELF, Vec3.ZERO); - this.setPos(this.getX(), AntarchyGravityApi.isGravityInverted(this) ? clingPos.getY() + 1.01D : clingPos.getY() - this.getBbHeight() - 0.01D, this.getZ()); + this.setPos(this.getX(), GravityApi.isGravityInverted(this) ? clingPos.getY() + 1.01D : clingPos.getY() - this.getBbHeight() - 0.01D, this.getZ()); } private void tickPouncing() { @@ -544,7 +544,7 @@ public class SpringbugEntity extends Monster implements GeoEntity { return false; } double x = pos.getX() + 0.5D; - double y = AntarchyGravityApi.isGravityInverted(this) + double y = GravityApi.isGravityInverted(this) ? pos.getY() + 1.01D : pos.getY() - this.getBbHeight() - 0.01D; double z = pos.getZ() + 0.5D; @@ -952,8 +952,8 @@ public class SpringbugEntity extends Monster implements GeoEntity { } } - private AntarchyGravityDirection gravityDirection() { - return AntarchyGravityApi.getGravityDirection(this); + private GravityDirection gravityDirection() { + return GravityApi.getGravityDirection(this); } private Direction gravityDownDirection() { @@ -961,11 +961,11 @@ public class SpringbugEntity extends Monster implements GeoEntity { } private Vec3 toLocal(Vec3 worldVector) { - return AntarchyGravityRotationUtil.vecWorldToPlayer(worldVector, this.gravityDirection()); + return GravityRotationUtil.vecWorldToPlayer(worldVector, this.gravityDirection()); } private Vec3 toWorld(double x, double y, double z) { - return AntarchyGravityRotationUtil.vecPlayerToWorld(x, y, z, this.gravityDirection()); + return GravityRotationUtil.vecPlayerToWorld(x, y, z, this.gravityDirection()); } private Vec3 toLocalPlane(Vec3 worldVector) { diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/WaspEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/WaspEntity.java index a16a0f48..a628f0d8 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/WaspEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/WaspEntity.java @@ -3,9 +3,9 @@ package com.craisinlord.antarchy.content.entity; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.block.entity.WaspNestBlockEntity; -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 java.util.EnumSet; import java.util.Objects; import net.minecraft.core.BlockPos; @@ -331,12 +331,12 @@ public class WaspEntity extends Monster implements GeoEntity, FlyingAnimal { return !this.onGround(); } - private AntarchyGravityDirection gravityDirection() { - return AntarchyGravityApi.getGravityDirection(this); + private GravityDirection gravityDirection() { + return GravityApi.getGravityDirection(this); } private Vec3 toWorld(double x, double y, double z) { - return AntarchyGravityRotationUtil.vecPlayerToWorld(x, y, z, this.gravityDirection()); + return GravityRotationUtil.vecPlayerToWorld(x, y, z, this.gravityDirection()); } private void realignHitbox() { diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/brutalfly/BrutalflyEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/brutalfly/BrutalflyEntity.java index efaba0d5..982d2d20 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/brutalfly/BrutalflyEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/brutalfly/BrutalflyEntity.java @@ -4,8 +4,8 @@ import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.boss.BossCombatUtil; import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.AntarchySoundEvents; -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 java.util.EnumSet; import java.util.Objects; import net.minecraft.core.BlockPos; @@ -566,7 +566,7 @@ public class BrutalflyEntity extends Monster implements GeoEntity { private boolean shouldSwipe(LivingEntity target, FightPhase phase) { double horizontalDistanceSqr = new Vec3(target.getX() - this.getX(), 0.0D, target.getZ() - this.getZ()).lengthSqr(); - Vec3 localDelta = AntarchyGravityRotationUtil.vecWorldToPlayer(target.position().subtract(this.position()), AntarchyGravityApi.getGravityDirection(this)); + Vec3 localDelta = GravityRotationUtil.vecWorldToPlayer(target.position().subtract(this.position()), GravityApi.getGravityDirection(this)); horizontalDistanceSqr = new Vec3(localDelta.x, 0.0D, localDelta.z).lengthSqr(); boolean beneathBoss = horizontalDistanceSqr <= 16.0D && localDelta.y <= 2.0D; return beneathBoss || this.distanceToSqr(target) <= phase.swipeRangeSqr; @@ -579,7 +579,7 @@ public class BrutalflyEntity extends Monster implements GeoEntity { } private void tickSwipe(LivingEntity target) { - Vec3 divePoint = target.position().add(AntarchyGravityRotationUtil.vecPlayerToWorld(0.0D, 1.0D, 0.0D, AntarchyGravityApi.getGravityDirection(this))); + Vec3 divePoint = target.position().add(GravityRotationUtil.vecPlayerToWorld(0.0D, 1.0D, 0.0D, GravityApi.getGravityDirection(this))); this.getMoveControl().setWantedPosition(divePoint.x, divePoint.y, divePoint.z, 1.45D); if (this.animationTicks == 8) { @@ -608,7 +608,7 @@ public class BrutalflyEntity extends Monster implements GeoEntity { dz = this.random.nextDouble() - 0.5D; } target.knockback(SWIPE_KNOCKBACK, -dx, -dz); - target.setDeltaMovement(target.getDeltaMovement().add(AntarchyGravityRotationUtil.vecPlayerToWorld(0.0D, 0.3D, 0.0D, AntarchyGravityApi.getGravityDirection(this)))); + target.setDeltaMovement(target.getDeltaMovement().add(GravityRotationUtil.vecPlayerToWorld(0.0D, 0.3D, 0.0D, GravityApi.getGravityDirection(this)))); } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareBiteEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareBiteEntity.java index c371e131..72faf194 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareBiteEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareBiteEntity.java @@ -3,9 +3,9 @@ package com.craisinlord.antarchy.content.entity.nightmare; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchySoundEvents; 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 net.minecraft.nbt.CompoundTag; import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.EntityDataSerializers; @@ -170,9 +170,9 @@ public class NightmareBiteEntity extends Entity implements GeoEntity { } private void updateTrackingPosition(LivingEntity target, double progress) { - AntarchyGravityDirection targetGravity = AntarchyGravityApi.getGravityDirection(target); - if (AntarchyGravityApi.getGravityDirection(this) != targetGravity) { - AntarchyGravityApi.setGravityDirection(this, targetGravity); + GravityDirection targetGravity = GravityApi.getGravityDirection(target); + if (GravityApi.getGravityDirection(this) != targetGravity) { + GravityApi.setGravityDirection(this, targetGravity); } Vec3 forward = target.getLookAngle().multiply(1.0D, 0.0D, 1.0D); if (forward.lengthSqr() < 1.0E-4D) { @@ -182,12 +182,12 @@ public class NightmareBiteEntity extends Entity implements GeoEntity { forward = new Vec3(0.0D, 0.0D, 1.0D); } forward = forward.normalize(); - Vec3 localUp = AntarchyGravityRotationUtil.vecPlayerToWorld( + Vec3 localUp = GravityRotationUtil.vecPlayerToWorld( 0.0D, 1.0D, 0.0D, targetGravity); Vec3 right = forward.cross(localUp).normalize(); double sideOffset = START_SIDE_OFFSET + (END_SIDE_OFFSET - START_SIDE_OFFSET) * progress; double backOffset = START_BACK_OFFSET + (END_BACK_OFFSET - START_BACK_OFFSET) * progress; - Vec3 bodyCenter = target.position().add(AntarchyGravityRotationUtil.vecPlayerToWorld( + Vec3 bodyCenter = target.position().add(GravityRotationUtil.vecPlayerToWorld( 0.0D, target.getBbHeight() * 0.55D, 0.0D, targetGravity)); Vec3 desiredPos = bodyCenter .add(right.scale(this.approachSide * sideOffset)) @@ -195,7 +195,7 @@ public class NightmareBiteEntity extends Entity implements GeoEntity { Vec3 toTarget = bodyCenter.subtract(desiredPos); this.setPos(desiredPos.x, desiredPos.y, desiredPos.z); if (toTarget.lengthSqr() > 1.0E-4D) { - Vec3 localToTarget = AntarchyGravityRotationUtil.vecWorldToPlayer(toTarget, targetGravity); + Vec3 localToTarget = GravityRotationUtil.vecWorldToPlayer(toTarget, targetGravity); float yaw = (float) Math.toDegrees(Math.atan2(localToTarget.z, localToTarget.x)) - 90.0F; this.setYRot(yaw); } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareEntity.java index 87ee2f9d..69aae1ec 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareEntity.java @@ -6,9 +6,9 @@ import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.AntarchyTags; import com.craisinlord.antarchy.content.boss.BossCombatUtil; import com.craisinlord.antarchy.content.damage.AntarchyDamageSources; -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 net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.particles.ParticleTypes; @@ -746,14 +746,14 @@ public class NightmareEntity extends Monster implements GeoEntity { : target.getEyePosition(); Vec3 lunge = lungeTarget.subtract(this.getEyePosition()); if (lunge.lengthSqr() > 1.0E-4D) { - AntarchyGravityDirection direction = this.gravityDirection(); - Vec3 normalized = AntarchyGravityRotationUtil.vecWorldToPlayer(lunge, direction).normalize(); + GravityDirection direction = this.gravityDirection(); + Vec3 normalized = GravityRotationUtil.vecWorldToPlayer(lunge, direction).normalize(); double verticalBoost = this.shouldUseFlyingLocomotion() ? 0.34D : 0.18D; - Vec3 current = AntarchyGravityRotationUtil.vecWorldToPlayer(this.getDeltaMovement(), direction); + Vec3 current = GravityRotationUtil.vecWorldToPlayer(this.getDeltaMovement(), direction); double upward = this.shouldUseFlyingLocomotion() ? Math.max(normalized.y * verticalBoost, -0.08D) : normalized.y * verticalBoost; - this.setDeltaMovement(AntarchyGravityRotationUtil.vecPlayerToWorld( + this.setDeltaMovement(GravityRotationUtil.vecPlayerToWorld( normalized.x * 0.85D, current.y * 0.18D + upward, normalized.z * 0.85D, @@ -1106,26 +1106,26 @@ public class NightmareEntity extends Monster implements GeoEntity { } private void knockAway(LivingEntity target, double horizontalStrength, double verticalStrength) { - AntarchyGravityDirection direction = this.gravityDirection(); + GravityDirection direction = this.gravityDirection(); Vec3 localDirection = this.toLocalPlane(target.position().subtract(this.position())); if (localDirection.lengthSqr() < 1.0E-4D) localDirection = this.toLocalPlane(this.getViewVector(1.0F)); if (localDirection.lengthSqr() < 1.0E-4D) localDirection = new Vec3(1.0D, 0.0D, 0.0D); Vec3 localPush = localDirection.normalize().scale(horizontalStrength); - Vec3 worldPush = AntarchyGravityRotationUtil.vecPlayerToWorld(localPush.x, verticalStrength, localPush.z, direction); + Vec3 worldPush = GravityRotationUtil.vecPlayerToWorld(localPush.x, verticalStrength, localPush.z, direction); target.push(worldPush.x, worldPush.y, worldPush.z); target.hurtMarked = true; } - private AntarchyGravityDirection gravityDirection() { - return AntarchyGravityApi.getGravityDirection(this); + private GravityDirection gravityDirection() { + return GravityApi.getGravityDirection(this); } private Vec3 toLocal(Vec3 worldVector) { - return AntarchyGravityRotationUtil.vecWorldToPlayer(worldVector, this.gravityDirection()); + return GravityRotationUtil.vecWorldToPlayer(worldVector, this.gravityDirection()); } private Vec3 toWorld(Vec3 localVector) { - return AntarchyGravityRotationUtil.vecPlayerToWorld(localVector, this.gravityDirection()); + return GravityRotationUtil.vecPlayerToWorld(localVector, this.gravityDirection()); } private Vec3 toLocalPlane(Vec3 worldVector) { @@ -1174,7 +1174,7 @@ public class NightmareEntity extends Monster implements GeoEntity { } private boolean tryBreakBlocksToTarget(LivingEntity target) { - Direction gravityDown = AntarchyGravityRotationUtil.getGravityDownDirection(this); + Direction gravityDown = GravityRotationUtil.getGravityDownDirection(this); BlockPos.MutableBlockPos cursor = this.blockPosition().mutable(); for (int i = 0; i <= 16; i++) { if (this.level().getBlockState(cursor).is(AntarchyTags.Blocks.NIGHTMARE_BREAKABLE)) { @@ -1336,7 +1336,7 @@ public class NightmareEntity extends Monster implements GeoEntity { } private boolean isTooCloseToCeiling() { - Direction gravityUp = AntarchyGravityRotationUtil.getGravityDownDirection(this).getOpposite(); + Direction gravityUp = GravityRotationUtil.getGravityDownDirection(this).getOpposite(); BlockPos current = this.blockPosition(); for (int i = 1; i <= FLIGHT_CEILING_CLEARANCE_BLOCKS; i++) { if (!this.level().isEmptyBlock(current.relative(gravityUp, i))) return true; diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/KingEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/KingEntity.java index 44f9abc5..7514eadc 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/KingEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/KingEntity.java @@ -5,8 +5,8 @@ import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.effect.RoyalEffectEligibility; import com.craisinlord.antarchy.content.effect.RoyalEffectHooks; -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 com.craisinlord.antarchy.content.network.KingJudgmentFlashSync; import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundEvents; @@ -821,8 +821,8 @@ public class KingEntity extends RoyalBossEntity { this.setRoyalFlying(true); this.getMoveControl().setWantedPosition(landing.x, landing.y, landing.z, 1.35D); this.tickKingLandingIndicator(); - Vec3 localLandingDelta = AntarchyGravityRotationUtil.vecWorldToPlayer( - this.position().subtract(landing), AntarchyGravityApi.getGravityDirection(this)); + Vec3 localLandingDelta = GravityRotationUtil.vecWorldToPlayer( + this.position().subtract(landing), GravityApi.getGravityDirection(this)); double horizontalDistanceSquared = this.position().subtract(landing) .multiply(1.0D, 0.0D, 1.0D).lengthSqr(); boolean reachedLanding = this.onGround() @@ -928,8 +928,8 @@ public class KingEntity extends RoyalBossEntity { this.performWingGust(level, target); } this.setRoyalFlying(true); - this.addGravityAwareImpulse(this, AntarchyGravityRotationUtil.vecPlayerToWorld( - 0.0D, 0.42D, 0.0D, AntarchyGravityApi.getGravityDirection(this))); + this.addGravityAwareImpulse(this, GravityRotationUtil.vecPlayerToWorld( + 0.0D, 0.42D, 0.0D, GravityApi.getGravityDirection(this))); this.hasImpulse = true; } @@ -943,8 +943,8 @@ public class KingEntity extends RoyalBossEntity { double radius = Mth.lerp(progress, 4.0D, STOMP_RADIUS); for (int index = 0; index < 36; index++) { double angle = Mth.TWO_PI * index / 36.0D; - Vec3 indicator = this.kingLandingWaypoint.add(AntarchyGravityRotationUtil.vecPlayerToWorld( - 0.0D, 0.2D, 0.0D, AntarchyGravityApi.getGravityDirection(this))); + Vec3 indicator = this.kingLandingWaypoint.add(GravityRotationUtil.vecPlayerToWorld( + 0.0D, 0.2D, 0.0D, GravityApi.getGravityDirection(this))); level.sendParticles(ParticleTypes.ELECTRIC_SPARK, this.kingLandingWaypoint.x + Math.cos(angle) * radius, indicator.y, @@ -963,7 +963,7 @@ public class KingEntity extends RoyalBossEntity { for (double radius : radii) { double x = target.getX() + Math.cos(angle) * radius; double z = target.getZ() + Math.sin(angle) * radius; - double y = AntarchyGravityApi.isGravityInverted(this) + double y = GravityApi.isGravityInverted(this) ? target.position().y - 0.1D : this.groundYBelow(x, z) + 0.1D; Vec3 candidate = new Vec3(x, y, z); @@ -974,7 +974,7 @@ public class KingEntity extends RoyalBossEntity { } } } - double fallbackY = AntarchyGravityApi.isGravityInverted(this) + double fallbackY = GravityApi.isGravityInverted(this) ? target.position().y - 0.1D : this.groundYBelow(target.getX(), target.getZ()) + 0.1D; Vec3 fallback = new Vec3(target.getX(), fallbackY, target.getZ()); @@ -986,7 +986,7 @@ public class KingEntity extends RoyalBossEntity { // Last resort: land directly beneath the King if the target ring is obstructed. // This still gives Close Quarters a committed ground sequence instead of silently // remaining airborne over difficult tree geometry. - double directY = AntarchyGravityApi.isGravityInverted(this) + double directY = GravityApi.isGravityInverted(this) ? this.position().y - 0.1D : this.groundYBelow(this.getX(), this.getZ()) + 0.1D; Vec3 direct = new Vec3(this.getX(), directY, this.getZ()); @@ -1632,8 +1632,8 @@ public class KingEntity extends RoyalBossEntity { continue; } living.hurt(this.damageSources().mobAttack(this), this.scaleRoyalDamage(12.0D)); - Vec3 lift = AntarchyGravityRotationUtil.vecPlayerToWorld( - 0.0D, 0.45D, 0.0D, AntarchyGravityApi.getGravityDirection(living)); + Vec3 lift = GravityRotationUtil.vecPlayerToWorld( + 0.0D, 0.45D, 0.0D, GravityApi.getGravityDirection(living)); this.addGravityAwareImpulse(living, this.royalChargeDirection.scale(2.1D).add(lift)); living.hasImpulse = true; level.sendParticles(ParticleTypes.END_ROD, living.getX(), living.getY() + living.getBbHeight() * 0.5D, @@ -1821,8 +1821,8 @@ public class KingEntity extends RoyalBossEntity { float falloff = (float) Math.max(0.2D, 1.0D - distance / (STOMP_RADIUS + 6.0D)); living.hurt(source, base * falloff); Vec3 push = living.position().subtract(this.position()).normalize().scale(2.4D * falloff); - Vec3 vertical = AntarchyGravityRotationUtil.vecPlayerToWorld( - 0.0D, 0.85D, 0.0D, AntarchyGravityApi.getGravityDirection(living)); + Vec3 vertical = GravityRotationUtil.vecPlayerToWorld( + 0.0D, 0.85D, 0.0D, GravityApi.getGravityDirection(living)); this.addGravityAwareImpulse(living, new Vec3(push.x, 0.0D, push.z).add(vertical)); living.hasImpulse = true; } @@ -2125,8 +2125,8 @@ public class KingEntity extends RoyalBossEntity { } private void sendRoyalJudgmentTelegraph(ServerLevel level, LivingEntity target, int elapsedTicks) { - Vec3 targetPoint = target.position().add(AntarchyGravityRotationUtil.vecPlayerToWorld( - 0.0D, 0.35D, 0.0D, AntarchyGravityApi.getGravityDirection(target))); + Vec3 targetPoint = target.position().add(GravityRotationUtil.vecPlayerToWorld( + 0.0D, 0.35D, 0.0D, GravityApi.getGravityDirection(target))); double pulse = 0.8D + Math.min(1.0D, elapsedTicks / 20.0D) * 0.5D; for (RoyalHead.Slot slot : RoyalHead.Slot.values()) { RoyalHead head = this.royalHead(slot); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/QueenEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/QueenEntity.java index 3eb64b6a..a2887bd0 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/QueenEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/QueenEntity.java @@ -6,10 +6,10 @@ import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.AntarchyTags; import com.craisinlord.antarchy.content.entity.ManticoreEntity; import com.craisinlord.antarchy.content.entity.nightmare.NightmareBiteEntity; -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.content.gravity.AntarchyGravityTransition; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityDirection; +import com.craisinlord.anthology.gravity.GravityRotationUtil; +import com.craisinlord.anthology.gravity.GravityTransition; import com.craisinlord.antarchy.content.time.TimeDilationApi; import com.craisinlord.antarchy.content.time.TimeDilationFieldEntity; import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisUndersideManager; @@ -576,7 +576,7 @@ public class QueenEntity extends RoyalBossEntity { Vec3 away = this.position().subtract(target.position()).multiply(1.0D, 0.0D, 1.0D); double baseAngle = away.lengthSqr() > 1.0E-4D ? Math.atan2(away.z, away.x) : this.random.nextDouble() * Mth.TWO_PI; - boolean inverted = AntarchyGravityApi.isGravityInverted(this); + boolean inverted = GravityApi.isGravityInverted(this); double[] radii = {10.0D, 14.0D, 18.0D, 7.0D}; for (int angleIndex = 0; angleIndex < 12; angleIndex++) { double angle = baseAngle + angleIndex * Mth.TWO_PI / 12.0D; @@ -614,8 +614,8 @@ public class QueenEntity extends RoyalBossEntity { double progress = this.queenLandingStage == QueenLandingStage.TELEGRAPH ? 1.0D - this.queenLandingStageTicks / (double) LANDING_TELEGRAPH_TICKS : 1.0D; double radius = Mth.lerp(progress, 4.0D, 18.0D); - Vec3 indicator = this.queenLandingWaypoint.add(AntarchyGravityRotationUtil.vecPlayerToWorld( - 0.0D, 0.2D, 0.0D, AntarchyGravityApi.getGravityDirection(this))); + Vec3 indicator = this.queenLandingWaypoint.add(GravityRotationUtil.vecPlayerToWorld( + 0.0D, 0.2D, 0.0D, GravityApi.getGravityDirection(this))); for (int index = 0; index < 40; index++) { double angle = Mth.TWO_PI * index / 40.0D; level.sendParticles(ParticleTypes.REVERSE_PORTAL, @@ -639,8 +639,8 @@ public class QueenEntity extends RoyalBossEntity { 60, 7.0D, 1.0D, 7.0D, 0.12D); } this.setRoyalFlying(true); - this.addGravityAwareImpulse(this, AntarchyGravityRotationUtil.vecPlayerToWorld( - 0.0D, 0.42D, 0.0D, AntarchyGravityApi.getGravityDirection(this))); + this.addGravityAwareImpulse(this, GravityRotationUtil.vecPlayerToWorld( + 0.0D, 0.42D, 0.0D, GravityApi.getGravityDirection(this))); this.hasImpulse = true; } @@ -905,7 +905,7 @@ public class QueenEntity extends RoyalBossEntity { queen.setPersistenceRequired(); queen.setNoGravity(false); ThoraxisUndersideManager.applyUndersideInversion(queen); - AntarchyGravityApi.setAirborneGravityDirection(queen, AntarchyGravityDirection.UP, true, new AntarchyGravityTransition(12)); + GravityApi.setAirborneGravityDirection(queen, GravityDirection.UP, true, new GravityTransition(12)); queen.resetFallDistance(); return level.addFreshEntity(queen) ? queen : null; } @@ -979,7 +979,7 @@ public class QueenEntity extends RoyalBossEntity { Vec3 behindTarget = target.position().add(towardTarget.scale(8.0D)); Vec3 lateral = new Vec3(-towardTarget.z, 0.0D, towardTarget.x); float tearYaw = (float) Math.toDegrees(Math.atan2(-towardTarget.x, towardTarget.z)); - double vertical = AntarchyGravityApi.isGravityInverted(this) ? -2.0D : 2.0D; + double vertical = GravityApi.isGravityInverted(this) ? -2.0D : 2.0D; for (int i = 0; i < pairs; i++) { double forwardScatter = 3.0D + this.random.nextDouble() * 9.0D; double lateralScatter = (this.random.nextDouble() * 2.0D - 1.0D) * 11.0D; @@ -1173,7 +1173,7 @@ public class QueenEntity extends RoyalBossEntity { } private void spawnQueenWingPressure(ServerLevel level) { - AntarchyGravityDirection gravity = AntarchyGravityApi.getGravityDirection(this); + GravityDirection gravity = GravityApi.getGravityDirection(this); for (int ring = 1; ring <= 3; ring++) { double radius = ring * 3.2D; int samples = 14 + ring * 4; @@ -1181,9 +1181,9 @@ public class QueenEntity extends RoyalBossEntity { double angle = Mth.TWO_PI * sample / samples; double localX = Math.cos(angle) * radius; double localZ = Math.sin(angle) * radius; - Vec3 point = this.position().add(AntarchyGravityRotationUtil.vecPlayerToWorld( + Vec3 point = this.position().add(GravityRotationUtil.vecPlayerToWorld( localX, this.getBbHeight() * 0.45D, localZ, gravity)); - Vec3 velocity = AntarchyGravityRotationUtil.vecPlayerToWorld( + Vec3 velocity = GravityRotationUtil.vecPlayerToWorld( Math.cos(angle) * 0.2D, 0.025D, Math.sin(angle) * 0.2D, gravity); level.sendParticles(ACCEL_DUST, point.x, point.y, point.z, 0, velocity.x, velocity.y, velocity.z, 1.0D); @@ -1258,8 +1258,8 @@ public class QueenEntity extends RoyalBossEntity { double distance = Math.max(1.0D, living.distanceTo(this)); living.hurt(source, this.scaleRoyalDamage(12.0D * Math.max(0.25D, 1.0D - distance / 24.0D))); Vec3 push = living.position().subtract(this.position()).normalize().scale(1.3D); - Vec3 vertical = AntarchyGravityRotationUtil.vecPlayerToWorld( - 0.0D, 0.65D, 0.0D, AntarchyGravityApi.getGravityDirection(living)); + Vec3 vertical = GravityRotationUtil.vecPlayerToWorld( + 0.0D, 0.65D, 0.0D, GravityApi.getGravityDirection(living)); this.addGravityAwareImpulse(living, new Vec3(push.x, 0.0D, push.z).add(vertical)); living.hasImpulse = true; } @@ -1281,7 +1281,7 @@ public class QueenEntity extends RoyalBossEntity { private Vec3 selectBlackHoleAnchor(LivingEntity target) { double vertical = 2.0D + this.random.nextDouble() * 2.0D; - if (AntarchyGravityApi.isGravityInverted(this)) { + if (GravityApi.isGravityInverted(this)) { vertical = -vertical; } return target.position().add( @@ -1399,8 +1399,8 @@ public class QueenEntity extends RoyalBossEntity { int elapsed = GRAVITY_STOMP_TELEGRAPH_TICKS - this.gravityStompTelegraphTicks; if (this.tickCount % 2 == 0) { double radius = Mth.lerp(elapsed / (double) GRAVITY_STOMP_TELEGRAPH_TICKS, 3.0D, 18.0D); - Vec3 surfaceCenter = this.position().add(AntarchyGravityRotationUtil.vecPlayerToWorld( - 0.0D, 0.2D, 0.0D, AntarchyGravityApi.getGravityDirection(this))); + Vec3 surfaceCenter = this.position().add(GravityRotationUtil.vecPlayerToWorld( + 0.0D, 0.2D, 0.0D, GravityApi.getGravityDirection(this))); this.spawnQueenTelegraphSpokes(level, surfaceCenter, radius); } this.playQueenTelegraphBeat(level, this.gravityStompTelegraphTicks, @@ -1460,7 +1460,7 @@ public class QueenEntity extends RoyalBossEntity { this.queenEffectBounds(CRUSHING_GRAVITY_RADIUS), living -> this.canDamageWithRoyalAttack(living) && this.withinQueenEffectRange(living, CRUSHING_GRAVITY_RADIUS))) { - double downSign = AntarchyGravityApi.isGravityInverted(living) ? 1.0D : -1.0D; + double downSign = GravityApi.isGravityInverted(living) ? 1.0D : -1.0D; this.spawnCrushingGravityArrow(level, living, downSign, progress); } } @@ -1543,7 +1543,7 @@ public class QueenEntity extends RoyalBossEntity { double orbitRadius = Mth.lerp(Math.min(1.0D, progress * 1.6D), 1.0D, DEBRIS_CYCLONE_ORBIT_RADIUS); double spinSpeed = Mth.lerp(progress, 0.12D, 0.55D); int count = this.debrisCycloneBlocks.size(); - AntarchyGravityDirection gravity = AntarchyGravityApi.getGravityDirection(this); + GravityDirection gravity = GravityApi.getGravityDirection(this); for (int index = 0; index < count; index++) { FallingBlockEntity block = this.debrisCycloneBlocks.get(index); if (!block.isAlive()) continue; @@ -1551,7 +1551,7 @@ public class QueenEntity extends RoyalBossEntity { double localX = Math.cos(angle) * orbitRadius; double localZ = Math.sin(angle) * orbitRadius; double localY = this.getBbHeight() * 0.5D + Math.sin(this.tickCount * 0.1D + index) * 0.4D; - Vec3 point = this.position().add(AntarchyGravityRotationUtil.vecPlayerToWorld(localX, localY, localZ, gravity)); + Vec3 point = this.position().add(GravityRotationUtil.vecPlayerToWorld(localX, localY, localZ, gravity)); block.setPos(point.x - 0.5D, point.y - 0.5D, point.z - 0.5D); block.setDeltaMovement(Vec3.ZERO); if (this.tickCount % 2 == 0) { @@ -1598,7 +1598,7 @@ public class QueenEntity extends RoyalBossEntity { this.playRoyalSound(AntarchySoundEvents.QUEEN_ROAR.get(), 0.75F); if (level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) { Vec3 center = this.position(); - boolean inverted = AntarchyGravityApi.isGravityInverted(this); + boolean inverted = GravityApi.isGravityInverted(this); int gathered = 0; for (int attempt = 0; attempt < GRAVITIC_UPHEAVAL_BLOCK_COUNT * 3 && gathered < GRAVITIC_UPHEAVAL_BLOCK_COUNT; attempt++) { @@ -1670,14 +1670,14 @@ public class QueenEntity extends RoyalBossEntity { private void spawnBlackHoleFunnel(ServerLevel level, Vec3 center, double fieldRadius, double progress) { double rotation = this.tickCount * 0.35D; - AntarchyGravityDirection gravity = AntarchyGravityApi.getGravityDirection(this); + GravityDirection gravity = GravityApi.getGravityDirection(this); for (int tier = 0; tier < 4; tier++) { double tierProgress = tier / 3.0D; double radius = Mth.lerp(progress, fieldRadius * (0.25D + tierProgress * 0.5D), 0.7D); double localY = -1.5D + tierProgress * 4.5D; for (int point = 0; point < 10; point++) { double angle = rotation + tier * 0.65D + Mth.TWO_PI * point / 10.0D; - Vec3 particlePos = center.add(AntarchyGravityRotationUtil.vecPlayerToWorld( + Vec3 particlePos = center.add(GravityRotationUtil.vecPlayerToWorld( Math.cos(angle) * radius, localY, Math.sin(angle) * radius, gravity)); level.sendParticles(ParticleTypes.REVERSE_PORTAL, particlePos.x, particlePos.y, particlePos.z, @@ -1742,13 +1742,13 @@ public class QueenEntity extends RoyalBossEntity { private void spawnAccelerationHelix(ServerLevel level, double progress) { double rotation = this.tickCount * Mth.lerp(progress, 0.24D, 0.62D); double radius = Mth.lerp(progress, 2.8D, 0.75D); - AntarchyGravityDirection gravity = AntarchyGravityApi.getGravityDirection(this); + GravityDirection gravity = GravityApi.getGravityDirection(this); for (int strand = 0; strand < 2; strand++) { for (int segment = 0; segment < 9; segment++) { double heightProgress = segment / 8.0D; double angle = rotation + strand * Math.PI + heightProgress * Mth.TWO_PI * 1.5D; double localY = 0.4D + heightProgress * (this.getBbHeight() + 2.0D); - Vec3 particlePos = this.position().add(AntarchyGravityRotationUtil.vecPlayerToWorld( + Vec3 particlePos = this.position().add(GravityRotationUtil.vecPlayerToWorld( Math.cos(angle) * radius, localY, Math.sin(angle) * radius, gravity)); level.sendParticles(AntarchyObjects.LUCID_BOLT_IMPACT_SMALL.get(), particlePos.x, particlePos.y, particlePos.z, @@ -1849,7 +1849,7 @@ public class QueenEntity extends RoyalBossEntity { if (entity == this || isFieldImmune(entity) || entity instanceof Player player && player.isCreative()) { continue; } - double downSign = AntarchyGravityApi.isGravityInverted(entity) ? 1.0D : -1.0D; + double downSign = GravityApi.isGravityInverted(entity) ? 1.0D : -1.0D; entity.setDeltaMovement(entity.getDeltaMovement().add(0.0D, downSign * CRUSHING_GRAVITY_STRENGTH, 0.0D)); entity.hasImpulse = true; if (entity instanceof LivingEntity living && this.tickCount % 8 == 0) { diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalBossEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalBossEntity.java index 1f483df6..148d75bc 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalBossEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalBossEntity.java @@ -10,8 +10,8 @@ import com.craisinlord.antarchy.content.entity.royal.beam.RoyalBeamTerrainMode; import com.craisinlord.antarchy.content.entity.royal.beam.RoyalBeamElement; import com.craisinlord.antarchy.content.entity.royal.attack.RoyalAttackLane; import com.craisinlord.antarchy.content.entity.royal.attack.RoyalAttackScheduler; -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 com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisUndersideManager; import java.util.Arrays; import java.util.HashSet; @@ -526,7 +526,7 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult if (this.isFlyingBoss()) { this.moveControl = this.isRoyalFlying() ? this.flyingMoveControl : this.groundMoveControl; this.navigation = this.isRoyalFlying() ? this.flyingNavigation : this.groundNavigation; - this.setNoGravity(!AntarchyGravityApi.isGravityInverted(this)); + this.setNoGravity(!GravityApi.isGravityInverted(this)); if (!this.isRoyalFlying()) { this.setNoGravity(false); } @@ -750,8 +750,8 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult } protected final void addGravityAwareImpulse(Entity entity, Vec3 worldImpulse) { - AntarchyGravityApi.setWorldVelocity(entity, - AntarchyGravityApi.getWorldVelocity(entity).add(worldImpulse)); + GravityApi.setWorldVelocity(entity, + GravityApi.getWorldVelocity(entity).add(worldImpulse)); } protected final boolean isRoyalPhaseTransitionActive() { @@ -937,7 +937,7 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult this.aerialCombatAnchor = null; this.aerialCombatAnchorTicks = 0; - boolean inverted = AntarchyGravityApi.isGravityInverted(this); + boolean inverted = GravityApi.isGravityInverted(this); double groundBelowTarget = this.groundYBelow(wanted.x, wanted.z); double wantedY = this.landingForCombat ? (inverted ? target.getY() + target.getBbHeight() - this.getBbHeight() : groundBelowTarget) @@ -964,7 +964,7 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult if (!this.isFlyingBoss() || this.managesOwnCombatLocomotion()) { return; } - boolean inverted = AntarchyGravityApi.isGravityInverted(this); + boolean inverted = GravityApi.isGravityInverted(this); double groundY = this.groundYBelow(this.getX(), this.getZ()); if (this.landingForCombat) { if (!target.onGround()) { @@ -1007,7 +1007,7 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult this.entityData.set(ROYAL_FLYING, flying); this.moveControl = flying ? this.flyingMoveControl : this.groundMoveControl; this.navigation = flying ? this.flyingNavigation : this.groundNavigation; - this.setNoGravity(flying && !AntarchyGravityApi.isGravityInverted(this)); + this.setNoGravity(flying && !GravityApi.isGravityInverted(this)); } protected double groundYBelow(double x, double z) { @@ -1016,7 +1016,7 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult } private void tickFlyingAltitude() { - if (AntarchyGravityApi.isGravityInverted(this)) { + if (GravityApi.isGravityInverted(this)) { return; } if (this.onGround()) { @@ -1155,8 +1155,8 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult forward.x * spec.forwardOffset() + right.x * spec.lateralOffset(), spec.yOffset(), forward.z * spec.forwardOffset() + right.z * spec.lateralOffset()); - return this.position().add(AntarchyGravityRotationUtil.vecPlayerToWorld(localOffset, - AntarchyGravityApi.getGravityDirection(this))); + return this.position().add(GravityRotationUtil.vecPlayerToWorld(localOffset, + GravityApi.getGravityDirection(this))); } protected Vec3 beamAnchor(RoyalHead head) { @@ -1166,8 +1166,8 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult protected Vec3 beamDirection(RoyalHead head) { float yaw = this.getYRot() * Mth.DEG_TO_RAD; Vec3 localDirection = new Vec3(-Math.sin(yaw), 0.0D, Math.cos(yaw)); - return AntarchyGravityRotationUtil.vecPlayerToWorld(localDirection, - AntarchyGravityApi.getGravityDirection(this)).normalize(); + return GravityRotationUtil.vecPlayerToWorld(localDirection, + GravityApi.getGravityDirection(this)).normalize(); } protected boolean targetInBeamLine(RoyalHead head, LivingEntity target) { @@ -1197,8 +1197,8 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult forward.x * BEAM_MUZZLE_FORWARD + right.x * lateral, vertical, forward.z * BEAM_MUZZLE_FORWARD + right.z * lateral); - return new Vec3(x, y, z).add(AntarchyGravityRotationUtil.vecPlayerToWorld(localOffset, - AntarchyGravityApi.getGravityDirection(this))); + return new Vec3(x, y, z).add(GravityRotationUtil.vecPlayerToWorld(localOffset, + GravityApi.getGravityDirection(this))); } protected double royalBeamMinimumRange() { diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/stratoshark/StratosharkEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/stratoshark/StratosharkEntity.java index 98f582d8..5a7e9850 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/stratoshark/StratosharkEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/stratoshark/StratosharkEntity.java @@ -2,9 +2,9 @@ package com.craisinlord.antarchy.content.entity.stratoshark; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchySoundEvents; -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 net.minecraft.core.BlockPos; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.server.level.ServerLevel; @@ -607,20 +607,20 @@ public class StratosharkEntity extends Monster implements GeoEntity { } } - private AntarchyGravityDirection gravityDirection() { - return AntarchyGravityApi.getGravityDirection(this); + private GravityDirection gravityDirection() { + return GravityApi.getGravityDirection(this); } private Vec3 toLocal(Vec3 worldVector) { - return AntarchyGravityRotationUtil.vecWorldToPlayer(worldVector, this.gravityDirection()); + return GravityRotationUtil.vecWorldToPlayer(worldVector, this.gravityDirection()); } private Vec3 toWorld(Vec3 localVector) { - return AntarchyGravityRotationUtil.vecPlayerToWorld(localVector, this.gravityDirection()); + return GravityRotationUtil.vecPlayerToWorld(localVector, this.gravityDirection()); } private Vec3 toWorld(double x, double y, double z) { - return AntarchyGravityRotationUtil.vecPlayerToWorld(x, y, z, this.gravityDirection()); + return GravityRotationUtil.vecPlayerToWorld(x, y, z, this.gravityDirection()); } private Vec3 toLocalPlane(Vec3 worldVector) { diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/vortex/VortexEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/vortex/VortexEntity.java index 44e3527c..229ef235 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/vortex/VortexEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/vortex/VortexEntity.java @@ -2,8 +2,8 @@ package com.craisinlord.antarchy.content.entity.vortex; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisUndersideManager; -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.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.syncher.EntityDataAccessor; @@ -203,7 +203,7 @@ public class VortexEntity extends Monster implements GeoEntity { private void tickCombatMovement(LivingEntity target) { this.faceTowards(target.position().add(0.0D, target.getBbHeight() * 0.5D, 0.0D), 12.0F, 8.0F); Vec3 gravityUp = Vec3.atLowerCornerOf( - AntarchyGravityRotationUtil.getGravityDownDirection(this).getOpposite().getNormal()); + GravityRotationUtil.getGravityDownDirection(this).getOpposite().getNormal()); Vec3 hoverPosition = target.position().add(gravityUp.scale(2.5D)); this.getMoveControl().setWantedPosition(hoverPosition.x, hoverPosition.y, hoverPosition.z, 0.38D); @@ -256,7 +256,7 @@ public class VortexEntity extends Monster implements GeoEntity { double distance = direction.length(); Vec3 drift = distance > 1.0E-6D ? direction.scale(0.24D / distance) : this.getViewVector(1.0F).scale(0.24D); WindVortexEntity vortex = WindVortexEntity.create(serverLevel, windVortexTypeSupplier.get(), origin, Vec3.ZERO, this, true); - vortex.setAxis(AntarchyGravityRotationUtil.getGravityDownDirection(this).getOpposite()); + vortex.setAxis(GravityRotationUtil.getGravityDownDirection(this).getOpposite()); vortex.setTravel(drift); vortex.setTravelDuration(Mth.clamp((int) Math.ceil(distance / drift.length()), 8, 36)); vortex.setHoming(false); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/vortex/WindVortexEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/vortex/WindVortexEntity.java index 3ff59d1b..9feddbc7 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/vortex/WindVortexEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/vortex/WindVortexEntity.java @@ -2,8 +2,8 @@ package com.craisinlord.antarchy.content.entity.vortex; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyTags; -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.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; @@ -508,7 +508,7 @@ public class WindVortexEntity extends Entity { .add(tangent.scale(spin)) .add(basis.axis.scale(axialSpeed)) .scale(ENTITY_FORCE_SPEED_SCALE); - Vec3 current = AntarchyGravityApi.getWorldVelocity(entity); + Vec3 current = GravityApi.getWorldVelocity(entity); Vec3 updatedMovement = current.lerp(wanted, 0.72D); if (this.travelling) { updatedMovement = updatedMovement.add(this.travelVelocity.scale(0.8D * ENTITY_FORCE_SPEED_SCALE)); @@ -516,12 +516,12 @@ public class WindVortexEntity extends Entity { if (mode == VortexMode.UPWARD && entity.onGround()) { double minRise = (entity instanceof Player ? 0.38D : 0.3D) * ENTITY_FORCE_SPEED_SCALE; Vec3 gravityUp = Vec3.atLowerCornerOf( - AntarchyGravityRotationUtil.getGravityDownDirection(entity).getOpposite().getNormal()); + GravityRotationUtil.getGravityDownDirection(entity).getOpposite().getNormal()); double minimumAxialSpeed = Math.max(updatedMovement.dot(gravityUp), minRise); updatedMovement = updatedMovement.add(gravityUp.scale(minimumAxialSpeed - updatedMovement.dot(gravityUp))); entity.setOnGround(false); } - AntarchyGravityApi.setWorldVelocity(entity, updatedMovement); + GravityApi.setWorldVelocity(entity, updatedMovement); if (entity instanceof Player) { entity.setOnGround(false); } @@ -572,7 +572,7 @@ public class WindVortexEntity extends Entity { double arc = Mth.clamp(distance * 0.06D, 0.25D, 1.1D) * ENTITY_FORCE_SPEED_SCALE; double power = this.launchStrength * Mth.clamp(distance / 6.0D, 0.6D, 2.0D) * ENTITY_FORCE_SPEED_SCALE; Vec3 gravityUp = Vec3.atLowerCornerOf( - AntarchyGravityRotationUtil.getGravityDownDirection(entity).getOpposite().getNormal()); + GravityRotationUtil.getGravityDownDirection(entity).getOpposite().getNormal()); this.setWorldVelocity(entity, direction.scale(power).add(gravityUp.scale(arc))); entity.fallDistance = 0.0F; entity.hasImpulse = true; @@ -592,7 +592,7 @@ public class WindVortexEntity extends Entity { } private void setWorldVelocity(Entity entity, Vec3 velocity) { - AntarchyGravityApi.setWorldVelocity(entity, velocity); + GravityApi.setWorldVelocity(entity, velocity); } private DamageSource damageSource() { diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyGravityAccess.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyGravityAccess.java deleted file mode 100644 index 4b13e527..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyGravityAccess.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.craisinlord.antarchy.content.gravity; - -public interface AntarchyGravityAccess { - AntarchyGravityDirection antarchy$getGravityDirection(); - - AntarchyGravityDirection antarchy$getPrevGravityDirection(); - - boolean antarchy$isGravityForced(); - - int antarchy$getGravityTransitionDuration(); - - int antarchy$getGravityTransitionRemaining(); - - void antarchy$setGravityState(AntarchyGravityDirection direction, boolean forced, AntarchyGravityTransition transition); - - void antarchy$setAirborneGravityState(AntarchyGravityDirection direction, boolean forced, AntarchyGravityTransition transition); - - void antarchy$applySyncedGravityState( - AntarchyGravityDirection direction, - AntarchyGravityDirection previousDirection, - boolean forced, - int transitionDuration, - int transitionRemaining - ); -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyGravityApi.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyGravityApi.java deleted file mode 100644 index 00e484dd..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyGravityApi.java +++ /dev/null @@ -1,238 +0,0 @@ -package com.craisinlord.antarchy.content.gravity; - -import net.minecraft.world.entity.Entity; -import net.minecraft.world.phys.Vec3; - -public final class AntarchyGravityApi { - public interface GravitySyncDispatcher { - void onGravityStateChanged(Entity entity); - } - - private static GravitySyncDispatcher syncDispatcher = entity -> { - }; - - private AntarchyGravityApi() { - } - - public static AntarchyGravityDirection getGravityDirection(Entity entity) { - return access(entity).antarchy$getGravityDirection(); - } - - public static AntarchyGravityDirection getPrevGravityDirection(Entity entity) { - return access(entity).antarchy$getPrevGravityDirection(); - } - - public static boolean isGravityForced(Entity entity) { - return access(entity).antarchy$isGravityForced(); - } - - public static boolean isGravityInverted(Entity entity) { - return getGravityDirection(entity).isInverted(); - } - - public static int getTransitionDuration(Entity entity) { - return access(entity).antarchy$getGravityTransitionDuration(); - } - - public static int getTransitionRemaining(Entity entity) { - return access(entity).antarchy$getGravityTransitionRemaining(); - } - - public static float getGravityFlipProgress(Entity entity, float partialTick) { - AntarchyGravityAccess access = access(entity); - AntarchyGravityDirection current = access.antarchy$getGravityDirection(); - AntarchyGravityDirection previous = access.antarchy$getPrevGravityDirection(); - int duration = access.antarchy$getGravityTransitionDuration(); - int remaining = access.antarchy$getGravityTransitionRemaining(); - if (duration <= 0 || current == previous) { - return current.isInverted() ? 1.0F : 0.0F; - } - - float elapsed = duration - remaining + partialTick; - float fraction = Math.max(0.0F, Math.min(1.0F, elapsed / duration)); - return previous.isInverted() ? 1.0F - fraction : fraction; - } - - public static void setGravityDirection(Entity entity, AntarchyGravityDirection direction) { - setGravityDirection(entity, direction, false, AntarchyGravityTransition.INSTANT); - } - - public static void setGravityDirection(Entity entity, AntarchyGravityDirection direction, AntarchyGravityTransition transition) { - setGravityDirection(entity, direction, false, transition); - } - - public static void setGravityDirection(Entity entity, AntarchyGravityDirection direction, boolean forced) { - setGravityDirection(entity, direction, forced, AntarchyGravityTransition.INSTANT); - } - - public static void setGravityDirection(Entity entity, AntarchyGravityDirection direction, boolean forced, AntarchyGravityTransition transition) { - access(entity).antarchy$setGravityState(direction, forced, transition); - } - - public static void setForcedGravityDirection(Entity entity, AntarchyGravityDirection direction) { - setForcedGravityDirection(entity, direction, AntarchyGravityTransition.INSTANT); - } - - public static void setForcedGravityDirection(Entity entity, AntarchyGravityDirection direction, AntarchyGravityTransition transition) { - access(entity).antarchy$setGravityState(direction, true, transition); - } - - public static void setAirborneGravityDirection(Entity entity, AntarchyGravityDirection direction, boolean forced, AntarchyGravityTransition transition) { - access(entity).antarchy$setAirborneGravityState(direction, forced, transition); - } - - public static void clearForcedGravity(Entity entity) { - access(entity).antarchy$setGravityState(AntarchyGravityDirection.DOWN, false, AntarchyGravityTransition.INSTANT); - } - - public static void applySyncedState( - Entity entity, - AntarchyGravityDirection direction, - AntarchyGravityDirection previousDirection, - boolean forced, - int transitionDuration, - int transitionRemaining - ) { - access(entity).antarchy$applySyncedGravityState(direction, previousDirection, forced, transitionDuration, transitionRemaining); - } - - public static void setSyncDispatcher(GravitySyncDispatcher dispatcher) { - syncDispatcher = dispatcher; - } - - public static void notifyGravityStateChanged(Entity entity) { - syncDispatcher.onGravityStateChanged(entity); - } - - public static Vec3 getWorldVelocity(Entity entity) { - return AntarchyGravityRotationUtil.vecPlayerToWorld(entity.getDeltaMovement(), getGravityDirection(entity)); - } - - public static void setWorldVelocity(Entity entity, Vec3 worldVelocity) { - entity.setDeltaMovement(AntarchyGravityRotationUtil.vecWorldToPlayer(worldVelocity, getGravityDirection(entity))); - } - - public static Vec3 getEyeOffset(Entity entity) { - return AntarchyGravityRotationUtil.getEyeOffset(entity, entity.getEyeHeight()); - } - - public static double eyeX(Entity entity) { - return isGravityInverted(entity) ? entity.getEyePosition().x : entity.getX(); - } - - public static double eyeY(Entity entity) { - return isGravityInverted(entity) ? entity.getEyePosition().y : entity.getY(); - } - - public static double eyeZ(Entity entity) { - return isGravityInverted(entity) ? entity.getEyePosition().z : entity.getZ(); - } - - public static Vec3 deltaMovement(net.minecraft.world.entity.LivingEntity target) { - return isGravityInverted(target) ? getWorldVelocity(target) : target.getDeltaMovement(); - } - - public static double projectileSpawnX(net.minecraft.world.entity.LivingEntity shooter) { - return projectileSpawnVec(shooter).x; - } - - public static double projectileSpawnY(net.minecraft.world.entity.LivingEntity shooter) { - return projectileSpawnVec(shooter).y; - } - - public static double projectileSpawnZ(net.minecraft.world.entity.LivingEntity shooter) { - return projectileSpawnVec(shooter).z; - } - - public static double rangedBodyTargetX(net.minecraft.world.entity.LivingEntity target) { - if (!isGravityInverted(target)) { - return target.getX(); - } - return target.position().add(AntarchyGravityRotationUtil.vecPlayerToWorld( - 0.0D, - target.getBbHeight() * 0.3333333333333333D, - 0.0D, - getGravityDirection(target) - )).x; - } - - public static double rangedBodyTargetY(net.minecraft.world.entity.LivingEntity target, double heightScale) { - if (!isGravityInverted(target)) { - return target.getY(heightScale); - } - return target.position().add(AntarchyGravityRotationUtil.vecPlayerToWorld( - 0.0D, - target.getBbHeight() * 0.3333333333333333D, - 0.0D, - getGravityDirection(target) - )).y; - } - - public static double rangedBodyTargetZ(net.minecraft.world.entity.LivingEntity target) { - if (!isGravityInverted(target)) { - return target.getZ(); - } - return target.position().add(AntarchyGravityRotationUtil.vecPlayerToWorld( - 0.0D, - target.getBbHeight() * 0.3333333333333333D, - 0.0D, - getGravityDirection(target) - )).z; - } - - public static double rangedEyeTargetX(net.minecraft.world.entity.LivingEntity target) { - if (!isGravityInverted(target)) { - return target.getX(); - } - return target.position().add(AntarchyGravityRotationUtil.vecPlayerToWorld( - 0.0D, - target.getEyeHeight() - 1.100000023841858D, - 0.0D, - getGravityDirection(target) - )).x; - } - - public static double rangedEyeTargetY(net.minecraft.world.entity.LivingEntity target) { - if (!isGravityInverted(target)) { - return target.getEyeY(); - } - return target.position().add(AntarchyGravityRotationUtil.vecPlayerToWorld( - 0.0D, - target.getEyeHeight() - 1.100000023841858D, - 0.0D, - getGravityDirection(target) - )).y + 1.100000023841858D; - } - - public static double rangedEyeTargetZ(net.minecraft.world.entity.LivingEntity target) { - if (!isGravityInverted(target)) { - return target.getZ(); - } - return target.position().add(AntarchyGravityRotationUtil.vecPlayerToWorld( - 0.0D, - target.getEyeHeight() - 1.100000023841858D, - 0.0D, - getGravityDirection(target) - )).z; - } - - public static double rangedSqrt(double value, net.minecraft.world.entity.LivingEntity target) { - return isGravityInverted(target) ? Math.sqrt(Math.sqrt(value)) : Math.sqrt(value); - } - - private static AntarchyGravityAccess access(Entity entity) { - if (entity instanceof AntarchyGravityAccess access) { - return access; - } - - throw new IllegalStateException("Entity " + entity + " is missing Antarchy gravity state"); - } - - private static Vec3 projectileSpawnVec(net.minecraft.world.entity.LivingEntity shooter) { - AntarchyGravityDirection direction = getGravityDirection(shooter); - if (!direction.isInverted()) { - return new Vec3(shooter.getX(), shooter.getEyeY() - 0.1D, shooter.getZ()); - } - return shooter.getEyePosition().subtract(AntarchyGravityRotationUtil.vecPlayerToWorld(0.0D, 0.1D, 0.0D, direction)); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyGravityDirection.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyGravityDirection.java deleted file mode 100644 index 183d1489..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyGravityDirection.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.craisinlord.antarchy.content.gravity; - -import java.util.Optional; - -public enum AntarchyGravityDirection { - DOWN(0, "down", false), - UP(1, "up", true); - - private final int id; - private final String serializedName; - private final boolean inverted; - - AntarchyGravityDirection(int id, String serializedName, boolean inverted) { - this.id = id; - this.serializedName = serializedName; - this.inverted = inverted; - } - - public int getId() { - return this.id; - } - - public String getSerializedName() { - return this.serializedName; - } - - public boolean isInverted() { - return this.inverted; - } - - public static AntarchyGravityDirection byId(int id) { - return id == UP.id ? UP : DOWN; - } - - public static Optional parse(String value) { - for (AntarchyGravityDirection direction : values()) { - if (direction.serializedName.equalsIgnoreCase(value)) { - return Optional.of(direction); - } - } - - return Optional.empty(); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyGravityRotationUtil.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyGravityRotationUtil.java deleted file mode 100644 index 1f6c6c3b..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyGravityRotationUtil.java +++ /dev/null @@ -1,140 +0,0 @@ -package com.craisinlord.antarchy.content.gravity; - -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.phys.Vec2; -import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.Vec3; -import org.joml.Quaternionf; -import org.joml.Vector3f; - -public final class AntarchyGravityRotationUtil { - private AntarchyGravityRotationUtil() { - } - - public static Vec3 vecWorldToPlayer(Vec3 vector, AntarchyGravityDirection direction) { - if (!direction.isInverted()) { - return vector; - } - - return new Vec3(-vector.x, -vector.y, vector.z); - } - - public static Vec3 vecWorldToPlayer(double x, double y, double z, AntarchyGravityDirection direction) { - return vecWorldToPlayer(new Vec3(x, y, z), direction); - } - - public static Vec3 vecPlayerToWorld(Vec3 vector, AntarchyGravityDirection direction) { - if (!direction.isInverted()) { - return vector; - } - - return new Vec3(-vector.x, -vector.y, vector.z); - } - - public static Vec3 vecPlayerToWorld(double x, double y, double z, AntarchyGravityDirection direction) { - return vecPlayerToWorld(new Vec3(x, y, z), direction); - } - - public static Vec3 maskPlayerToWorld(Vec3 vector, AntarchyGravityDirection direction) { - return vector; - } - - public static Vec3 getEyeOffset(Entity entity, double eyeHeight) { - return vecPlayerToWorld(new Vec3(0.0D, eyeHeight, 0.0D), AntarchyGravityApi.getGravityDirection(entity)); - } - - public static Vec3 getEyeOffset(Entity entity, double eyeHeight, float partialTick) { - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(entity); - if (!direction.isInverted() && AntarchyGravityApi.getGravityFlipProgress(entity, partialTick) <= 0.0F) { - return new Vec3(0.0D, eyeHeight, 0.0D); - } - - Vector3f offset = new Vector3f(0.0F, (float) eyeHeight, 0.0F); - offset.rotate(getWorldRotationQuaternion(entity, partialTick)); - return new Vec3(offset.x(), offset.y(), offset.z()); - } - - public static AABB boxPlayerToWorld(AABB box, AntarchyGravityDirection direction) { - if (!direction.isInverted()) { - return box; - } - - return new AABB( - vecPlayerToWorld(new Vec3(box.minX, box.minY, box.minZ), direction), - vecPlayerToWorld(new Vec3(box.maxX, box.maxY, box.maxZ), direction) - ); - } - - public static AABB boxWorldToPlayer(AABB box, AntarchyGravityDirection direction) { - if (!direction.isInverted()) { - return box; - } - - return new AABB( - vecWorldToPlayer(new Vec3(box.minX, box.minY, box.minZ), direction), - vecWorldToPlayer(new Vec3(box.maxX, box.maxY, box.maxZ), direction) - ); - } - - public static Quaternionf getWorldRotationQuaternion(Entity entity, float partialTick) { - return rotationAroundNegativeZ(180.0F * AntarchyGravityApi.getGravityFlipProgress(entity, partialTick)); - } - - public static Quaternionf getCameraRotationQuaternion(Entity entity, float partialTick) { - return rotationAroundNegativeZ(-180.0F * AntarchyGravityApi.getGravityFlipProgress(entity, partialTick)); - } - - public static Vec2 rotWorldToPlayer(float yaw, float pitch, AntarchyGravityDirection direction) { - Vec3 vector = vecWorldToPlayer(rotToVec(yaw, pitch), direction); - return vecToRot(vector); - } - - public static Vec2 rotPlayerToWorld(float yaw, float pitch, AntarchyGravityDirection direction) { - Vec3 vector = vecPlayerToWorld(rotToVec(yaw, pitch), direction); - return vecToRot(vector); - } - - public static Direction getGravityDownDirection(Entity entity) { - return AntarchyGravityApi.isGravityInverted(entity) ? Direction.UP : Direction.DOWN; - } - - public static BlockPos getSupportingBlockPos(Entity entity, double offset) { - Direction direction = getGravityDownDirection(entity); - Vec3 pos = entity.position().add( - direction.getStepX() * offset, - direction.getStepY() * offset, - direction.getStepZ() * offset - ); - return BlockPos.containing(pos); - } - - private static Quaternionf rotationAroundNegativeZ(float degrees) { - return new Quaternionf().fromAxisAngleDeg(0.0F, 0.0F, -1.0F, degrees); - } - - private static Vec3 rotToVec(float yaw, float pitch) { - double radPitch = pitch * 0.017453292F; - double radNegYaw = -yaw * 0.017453292F; - double cosNegYaw = Math.cos(radNegYaw); - double sinNegYaw = Math.sin(radNegYaw); - double cosPitch = Math.cos(radPitch); - double sinPitch = Math.sin(radPitch); - return new Vec3(sinNegYaw * cosPitch, -sinPitch, cosNegYaw * cosPitch); - } - - private static Vec2 vecToRot(Vec3 vector) { - double sinPitch = -vector.y; - double radPitch = Math.asin(sinPitch); - double cosPitch = Math.cos(radPitch); - double sinNegYaw = vector.x / cosPitch; - double cosNegYaw = Math.max(-1.0D, Math.min(1.0D, vector.z / cosPitch)); - double radNegYaw = Math.acos(cosNegYaw); - if (sinNegYaw < 0.0D) { - radNegYaw = Math.PI * 2.0D - radNegYaw; - } - - return new Vec2((float) (-radNegYaw / 0.017453292F), (float) (radPitch / 0.017453292F)); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyGravityTransition.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyGravityTransition.java deleted file mode 100644 index b58f2bf7..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyGravityTransition.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.craisinlord.antarchy.content.gravity; - -public record AntarchyGravityTransition(int durationTicks) { - public static final AntarchyGravityTransition INSTANT = new AntarchyGravityTransition(0); - - public AntarchyGravityTransition { - durationTicks = Math.max(0, durationTicks); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyMountedGravityHelper.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyMountedGravityHelper.java deleted file mode 100644 index bf4053e8..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/gravity/AntarchyMountedGravityHelper.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.craisinlord.antarchy.content.gravity; - -import com.craisinlord.antarchy.content.AntarchyObjects; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.LivingEntity; - -public final class AntarchyMountedGravityHelper { - private static final AntarchyGravityTransition STACK_TRANSITION = new AntarchyGravityTransition(12); - - private AntarchyMountedGravityHelper() { - } - - public static void syncConnectedStack(Entity entity) { - if (entity == null || entity.level().isClientSide()) { - return; - } - syncRootStack(entity.getRootVehicle(), null); - } - - public static void syncConnectedStackIgnoring(Entity entity, LivingEntity ignoredEffectSource) { - if (entity == null || entity.level().isClientSide()) { - return; - } - syncRootStack(entity.getRootVehicle(), ignoredEffectSource); - } - - public static void syncSeparatedStacks(Entity previousVehicle, Entity detachedEntity) { - if (previousVehicle != null && !previousVehicle.level().isClientSide()) { - syncRootStack(previousVehicle.getRootVehicle(), null); - } - if (detachedEntity != null && !detachedEntity.level().isClientSide()) { - syncRootStack(detachedEntity.getRootVehicle(), null); - } - } - - private static void syncRootStack(Entity root, LivingEntity ignoredEffectSource) { - boolean shouldInvert = stackHasInvertedEffect(root, ignoredEffectSource); - applyGravityState(root, shouldInvert); - for (Entity passenger : root.getIndirectPassengers()) { - applyGravityState(passenger, shouldInvert); - } - } - - private static boolean stackHasInvertedEffect(Entity root, LivingEntity ignoredEffectSource) { - if (hasInvertedEffect(root, ignoredEffectSource)) { - return true; - } - for (Entity passenger : root.getIndirectPassengers()) { - if (hasInvertedEffect(passenger, ignoredEffectSource)) { - return true; - } - } - return false; - } - - private static boolean hasInvertedEffect(Entity entity, LivingEntity ignoredEffectSource) { - return entity instanceof LivingEntity living - && living != ignoredEffectSource - && living.hasEffect(AntarchyObjects.INVERTED_EFFECT.get()); - } - - private static void applyGravityState(Entity entity, boolean shouldInvert) { - if (shouldInvert) { - if (AntarchyGravityApi.getGravityDirection(entity) != AntarchyGravityDirection.UP) { - AntarchyGravityApi.setForcedGravityDirection(entity, AntarchyGravityDirection.UP, STACK_TRANSITION); - } - return; - } - - if (AntarchyGravityApi.isGravityForced(entity)) { - AntarchyGravityApi.setGravityDirection(entity, AntarchyGravityDirection.DOWN, false, STACK_TRANSITION); - } - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/gravity/GravityWalkNodeEvaluator.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/gravity/GravityWalkNodeEvaluator.java deleted file mode 100644 index cda49d4f..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/gravity/GravityWalkNodeEvaluator.java +++ /dev/null @@ -1,214 +0,0 @@ -package com.craisinlord.antarchy.content.gravity; - -import net.minecraft.util.Mth; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.world.entity.Mob; -import net.minecraft.world.level.PathNavigationRegion; -import net.minecraft.world.level.pathfinder.Node; -import net.minecraft.world.level.pathfinder.PathType; -import net.minecraft.world.level.pathfinder.PathfindingContext; -import net.minecraft.world.level.pathfinder.WalkNodeEvaluator; - -public class GravityWalkNodeEvaluator extends WalkNodeEvaluator { - private static final long LOG_TIME_THRESHOLD_NANOS = 25_000_000L; - - private long antarchy$prepareStartNanos; - private int antarchy$nodeProbeCount; - - private static final int[] START_Y_SEARCH = {0, 1, -1, 2, -2}; - private static final int[][] INVERTED_CARDINAL_NEIGHBOR_OFFSETS = { - {1, 0, 0}, - {-1, 0, 0}, - {0, 0, 1}, - {0, 0, -1} - }; - private static final int[][] INVERTED_DIAGONAL_NEIGHBOR_OFFSETS = { - {1, 0, 1}, - {1, 0, -1}, - {-1, 0, 1}, - {-1, 0, -1} - }; - - @Override - public void prepare(PathNavigationRegion sourceIn, Mob mob) { - super.prepare(sourceIn, mob); - this.antarchy$prepareStartNanos = System.nanoTime(); - this.antarchy$nodeProbeCount = 0; - } - - @Override - public void done() { - if (this.mob != null && AntarchyGravityApi.isGravityInverted(this.mob)) { - long elapsedNanos = System.nanoTime() - this.antarchy$prepareStartNanos; - if (elapsedNanos > LOG_TIME_THRESHOLD_NANOS) { - com.craisinlord.antarchy.Antarchy.LOGGER.warn( - "[antarchy-gravity] slow inverted pathfind: type={} uuid={} pos=({}, {}, {}) nodeProbes={} elapsedMs={}", - this.mob.getType(), this.mob.getUUID(), - this.mob.getX(), this.mob.getY(), this.mob.getZ(), - this.antarchy$nodeProbeCount, elapsedNanos / 1_000_000.0 - ); - } - } - super.done(); - } - - @Override - public Node getStart() { - if (!AntarchyGravityApi.isGravityInverted(this.mob)) { - return super.getStart(); - } - - int x = Mth.floor(this.mob.getX()); - int z = Mth.floor(this.mob.getZ()); - int y = Mth.floor(this.mob.getY() + this.mob.getBbHeight()) - 1; - Node node = this.antarchy$findStartNode(x, y, z); - // A floor-oriented start is a different coordinate model and must not - // be mixed into an inverted search. PathFinder treats null as a clean - // no-path result. - return node; - } - - private Node antarchy$findStartNode(int x, int y, int z) { - for (int dy : START_Y_SEARCH) { - int candidateY = y + dy; - for (int dx = -1; dx <= 1; dx++) { - for (int dz = -1; dz <= 1; dz++) { - Node node = this.antarchy$createStartNode(x + dx, candidateY, z + dz); - if (node != null) { - return node; - } - } - } - } - return null; - } - - private Node antarchy$createStartNode(int x, int y, int z) { - this.antarchy$nodeProbeCount++; - if (!this.antarchy$hasCeilingSupport(this.currentContext, x, y, z)) { - return null; - } - - PathType type = this.getPathTypeOfMob(this.currentContext, x, y, z, this.mob); - float malus = this.mob.getPathfindingMalus(type); - if (malus < 0.0F || type == PathType.OPEN) { - return null; - } - - Node node = this.getNode(x, y, z); - node.type = type; - node.costMalus = malus; - return node; - } - - private boolean antarchy$hasCeilingSupport(PathfindingContext context, int x, int y, int z) { - for (int dx = 0; dx < this.entityWidth; dx++) { - for (int dz = 0; dz < this.entityDepth; dz++) { - BlockPos ceilingPos = new BlockPos(x + dx, y + 1, z + dz); - if (!context.level().getBlockState(ceilingPos).isFaceSturdy(context.level(), ceilingPos, Direction.DOWN)) { - return false; - } - } - } - return true; - } - - @Override - public PathType getPathTypeOfMob(PathfindingContext context, int x, int y, int z, Mob mob) { - if (!AntarchyGravityApi.isGravityInverted(mob)) { - return super.getPathTypeOfMob(context, x, y, z, mob); - } - - if (!this.antarchy$hasCeilingSupport(context, x, y, z)) { - return PathType.OPEN; - } - - PathType result = PathType.WALKABLE; - for (int dw = 0; dw < this.entityWidth; dw++) { - for (int dd = 0; dd < this.entityDepth; dd++) { - for (int dh = 0; dh < this.entityHeight; dh++) { - PathType type = this.getPathType(context, x + dw, y - dh, z + dd); - float malus = mob.getPathfindingMalus(type); - if (malus < 0.0F) { - return type; - } - if (malus >= mob.getPathfindingMalus(result)) { - result = type; - } - } - } - } - - return result; - } - - @Override - public int getNeighbors(Node[] neighbors, Node current) { - if (!AntarchyGravityApi.isGravityInverted(this.mob)) { - return super.getNeighbors(neighbors, current); - } - - int count = 0; - Node[] cardinalNeighbors = new Node[INVERTED_CARDINAL_NEIGHBOR_OFFSETS.length]; - for (int i = 0; i < INVERTED_CARDINAL_NEIGHBOR_OFFSETS.length; i++) { - int[] offset = INVERTED_CARDINAL_NEIGHBOR_OFFSETS[i]; - Node neighbor = this.antarchy$getNeighbor(current.x + offset[0], current.y, current.z + offset[2]); - cardinalNeighbors[i] = neighbor; - if (neighbor != null) { - neighbors[count++] = neighbor; - } - } - - for (int i = 0; i < INVERTED_DIAGONAL_NEIGHBOR_OFFSETS.length; i++) { - int[] offset = INVERTED_DIAGONAL_NEIGHBOR_OFFSETS[i]; - if (!this.antarchy$canUseDiagonal(cardinalNeighbors, i)) { - continue; - } - Node neighbor = this.antarchy$getNeighbor(current.x + offset[0], current.y, current.z + offset[2]); - if (neighbor != null) { - neighbors[count++] = neighbor; - } - } - - // Relative "up" for an inverted mob is world-Y down. Keep both - // vertical directions available so a one-block ceiling step can be - // represented in the path instead of trapping the mob below it. - Node stepTowardInvertedUp = this.antarchy$getNeighbor(current.x, current.y - 1, current.z); - if (stepTowardInvertedUp != null) { - neighbors[count++] = stepTowardInvertedUp; - } - Node stepTowardInvertedDown = this.antarchy$getNeighbor(current.x, current.y + 1, current.z); - if (stepTowardInvertedDown != null) { - neighbors[count++] = stepTowardInvertedDown; - } - - return count; - } - - private boolean antarchy$canUseDiagonal(Node[] cardinalNeighbors, int diagonalIndex) { - return switch (diagonalIndex) { - case 0 -> cardinalNeighbors[0] != null && cardinalNeighbors[2] != null; - case 1 -> cardinalNeighbors[0] != null && cardinalNeighbors[3] != null; - case 2 -> cardinalNeighbors[1] != null && cardinalNeighbors[2] != null; - case 3 -> cardinalNeighbors[1] != null && cardinalNeighbors[3] != null; - default -> false; - }; - } - - private Node antarchy$getNeighbor(int x, int y, int z) { - this.antarchy$nodeProbeCount++; - PathType type = this.getPathTypeOfMob(this.currentContext, x, y, z, this.mob); - if (type == PathType.OPEN || this.mob.getPathfindingMalus(type) < 0.0F) { - return null; - } - - Node node = this.getNode(x, y, z); - if (node.closed) { - return null; - } - node.type = type; - node.costMalus = this.mob.getPathfindingMalus(type); - return node; - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/gravity/ProjectileLaunchGravity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/gravity/ProjectileLaunchGravity.java deleted file mode 100644 index 9ed220b4..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/gravity/ProjectileLaunchGravity.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.craisinlord.antarchy.content.gravity; - -import net.minecraft.world.phys.Vec3; - -/** Converts a projectile launch vector from its shooter's gravity frame to world space. */ -public final class ProjectileLaunchGravity { - private ProjectileLaunchGravity() { - } - - public static Vec3 toWorld(Vec3 launchDirection, AntarchyGravityDirection gravityDirection) { - return AntarchyGravityRotationUtil.vecPlayerToWorld(launchDirection, gravityDirection); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/gravity/ScgunsProjectileAccess.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/gravity/ScgunsProjectileAccess.java deleted file mode 100644 index 6b640e8a..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/gravity/ScgunsProjectileAccess.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.craisinlord.antarchy.content.gravity; - -import net.minecraft.world.entity.LivingEntity; -import org.jetbrains.annotations.Nullable; - -/** Exposes Scorched Guns' base ProjectileEntity fields to mixins targeting its subclasses. */ -public interface ScgunsProjectileAccess { - @Nullable LivingEntity antarchy$getScgunsShooter(); - double antarchy$getScgunsModifiedGravity(); -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/AntimetalScaffoldingItem.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/AntimetalScaffoldingItem.java index 657a2e86..be39ee6c 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/AntimetalScaffoldingItem.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/AntimetalScaffoldingItem.java @@ -1,7 +1,7 @@ package com.craisinlord.antarchy.content.item; import com.craisinlord.antarchy.content.block.AntimetalScaffoldingBlock; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; +import com.craisinlord.anthology.gravity.GravityApi; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.item.Item; @@ -24,7 +24,7 @@ public class AntimetalScaffoldingItem extends ScaffoldingBlockItem { Level level = context.getLevel(); BlockState clickedState = level.getBlockState(clickedPos); Block block = this.getBlock(); - boolean inverted = context.getPlayer() != null && AntarchyGravityApi.isGravityInverted(context.getPlayer()); + boolean inverted = context.getPlayer() != null && GravityApi.isGravityInverted(context.getPlayer()); if (!clickedState.is(block)) { return AntimetalScaffoldingBlock.getDistance(level, clickedPos, inverted) == 7 ? null : context; diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/AttitudeAdjusterSlamManager.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/AttitudeAdjusterSlamManager.java index d14e8951..3adeeddc 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/AttitudeAdjusterSlamManager.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/AttitudeAdjusterSlamManager.java @@ -1,8 +1,8 @@ package com.craisinlord.antarchy.content.item; import com.craisinlord.antarchy.config.AntarchySettings; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; +import com.craisinlord.anthology.gravity.GravityDirection; +import com.craisinlord.anthology.gravity.GravityRotationUtil; import com.craisinlord.antarchy.content.network.ImpactShakeSync; import java.util.HashMap; import java.util.Iterator; @@ -105,10 +105,10 @@ public final class AttitudeAdjusterSlamManager { return false; } PLAYER_SLAMS.put(player.getUUID(), new PlayerSlamState(player.getUUID(), hand, player.serverLevel().dimension().location().toString(), player.serverLevel().getGameTime() + SLAM_TIMEOUT_TICKS, player.fallDistance)); - AntarchyGravityDirection gravityDirection = AntarchyGravityRotationUtil.getGravityDownDirection(player) == Direction.UP ? AntarchyGravityDirection.UP : AntarchyGravityDirection.DOWN; + GravityDirection gravityDirection = GravityRotationUtil.getGravityDownDirection(player) == Direction.UP ? GravityDirection.UP : GravityDirection.DOWN; Vec3 motion = player.getDeltaMovement(); - Vec3 localMotion = AntarchyGravityRotationUtil.vecWorldToPlayer(motion, gravityDirection); - player.setDeltaMovement(AntarchyGravityRotationUtil.vecPlayerToWorld(new Vec3(localMotion.x * 0.25D, PLAYER_SLAM_START_VELOCITY, localMotion.z * 0.25D), gravityDirection)); + Vec3 localMotion = GravityRotationUtil.vecWorldToPlayer(motion, gravityDirection); + player.setDeltaMovement(GravityRotationUtil.vecPlayerToWorld(new Vec3(localMotion.x * 0.25D, PLAYER_SLAM_START_VELOCITY, localMotion.z * 0.25D), gravityDirection)); player.hurtMarked = true; player.fallDistance = 0.0F; player.swing(hand, true); @@ -168,10 +168,10 @@ public final class AttitudeAdjusterSlamManager { if (!player.onGround()) { continue; } - Direction gravityDown = AntarchyGravityRotationUtil.getGravityDownDirection(player); + Direction gravityDown = GravityRotationUtil.getGravityDownDirection(player); Vec3 impactPos = player.position(); BlockPos groundPos = getSlamSurfacePos(player, gravityDown); - double localVerticalSpeed = AntarchyGravityRotationUtil.vecWorldToPlayer(player.getDeltaMovement(), gravityDown == Direction.UP ? AntarchyGravityDirection.UP : AntarchyGravityDirection.DOWN).y; + double localVerticalSpeed = GravityRotationUtil.vecWorldToPlayer(player.getDeltaMovement(), gravityDown == Direction.UP ? GravityDirection.UP : GravityDirection.DOWN).y; double impactStrength = Math.max(Math.abs(Math.min(localVerticalSpeed, PLAYER_SLAM_START_VELOCITY)), Math.max(state.startFallDistance, player.fallDistance) * 0.15D); float damage = (float) Mth.clamp(PLAYER_SLAM_BASE_DAMAGE + impactStrength * PLAYER_SLAM_DAMAGE_SCALE * 10.0D, PLAYER_SLAM_BASE_DAMAGE, PLAYER_SLAM_MAX_DAMAGE); AABB area = new AABB(impactPos.x - PLAYER_SLAM_RADIUS, impactPos.y - 1.5D, impactPos.z - PLAYER_SLAM_RADIUS, impactPos.x + PLAYER_SLAM_RADIUS, impactPos.y + 2.5D, impactPos.z + PLAYER_SLAM_RADIUS); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/BigBerthaItem.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/BigBerthaItem.java index 22cb89a9..8e7260ed 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/BigBerthaItem.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/BigBerthaItem.java @@ -5,7 +5,7 @@ import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.AntarchyTags; import com.craisinlord.antarchy.content.client.model.ResourceBackedGeoItemModel; import com.craisinlord.antarchy.content.entity.lucid.LucidBoltEntity; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; +import com.craisinlord.anthology.gravity.GravityApi; import com.craisinlord.antarchy.config.AntarchySettings; import java.util.List; import java.util.function.Consumer; @@ -292,7 +292,7 @@ public class BigBerthaItem extends SwordItem implements GeoItem { Vec3 impactPos = new Vec3(target.getX(), target.getY(0.8D), target.getZ()); LucidBoltEntity.spawnImpactParticles(level, impactPos); level.sendParticles(ParticleTypes.PORTAL, impactPos.x, impactPos.y, impactPos.z, 12, 0.25D, 0.25D, 0.25D, 0.08D); - if (!AntarchyGravityApi.isGravityInverted(player)) { + if (!GravityApi.isGravityInverted(player)) { return; } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/EyeOfTheStormItem.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/EyeOfTheStormItem.java index e32bb10f..2f4b2e34 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/EyeOfTheStormItem.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/EyeOfTheStormItem.java @@ -5,7 +5,7 @@ import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.client.model.ResourceBackedGeoItemModel; import com.craisinlord.antarchy.content.client.renderer.AnimatedHeldItemRenderer; import com.craisinlord.antarchy.content.entity.vortex.WindVortexEntity; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; +import com.craisinlord.anthology.gravity.GravityApi; import java.util.List; import java.util.function.Consumer; import net.minecraft.ChatFormatting; @@ -77,15 +77,15 @@ public class EyeOfTheStormItem extends Item implements GeoItem { false ); vortex.setMode(WindVortexEntity.VortexMode.UPWARD); - vortex.setAxis(AntarchyGravityApi.isGravityInverted(player) ? Direction.DOWN : Direction.UP); + vortex.setAxis(GravityApi.isGravityInverted(player) ? Direction.DOWN : Direction.UP); vortex.setVortexSize((float) AntarchySettings.eyeOfTheStormUpdraftHeight(), (float) AntarchySettings.eyeOfTheStormUpdraftRadius()); vortex.setVortexDurationTicks(AntarchySettings.eyeOfTheStormUpdraftDurationTicks()); serverLevel.addFreshEntity(vortex); Vec3 gravityUp = Vec3.atLowerCornerOf( - (AntarchyGravityApi.isGravityInverted(player) ? Direction.DOWN : Direction.UP).getNormal()); - AntarchyGravityApi.setWorldVelocity(player, - AntarchyGravityApi.getWorldVelocity(player).add(gravityUp.scale(AntarchySettings.eyeOfTheStormUpdraftLaunchStrength()))); + (GravityApi.isGravityInverted(player) ? Direction.DOWN : Direction.UP).getNormal()); + GravityApi.setWorldVelocity(player, + GravityApi.getWorldVelocity(player).add(gravityUp.scale(AntarchySettings.eyeOfTheStormUpdraftLaunchStrength()))); player.hasImpulse = true; player.resetFallDistance(); player.getCooldowns().addCooldown(this, AntarchySettings.eyeOfTheStormUpdraftCooldownTicks()); @@ -133,7 +133,7 @@ public class EyeOfTheStormItem extends Item implements GeoItem { true ); vortex.setMode(WindVortexEntity.VortexMode.UPWARD); - vortex.setAxis(owner != null && AntarchyGravityApi.isGravityInverted(owner) ? Direction.DOWN : Direction.UP); + vortex.setAxis(owner != null && GravityApi.isGravityInverted(owner) ? Direction.DOWN : Direction.UP); vortex.setVortexSize((float) AntarchySettings.eyeOfTheStormSurgeHeight(), (float) AntarchySettings.eyeOfTheStormSurgeRadius()); vortex.setVortexDurationTicks(AntarchySettings.eyeOfTheStormSurgeDurationTicks()); vortex.setVortexStrengths(AntarchySettings.eyeOfTheStormSurgePullStrength(), AntarchySettings.eyeOfTheStormSurgeReturnStrength()); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/GravityGunItem.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/GravityGunItem.java index cdf6ef71..281a8312 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/GravityGunItem.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/GravityGunItem.java @@ -4,8 +4,8 @@ import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyTags; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.client.model.ResourceBackedGeoItemModel; -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 it.unimi.dsi.fastutil.longs.Long2BooleanMap; import it.unimi.dsi.fastutil.longs.Long2BooleanOpenHashMap; import it.unimi.dsi.fastutil.longs.Long2IntMap; @@ -527,11 +527,11 @@ public class GravityGunItem extends Item implements GeoItem { private static Vec3 getHoldVector(Player player) { Vec3 look = getRawLookVector(player); - if (!AntarchyGravityApi.isGravityInverted(player)) { + if (!GravityApi.isGravityInverted(player)) { return look; } - return AntarchyGravityRotationUtil.vecWorldToPlayer(look, AntarchyGravityApi.getGravityDirection(player)); + return GravityRotationUtil.vecWorldToPlayer(look, GravityApi.getGravityDirection(player)); } private static Vec3 getRawLookVector(Player player) { @@ -540,14 +540,14 @@ public class GravityGunItem extends Item implements GeoItem { } private static Vec2 getHoldRotation(Player player) { - if (!AntarchyGravityApi.isGravityInverted(player)) { + if (!GravityApi.isGravityInverted(player)) { return new Vec2(player.getYRot(), player.getXRot()); } - return AntarchyGravityRotationUtil.rotWorldToPlayer( + return GravityRotationUtil.rotWorldToPlayer( player.getYRot(), player.getXRot(), - AntarchyGravityApi.getGravityDirection(player) + GravityApi.getGravityDirection(player) ); } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/PortalGunItem.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/PortalGunItem.java index 5971d8b3..163357ea 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/PortalGunItem.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/PortalGunItem.java @@ -7,7 +7,7 @@ import com.craisinlord.antarchy.content.block.entity.PortalGunPortalFaceRecord; import com.craisinlord.antarchy.content.block.entity.PortalGunPortalCellAccess; import com.craisinlord.antarchy.content.client.model.ResourceBackedGeoItemModel; import com.craisinlord.antarchy.content.client.renderer.AnimatedHeldItemRenderer; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; +import com.craisinlord.anthology.gravity.GravityApi; import com.craisinlord.antarchy.content.network.PortalGunPrimaryPayload; import com.craisinlord.antarchy.content.portalgun.PortalGunPlacement; import com.craisinlord.antarchy.content.portalgun.PortalGunMoonMath; @@ -390,9 +390,9 @@ public class PortalGunItem extends Item implements GeoItem { private Vec3 worldLook(LivingEntity entity) { Vec3 look = entity.getLookAngle(); - return AntarchyGravityApi.isGravityInverted(entity) - ? com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil.vecPlayerToWorld( - look, AntarchyGravityApi.getGravityDirection(entity)) + return GravityApi.isGravityInverted(entity) + ? com.craisinlord.anthology.gravity.GravityRotationUtil.vecPlayerToWorld( + look, GravityApi.getGravityDirection(entity)) : look; } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/RpoLauncherItem.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/RpoLauncherItem.java index 2b3b5cec..7c4ed4ae 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/RpoLauncherItem.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/RpoLauncherItem.java @@ -6,9 +6,9 @@ import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.client.model.ResourceBackedGeoItemModel; import com.craisinlord.antarchy.content.client.renderer.AnimatedHeldItemRenderer; import com.craisinlord.antarchy.content.entity.OctopusBombEntity; -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 java.util.function.Consumer; import java.util.function.Predicate; import net.minecraft.core.component.DataComponents; @@ -165,11 +165,11 @@ public class RpoLauncherItem extends ProjectileWeaponItem implements GeoItem { float yaw = player.getYRot() + yawOffset; Vec3 localDirection = Vec3.directionFromRotation(new Vec2(player.getXRot(), yaw)); - AntarchyGravityDirection gravity = AntarchyGravityApi.getGravityDirection(player); - Vec3 direction = AntarchyGravityRotationUtil.vecPlayerToWorld(localDirection, gravity).normalize(); + GravityDirection gravity = GravityApi.getGravityDirection(player); + Vec3 direction = GravityRotationUtil.vecPlayerToWorld(localDirection, gravity).normalize(); Vec3 spawn = player.getEyePosition().add(direction.scale(0.55D)); projectileBomb.moveTo(spawn.x, spawn.y, spawn.z, yaw, player.getXRot()); - projectileBomb.launchAsExplosiveProjectile(player, direction.scale(AntarchySettings.rpoLauncherLaunchVelocity()).add(AntarchyGravityApi.deltaMovement(player))); + projectileBomb.launchAsExplosiveProjectile(player, direction.scale(AntarchySettings.rpoLauncherLaunchVelocity()).add(GravityApi.deltaMovement(player))); level.addFreshEntity(projectileBomb); } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/SquidzookaItem.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/SquidzookaItem.java index 6950d148..e1fc96fb 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/SquidzookaItem.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/SquidzookaItem.java @@ -5,9 +5,9 @@ import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.client.model.ResourceBackedGeoItemModel; import com.craisinlord.antarchy.content.entity.MissileSquidEntity; -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 java.util.function.Consumer; import java.util.function.Predicate; import net.minecraft.core.component.DataComponents; @@ -166,11 +166,11 @@ public class SquidzookaItem extends ProjectileWeaponItem implements GeoItem { float yaw = player.getYRot() + yawOffset; Vec3 localDirection = Vec3.directionFromRotation(new Vec2(player.getXRot(), yaw)); - AntarchyGravityDirection gravity = AntarchyGravityApi.getGravityDirection(player); - Vec3 direction = AntarchyGravityRotationUtil.vecPlayerToWorld(localDirection, gravity).normalize(); + GravityDirection gravity = GravityApi.getGravityDirection(player); + Vec3 direction = GravityRotationUtil.vecPlayerToWorld(localDirection, gravity).normalize(); Vec3 spawn = player.getEyePosition().add(direction.scale(0.45D)); projectileSquid.moveTo(spawn.x, spawn.y, spawn.z, yaw, player.getXRot()); - projectileSquid.launchAsProjectile(player, direction.scale(AntarchySettings.squidzookaLaunchVelocity()).add(AntarchyGravityApi.deltaMovement(player))); + projectileSquid.launchAsProjectile(player, direction.scale(AntarchySettings.squidzookaLaunchVelocity()).add(GravityApi.deltaMovement(player))); level.addFreshEntity(projectileSquid); } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/WormHookTetherManager.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/WormHookTetherManager.java index 5e765760..f80887ec 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/WormHookTetherManager.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/WormHookTetherManager.java @@ -2,8 +2,8 @@ package com.craisinlord.antarchy.content.item; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.entity.WormHookProjectileEntity; -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 com.craisinlord.antarchy.content.util.WormHookRope; import java.util.Map; import java.util.UUID; @@ -161,11 +161,11 @@ public final class WormHookTetherManager { } private static Vec3 getWorldMotion(ServerPlayer player) { - return AntarchyGravityRotationUtil.vecPlayerToWorld(player.getDeltaMovement(), AntarchyGravityApi.getGravityDirection(player)); + return GravityRotationUtil.vecPlayerToWorld(player.getDeltaMovement(), GravityApi.getGravityDirection(player)); } private static void setWorldMotion(ServerPlayer player, Vec3 worldMotion) { - player.setDeltaMovement(AntarchyGravityRotationUtil.vecWorldToPlayer(worldMotion, AntarchyGravityApi.getGravityDirection(player))); + player.setDeltaMovement(GravityRotationUtil.vecWorldToPlayer(worldMotion, GravityApi.getGravityDirection(player))); } private static void tickFlyingSound(ServerPlayer player, TetherState state) { diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/movement/AntarchyGravityHooks.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/movement/AntarchyGravityHooks.java new file mode 100644 index 00000000..5ad12022 --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/movement/AntarchyGravityHooks.java @@ -0,0 +1,94 @@ +package com.craisinlord.antarchy.content.movement; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.client.PortalGunRollClientState; +import com.craisinlord.antarchy.content.entity.BedBugEntity; +import com.craisinlord.antarchy.content.entity.portal.DimensionalTearEntity; +import com.craisinlord.antarchy.content.fluid.AntarchyFluidChecks; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisUndersideManager; +import com.craisinlord.anthology.effect.AnthologyEffects; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityHooks; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.Mob; + +public final class AntarchyGravityHooks { + private AntarchyGravityHooks() { + } + + public static void register() { + GravityHooks.addInvertedRegion(ThoraxisUndersideManager::isInUnderside); + GravityHooks.addInvertedFluid(AntarchyFluidChecks::isAntiwater); + GravityHooks.addLoadListener(AntarchyGravityHooks::clearStaleUndersideInversion); + } + + public static void registerClient() { + GravityHooks.addCameraRollSource(PortalGunRollClientState::getRollDegrees); + } + + private static void clearStaleUndersideInversion(Entity entity) { + if (!(entity instanceof Mob mob) + || !GravityApi.isGravityInverted(mob) + || !GravityApi.isGravityForced(mob)) { + return; + } + MobEffectInstance invertedEffect = mob.getEffect(AnthologyEffects.inverted()); + boolean aboveUndersideExit = ThoraxisUndersideManager.isAboveUndersideExit(mob); + int nearbyDimensionalTears = countNearbyDimensionalTears(mob); + if (invertedEffect != null + && invertedEffect.isAmbient() + && !invertedEffect.isVisible() + && aboveUndersideExit) { + clearInversion(mob); + Antarchy.LOGGER.warn( + "[antarchy-gravity] cleared stale underside inversion from loaded mob type={} uuid={} pos=({}, {}, {}) dim={} effectDuration={} nearbyDimensionalTears={}", + mob.getType(), mob.getUUID(), mob.getX(), mob.getY(), mob.getZ(), + mob.level() != null ? mob.level().dimension().location() : "?", + invertedEffect.getDuration(), nearbyDimensionalTears + ); + return; + } + if (invertedEffect != null + && mob instanceof BedBugEntity + && aboveUndersideExit + && ThoraxisUndersideManager.isThoraxis(mob.level())) { + clearInversion(mob); + Antarchy.LOGGER.warn( + "[antarchy-gravity] cleared loaded inverted bed bug above underside exit type={} uuid={} pos=({}, {}, {}) dim={} effectDuration={} effectAmbient={} effectVisible={} nearbyDimensionalTears={}", + mob.getType(), mob.getUUID(), mob.getX(), mob.getY(), mob.getZ(), + mob.level() != null ? mob.level().dimension().location() : "?", + invertedEffect.getDuration(), invertedEffect.isAmbient(), invertedEffect.isVisible(), nearbyDimensionalTears + ); + return; + } + Antarchy.LOGGER.info( + "[antarchy-gravity] loaded inverted mob type={} uuid={} pos=({}, {}, {}) dim={} hasInvertedEffect={} effectDuration={} effectAmbient={} effectVisible={} aboveUndersideExit={} nearbyDimensionalTears={}", + mob.getType(), mob.getUUID(), mob.getX(), mob.getY(), mob.getZ(), + mob.level() != null ? mob.level().dimension().location() : "?", + invertedEffect != null, + invertedEffect != null ? invertedEffect.getDuration() : -1, + invertedEffect != null && invertedEffect.isAmbient(), + invertedEffect != null && invertedEffect.isVisible(), + aboveUndersideExit, + nearbyDimensionalTears + ); + } + + private static void clearInversion(Mob mob) { + mob.removeEffect(AnthologyEffects.inverted()); + GravityApi.resetGravityState(mob); + } + + private static int countNearbyDimensionalTears(Mob mob) { + if (!(mob.level() instanceof ServerLevel serverLevel)) { + return -1; + } + return serverLevel.getEntitiesOfClass( + DimensionalTearEntity.class, + mob.getBoundingBox().inflate(48.0D), + Entity::isAlive + ).size(); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/GravityStatePayload.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/GravityStatePayload.java deleted file mode 100644 index 195e8375..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/GravityStatePayload.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.craisinlord.antarchy.content.network; - -import com.craisinlord.antarchy.Antarchy; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; -import io.netty.buffer.ByteBuf; -import net.minecraft.network.codec.ByteBufCodecs; -import net.minecraft.network.codec.StreamCodec; -import net.minecraft.network.protocol.common.custom.CustomPacketPayload; -import net.minecraft.resources.ResourceLocation; - -public record GravityStatePayload( - int entityId, - int directionId, - int previousDirectionId, - boolean forced, - int transitionDuration, - int transitionRemaining -) implements CustomPacketPayload { - public static final Type TYPE = new Type<>(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "gravity_state")); - public static final StreamCodec STREAM_CODEC = StreamCodec.composite( - ByteBufCodecs.VAR_INT, - GravityStatePayload::entityId, - ByteBufCodecs.VAR_INT, - GravityStatePayload::directionId, - ByteBufCodecs.VAR_INT, - GravityStatePayload::previousDirectionId, - ByteBufCodecs.BOOL, - GravityStatePayload::forced, - ByteBufCodecs.VAR_INT, - GravityStatePayload::transitionDuration, - ByteBufCodecs.VAR_INT, - GravityStatePayload::transitionRemaining, - GravityStatePayload::new - ); - - public GravityStatePayload(int entityId, AntarchyGravityDirection direction, AntarchyGravityDirection previousDirection, boolean forced, int transitionDuration, int transitionRemaining) { - this(entityId, direction.getId(), previousDirection.getId(), forced, transitionDuration, transitionRemaining); - } - - public AntarchyGravityDirection direction() { - return AntarchyGravityDirection.byId(this.directionId); - } - - public AntarchyGravityDirection previousDirection() { - return AntarchyGravityDirection.byId(this.previousDirectionId); - } - - @Override - public Type type() { - return TYPE; - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunPortalEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunPortalEntity.java index 7648389d..2bc65c47 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunPortalEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunPortalEntity.java @@ -2,7 +2,7 @@ package com.craisinlord.antarchy.content.portalgun; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.config.AntarchySettings; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; +import com.craisinlord.anthology.gravity.GravityApi; import com.craisinlord.antarchy.content.block.entity.PortalGunPortalBaseBlockEntity; import com.craisinlord.antarchy.content.block.entity.PortalGunPortalCellAccess; import com.craisinlord.antarchy.content.block.entity.PortalGunPortalFaceRecord; @@ -388,7 +388,7 @@ public class PortalGunPortalEntity extends Entity implements GeoEntity { } public PortalTransit computeTransit(Entity entity, PortalGunPortalEntity destination, AABB box, Vec3 velocity, Vec3 look) { - if (!AntarchyGravityApi.isGravityInverted(entity)) { + if (!GravityApi.isGravityInverted(entity)) { return computeTransit(destination, box, velocity, look); } PortalGunWorldPortalShape source = this.getWorldPortalShape(); @@ -951,7 +951,7 @@ public class PortalGunPortalEntity extends Entity implements GeoEntity { Vec3 memberLook; if (root) { memberLook = transit.look(); - } else if (AntarchyGravityApi.isGravityInverted(member)) { + } else if (GravityApi.isGravityInverted(member)) { Vec3 worldLook = PortalGunTransitMath.entityVelocityToWorld(member, state.look()); memberLook = PortalGunTransitMath.entityVelocityFromWorld(member, PortalGunTransformUtil.transformVector(this, destination, worldLook).normalize()); @@ -961,7 +961,7 @@ public class PortalGunPortalEntity extends Entity implements GeoEntity { Vec3 memberMotion; if (root) { memberMotion = transit.velocity(); - } else if (AntarchyGravityApi.isGravityInverted(member)) { + } else if (GravityApi.isGravityInverted(member)) { Vec3 worldMotion = PortalGunTransitMath.entityVelocityToWorld(member, state.motion()); memberMotion = PortalGunTransitMath.entityVelocityFromWorld(member, PortalGunTransformUtil.transformVector(this, destination, worldMotion)); @@ -971,7 +971,7 @@ public class PortalGunPortalEntity extends Entity implements GeoEntity { float yaw = PortalGunTransformUtil.yawFromLook(memberLook); float pitch = PortalGunTransformUtil.pitchFromLook(memberLook); float fallDistance = PortalGunTransitMath.exitFallDistance(member.fallDistance, - AntarchyGravityApi.isGravityInverted(member) ? PortalGunTransitMath.entityVelocityToWorld(member, memberMotion) : memberMotion, + GravityApi.isGravityInverted(member) ? PortalGunTransitMath.entityVelocityToWorld(member, memberMotion) : memberMotion, member); if (member instanceof ServerPlayer player && root && clientAuthoritative) { player.moveTo(memberExitPos.x, memberExitPos.y, memberExitPos.z, yaw, pitch); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunProjectileEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunProjectileEntity.java index 0f293419..46e39a5d 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunProjectileEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunProjectileEntity.java @@ -1,9 +1,9 @@ package com.craisinlord.antarchy.content.portalgun; import com.craisinlord.antarchy.content.item.PortalGunItem; -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.config.AntarchySettings; import java.util.ArrayList; import java.util.Comparator; @@ -126,7 +126,7 @@ public class PortalGunProjectileEntity extends ThrowableItemProjectile { } public void configure(PortalGunPortalEntity.PortalSide side, UUID gunId, ItemStack gunStack) { - AntarchyGravityApi.setAirborneGravityDirection(this, AntarchyGravityDirection.DOWN, false, AntarchyGravityTransition.INSTANT); + GravityApi.setAirborneGravityDirection(this, GravityDirection.DOWN, false, GravityTransition.INSTANT); this.entityData.set(SIDE, side.ordinal()); this.gunId = gunId; this.setItem(gunStack.copyWithCount(1)); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunTransitMath.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunTransitMath.java index fd77677d..67616a63 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunTransitMath.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunTransitMath.java @@ -1,8 +1,8 @@ package com.craisinlord.antarchy.content.portalgun; -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 net.minecraft.world.entity.Entity; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; @@ -70,7 +70,7 @@ public final class PortalGunTransitMath { } public static Vec3 entityPosition(AABB box, Entity entity) { - return entityPosition(box, AntarchyGravityApi.isGravityInverted(entity)); + return entityPosition(box, GravityApi.isGravityInverted(entity)); } public static Vec3 entityPosition(AABB box, boolean inverted) { @@ -81,25 +81,25 @@ public final class PortalGunTransitMath { } public static Vec3 entityVelocityToWorld(Entity entity, Vec3 velocity) { - return entityVelocityToWorld(velocity, AntarchyGravityApi.isGravityInverted(entity)); + return entityVelocityToWorld(velocity, GravityApi.isGravityInverted(entity)); } public static Vec3 entityVelocityToWorld(Vec3 velocity, boolean inverted) { if (!inverted) { return velocity; } - return AntarchyGravityRotationUtil.vecPlayerToWorld(velocity, AntarchyGravityDirection.UP); + return GravityRotationUtil.vecPlayerToWorld(velocity, GravityDirection.UP); } public static Vec3 entityVelocityFromWorld(Entity entity, Vec3 velocity) { - return entityVelocityFromWorld(velocity, AntarchyGravityApi.isGravityInverted(entity)); + return entityVelocityFromWorld(velocity, GravityApi.isGravityInverted(entity)); } public static Vec3 entityVelocityFromWorld(Vec3 velocity, boolean inverted) { if (!inverted) { return velocity; } - return AntarchyGravityRotationUtil.vecWorldToPlayer(velocity, AntarchyGravityDirection.UP); + return GravityRotationUtil.vecWorldToPlayer(velocity, GravityDirection.UP); } public static Vec3 exitVelocity(PortalGunWorldPortalShape source, PortalGunWorldPortalShape destination, Vec3 velocity, double minUpwardExitSpeed, double maxExitSpeed) { @@ -122,7 +122,7 @@ public final class PortalGunTransitMath { } public static float exitFallDistance(float fallDistance, Vec3 exitVelocity, Entity entity) { - if (!AntarchyGravityApi.isGravityInverted(entity)) { + if (!GravityApi.isGravityInverted(entity)) { return exitFallDistance(fallDistance, exitVelocity); } return exitVelocity.y > 0.0D ? fallDistance : 0.0F; diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisUndersideManager.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisUndersideManager.java index c20fbf38..7834cd17 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisUndersideManager.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/worldgen/thoraxis/ThoraxisUndersideManager.java @@ -4,9 +4,9 @@ import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.advancement.AntarchyAdvancementTriggers; import com.craisinlord.antarchy.content.block.DreamSandBlock; -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 java.util.Collections; import java.util.IdentityHashMap; import java.util.Map; @@ -23,7 +23,6 @@ import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.entity.projectile.Projectile; import net.minecraft.world.level.ServerLevelAccessor; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; @@ -33,8 +32,8 @@ import net.minecraft.world.phys.Vec3; public final class ThoraxisUndersideManager { public static final int GRAVITY_FLIP_Y = 0; private static final net.minecraft.resources.ResourceLocation THORAXIS_DIMENSION = net.minecraft.resources.ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "thoraxis"); - private static final AntarchyGravityTransition TRANSITION = new AntarchyGravityTransition(12); - private static final AntarchyGravityTransition THROAT_TRANSITION = new AntarchyGravityTransition(12); + private static final GravityTransition TRANSITION = new GravityTransition(12); + private static final GravityTransition THROAT_TRANSITION = new GravityTransition(12); private static final int EFFECT_DURATION_TICKS = 50; private static final int EFFECT_REFRESH_THRESHOLD_TICKS = 10; private static final int DISCOVERY_INTERVAL_TICKS = 5; @@ -115,8 +114,8 @@ public final class ThoraxisUndersideManager { boolean shouldInvert = tracked ? entity.getY() < EXIT_UNDERSIDE_Y : entity.getY() < ENTER_UNDERSIDE_Y; if (shouldInvert) { - boolean needsFlip = AntarchyGravityApi.getGravityDirection(entity) != AntarchyGravityDirection.UP - || !AntarchyGravityApi.isGravityForced(entity); + boolean needsFlip = GravityApi.getGravityDirection(entity) != GravityDirection.UP + || !GravityApi.isGravityForced(entity); tracking.forcedItems.add(entity); if (needsFlip && (flipsRemaining <= 0 || !flipReady(tracking, uuid, now))) { continue; @@ -124,22 +123,22 @@ public final class ThoraxisUndersideManager { if (needsFlip) { flipsRemaining--; tracking.lastFlipTick.put(uuid, now); - AntarchyGravityApi.setForcedGravityDirection(entity, AntarchyGravityDirection.UP, TRANSITION); + GravityApi.setForcedGravityDirection(entity, GravityDirection.UP, TRANSITION); flippedItems++; } continue; } if (tracked) { - boolean isForcedUp = AntarchyGravityApi.getGravityDirection(entity) == AntarchyGravityDirection.UP - && AntarchyGravityApi.isGravityForced(entity); + boolean isForcedUp = GravityApi.getGravityDirection(entity) == GravityDirection.UP + && GravityApi.isGravityForced(entity); if (isForcedUp && !flipReady(tracking, uuid, now)) { continue; } tracking.forcedItems.remove(entity); if (isForcedUp) { tracking.lastFlipTick.put(uuid, now); - AntarchyGravityApi.setGravityDirection(entity, AntarchyGravityDirection.DOWN, false, TRANSITION); + GravityApi.setGravityDirection(entity, GravityDirection.DOWN, false, TRANSITION); restoredItems++; } evicted.add(entity); @@ -217,7 +216,7 @@ public final class ThoraxisUndersideManager { } if (isCrossingGravityBoundary(player)) { - boolean toUnderside = AntarchyGravityApi.getGravityDirection(player) == AntarchyGravityDirection.DOWN; + boolean toUnderside = GravityApi.getGravityDirection(player) == GravityDirection.DOWN; if (!toUnderside) { refreshInvertedEffect(player); } else { @@ -227,17 +226,17 @@ public final class ThoraxisUndersideManager { continue; } - if (AntarchyGravityApi.getGravityDirection(player) == AntarchyGravityDirection.DOWN + if (GravityApi.getGravityDirection(player) == GravityDirection.DOWN && player.getY() < UNDERSIDE_ENTRY_BORDER_Y && flipReady(tracking, player.getUUID(), now)) { - AntarchyGravityApi.setAirborneGravityDirection(player, AntarchyGravityDirection.UP, true, THROAT_TRANSITION); + GravityApi.setAirborneGravityDirection(player, GravityDirection.UP, true, THROAT_TRANSITION); player.resetFallDistance(); tracking.lastFlipTick.put(player.getUUID(), now); refreshInvertedEffect(player); continue; } - if (AntarchyGravityApi.isGravityInverted(player) && player.getY() < EXIT_UNDERSIDE_Y) { + if (GravityApi.isGravityInverted(player) && player.getY() < EXIT_UNDERSIDE_Y) { refreshInvertedEffect(player); } } @@ -245,7 +244,7 @@ public final class ThoraxisUndersideManager { private static void tickPlayerCrossing(ServerPlayer player, PlayerCrossing crossing, TrackingState tracking, long now) { crossing.ticks++; - Vec3 velocity = AntarchyGravityApi.getWorldVelocity(player); + Vec3 velocity = GravityApi.getWorldVelocity(player); if (!crossing.flipped) { if (!crossing.toUnderside) { refreshInvertedEffect(player); @@ -274,14 +273,14 @@ public final class ThoraxisUndersideManager { return; } - AntarchyGravityDirection destination = crossing.toUnderside - ? AntarchyGravityDirection.UP - : AntarchyGravityDirection.DOWN; - AntarchyGravityApi.setAirborneGravityDirection(player, destination, crossing.toUnderside, THROAT_TRANSITION); + GravityDirection destination = crossing.toUnderside + ? GravityDirection.UP + : GravityDirection.DOWN; + GravityApi.setAirborneGravityDirection(player, destination, crossing.toUnderside, THROAT_TRANSITION); double assistedVerticalVelocity = crossing.toUnderside ? Math.min(velocity.y, -0.7D) : Math.max(velocity.y, 0.7D); - AntarchyGravityApi.setWorldVelocity(player, + GravityApi.setWorldVelocity(player, new Vec3(velocity.x, assistedVerticalVelocity, velocity.z)); player.resetFallDistance(); crossing.flipped = true; @@ -306,10 +305,10 @@ public final class ThoraxisUndersideManager { } private static boolean isCrossingGravityBoundary(ServerPlayer player) { - Vec3 velocity = AntarchyGravityApi.getWorldVelocity(player); + Vec3 velocity = GravityApi.getWorldVelocity(player); AABB swept = player.getBoundingBox().expandTowards(velocity.scale(-1.0D)).inflate(0.08D); - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(player); - return direction == AntarchyGravityDirection.DOWN + GravityDirection direction = GravityApi.getGravityDirection(player); + return direction == GravityDirection.DOWN ? swept.minY < UNDERSIDE_ENTRY_BORDER_Y && swept.maxY >= UNDERSIDE_ENTRY_BORDER_Y && velocity.y <= -MIN_ENTRY_CROSSING_SPEED : swept.minY <= GRAVITY_FLIP_Y && swept.maxY > GRAVITY_FLIP_Y && velocity.y >= MIN_CROSSING_SPEED; } @@ -376,25 +375,12 @@ public final class ThoraxisUndersideManager { return isThoraxis(entity.level()) && entity.getY() < GRAVITY_FLIP_Y; } - public static void normalizeProjectileGravityFrame(Projectile projectile) { - boolean stateMismatch = AntarchyGravityApi.getGravityDirection(projectile) != AntarchyGravityDirection.DOWN - || AntarchyGravityApi.isGravityForced(projectile); - if (stateMismatch) { - AntarchyGravityApi.setAirborneGravityDirection( - projectile, - AntarchyGravityDirection.DOWN, - false, - AntarchyGravityTransition.INSTANT - ); - } - } - public static boolean isAboveUndersideExit(Entity entity) { return isThoraxis(entity.level()) && entity.getY() >= EXIT_UNDERSIDE_Y; } public static boolean shouldInvertInUnderside(Entity entity) { - return AntarchyGravityApi.isGravityInverted(entity) + return GravityApi.isGravityInverted(entity) && isInUnderside(entity); } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/AntarchyRangedAttackPatcher.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/AntarchyRangedAttackPatcher.java index 4b7d628d..b1d0c233 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/AntarchyRangedAttackPatcher.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/AntarchyRangedAttackPatcher.java @@ -14,7 +14,7 @@ final class AntarchyRangedAttackPatcher { private static final String LIVING_D_DESC = "(Lnet/minecraft/world/entity/LivingEntity;D)D"; private static final String D_LIVING_DESC = "(DLnet/minecraft/world/entity/LivingEntity;)D"; private static final String DELTA_MOVEMENT_DESC = "(Lnet/minecraft/world/entity/LivingEntity;)Lnet/minecraft/world/phys/Vec3;"; - private static final String API_OWNER = "com/craisinlord/antarchy/content/gravity/AntarchyGravityApi"; + private static final String API_OWNER = "com/craisinlord/anthology/gravity/GravityApi"; private enum AimMode { BODY, diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/DreamSandLowGravityMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/DreamSandLowGravityMixin.java index ea7694b4..43dfbd6a 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/DreamSandLowGravityMixin.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/DreamSandLowGravityMixin.java @@ -2,8 +2,8 @@ package com.craisinlord.antarchy.mixins; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.block.DreamSandBlock; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityDirection; import com.craisinlord.antarchy.content.movement.DreamSandLowGravityAccess; import net.minecraft.core.BlockPos; import net.minecraft.util.Mth; @@ -116,7 +116,7 @@ public abstract class DreamSandLowGravityMixin implements DreamSandLowGravityAcc @Unique private boolean antarchy$isSupportedByDreamSand(LivingEntity entity) { - AntarchyGravityDirection gravityDirection = AntarchyGravityApi.getGravityDirection(entity); + GravityDirection gravityDirection = GravityApi.getGravityDirection(entity); AABB box = entity.getBoundingBox(); BlockPos supportPos = gravityDirection.isInverted() ? BlockPos.containing(entity.getX(), box.maxY + 0.05D, entity.getZ()) diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/alexscaves/AlexsCavesCandyCaneHookMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/alexscaves/AlexsCavesCandyCaneHookMixin.java deleted file mode 100644 index e8168256..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/alexscaves/AlexsCavesCandyCaneHookMixin.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.craisinlord.antarchy.mixins.compat.alexscaves; - -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.content.worldgen.thoraxis.ThoraxisUndersideManager; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.projectile.Projectile; -import net.minecraft.world.phys.Vec3; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Pseudo; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.ModifyArg; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -/** Handles Alex's Caves' manually-launched Candy Cane Hook. */ -@Mixin(targets = "com.github.alexmodguy.alexscaves.server.entity.item.CandyCaneHookEntity") -@Pseudo -public abstract class AlexsCavesCandyCaneHookMixin { - private boolean antarchy$launchAdjusted; - - @Inject(method = "tick", at = @At("HEAD")) - private void antarchy$rotateManualLaunch(CallbackInfo ci) { - Projectile self = (Projectile) (Object) this; - if (this.antarchy$launchAdjusted) { - return; - } - this.antarchy$launchAdjusted = true; - - Entity owner = self.getOwner(); - boolean ownerInverted = owner != null && AntarchyGravityApi.isGravityInverted(owner); - if (ownerInverted || ThoraxisUndersideManager.isInUnderside(self)) { - AntarchyGravityDirection direction = ownerInverted - ? AntarchyGravityApi.getGravityDirection(owner) - : AntarchyGravityDirection.UP; - Vec3 launch = AntarchyGravityRotationUtil.vecPlayerToWorld( - self.getDeltaMovement(), direction); - self.setDeltaMovement(launch); - } - } - - @ModifyArg( - method = "fling", - at = @At(value = "INVOKE", target = "Lnet/minecraft/world/phys/Vec3;add(DDD)Lnet/minecraft/world/phys/Vec3;"), - index = 1 - ) - private double antarchy$invertFlingBoost(double y) { - Projectile self = (Projectile) (Object) this; - Entity owner = self.getOwner(); - return y != 0.0D && (ThoraxisUndersideManager.isInUnderside(self) - || (owner != null && AntarchyGravityApi.isGravityInverted(owner))) ? -y : y; - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/alexscaves/AlexsCavesDepthChargeMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/alexscaves/AlexsCavesDepthChargeMixin.java deleted file mode 100644 index 8b4833a1..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/alexscaves/AlexsCavesDepthChargeMixin.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.craisinlord.antarchy.mixins.compat.alexscaves; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisUndersideManager; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.projectile.Projectile; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Pseudo; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.ModifyArg; - -/** Corrects Depth Charge's custom tick, which bypasses ThrowableProjectile.tick. */ -@Mixin(targets = "com.github.alexmodguy.alexscaves.server.entity.item.DepthChargeEntity") -@Pseudo -public abstract class AlexsCavesDepthChargeMixin { - @ModifyArg( - method = "tick", - at = @At(value = "INVOKE", target = "Lnet/minecraft/world/phys/Vec3;add(DDD)Lnet/minecraft/world/phys/Vec3;"), - index = 1, - require = 0 - ) - private double antarchy$invertManualGravity(double y) { - Projectile self = (Projectile) (Object) this; - Entity owner = self.getOwner(); - return !self.isNoGravity() && (ThoraxisUndersideManager.isInUnderside(self) - || (owner != null && AntarchyGravityApi.isGravityInverted(owner))) ? -y : y; - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/alexscaves/AlexsCavesTephraMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/alexscaves/AlexsCavesTephraMixin.java deleted file mode 100644 index 0f96c5d6..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/alexscaves/AlexsCavesTephraMixin.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.craisinlord.antarchy.mixins.compat.alexscaves; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisUndersideManager; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.projectile.Projectile; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Pseudo; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.ModifyArg; - -/** Corrects Tephra's explicit -0.1 Y gravity adjustment. */ -@Mixin(targets = "com.github.alexmodguy.alexscaves.server.entity.item.TephraEntity") -@Pseudo -public abstract class AlexsCavesTephraMixin { - @ModifyArg( - method = "tick", - at = @At(value = "INVOKE", target = "Lnet/minecraft/world/phys/Vec3;add(DDD)Lnet/minecraft/world/phys/Vec3;", ordinal = 1), - index = 1 - ) - private double antarchy$invertManualGravity(double y) { - Projectile self = (Projectile) (Object) this; - Entity owner = self.getOwner(); - return !self.isNoGravity() && (ThoraxisUndersideManager.isInUnderside(self) - || (owner != null && AntarchyGravityApi.isGravityInverted(owner))) ? -y : y; - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/alexscaves/AlexsCavesWaterBoltMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/alexscaves/AlexsCavesWaterBoltMixin.java deleted file mode 100644 index 7bbcccd3..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/alexscaves/AlexsCavesWaterBoltMixin.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.craisinlord.antarchy.mixins.compat.alexscaves; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisUndersideManager; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.projectile.Projectile; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Pseudo; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.ModifyArg; - -/** Corrects Water Bolt's explicit -0.07 Y gravity adjustment. */ -@Mixin(targets = "com.github.alexmodguy.alexscaves.server.entity.item.WaterBoltEntity") -@Pseudo -public abstract class AlexsCavesWaterBoltMixin { - @ModifyArg( - method = "tick", - at = @At(value = "INVOKE", target = "Lnet/minecraft/world/phys/Vec3;add(DDD)Lnet/minecraft/world/phys/Vec3;", ordinal = 1), - index = 1 - ) - private double antarchy$invertManualGravity(double y) { - Projectile self = (Projectile) (Object) this; - Entity owner = self.getOwner(); - return !self.isNoGravity() && (ThoraxisUndersideManager.isInUnderside(self) - || (owner != null && AntarchyGravityApi.isGravityInverted(owner))) ? -y : y; - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/ars_nouveau/ArsNouveauProjectileGravityMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/ars_nouveau/ArsNouveauProjectileGravityMixin.java deleted file mode 100644 index fa90dabb..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/ars_nouveau/ArsNouveauProjectileGravityMixin.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.craisinlord.antarchy.mixins.compat.ars_nouveau; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityTransition; -import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisUndersideManager; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.projectile.Projectile; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Pseudo; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -/** Handles Ars Nouveau's explicit tickNextPosition gravity adjustment. */ -@Mixin(targets = "com.hollingsworth.arsnouveau.common.entity.EntityProjectileSpell") -@Pseudo -public abstract class ArsNouveauProjectileGravityMixin { - @Inject(method = "tick", at = @At("HEAD")) - private void antarchy$prepareArsProjectile(CallbackInfo ci) { - Projectile self = (Projectile) (Object) this; - Entity owner = self.getOwner(); - if (owner != null && (ThoraxisUndersideManager.isInUnderside(self) - || AntarchyGravityApi.isGravityInverted(owner))) { - AntarchyGravityApi.setAirborneGravityDirection( - self, - AntarchyGravityDirection.UP, - false, - AntarchyGravityTransition.INSTANT - ); - } - } - - @Inject(method = "tickNextPosition", at = @At("TAIL")) - private void antarchy$invertArsProjectileGravity(CallbackInfo ci) { - Projectile self = (Projectile) (Object) this; - if (!AntarchyGravityApi.isGravityInverted(self) || self.isNoGravity()) { - return; - } - - // Ars applies -0.03 directly in tickNextPosition(). Correct that one - // application to +0.03 without changing damping or spell effects. - self.setDeltaMovement(self.getDeltaMovement().add(0.0D, 0.06D, 0.0D)); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/irons_spellbooks/IronsSpellbooksProjectileGravityMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/irons_spellbooks/IronsSpellbooksProjectileGravityMixin.java deleted file mode 100644 index d44dd439..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/irons_spellbooks/IronsSpellbooksProjectileGravityMixin.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.craisinlord.antarchy.mixins.compat.irons_spellbooks; - -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.content.gravity.AntarchyGravityTransition; -import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisUndersideManager; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.projectile.Projectile; -import net.minecraft.world.phys.Vec3; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Pseudo; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -/** Handles Iron's Spellbooks' custom travel() gravity path. */ -@Mixin(targets = "io.redspace.ironsspellbooks.entity.spells.AbstractMagicProjectile") -@Pseudo -public abstract class IronsSpellbooksProjectileGravityMixin { - @Shadow public abstract float getSpeed(); - @Shadow protected abstract double getDefaultGravity(); - - @Inject(method = "tick", at = @At("HEAD")) - private void antarchy$prepareMagicProjectile(CallbackInfo ci) { - Projectile self = (Projectile) (Object) this; - Entity owner = self.getOwner(); - boolean inverted = ThoraxisUndersideManager.isInUnderside(self) - || (owner != null && AntarchyGravityApi.isGravityInverted(owner)); - if (!inverted) { - return; - } - AntarchyGravityApi.setAirborneGravityDirection( - self, - AntarchyGravityDirection.UP, - false, - AntarchyGravityTransition.INSTANT - ); - } - - @Inject(method = "shoot", at = @At("HEAD"), cancellable = true) - private void antarchy$rotateMagicProjectileLaunch(Vec3 rotation, CallbackInfo ci) { - Projectile self = (Projectile) (Object) this; - Entity owner = self.getOwner(); - if (owner == null || (!ThoraxisUndersideManager.isInUnderside(self) - && !AntarchyGravityApi.isGravityInverted(owner))) { - return; - } - self.setDeltaMovement(AntarchyGravityRotationUtil.vecPlayerToWorld( - rotation, - AntarchyGravityApi.getGravityDirection(owner) - ).scale(this.getSpeed())); - ci.cancel(); - } - - @Inject(method = "travel", at = @At("TAIL")) - private void antarchy$invertMagicProjectileGravity(CallbackInfo ci) { - Projectile self = (Projectile) (Object) this; - if (!AntarchyGravityApi.isGravityInverted(self) || self.isNoGravity()) { - return; - } - - // AbstractMagicProjectile.travel() already subtracted default gravity. - self.setDeltaMovement(self.getDeltaMovement().add(0.0D, 2.0D * this.getDefaultGravity(), 0.0D)); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/scguns/ScgunsArrowGravityMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/scguns/ScgunsArrowGravityMixin.java deleted file mode 100644 index 94ec1463..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/scguns/ScgunsArrowGravityMixin.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.craisinlord.antarchy.mixins.compat.scguns; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisUndersideManager; -import net.minecraft.world.entity.projectile.AbstractArrow; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Pseudo; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -/** Corrects Scorched Guns arrow-derived projectiles with custom tick gravity. */ -@Mixin(targets = "top.ribs.scguns.entity.projectile.BrassBoltEntity") -@Pseudo -public abstract class ScgunsArrowGravityMixin { - @Inject(method = "tick", at = @At("TAIL")) - private void antarchy$invertScgunsArrowGravity(CallbackInfo ci) { - AbstractArrow self = (AbstractArrow) (Object) this; - if (self.isNoGravity() || (!AntarchyGravityApi.isGravityInverted(self) - && !ThoraxisUndersideManager.isInUnderside(self))) { - return; - } - - // Brass Bolt adds +0.01 after AbstractArrow.tick(); invert that custom - // correction to -0.01, without touching normal arrows. - self.setDeltaMovement(self.getDeltaMovement().add(0.0D, -0.02D, 0.0D)); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/scguns/ScgunsProjectileEntityAccessMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/scguns/ScgunsProjectileEntityAccessMixin.java deleted file mode 100644 index a5c3efd2..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/scguns/ScgunsProjectileEntityAccessMixin.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.craisinlord.antarchy.mixins.compat.scguns; - -import com.craisinlord.antarchy.content.gravity.ScgunsProjectileAccess; -import net.minecraft.world.entity.LivingEntity; -import org.jetbrains.annotations.Nullable; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Pseudo; -import org.spongepowered.asm.mixin.Shadow; - -/* - * Shadows must live on the class that declares the field, so the subclasses - * reach these through ScgunsProjectileAccess instead. - */ -@Mixin(targets = "top.ribs.scguns.entity.projectile.ProjectileEntity") -@Pseudo -public abstract class ScgunsProjectileEntityAccessMixin implements ScgunsProjectileAccess { - @Shadow(remap = false) @Nullable protected LivingEntity shooter; - @Shadow(remap = false) protected double modifiedGravity; - - @Override - public @Nullable LivingEntity antarchy$getScgunsShooter() { - return this.shooter; - } - - @Override - public double antarchy$getScgunsModifiedGravity() { - return this.modifiedGravity; - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/scguns/ScgunsProjectileEntityGravityMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/scguns/ScgunsProjectileEntityGravityMixin.java deleted file mode 100644 index c4b36b8c..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/scguns/ScgunsProjectileEntityGravityMixin.java +++ /dev/null @@ -1,80 +0,0 @@ -package com.craisinlord.antarchy.mixins.compat.scguns; - -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.content.gravity.AntarchyGravityTransition; -import com.craisinlord.antarchy.content.gravity.ScgunsProjectileAccess; -import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisUndersideManager; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.phys.Vec3; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Pseudo; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -/** Bridges Scorched Guns' Entity-based projectile physics into Antarchy gravity. */ -@Mixin(targets = { - "top.ribs.scguns.entity.projectile.ProjectileEntity", - "top.ribs.scguns.entity.projectile.BearPackShellProjectileEntity", - "top.ribs.scguns.entity.projectile.KrahgRoundProjectileEntity", - "top.ribs.scguns.entity.projectile.LightningProjectileEntity", - "top.ribs.scguns.entity.projectile.OsborneSlugProjectileEntity", - "top.ribs.scguns.entity.projectile.ShotballProjectileEntity" -}) -@Pseudo -public abstract class ScgunsProjectileEntityGravityMixin { - @Unique private boolean antarchy$launchDirectionAdjusted; - - @Inject(method = "tick", at = @At("HEAD")) - private void antarchy$prepareScgunsProjectile(CallbackInfo ci) { - Entity self = (Entity) (Object) this; - LivingEntity shooter = ((ScgunsProjectileAccess) self).antarchy$getScgunsShooter(); - boolean inverted = ThoraxisUndersideManager.isInUnderside(self) - || (shooter != null && AntarchyGravityApi.isGravityInverted(shooter)); - if (!inverted) { - if (AntarchyGravityApi.isGravityInverted(self) && !AntarchyGravityApi.isGravityForced(self)) { - AntarchyGravityApi.setAirborneGravityDirection( - self, - AntarchyGravityDirection.DOWN, - false, - AntarchyGravityTransition.INSTANT - ); - } - return; - } - - AntarchyGravityApi.setAirborneGravityDirection( - self, - AntarchyGravityDirection.UP, - false, - AntarchyGravityTransition.INSTANT - ); - if (!this.antarchy$launchDirectionAdjusted && self.tickCount <= 1) { - Vec3 motion = self.getDeltaMovement(); - if (motion.lengthSqr() > 1.0E-8D) { - self.setDeltaMovement(AntarchyGravityRotationUtil.vecPlayerToWorld( - motion, - AntarchyGravityDirection.UP - )); - } - this.antarchy$launchDirectionAdjusted = true; - } - } - - @Inject(method = "tick", at = @At("TAIL")) - private void antarchy$invertScgunsGravity(CallbackInfo ci) { - Entity self = (Entity) (Object) this; - double modifiedGravity = ((ScgunsProjectileAccess) self).antarchy$getScgunsModifiedGravity(); - if (!AntarchyGravityApi.isGravityInverted(self) || modifiedGravity == 0.0D) { - return; - } - - // Scorched Guns already adds modifiedGravity once near tick end. Replace - // that downward world-Y acceleration with its upward counterpart. - self.setDeltaMovement(self.getDeltaMovement().add(0.0D, -2.0D * modifiedGravity, 0.0D)); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/AbstractArrowGravityMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/AbstractArrowGravityMixin.java deleted file mode 100644 index e948a155..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/AbstractArrowGravityMixin.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisUndersideManager; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import net.minecraft.world.entity.projectile.AbstractArrow; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -@Mixin(AbstractArrow.class) -/* - * Flips arrow gravity from the arrow's current position. - */ -public abstract class AbstractArrowGravityMixin { - - @WrapOperation(method = "tick", at = @At( - value = "INVOKE", - target = "Lnet/minecraft/world/entity/projectile/AbstractArrow;applyGravity()V")) - private void antarchy$applyArrowGravityUpward(AbstractArrow self, Operation original) { - if (!ThoraxisUndersideManager.isInUnderside(self)) { - original.call(self); - return; - } - // Vanilla subtracts gravity from world Y; the Underside adds it instead. - double gravity = self.getGravity(); - self.setDeltaMovement(self.getDeltaMovement().add(0.0D, gravity, 0.0D)); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/BehaviorUtilsGravityMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/BehaviorUtilsGravityMixin.java deleted file mode 100644 index b9bd9065..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/BehaviorUtilsGravityMixin.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; -import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisUndersideManager; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import com.llamalad7.mixinextras.sugar.Local; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.ai.behavior.BehaviorUtils; -import net.minecraft.world.entity.item.ItemEntity; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.Level; -import net.minecraft.world.phys.Vec3; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -@Mixin(BehaviorUtils.class) -public abstract class BehaviorUtilsGravityMixin { - @WrapOperation( - method = "throwItem(Lnet/minecraft/world/entity/LivingEntity;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/phys/Vec3;Lnet/minecraft/world/phys/Vec3;F)V", - at = @At( - value = "NEW", - target = "(Lnet/minecraft/world/level/Level;DDDLnet/minecraft/world/item/ItemStack;)Lnet/minecraft/world/entity/item/ItemEntity;" - ) - ) - private static ItemEntity antarchy$fixThrownItemSpawn( - Level level, - double x, - double y, - double z, - ItemStack stack, - Operation original, - @Local float yOffset, - @Local LivingEntity entity - ) { - if (!antarchy$shouldInvertThrownItem(entity)) { - return original.call(level, x, y, z, stack); - } - - Vec3 eyeOffset = AntarchyGravityRotationUtil.getEyeOffset(entity, entity.getEyeHeight()); - Vec3 offset = eyeOffset.normalize().scale(yOffset); - Vec3 itemPos = entity.position().add(eyeOffset).subtract(offset); - ItemEntity itemEntity = original.call(level, itemPos.x(), itemPos.y(), itemPos.z(), stack); - AntarchyGravityApi.setGravityDirection(itemEntity, AntarchyGravityApi.getGravityDirection(entity)); - return itemEntity; - } - - @WrapOperation( - method = "throwItem(Lnet/minecraft/world/entity/LivingEntity;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/phys/Vec3;Lnet/minecraft/world/phys/Vec3;F)V", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/world/entity/item/ItemEntity;setDeltaMovement(Lnet/minecraft/world/phys/Vec3;)V" - ) - ) - private static void antarchy$fixThrownItemVelocity( - ItemEntity itemEntity, - Vec3 deltaMovement, - Operation original, - @Local LivingEntity entity - ) { - if (!antarchy$shouldInvertThrownItem(entity)) { - original.call(itemEntity, deltaMovement); - return; - } - - AntarchyGravityApi.setWorldVelocity(itemEntity, deltaMovement); - } - - private static boolean antarchy$shouldInvertThrownItem(LivingEntity entity) { - return ThoraxisUndersideManager.shouldInvertInUnderside(entity); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/BubbleColumnGravityMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/BubbleColumnGravityMixin.java deleted file mode 100644 index 4c7abbe5..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/BubbleColumnGravityMixin.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import net.minecraft.core.BlockPos; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.BubbleColumnBlock; -import net.minecraft.world.level.block.state.BlockState; -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(BubbleColumnBlock.class) -public abstract class BubbleColumnGravityMixin { - @Inject(method = "entityInside", at = @At("HEAD"), cancellable = true) - private void antarchy$applyBubbleForces(BlockState state, Level level, BlockPos pos, Entity entity, CallbackInfo ci) { - if (!AntarchyGravityApi.isGravityInverted(entity)) { - return; - } - - boolean drag = state.getValue(BubbleColumnBlock.DRAG_DOWN); - Vec3 velocity = AntarchyGravityApi.getWorldVelocity(entity); - double vertical = drag ? Math.max(-0.9D, velocity.y - 0.03D) : Math.min(1.8D, velocity.y + 0.1D); - AntarchyGravityApi.setWorldVelocity(entity, new Vec3(velocity.x, vertical, velocity.z)); - entity.onAboveBubbleCol(!drag); - if (drag) { - entity.resetFallDistance(); - } - ci.cancel(); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/BucketItemGravityMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/BucketItemGravityMixin.java deleted file mode 100644 index 4cbde7b7..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/BucketItemGravityMixin.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.stats.Stats; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.InteractionResultHolder; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.BucketItem; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.ItemUtils; -import net.minecraft.world.level.ClipContext; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.LiquidBlockContainer; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.material.Fluid; -import net.minecraft.world.level.material.Fluids; -import net.minecraft.world.phys.BlockHitResult; -import net.minecraft.world.phys.HitResult; -import net.minecraft.advancements.CriteriaTriggers; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(BucketItem.class) -public abstract class BucketItemGravityMixin { - @Shadow - @Final - private Fluid content; - - @Shadow - public abstract boolean emptyContents(Player player, Level level, BlockPos pos, BlockHitResult hitResult); - - @Shadow - public abstract void checkExtraContent(Player player, Level level, ItemStack stack, BlockPos pos); - - @Inject(method = "use", at = @At("RETURN"), cancellable = true) - private void antarchy$allowInvertedFluidPlacement(Level level, Player player, InteractionHand hand, CallbackInfoReturnable> cir) { - InteractionResultHolder result = cir.getReturnValue(); - if (result.getResult().consumesAction() || this.content == Fluids.EMPTY || !AntarchyGravityApi.isGravityInverted(player)) { - return; - } - - ItemStack stack = player.getItemInHand(hand); - HitResult hitResult = player.pick(player.blockInteractionRange(), 1.0F, false); - if (!(hitResult instanceof BlockHitResult blockHitResult) || hitResult.getType() != HitResult.Type.BLOCK) { - return; - } - - Direction face = blockHitResult.getDirection(); - BlockPos clickedPos = blockHitResult.getBlockPos(); - BlockState clickedState = level.getBlockState(clickedPos); - Block clickedBlock = clickedState.getBlock(); - BlockPos normalTargetPos = clickedBlock instanceof LiquidBlockContainer && this.content == Fluids.WATER - ? clickedPos - : clickedPos.relative(face); - BlockPos invertedTargetPos = clickedPos.relative(face.getOpposite()); - if (invertedTargetPos.equals(normalTargetPos)) { - return; - } - - if (!level.mayInteract(player, clickedPos) || !player.mayUseItemAt(invertedTargetPos, face.getOpposite(), stack)) { - return; - } - - if (!this.emptyContents(player, level, invertedTargetPos, null)) { - return; - } - - this.checkExtraContent(player, level, stack, invertedTargetPos); - if (player instanceof ServerPlayer serverPlayer) { - CriteriaTriggers.PLACED_BLOCK.trigger(serverPlayer, invertedTargetPos, stack); - } - player.awardStat(Stats.ITEM_USED.get((BucketItem) (Object) this)); - ItemStack successStack = ItemUtils.createFilledResult(stack, player, BucketItem.getEmptySuccessItem(stack, player)); - cir.setReturnValue(InteractionResultHolder.sidedSuccess(successStack, level.isClientSide())); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/CrossbowItemGravityMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/CrossbowItemGravityMixin.java deleted file mode 100644 index 15c5a1a5..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/CrossbowItemGravityMixin.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -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.content.worldgen.thoraxis.ThoraxisUndersideManager; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.item.CrossbowItem; -import net.minecraft.world.phys.Vec3; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -@Mixin(CrossbowItem.class) -/* - * Spawns crossbow shots with gravity-aware aim. - */ -public abstract class CrossbowItemGravityMixin { - - private static final double BOLT_OFFSET = 0.15000000596046448D; - - @WrapOperation(method = "createProjectile", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/world/entity/LivingEntity;getX()D", ordinal = 0)) - private static double antarchy$fixCrossbowSpawnX(LivingEntity shooter, Operation original) { - if (!antarchy$shouldFixProjectileSpawn(shooter)) return original.call(shooter); - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(shooter); - if (!direction.isInverted()) return original.call(shooter); - Vec3 offset = AntarchyGravityRotationUtil.vecPlayerToWorld(0.0D, BOLT_OFFSET, 0.0D, direction); - return shooter.getEyePosition().subtract(offset).x; - } - - @WrapOperation(method = "createProjectile", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/world/entity/LivingEntity;getEyeY()D", ordinal = 0)) - private static double antarchy$fixCrossbowSpawnY(LivingEntity shooter, Operation original) { - if (!antarchy$shouldFixProjectileSpawn(shooter)) return original.call(shooter); - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(shooter); - if (!direction.isInverted()) return original.call(shooter); - Vec3 offset = AntarchyGravityRotationUtil.vecPlayerToWorld(0.0D, BOLT_OFFSET, 0.0D, direction); - return shooter.getEyePosition().subtract(offset).y + BOLT_OFFSET; - } - - @WrapOperation(method = "createProjectile", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/world/entity/LivingEntity;getZ()D", ordinal = 0)) - private static double antarchy$fixCrossbowSpawnZ(LivingEntity shooter, Operation original) { - if (!antarchy$shouldFixProjectileSpawn(shooter)) return original.call(shooter); - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(shooter); - if (!direction.isInverted()) return original.call(shooter); - Vec3 offset = AntarchyGravityRotationUtil.vecPlayerToWorld(0.0D, BOLT_OFFSET, 0.0D, direction); - return shooter.getEyePosition().subtract(offset).z; - } - - private static boolean antarchy$shouldFixProjectileSpawn(LivingEntity shooter) { - return ThoraxisUndersideManager.shouldInvertInUnderside(shooter); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/DirectionFacingMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/DirectionFacingMixin.java deleted file mode 100644 index f29d121a..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/DirectionFacingMixin.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import net.minecraft.core.Direction; -import net.minecraft.world.entity.Entity; -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.CallbackInfoReturnable; - -import java.util.Arrays; -import java.util.Comparator; - -@Mixin(Direction.class) -/* - * Fixes facing math that assumes gravity is always down. - */ -public abstract class DirectionFacingMixin { - - - @Inject(method = "orderedByNearest", at = @At("HEAD"), cancellable = true) - private static void antarchy$fixEntityFacingOrder(Entity entity, CallbackInfoReturnable cir) { - if (!AntarchyGravityApi.isGravityInverted(entity)) { - return; - } - Vec3 look = entity.getViewVector(1.0F); - - Direction[] sorted = Direction.values(); - Arrays.sort(sorted, Comparator.comparingDouble( - (Direction d) -> d.getStepX() * look.x + d.getStepY() * look.y + d.getStepZ() * look.z - ).reversed()); - - cir.setReturnValue(sorted); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityCollisionContextMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityCollisionContextMixin.java deleted file mode 100644 index 0ac4a24f..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityCollisionContextMixin.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; -import net.minecraft.core.BlockPos; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.shapes.EntityCollisionContext; -import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.Redirect; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(EntityCollisionContext.class) -/* - * Uses gravity-aware entity bounds for block collision checks. - */ -public abstract class EntityCollisionContextMixin { - - @Shadow @Final private double entityBottom; - @Shadow @Final @Nullable private Entity entity; - - @Redirect( - method = "(Lnet/minecraft/world/entity/Entity;)V", - at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Entity;getY()D") - ) - private static double antarchy$fixCollisionContextBottom(Entity entity) { - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(entity); - if (!direction.isInverted()) { - return entity.getY(); - } - - return AntarchyGravityRotationUtil.boxWorldToPlayer(entity.getBoundingBox(), direction).minY; - } - - @Inject(method = "isAbove", at = @At("HEAD"), cancellable = true) - private void antarchy$fixIsAbove(VoxelShape shape, BlockPos pos, boolean canAscend, CallbackInfoReturnable cir) { - if (this.entity == null) { - return; - } - - if (shape.isEmpty()) { - cir.setReturnValue(false); - return; - } - - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(this.entity); - if (!direction.isInverted()) { - return; - } - - double baseMinY = AntarchyGravityRotationUtil.boxWorldToPlayer(new AABB(pos), direction).minY; - double shapeMaxY = AntarchyGravityRotationUtil.boxWorldToPlayer( - shape.bounds().inflate(-1.0E-5D), - direction - ).maxY; - cir.setReturnValue(this.entityBottom > baseMinY + shapeMaxY); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityGravityFrameMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityGravityFrameMixin.java deleted file mode 100644 index 4854d607..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityGravityFrameMixin.java +++ /dev/null @@ -1,270 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import net.minecraft.core.BlockPos; -import net.minecraft.core.particles.BlockParticleOption; -import net.minecraft.core.particles.ParticleTypes; -import net.minecraft.util.Mth; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.level.block.RenderShape; -import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.Vec3; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.ModifyVariable; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(Entity.class) -/* - * Rotates entity frame math into local gravity space. - */ -public abstract class EntityGravityFrameMixin { - - @Shadow protected abstract void onBelowWorld(); - - @Inject(method = "makeBoundingBox", at = @At("RETURN"), cancellable = true) - private void antarchy$rotateBoundingBox(CallbackInfoReturnable cir) { - Entity entity = (Entity) (Object) this; - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(entity); - if (!direction.isInverted()) { - return; - } - Vec3 origin = entity.position(); - AABB localBox = cir.getReturnValue().move(origin.scale(-1.0D)); - localBox = localBox.move(0.0D, -1.0E-6D, 0.0D); - cir.setReturnValue(AntarchyGravityRotationUtil.boxPlayerToWorld(localBox, direction).move(origin)); - } - - @Inject(method = "getEyeY", at = @At("HEAD"), cancellable = true) - private void antarchy$fixEyeY(CallbackInfoReturnable cir) { - Entity entity = (Entity) (Object) this; - if (!AntarchyGravityApi.isGravityInverted(entity)) { - return; - } - cir.setReturnValue(entity.position().add(AntarchyGravityRotationUtil.getEyeOffset(entity, entity.getEyeHeight())).y); - } - - @Inject(method = "getY(D)D", at = @At("HEAD"), cancellable = true) - private void antarchy$fixScaledY(double scale, CallbackInfoReturnable cir) { - Entity entity = (Entity) (Object) this; - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(entity); - if (!direction.isInverted()) { - return; - } - cir.setReturnValue(entity.position().add( - AntarchyGravityRotationUtil.vecPlayerToWorld(0.0D, entity.getBbHeight() * scale, 0.0D, direction) - ).y); - } - - @Inject(method = "getEyePosition()Lnet/minecraft/world/phys/Vec3;", at = @At("HEAD"), cancellable = true) - private void antarchy$fixEyePosition(CallbackInfoReturnable cir) { - Entity entity = (Entity) (Object) this; - if (!AntarchyGravityApi.isGravityInverted(entity)) { - return; - } - cir.setReturnValue(entity.position().add(AntarchyGravityRotationUtil.getEyeOffset(entity, entity.getEyeHeight()))); - } - - @Inject(method = "getEyePosition(F)Lnet/minecraft/world/phys/Vec3;", at = @At("HEAD"), cancellable = true) - private void antarchy$fixEyePositionInterpolated(float partialTick, CallbackInfoReturnable cir) { - Entity entity = (Entity) (Object) this; - float flipProgress = AntarchyGravityApi.getGravityFlipProgress(entity, partialTick); - if (flipProgress <= 0.0F) { - return; - } - cir.setReturnValue(entity.getPosition(partialTick).add( - AntarchyGravityRotationUtil.getEyeOffset(entity, entity.getEyeHeight(), partialTick) - )); - } - - @Inject(method = "getViewVector", at = @At("RETURN"), cancellable = true) - private void antarchy$rotateViewVector(float partialTick, CallbackInfoReturnable cir) { - Entity entity = (Entity) (Object) this; - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(entity); - if (!direction.isInverted()) { - return; - } - cir.setReturnValue(AntarchyGravityRotationUtil.vecPlayerToWorld(cir.getReturnValue(), direction)); - } - - @Inject(method = "getUpVector", at = @At("RETURN"), cancellable = true) - private void antarchy$rotateUpVector(float partialTick, CallbackInfoReturnable cir) { - Entity entity = (Entity) (Object) this; - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(entity); - if (!direction.isInverted()) { - return; - } - cir.setReturnValue(AntarchyGravityRotationUtil.vecPlayerToWorld(cir.getReturnValue(), direction)); - } - - @Inject(method = "getForward", at = @At("RETURN"), cancellable = true) - private void antarchy$rotateForwardVector(CallbackInfoReturnable cir) { - Entity entity = (Entity) (Object) this; - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(entity); - if (!direction.isInverted()) { - return; - } - cir.setReturnValue(AntarchyGravityRotationUtil.vecPlayerToWorld(cir.getReturnValue(), direction)); - } - - @Inject(method = "getOnPos(F)Lnet/minecraft/core/BlockPos;", at = @At("HEAD"), cancellable = true) - private void antarchy$fixSupportingBlockPos(float offset, CallbackInfoReturnable cir) { - Entity entity = (Entity) (Object) this; - if (!AntarchyGravityApi.isGravityInverted(entity)) { - return; - } - cir.setReturnValue(AntarchyGravityRotationUtil.getSupportingBlockPos(entity, offset)); - } - - @Inject(method = "getBlockPosBelowThatAffectsMyMovement", - at = @At("HEAD"), cancellable = true) - private void antarchy$fixVelocityAffectingPos(CallbackInfoReturnable cir) { - Entity entity = (Entity) (Object) this; - if (!AntarchyGravityApi.isGravityInverted(entity)) { - return; - } - cir.setReturnValue(BlockPos.containing(entity.position().add(0.0D, 0.5000001D, 0.0D))); - } - - @Inject(method = "getOnPosLegacy", at = @At("HEAD"), cancellable = true) - private void antarchy$fixLandingPos(CallbackInfoReturnable cir) { - Entity entity = (Entity) (Object) this; - if (!AntarchyGravityApi.isGravityInverted(entity)) { - return; - } - cir.setReturnValue(BlockPos.containing(entity.position().add(0.0D, 0.20000000298023224D, 0.0D))); - } - - @WrapOperation(method = "isInWall", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/world/phys/AABB;ofSize(Lnet/minecraft/world/phys/Vec3;DDD)Lnet/minecraft/world/phys/AABB;", - ordinal = 0)) - private AABB antarchy$fixIsInWallAABB(Vec3 center, double x, double y, double z, Operation original) { - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection((Entity) (Object) this); - if (!direction.isInverted()) { - return original.call(center, x, y, z); - } - Vec3 rotated = AntarchyGravityRotationUtil.vecPlayerToWorld(new Vec3(x, y, z), direction); - return original.call(center, rotated.x, rotated.y, rotated.z); - } - - @WrapOperation(method = "isFree(DDD)Z", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/world/phys/AABB;move(DDD)Lnet/minecraft/world/phys/AABB;", - ordinal = 0)) - private AABB antarchy$fixIsFreeMoveAABB(AABB instance, double x, double y, double z, Operation original) { - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection((Entity) (Object) this); - if (!direction.isInverted()) { - return original.call(instance, x, y, z); - } - Vec3 worldOffset = AntarchyGravityRotationUtil.vecPlayerToWorld(new Vec3(x, y, z), direction); - return original.call(instance, worldOffset.x, worldOffset.y, worldOffset.z); - } - - @ModifyVariable(method = "updateFluidOnEyes", at = @At(value = "STORE"), ordinal = 0) - private double antarchy$fixFluidEyeY(double eyeY) { - Entity entity = (Entity) (Object) this; - if (!AntarchyGravityApi.isGravityInverted(entity)) { - return eyeY; - } - return entity.getEyePosition().y(); - } - - @ModifyVariable(method = "updateFluidOnEyes", at = @At(value = "STORE"), ordinal = 0) - private BlockPos antarchy$fixFluidEyeBlockPos(BlockPos pos) { - Entity entity = (Entity) (Object) this; - if (!AntarchyGravityApi.isGravityInverted(entity)) { - return pos; - } - return BlockPos.containing(entity.getEyePosition()); - } - - @Inject(method = "spawnSprintParticle", at = @At("HEAD"), cancellable = true) - private void antarchy$fixSprintParticle(CallbackInfo ci) { - Entity entity = (Entity) (Object) this; - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(entity); - if (!direction.isInverted()) { - return; - } - ci.cancel(); - Vec3 ceilPos = entity.position().add(0.0D, 0.20000000298023224D, 0.0D); - BlockPos blockPos = BlockPos.containing(ceilPos); - var blockState = entity.level().getBlockState(blockPos); - if (blockState.getRenderShape() != RenderShape.INVISIBLE) { - double w = entity.getBbWidth(); - Vec3 particlePos = entity.position().add( - (entity.getRandom().nextDouble() - 0.5D) * w, - 0.1D, - (entity.getRandom().nextDouble() - 0.5D) * w - ); - Vec3 dm = entity.getDeltaMovement(); - Vec3 particleVel = AntarchyGravityRotationUtil.vecPlayerToWorld( - new Vec3(dm.x * -4.0D, -1.5D, dm.z * -4.0D), - direction - ); - entity.level().addParticle( - new BlockParticleOption(ParticleTypes.BLOCK, blockState), - particlePos.x, particlePos.y, particlePos.z, - particleVel.x, particleVel.y, particleVel.z - ); - } - } - - @Inject(method = "checkBelowWorld", at = @At("HEAD"), cancellable = true) - private void antarchy$checkAboveWorldForInverted(CallbackInfo ci) { - Entity entity = (Entity) (Object) this; - if (!AntarchyGravityApi.isGravityInverted(entity)) { - return; - } - if (entity.getY() > entity.level().getMaxBuildHeight() + 256) { - this.onBelowWorld(); - ci.cancel(); - } - } - - @Inject(method = "push(Lnet/minecraft/world/entity/Entity;)V", - at = @At("HEAD"), cancellable = true) - private void antarchy$fixEntityPush(Entity other, CallbackInfo ci) { - Entity self = (Entity) (Object) this; - boolean selfInverted = AntarchyGravityApi.isGravityInverted(self); - boolean otherInverted = AntarchyGravityApi.isGravityInverted(other); - if (selfInverted == otherInverted) { - return; - } - ci.cancel(); - if (self.isPassengerOfSameVehicle(other)) { - return; - } - if (other.noPhysics || self.noPhysics) { - return; - } - Vec3 worldOffset = other.getBoundingBox().getCenter().subtract(self.getBoundingBox().getCenter()); - AntarchyGravityDirection selfDir = AntarchyGravityApi.getGravityDirection(self); - Vec3 localOffset = AntarchyGravityRotationUtil.vecWorldToPlayer(worldOffset, selfDir); - double dx = localOffset.x; - double dz = localOffset.z; - double dist = Mth.absMax(dx, dz); - if (dist >= 0.009999999776482582D) { - dist = Math.sqrt(dist); - dx /= dist; - dz /= dist; - double scale = Math.min(1.0D / dist, 1.0D) * 0.05D; - dx *= scale; - dz *= scale; - if (!self.isVehicle()) { - self.push(AntarchyGravityRotationUtil.vecPlayerToWorld(new Vec3(-dx, 0.0D, -dz), selfDir)); - } - if (!other.isVehicle()) { - AntarchyGravityDirection otherDir = AntarchyGravityApi.getGravityDirection(other); - other.push(AntarchyGravityRotationUtil.vecPlayerToWorld(new Vec3(dx, 0.0D, dz), otherDir)); - } - } - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityGravityMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityGravityMixin.java deleted file mode 100644 index 0c850486..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityGravityMixin.java +++ /dev/null @@ -1,320 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityAccess; -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.content.gravity.AntarchyGravityTransition; -import com.craisinlord.antarchy.content.entity.BedBugEntity; -import com.craisinlord.antarchy.content.entity.portal.DimensionalTearEntity; -import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisUndersideManager; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.core.BlockPos; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.effect.MobEffectInstance; -import net.minecraft.world.level.material.FluidState; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.Mob; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.phys.AABB; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.ModifyVariable; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(Entity.class) -/* - * Adds the base gravity state and sync hooks to entities. - */ -public abstract class EntityGravityMixin implements AntarchyGravityAccess { - @Unique - private static final String ANTARCHY_GRAVITY_DIRECTION_TAG = "AntarchyGravityDirection"; - @Unique - private static final String ANTARCHY_PREV_GRAVITY_DIRECTION_TAG = "AntarchyPrevGravityDirection"; - @Unique - private static final String ANTARCHY_GRAVITY_FORCED_TAG = "AntarchyGravityForced"; - @Unique - private static final String ANTARCHY_GRAVITY_TRANSITION_DURATION_TAG = "AntarchyGravityTransitionDuration"; - @Unique - private static final String ANTARCHY_GRAVITY_TRANSITION_REMAINING_TAG = "AntarchyGravityTransitionRemaining"; - - @Unique - private AntarchyGravityDirection antarchy$gravityDirection = AntarchyGravityDirection.DOWN; - @Unique - private AntarchyGravityDirection antarchy$prevGravityDirection = AntarchyGravityDirection.DOWN; - @Unique - private boolean antarchy$gravityForced; - @Unique - private int antarchy$gravityTransitionDuration; - @Unique - private int antarchy$gravityTransitionRemaining; - - @Shadow - protected abstract AABB makeBoundingBox(); - - @Shadow - public abstract void setBoundingBox(AABB boundingBox); - - @Inject(method = "saveWithoutId", at = @At("TAIL")) - private void antarchy$saveGravityState(CompoundTag tag, CallbackInfoReturnable cir) { - tag.putString(ANTARCHY_GRAVITY_DIRECTION_TAG, this.antarchy$gravityDirection.getSerializedName()); - tag.putString(ANTARCHY_PREV_GRAVITY_DIRECTION_TAG, this.antarchy$prevGravityDirection.getSerializedName()); - tag.putBoolean(ANTARCHY_GRAVITY_FORCED_TAG, this.antarchy$gravityForced); - tag.putInt(ANTARCHY_GRAVITY_TRANSITION_DURATION_TAG, this.antarchy$gravityTransitionDuration); - tag.putInt(ANTARCHY_GRAVITY_TRANSITION_REMAINING_TAG, this.antarchy$gravityTransitionRemaining); - } - - @Inject(method = "load", at = @At("TAIL")) - private void antarchy$readGravityState(CompoundTag tag, CallbackInfo ci) { - this.antarchy$gravityDirection = AntarchyGravityDirection.parse(tag.getString(ANTARCHY_GRAVITY_DIRECTION_TAG)) - .orElse(AntarchyGravityDirection.DOWN); - this.antarchy$prevGravityDirection = AntarchyGravityDirection.parse(tag.getString(ANTARCHY_PREV_GRAVITY_DIRECTION_TAG)) - .orElse(this.antarchy$gravityDirection); - this.antarchy$gravityForced = tag.getBoolean(ANTARCHY_GRAVITY_FORCED_TAG); - this.antarchy$gravityTransitionDuration = Math.max(0, tag.getInt(ANTARCHY_GRAVITY_TRANSITION_DURATION_TAG)); - this.antarchy$gravityTransitionRemaining = Math.max(0, tag.getInt(ANTARCHY_GRAVITY_TRANSITION_REMAINING_TAG)); - - Entity entity = this.antarchy$entity(); - if (this.antarchy$gravityDirection.isInverted() && this.antarchy$gravityForced - && entity instanceof Mob mob) { - MobEffectInstance invertedEffect = mob.getEffect(com.craisinlord.antarchy.content.AntarchyObjects.INVERTED_EFFECT.get()); - boolean aboveUndersideExit = ThoraxisUndersideManager.isAboveUndersideExit(mob); - int nearbyDimensionalTears = this.antarchy$countNearbyDimensionalTears(mob); - if (invertedEffect != null - && invertedEffect.isAmbient() - && !invertedEffect.isVisible() - && aboveUndersideExit) { - this.antarchy$clearLoadedInversion(mob); - com.craisinlord.antarchy.Antarchy.LOGGER.warn( - "[antarchy-gravity] cleared stale underside inversion from loaded mob type={} uuid={} pos=({}, {}, {}) dim={} effectDuration={} nearbyDimensionalTears={}", - mob.getType(), mob.getUUID(), mob.getX(), mob.getY(), mob.getZ(), - mob.level() != null ? mob.level().dimension().location() : "?", - invertedEffect.getDuration(), nearbyDimensionalTears - ); - return; - } - if (invertedEffect != null - && mob instanceof BedBugEntity - && aboveUndersideExit - && ThoraxisUndersideManager.isThoraxis(mob.level())) { - this.antarchy$clearLoadedInversion(mob); - com.craisinlord.antarchy.Antarchy.LOGGER.warn( - "[antarchy-gravity] cleared loaded inverted bed bug above underside exit type={} uuid={} pos=({}, {}, {}) dim={} effectDuration={} effectAmbient={} effectVisible={} nearbyDimensionalTears={}", - mob.getType(), mob.getUUID(), mob.getX(), mob.getY(), mob.getZ(), - mob.level() != null ? mob.level().dimension().location() : "?", - invertedEffect.getDuration(), invertedEffect.isAmbient(), invertedEffect.isVisible(), nearbyDimensionalTears - ); - return; - } - com.craisinlord.antarchy.Antarchy.LOGGER.info( - "[antarchy-gravity] loaded inverted mob type={} uuid={} pos=({}, {}, {}) dim={} hasInvertedEffect={} effectDuration={} effectAmbient={} effectVisible={} aboveUndersideExit={} nearbyDimensionalTears={}", - mob.getType(), mob.getUUID(), mob.getX(), mob.getY(), mob.getZ(), - mob.level() != null ? mob.level().dimension().location() : "?", - invertedEffect != null, - invertedEffect != null ? invertedEffect.getDuration() : -1, - invertedEffect != null && invertedEffect.isAmbient(), - invertedEffect != null && invertedEffect.isVisible(), - aboveUndersideExit, - nearbyDimensionalTears - ); - } - } - - @Inject(method = "baseTick", at = @At("TAIL")) - private void antarchy$tickGravityTransition(CallbackInfo ci) { - if (this.antarchy$gravityTransitionRemaining > 0) { - this.antarchy$gravityTransitionRemaining--; - } - } - - @Inject(method = "updateInWaterStateAndDoFluidPushing", at = @At("TAIL")) - private void antarchy$resetFallDistanceInAntiwater(CallbackInfoReturnable cir) { - Entity entity = this.antarchy$entity(); - AntarchyGravityDirection direction = this.antarchy$gravityDirection; - if (!direction.isInverted()) { - return; - } - - if (!antarchy$isTouchingAntiwater(entity)) { - return; - } - - entity.resetFallDistance(); - } - - @Override - public AntarchyGravityDirection antarchy$getGravityDirection() { - return this.antarchy$gravityDirection; - } - - @Override - public AntarchyGravityDirection antarchy$getPrevGravityDirection() { - return this.antarchy$prevGravityDirection; - } - - @Override - public boolean antarchy$isGravityForced() { - return this.antarchy$gravityForced; - } - - @Override - public int antarchy$getGravityTransitionDuration() { - return this.antarchy$gravityTransitionDuration; - } - - @Override - public int antarchy$getGravityTransitionRemaining() { - return this.antarchy$gravityTransitionRemaining; - } - - @Override - public void antarchy$setGravityState(AntarchyGravityDirection direction, boolean forced, AntarchyGravityTransition transition) { - AntarchyGravityDirection previousDirection = this.antarchy$gravityDirection; - boolean changed = this.antarchy$gravityDirection != direction || this.antarchy$gravityForced != forced; - if (this.antarchy$gravityDirection != direction) { - this.antarchy$adjustPositionForGravityChange(this.antarchy$gravityDirection, direction); - this.antarchy$prevGravityDirection = this.antarchy$gravityDirection; - this.antarchy$gravityDirection = direction; - this.antarchy$gravityTransitionDuration = transition.durationTicks(); - this.antarchy$gravityTransitionRemaining = transition.durationTicks(); - this.antarchy$refreshGravityBounds(); - } - - this.antarchy$gravityForced = forced; - if (changed && this.antarchy$entity() instanceof Mob mob) { - // Any existing path is expressed in the previous gravity frame. - // Keep goals from following stale nodes after a flip. - mob.getNavigation().stop(); - } - if (changed && !this.antarchy$entity().level().isClientSide) { - AntarchyGravityApi.notifyGravityStateChanged(this.antarchy$entity()); - } - } - - @Override - public void antarchy$setAirborneGravityState(AntarchyGravityDirection direction, boolean forced, AntarchyGravityTransition transition) { - Entity entity = this.antarchy$entity(); - net.minecraft.world.phys.Vec3 worldVelocity = AntarchyGravityApi.getWorldVelocity(entity); - this.antarchy$setGravityState(direction, forced, transition); - AntarchyGravityApi.setWorldVelocity(entity, worldVelocity); - entity.setOnGround(false); - entity.resetFallDistance(); - } - - @Override - public void antarchy$applySyncedGravityState( - AntarchyGravityDirection direction, - AntarchyGravityDirection previousDirection, - boolean forced, - int transitionDuration, - int transitionRemaining - ) { - AntarchyGravityDirection oldDirection = this.antarchy$gravityDirection; - this.antarchy$gravityDirection = direction; - this.antarchy$prevGravityDirection = previousDirection; - this.antarchy$gravityForced = forced; - this.antarchy$gravityTransitionDuration = Math.max(0, transitionDuration); - this.antarchy$gravityTransitionRemaining = Math.max(0, transitionRemaining); - if (oldDirection != direction) { - // Do NOT adjust position here — the server entity's position is already - // correct (adjusted when gravity first changed on the server). Adjusting - // again on the client causes a double-shift on relog, which creates - // a position desync and stuttering as the server repeatedly corrects us. - this.antarchy$refreshGravityBounds(); - } - } - - @Unique - private Entity antarchy$entity() { - return (Entity) (Object) this; - } - - @Unique - private void antarchy$refreshGravityBounds() { - this.setBoundingBox(this.makeBoundingBox()); - } - - @Unique - private void antarchy$clearLoadedInversion(Mob mob) { - mob.removeEffect(com.craisinlord.antarchy.content.AntarchyObjects.INVERTED_EFFECT.get()); - this.antarchy$gravityDirection = AntarchyGravityDirection.DOWN; - this.antarchy$prevGravityDirection = AntarchyGravityDirection.DOWN; - this.antarchy$gravityForced = false; - this.antarchy$gravityTransitionDuration = 0; - this.antarchy$gravityTransitionRemaining = 0; - this.antarchy$refreshGravityBounds(); - } - - @Unique - private int antarchy$countNearbyDimensionalTears(Mob mob) { - if (!(mob.level() instanceof ServerLevel serverLevel)) { - return -1; - } - return serverLevel.getEntitiesOfClass( - DimensionalTearEntity.class, - mob.getBoundingBox().inflate(48.0D), - Entity::isAlive - ).size(); - } - - @Unique - private void antarchy$adjustPositionForGravityChange(AntarchyGravityDirection oldDirection, AntarchyGravityDirection newDirection) { - if (oldDirection == newDirection) { - return; - } - - Entity entity = this.antarchy$entity(); - double yOffset = newDirection.isInverted() ? entity.getBbHeight() : -entity.getBbHeight(); - entity.setPos(entity.getX(), entity.getY() + yOffset, entity.getZ()); - entity.setOnGround(false); - entity.resetFallDistance(); - } - - @ModifyVariable(method = "checkFallDamage", at = @At("HEAD"), ordinal = 0, argsOnly = true) - private double antarchy$invertFallDamageY(double worldY) { - Entity entity = (Entity) (Object) this; - if (!AntarchyGravityApi.isGravityInverted(entity) || entity instanceof Player) { - return worldY; - } - - return -worldY; - } - - @Unique - private boolean antarchy$isTouchingAntiwater(Entity entity) { - return antarchy$intersectsAntiwater(entity, entity.getBoundingBox().inflate(0.05D)); - } - - @Unique - private boolean antarchy$intersectsAntiwater(Entity entity, AABB box) { - BlockPos.MutableBlockPos cursor = new BlockPos.MutableBlockPos(); - BlockPos min = BlockPos.containing(box.minX, box.minY, box.minZ); - BlockPos max = BlockPos.containing(box.maxX, box.maxY, box.maxZ); - 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 (com.craisinlord.antarchy.content.fluid.AntarchyFluidChecks.isAntiwater(fluidState)) { - return true; - } - } - } - } - return false; - } - - @ModifyVariable(method = "isSupportedBy", at = @At("HEAD"), ordinal = 0, argsOnly = true) - private BlockPos antarchy$mirrorSupportBlock(BlockPos pos) { - Entity entity = (Entity) (Object) this; - if (!AntarchyGravityApi.isGravityInverted(entity)) { - return pos; - } - - return pos.above(); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityMountedGravityMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityMountedGravityMixin.java index 80ce21d1..c32977e3 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityMountedGravityMixin.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityMountedGravityMixin.java @@ -1,6 +1,6 @@ package com.craisinlord.antarchy.mixins.gravity; -import com.craisinlord.antarchy.content.gravity.AntarchyMountedGravityHelper; +import com.craisinlord.anthology.gravity.MountedGravityHelper; import net.minecraft.world.entity.Entity; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; @@ -17,7 +17,7 @@ public abstract class EntityMountedGravityMixin { @Inject(method = "startRiding(Lnet/minecraft/world/entity/Entity;Z)Z", at = @At("RETURN")) private void antarchy$syncMountedStack(Entity vehicle, boolean force, CallbackInfoReturnable cir) { if (cir.getReturnValueZ()) { - AntarchyMountedGravityHelper.syncConnectedStack((Entity) (Object) this); + MountedGravityHelper.syncConnectedStack((Entity) (Object) this); } } @@ -28,7 +28,7 @@ public abstract class EntityMountedGravityMixin { @Inject(method = "stopRiding", at = @At("TAIL")) private void antarchy$syncDismountedStacks(CallbackInfo ci) { - AntarchyMountedGravityHelper.syncSeparatedStacks(this.antarchy$previousVehicle, (Entity) (Object) this); + MountedGravityHelper.syncSeparatedStacks(this.antarchy$previousVehicle, (Entity) (Object) this); this.antarchy$previousVehicle = null; } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityMoveMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityMoveMixin.java deleted file mode 100644 index 152c4e41..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityMoveMixin.java +++ /dev/null @@ -1,374 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -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.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import java.util.List; -import java.util.TreeSet; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.MoverType; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.material.FluidState; -import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.Vec3; -import net.minecraft.world.phys.shapes.VoxelShape; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.ModifyArg; -import org.spongepowered.asm.mixin.injection.ModifyArgs; -import org.spongepowered.asm.mixin.injection.ModifyVariable; -import org.spongepowered.asm.mixin.injection.Redirect; -import org.spongepowered.asm.mixin.injection.invoke.arg.Args; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(Entity.class) -/* - * Fixes move/landing logic that assumes down is always down. - */ -public abstract class EntityMoveMixin { - @Unique - private static final Logger ANTARCHY_STEP_LOGGER = LoggerFactory.getLogger("Antarchy/GravityStep"); - @Unique - private boolean antarchy$loggedInvertedCollide; - @Unique - private boolean antarchy$loggedHorizontalBlock; - @Unique - private boolean antarchy$loggedInvertedMove; - @Unique - private double antarchy$lastWorldMoveY = 0.0; - @Unique - private double antarchy$lastPlayerMoveY = 0.0; - @Unique - private AABB antarchy$moveStartBox; - @Unique - private Vec3 antarchy$collideWorldMovement = Vec3.ZERO; - - @Inject(method = "move", at = @At("HEAD")) - private void antarchy$captureMoveStart(MoverType type, Vec3 movement, CallbackInfo ci) { - Entity entity = (Entity) (Object) this; - this.antarchy$moveStartBox = entity.getBoundingBox(); - this.antarchy$lastPlayerMoveY = movement.y; - if (AntarchyGravityApi.isGravityInverted(entity) && !this.antarchy$loggedInvertedMove) { - this.antarchy$loggedInvertedMove = true; - ANTARCHY_STEP_LOGGER.warn( - "Inverted move entered: entity={} movement={} noPhysics={} onGround={} box={}", - entity.getClass().getSimpleName(), movement, entity.noPhysics, entity.onGround(), entity.getBoundingBox()); - } - } - - @ModifyVariable(method = "move", at = @At("HEAD"), ordinal = 0, argsOnly = true) - private Vec3 antarchy$movePlayerToWorld(Vec3 movement) { - Entity entity = (Entity) (Object) this; - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(entity); - if (!direction.isInverted()) { - return movement; - } - - Vec3 world = AntarchyGravityRotationUtil.vecPlayerToWorld(movement, direction); - this.antarchy$lastWorldMoveY = world.y; - return world; - } - - @ModifyArg( - method = "move", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/world/phys/Vec3;multiply(Lnet/minecraft/world/phys/Vec3;)Lnet/minecraft/world/phys/Vec3;", - ordinal = 0 - ), - index = 0 - ) - private Vec3 antarchy$moveMaskPlayerToWorld(Vec3 multiplier) { - Entity entity = (Entity) (Object) this; - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(entity); - if (!direction.isInverted()) { - return multiplier; - } - - return AntarchyGravityRotationUtil.maskPlayerToWorld(multiplier, direction); - } - - @ModifyVariable( - method = "move", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/util/profiling/ProfilerFiller;pop()V", - ordinal = 0 - ), - ordinal = 0 - ) - private Vec3 antarchy$moveWorldToPlayerAttempted(Vec3 movement) { - Entity entity = (Entity) (Object) this; - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(entity); - if (!direction.isInverted()) { - return movement; - } - - return AntarchyGravityRotationUtil.vecWorldToPlayer(movement, direction); - } - - @ModifyVariable( - method = "move", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/util/profiling/ProfilerFiller;pop()V", - ordinal = 0 - ), - ordinal = 1 - ) - private Vec3 antarchy$moveWorldToPlayerResolved(Vec3 movement) { - Entity entity = (Entity) (Object) this; - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(entity); - if (!direction.isInverted()) { - return movement; - } - - return AntarchyGravityRotationUtil.vecWorldToPlayer(movement, direction); - } - - - @Inject(method = "move", at = @At("TAIL")) - private void antarchy$fixVerticalCollisionBelow(MoverType type, Vec3 movement, CallbackInfo ci) { - Entity entity = (Entity) (Object) this; - if (!AntarchyGravityApi.isGravityInverted(entity)) { - return; - } - - if (this.antarchy$lastPlayerMoveY < 0.0D && this.antarchy$moveStartBox != null) { - AABB endBox = entity.getBoundingBox(); - Vec3 delta = endBox.getCenter().subtract(this.antarchy$moveStartBox.getCenter()); - AABB sweptBox = this.antarchy$moveStartBox.expandTowards(delta).minmax(endBox).inflate(0.05D); - if (antarchy$intersectsAntiwater(entity, sweptBox)) { - entity.resetFallDistance(); - } - } - - if (!entity.verticalCollision) return; - boolean landedOnCeiling = this.antarchy$lastWorldMoveY > 0.0; - entity.verticalCollisionBelow = landedOnCeiling; - if (landedOnCeiling) { - entity.setOnGround(true); - } - } - - @Inject(method = "collide", at = @At("HEAD")) - private void antarchy$captureCollideWorldMovement(Vec3 movement, CallbackInfoReturnable cir) { - this.antarchy$collideWorldMovement = movement; - Entity entity = (Entity) (Object) this; - if (AntarchyGravityApi.isGravityInverted(entity) && !this.antarchy$loggedInvertedCollide) { - this.antarchy$loggedInvertedCollide = true; - ANTARCHY_STEP_LOGGER.warn( - "Inverted collide entered: entity={} movement={} onGround={} maxUpStep={} box={}", - entity.getClass().getSimpleName(), movement, entity.onGround(), entity.maxUpStep(), entity.getBoundingBox()); - } - } - - /* - * Keep vanilla's step algorithm in player-local coordinates. Its Y tests, - * candidate heights and maxUpStep are all defined in that frame. Only the - * physical AABB operations and low-level shape collision belong in world - * coordinates. - */ - @ModifyVariable( - method = "collide", - at = @At( - value = "INVOKE_ASSIGN", - target = "Lnet/minecraft/world/level/Level;getEntityCollisions(Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/phys/AABB;)Ljava/util/List;", - ordinal = 0 - ), - ordinal = 0 - ) - private Vec3 antarchy$collideWorldToPlayer(Vec3 movement) { - Entity entity = (Entity) (Object) this; - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(entity); - if (!direction.isInverted()) { - return movement; - } - return AntarchyGravityRotationUtil.vecWorldToPlayer(movement, direction); - } - - @ModifyArgs( - method = "collide", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/world/phys/AABB;expandTowards(DDD)Lnet/minecraft/world/phys/AABB;" - ) - ) - private void antarchy$expandStepSearchInWorldFrame(Args args) { - Entity entity = (Entity) (Object) this; - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(entity); - if (!direction.isInverted()) { - return; - } - Vec3 world = AntarchyGravityRotationUtil.vecPlayerToWorld( - new Vec3(args.get(0), args.get(1), args.get(2)), direction); - args.set(0, world.x); - args.set(1, world.y); - args.set(2, world.z); - } - - @ModifyArgs( - method = "collide", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/world/phys/AABB;move(DDD)Lnet/minecraft/world/phys/AABB;" - ) - ) - private void antarchy$moveStepBoxInWorldFrame(Args args) { - Entity entity = (Entity) (Object) this; - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(entity); - if (!direction.isInverted()) { - return; - } - Vec3 world = AntarchyGravityRotationUtil.vecPlayerToWorld( - new Vec3(args.get(0), args.get(1), args.get(2)), direction); - args.set(0, world.x); - args.set(1, world.y); - args.set(2, world.z); - } - - @WrapOperation( - method = "collide", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/world/entity/Entity;collideBoundingBox(Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/phys/Vec3;Lnet/minecraft/world/phys/AABB;Lnet/minecraft/world/level/Level;Ljava/util/List;)Lnet/minecraft/world/phys/Vec3;" - ) - ) - private Vec3 antarchy$collideBoundingBoxInLocalFrame( - Entity collisionEntity, - Vec3 localMovement, - AABB box, - Level level, - List collisions, - Operation original - ) { - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(collisionEntity); - if (!direction.isInverted()) { - return original.call(collisionEntity, localMovement, box, level, collisions); - } - Vec3 worldMovement = AntarchyGravityRotationUtil.vecPlayerToWorld(localMovement, direction); - Vec3 worldResult = original.call(collisionEntity, worldMovement, box, level, collisions); - return AntarchyGravityRotationUtil.vecWorldToPlayer(worldResult, direction); - } - - /* - * Vanilla uses collideWithShapes directly for each step-height candidate, - * bypassing collideBoundingBox. At this point collide() is operating in the - * gravity-local frame, so leaving this call untouched makes an inverted - * entity test the candidate in the opposite horizontal and vertical world - * directions. The candidate consequently never beats the blocked movement. - */ - @WrapOperation( - method = "collide", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/world/entity/Entity;collideWithShapes(Lnet/minecraft/world/phys/Vec3;Lnet/minecraft/world/phys/AABB;Ljava/util/List;)Lnet/minecraft/world/phys/Vec3;" - ) - ) - private Vec3 antarchy$collideStepCandidateInLocalFrame( - Vec3 localMovement, - AABB box, - List collisions, - Operation original - ) { - Entity entity = (Entity) (Object) this; - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(entity); - if (!direction.isInverted()) { - return original.call(localMovement, box, collisions); - } - Vec3 worldMovement = AntarchyGravityRotationUtil.vecPlayerToWorld(localMovement, direction); - Vec3 worldResult = original.call(worldMovement, box, collisions); - return AntarchyGravityRotationUtil.vecWorldToPlayer(worldResult, direction); - } - - @Redirect( - method = "collide", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/world/entity/Entity;collectCandidateStepUpHeights(Lnet/minecraft/world/phys/AABB;Ljava/util/List;FF)[F" - ) - ) - private float[] antarchy$collectGravityAwareStepHeights( - AABB box, List shapes, float maxStep, float currentY) { - Entity entity = (Entity) (Object) this; - boolean inverted = AntarchyGravityApi.isGravityInverted(entity); - TreeSet heights = new TreeSet<>(); - for (VoxelShape shape : shapes) { - for (double coord : shape.getCoords(Direction.Axis.Y)) { - float height = (float) (inverted ? box.maxY - coord : coord - box.minY); - if (height >= 0.0F && height != currentY && height <= maxStep) { - heights.add(height); - } - } - } - float[] result = new float[heights.size()]; - int i = 0; - for (float height : heights) { - result[i++] = height; - } - return result; - } - - @Redirect( - method = "collide", - at = @At(value = "FIELD", target = "Lnet/minecraft/world/phys/AABB;minY:D") - ) - private double antarchy$readLocalStepBase(AABB box) { - Entity entity = (Entity) (Object) this; - if (!AntarchyGravityApi.isGravityInverted(entity)) { - return box.minY; - } - return -box.maxY; - } - - @Inject(method = "collide", at = @At("RETURN"), cancellable = true) - private void antarchy$collidePlayerToWorld(Vec3 movement, CallbackInfoReturnable cir) { - Entity entity = (Entity) (Object) this; - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(entity); - if (!direction.isInverted()) { - return; - } - Vec3 worldResult = AntarchyGravityRotationUtil.vecPlayerToWorld(cir.getReturnValue(), direction); - Vec3 localMovement = AntarchyGravityRotationUtil.vecWorldToPlayer(this.antarchy$collideWorldMovement, direction); - if (!this.antarchy$loggedHorizontalBlock - && (localMovement.x != cir.getReturnValue().x || localMovement.z != cir.getReturnValue().z)) { - this.antarchy$loggedHorizontalBlock = true; - ANTARCHY_STEP_LOGGER.warn( - "Inverted horizontal block: localMovement={} localResult={} worldMovement={} worldResult={} onGround={} maxUpStep={} box={}", - localMovement, cir.getReturnValue(), this.antarchy$collideWorldMovement, worldResult, - entity.onGround(), entity.maxUpStep(), entity.getBoundingBox()); - } - // Portal-gun collision restoration is temporarily disabled. It can - // recurse through Sable's collision redirect and hang the server. - cir.setReturnValue(worldResult); - } - - @Unique - private boolean antarchy$intersectsAntiwater(Entity entity, AABB box) { - BlockPos.MutableBlockPos cursor = new BlockPos.MutableBlockPos(); - BlockPos min = BlockPos.containing(box.minX, box.minY, box.minZ); - BlockPos max = BlockPos.containing(box.maxX, box.maxY, box.maxZ); - 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; - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityProjectileGravityMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityProjectileGravityMixin.java deleted file mode 100644 index aa39bafd..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityProjectileGravityMixin.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisUndersideManager; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.projectile.Projectile; -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(Entity.class) -/* - * Entity declares applyGravity in 1.21.1. Restrict the reversed acceleration to - * projectiles that are physically inside the Thoraxis Underside. - */ -public abstract class EntityProjectileGravityMixin { - - @Inject(method = "applyGravity", at = @At("HEAD"), cancellable = true) - private void antarchy$applyProjectileGravityUpward(CallbackInfo ci) { - Entity self = (Entity) (Object) this; - if (!(self instanceof Projectile projectile)) { - return; - } - if (projectile.isNoGravity()) { - return; - } - - boolean inverted = AntarchyGravityApi.isGravityInverted(projectile); - if (!inverted && projectile.getOwner() != null) { - inverted = AntarchyGravityApi.isGravityInverted(projectile.getOwner()); - } - if (!inverted && !ThoraxisUndersideManager.isInUnderside(projectile)) { - return; - } - - projectile.setDeltaMovement( - projectile.getDeltaMovement().add(0.0D, projectile.getGravity(), 0.0D) - ); - ci.cancel(); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ExplosionGravityMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ExplosionGravityMixin.java deleted file mode 100644 index e2dcb868..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ExplosionGravityMixin.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.level.Explosion; -import net.minecraft.world.phys.Vec3; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -@Mixin(Explosion.class) -/* - * Fixes explosion knockback for inverted gravity. - */ -public abstract class ExplosionGravityMixin { - - @WrapOperation(method = "explode", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/world/entity/Entity;getDeltaMovement()Lnet/minecraft/world/phys/Vec3;", - ordinal = 0)) - private Vec3 antarchy$fixExplosionGetVelocity(Entity entity, Operation original) { - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(entity); - if (!direction.isInverted()) return original.call(entity); - return AntarchyGravityRotationUtil.vecPlayerToWorld(original.call(entity), direction); - } - - @WrapOperation(method = "explode", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/world/entity/Entity;setDeltaMovement(Lnet/minecraft/world/phys/Vec3;)V", - ordinal = 0)) - private void antarchy$fixExplosionSetVelocity(Entity entity, Vec3 velocity, Operation original) { - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(entity); - if (!direction.isInverted()) { - original.call(entity, velocity); - return; - } - original.call(entity, AntarchyGravityRotationUtil.vecWorldToPlayer(velocity, direction)); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/FireworkRocketGravityMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/FireworkRocketGravityMixin.java deleted file mode 100644 index 6bf1410d..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/FireworkRocketGravityMixin.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.projectile.FireworkRocketEntity; -import net.minecraft.world.item.Item; -import net.minecraft.world.phys.Vec3; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -@Mixin(FireworkRocketEntity.class) -public abstract class FireworkRocketGravityMixin { - - @WrapOperation(method = "tick", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/world/entity/LivingEntity;getHandHoldingItemAngle(Lnet/minecraft/world/item/Item;)Lnet/minecraft/world/phys/Vec3;")) - private Vec3 antarchy$rotateAttachedRocketOffset(LivingEntity entity, Item item, Operation original) { - Vec3 offset = original.call(entity, item); - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(entity); - if (!direction.isInverted()) { - return offset; - } - return AntarchyGravityRotationUtil.vecPlayerToWorld(offset, direction); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/GroundPathNavigationMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/GroundPathNavigationMixin.java deleted file mode 100644 index 6442a003..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/GroundPathNavigationMixin.java +++ /dev/null @@ -1,89 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.antarchy.content.gravity.GravityWalkNodeEvaluator; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.world.entity.EntityDimensions; -import net.minecraft.world.entity.Pose; -import net.minecraft.world.entity.Mob; -import net.minecraft.world.entity.ai.navigation.GroundPathNavigation; -import net.minecraft.world.level.pathfinder.NodeEvaluator; -import net.minecraft.world.level.pathfinder.PathFinder; -import net.minecraft.world.phys.AABB; -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.CallbackInfoReturnable; - -@Mixin(GroundPathNavigation.class) -public abstract class GroundPathNavigationMixin { - @Inject(method = "createPathFinder", at = @At("HEAD"), cancellable = true) - private void antarchy$useGravityEvaluator(int maxVisitedNodes, CallbackInfoReturnable cir) { - var accessor = (PathNavigationAccessor) (Object) this; - NodeEvaluator evaluator = new GravityWalkNodeEvaluator(); - // GroundPathNavigation enables door passing on its vanilla evaluator. - // Preserve that setting when swapping in the gravity-aware evaluator. - evaluator.setCanPassDoors(true); - accessor.antarchy$setNodeEvaluator(evaluator); - cir.setReturnValue(new PathFinder(evaluator, maxVisitedNodes)); - } - - /** - * GroundPathNavigation normalizes entity destinations toward the floor - * before delegating to PathNavigation. For inverted mobs, replace that - * final destination with a bounded, collision-free ceiling anchor. - */ - @org.spongepowered.asm.mixin.injection.ModifyArg( - method = "createPath(Lnet/minecraft/core/BlockPos;I)Lnet/minecraft/world/level/pathfinder/Path;", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/world/entity/ai/navigation/PathNavigation;createPath(Lnet/minecraft/core/BlockPos;I)Lnet/minecraft/world/level/pathfinder/Path;" - ), - index = 0 - ) - private BlockPos antarchy$projectInvertedDestination(BlockPos normalizedDestination) { - Mob mob = ((PathNavigationAccessor) (Object) this).antarchy$getMob(); - if (!AntarchyGravityApi.isGravityInverted(mob)) { - return normalizedDestination; - } - - EntityDimensions dimensions = mob.getDimensions(mob.getPose()); - int centerX = normalizedDestination.getX(); - int centerZ = normalizedDestination.getZ(); - int baseY = normalizedDestination.getY(); - int minY = Math.max(mob.level().getMinBuildHeight(), baseY - 32); - int maxY = Math.min(mob.level().getMaxBuildHeight() - 2, baseY + 32); - for (int candidateY = baseY; candidateY <= maxY; candidateY++) { - BlockPos support = new BlockPos(centerX, candidateY + 1, centerZ); - if (!mob.level().getBlockState(support).isFaceSturdy(mob.level(), support, Direction.DOWN)) { - continue; - } - - double topY = candidateY + 1.0D - 1.0E-3D; - double halfWidth = dimensions.width() / 2.0D; - AABB body = new AABB( - centerX + 0.5D - halfWidth, - topY - dimensions.height(), - centerZ + 0.5D - halfWidth, - centerX + 0.5D + halfWidth, - topY, - centerZ + 0.5D + halfWidth - ).deflate(1.0E-4D); - if (mob.level().noCollision(mob, body)) { - return new BlockPos(centerX, candidateY, centerZ); - } - } - - return normalizedDestination; - } - - @Inject(method = "getTempMobPos", at = @At("HEAD"), cancellable = true) - private void antarchy$useInvertedMobAnchor(CallbackInfoReturnable cir) { - Mob mob = ((PathNavigationAccessor) (Object) this).antarchy$getMob(); - if (AntarchyGravityApi.isGravityInverted(mob)) { - cir.setReturnValue(new Vec3(mob.getX(), mob.getY(), mob.getZ())); - } - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/LivingEntityMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/LivingEntityMixin.java deleted file mode 100644 index 5e78fa97..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/LivingEntityMixin.java +++ /dev/null @@ -1,297 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -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.content.fluid.AntarchyFluidChecks; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import com.llamalad7.mixinextras.sugar.Local; -import net.minecraft.core.BlockPos; -import net.minecraft.core.particles.ParticleOptions; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.EntityDimensions; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.Pose; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.material.FluidState; -import net.minecraft.world.phys.AABB; -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.ModifyArg; -import org.spongepowered.asm.mixin.injection.ModifyVariable; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import org.spongepowered.asm.mixin.Unique; - -@Mixin(LivingEntity.class) -/* - * Fixes living entity movement/combat bits for inverted gravity. - */ -public abstract class LivingEntityMixin { - - @WrapOperation(method = "travel", - at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;getY()D")) - private double antarchy$fixTravelGetY(LivingEntity entity, Operation original) { - if (!AntarchyGravityApi.isGravityInverted(entity)) return original.call(entity); - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(entity); - return AntarchyGravityRotationUtil.vecWorldToPlayer(entity.position(), direction).y; - } - - @ModifyVariable(method = "travel", - at = @At(value = "INVOKE_ASSIGN", - target = "Lnet/minecraft/world/entity/LivingEntity;getLookAngle()Lnet/minecraft/world/phys/Vec3;", - ordinal = 0), - ordinal = 2) - private Vec3 antarchy$fixTravelLookAngle(Vec3 vec3) { - LivingEntity entity = (LivingEntity) (Object) this; - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(entity); - if (!direction.isInverted()) return vec3; - Vec3 localLook = AntarchyGravityRotationUtil.vecWorldToPlayer(vec3, direction); - if (!entity.isFallFlying()) { - return localLook; - } - - // Elytra flight mirror fix on east/west axis - return new Vec3(-localLook.x, localLook.y, localLook.z); - } - - @ModifyVariable(method = "checkFallDamage", at = @At("HEAD"), ordinal = 0, argsOnly = true) - private double antarchy$invertLivingFallDamageY(double worldY) { - LivingEntity entity = (LivingEntity) (Object) this; - if (!AntarchyGravityApi.isGravityInverted(entity)) { - return worldY; - } - if (antarchy$isTouchingAntiwater(entity)) { - entity.fallDistance = 0.0F; - return 0.0D; - } - return -worldY; - } - - @org.spongepowered.asm.mixin.injection.Inject(method = "calculateEntityAnimation", at = @At("HEAD"), cancellable = true) - private void antarchy$fixEntityAnimation(boolean flutter, CallbackInfo ci) { - LivingEntity entity = (LivingEntity) (Object) this; - if (!AntarchyGravityApi.isGravityInverted(entity)) return; - ci.cancel(); - - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(entity); - Vec3 playerPosDelta = AntarchyGravityRotationUtil.vecWorldToPlayer( - new Vec3(entity.getX() - entity.xo, entity.getY() - entity.yo, entity.getZ() - entity.zo), - direction - ); - double d = playerPosDelta.x; - double e = flutter ? playerPosDelta.y : 0.0D; - double f = playerPosDelta.z; - float g = (float) Math.sqrt(d * d + e * e + f * f) * 4.0F; - if (g > 1.0F) g = 1.0F; - entity.walkAnimation.update(g, 0.4F); - } - - @org.spongepowered.asm.mixin.injection.Inject(method = "wouldNotSuffocateAtTargetPose", at = @At("HEAD"), cancellable = true) - private void antarchy$fixPoseCheck(Pose pose, CallbackInfoReturnable cir) { - LivingEntity entity = (LivingEntity) (Object) this; - if (!AntarchyGravityApi.isGravityInverted(entity)) return; - EntityDimensions dims = entity.getDimensions(pose); - Vec3 pos = entity.position(); - float halfWidth = dims.width() / 2.0F; - float height = dims.height(); - AABB invertedBox = new AABB( - pos.x - halfWidth, pos.y - height, pos.z - halfWidth, - pos.x + halfWidth, pos.y, pos.z + halfWidth - ); - cir.setReturnValue(entity.level().noCollision(entity, invertedBox)); - } - - @Unique - private boolean antarchy$isTouchingAntiwater(LivingEntity 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; - } - - @org.spongepowered.asm.mixin.injection.Inject(method = "getLocalBoundsForPose", at = @At("RETURN"), cancellable = true) - private void antarchy$fixLocalBoundsForPose(Pose pose, CallbackInfoReturnable cir) { - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection((Entity) (Object) this); - if (!direction.isInverted()) return; - AABB box = cir.getReturnValue(); - box = box.move(0.0D, -1.0E-6D, 0.0D); - cir.setReturnValue(AntarchyGravityRotationUtil.boxPlayerToWorld(box, direction)); - } - - @WrapOperation(method = "hasLineOfSight", - at = @At(value = "NEW", target = "(DDD)Lnet/minecraft/world/phys/Vec3;", ordinal = 0)) - private Vec3 antarchy$fixHasLineOfSightSelf(double x, double y, double z, Operation original) { - LivingEntity self = (LivingEntity) (Object) this; - if (!AntarchyGravityApi.isGravityInverted(self)) return original.call(x, y, z); - return self.getEyePosition(); - } - - @WrapOperation(method = "hasLineOfSight", - at = @At(value = "NEW", target = "(DDD)Lnet/minecraft/world/phys/Vec3;", ordinal = 1)) - private Vec3 antarchy$fixHasLineOfSightTarget(double x, double y, double z, Operation original, - @Local(argsOnly = true) Entity other) { - if (!AntarchyGravityApi.isGravityInverted(other)) return original.call(x, y, z); - return other.getEyePosition(); - } - - @WrapOperation(method = "tick", - at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;getX()D", ordinal = 0)) - private double antarchy$fixTickBodyRotGetX(LivingEntity entity, Operation original) { - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(entity); - if (!direction.isInverted()) return original.call(entity); - return AntarchyGravityRotationUtil.vecWorldToPlayer( - original.call(entity) - entity.xo, - entity.getY() - entity.yo, - entity.getZ() - entity.zo, - direction - ).x + entity.xo; - } - - @WrapOperation(method = "tick", - at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;getZ()D", ordinal = 0)) - private double antarchy$fixTickBodyRotGetZ(LivingEntity entity, Operation original) { - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(entity); - if (!direction.isInverted()) return original.call(entity); - return AntarchyGravityRotationUtil.vecWorldToPlayer( - entity.getX() - entity.xo, - entity.getY() - entity.yo, - original.call(entity) - entity.zo, - direction - ).z + entity.zo; - } - - @WrapOperation(method = "blockedByShield", - at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;getX()D", ordinal = 0)) - private double antarchy$fixShieldAttackerX(LivingEntity attacker, Operation original) { - AntarchyGravityDirection defDir = AntarchyGravityApi.getGravityDirection((Entity) (Object) this); - if (!defDir.isInverted()) { - if (AntarchyGravityApi.isGravityInverted(attacker)) return attacker.getEyePosition().x; - return original.call(attacker); - } - return AntarchyGravityRotationUtil.vecWorldToPlayer(attacker.getEyePosition(), defDir).x; - } - - @WrapOperation(method = "blockedByShield", - at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;getZ()D", ordinal = 0)) - private double antarchy$fixShieldAttackerZ(LivingEntity attacker, Operation original) { - AntarchyGravityDirection defDir = AntarchyGravityApi.getGravityDirection((Entity) (Object) this); - if (!defDir.isInverted()) return original.call(attacker); - return AntarchyGravityRotationUtil.vecWorldToPlayer(attacker.getEyePosition(), defDir).z; - } - - @WrapOperation(method = "blockedByShield", - at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;getX()D", ordinal = 1)) - private double antarchy$fixShieldDefenderX(LivingEntity shieldUser, Operation original) { - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection((Entity) (Object) this); - if (!direction.isInverted()) return original.call(shieldUser); - return AntarchyGravityRotationUtil.vecWorldToPlayer(shieldUser.position(), direction).x; - } - - @WrapOperation(method = "blockedByShield", - at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;getZ()D", ordinal = 1)) - private double antarchy$fixShieldDefenderZ(LivingEntity shieldUser, Operation original) { - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection((Entity) (Object) this); - if (!direction.isInverted()) return original.call(shieldUser); - return AntarchyGravityRotationUtil.vecWorldToPlayer(shieldUser.position(), direction).z; - } - - @ModifyVariable(method = "isDamageSourceBlocked", - at = @At(value = "INVOKE_ASSIGN", - target = "Lnet/minecraft/world/entity/LivingEntity;calculateViewVector(FF)Lnet/minecraft/world/phys/Vec3;", - ordinal = 0), - ordinal = 1) - private Vec3 antarchy$fixShieldArcViewVector(Vec3 vec3) { - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection((Entity) (Object) this); - if (!direction.isInverted()) return vec3; - return AntarchyGravityRotationUtil.vecWorldToPlayer(vec3, direction); - } - - @ModifyArg(method = "playBlockFallSound", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/world/level/Level;getBlockState(Lnet/minecraft/core/BlockPos;)Lnet/minecraft/world/level/block/state/BlockState;"), - index = 0) - private BlockPos antarchy$fixBlockFallSoundPos(BlockPos pos) { - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection((Entity) (Object) this); - if (!direction.isInverted()) return pos; - Entity selfEntity = (Entity) (Object) this; - return BlockPos.containing(selfEntity.position().add( - AntarchyGravityRotationUtil.vecPlayerToWorld(new Vec3(0.0D, -0.20000000298023224D, 0.0D), direction) - )); - } - - @WrapOperation(method = "spawnItemParticles", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/world/phys/Vec3;add(DDD)Lnet/minecraft/world/phys/Vec3;", - ordinal = 0)) - private Vec3 antarchy$fixItemParticlesAdd(Vec3 base, double x, double y, double z, Operation original) { - Entity self = (Entity) (Object) this; - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(self); - if (!direction.isInverted()) return original.call(base, x, y, z); - Vec3 rotated = AntarchyGravityRotationUtil.vecPlayerToWorld(new Vec3(x, y, z), direction); - return original.call(self.getEyePosition(), rotated.x, rotated.y, rotated.z); - } - - @ModifyVariable(method = "spawnItemParticles", - at = @At(value = "INVOKE_ASSIGN", - target = "Lnet/minecraft/world/phys/Vec3;yRot(F)Lnet/minecraft/world/phys/Vec3;", - ordinal = 0), - ordinal = 0) - private Vec3 antarchy$fixItemParticlesYRotVec(Vec3 vec3) { - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection((Entity) (Object) this); - if (!direction.isInverted()) return vec3; - return AntarchyGravityRotationUtil.vecPlayerToWorld(vec3, direction); - } - - @WrapOperation(method = "tickEffects", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/world/level/Level;addParticle(Lnet/minecraft/core/particles/ParticleOptions;DDDDDD)V")) - private void antarchy$fixEffectParticles(Level level, ParticleOptions particle, - double x, double y, double z, double dx, double dy, double dz, - Operation original) { - Entity self = (Entity) (Object) this; - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(self); - if (!direction.isInverted()) { - original.call(level, particle, x, y, z, dx, dy, dz); - return; - } - Vec3 pos = self.position().subtract( - AntarchyGravityRotationUtil.vecPlayerToWorld(self.position().subtract(x, y, z), direction) - ); - original.call(level, particle, pos.x, pos.y, pos.z, dx, dy, dz); - } - - @WrapOperation(method = "makePoofParticles", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/world/level/Level;addParticle(Lnet/minecraft/core/particles/ParticleOptions;DDDDDD)V", - ordinal = 0)) - private void antarchy$fixPoofParticles(Level level, ParticleOptions particle, - double x, double y, double z, double dx, double dy, double dz, - Operation original) { - Entity self = (Entity) (Object) this; - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(self); - if (!direction.isInverted()) { - original.call(level, particle, x, y, z, dx, dy, dz); - return; - } - Vec3 pos = self.position().subtract( - AntarchyGravityRotationUtil.vecPlayerToWorld(self.position().subtract(x, y, z), direction) - ); - original.call(level, particle, pos.x, pos.y, pos.z, dx, dy, dz); - } - -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/MeleeAttackGoalGravityMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/MeleeAttackGoalGravityMixin.java deleted file mode 100644 index d69998dc..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/MeleeAttackGoalGravityMixin.java +++ /dev/null @@ -1,101 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.PathfinderMob; -import net.minecraft.world.entity.ai.goal.MeleeAttackGoal; -import net.minecraft.world.entity.player.Player; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(MeleeAttackGoal.class) -public abstract class MeleeAttackGoalGravityMixin { - @Shadow - @Final - protected PathfinderMob mob; - - @Shadow - @Final - private double speedModifier; - - @Shadow - @Final - private boolean followingTargetEvenIfNotSeen; - - @Shadow - private int ticksUntilNextAttack; - - @Shadow - protected abstract void checkAndPerformAttack(LivingEntity enemy); - - @Inject(method = "canUse", at = @At("HEAD"), cancellable = true) - private void antarchy$useInvertedMelee(CallbackInfoReturnable cir) { - if (!AntarchyGravityApi.isGravityInverted(this.mob)) { - return; - } - - LivingEntity target = this.mob.getTarget(); - cir.setReturnValue(this.antarchy$isValidInvertedMeleeTarget(target)); - } - - @Inject(method = "canContinueToUse", at = @At("HEAD"), cancellable = true) - private void antarchy$continueInvertedMelee(CallbackInfoReturnable cir) { - if (!AntarchyGravityApi.isGravityInverted(this.mob)) { - return; - } - - LivingEntity target = this.mob.getTarget(); - cir.setReturnValue(this.antarchy$isValidInvertedMeleeTarget(target)); - } - - @Inject(method = "start", at = @At("HEAD"), cancellable = true) - private void antarchy$startInvertedMelee(CallbackInfo ci) { - if (!AntarchyGravityApi.isGravityInverted(this.mob)) { - return; - } - - LivingEntity target = this.mob.getTarget(); - this.mob.getNavigation().stop(); - this.mob.setAggressive(true); - this.ticksUntilNextAttack = 0; - ci.cancel(); - } - - @Inject(method = "tick", at = @At("HEAD"), cancellable = true) - private void antarchy$tickInvertedMelee(CallbackInfo ci) { - if (!AntarchyGravityApi.isGravityInverted(this.mob)) { - return; - } - - LivingEntity target = this.mob.getTarget(); - if (!this.antarchy$isValidInvertedMeleeTarget(target)) { - this.mob.getNavigation().stop(); - ci.cancel(); - return; - } - - this.mob.getLookControl().setLookAt(target, 30.0F, 30.0F); - // Do not call PathNavigation.moveTo here: that starts the unsafe vanilla - // path acquisition path. MoveControl receives a world-space target and - // the gravity movement mixin converts it into the inverted frame. - this.mob.getMoveControl().setWantedPosition(target.getX(), target.getY(), target.getZ(), this.speedModifier); - this.ticksUntilNextAttack = Math.max(0, this.ticksUntilNextAttack - 1); - this.checkAndPerformAttack(target); - ci.cancel(); - } - - private boolean antarchy$isValidInvertedMeleeTarget(LivingEntity target) { - if (target == null || !target.isAlive()) { - return false; - } - if (this.followingTargetEvenIfNotSeen && !this.mob.isWithinRestriction(target.blockPosition())) { - return false; - } - return !(target instanceof Player player) || (!player.isSpectator() && !player.isCreative()); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/MobHurtMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/MobHurtMixin.java deleted file mode 100644 index 5649f57d..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/MobHurtMixin.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.Mob; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -@Mixin(Mob.class) -/* - * Fixes hurt push logic that assumes normal gravity. - */ -public abstract class MobHurtMixin { - @WrapOperation(method = "doHurtTarget", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Mob;getYRot()F")) - private float wrapOperation_tryAttack_getYaw_0(Mob attacker, Operation original, Entity target) { - AntarchyGravityDirection gravityDirection = AntarchyGravityApi.getGravityDirection(target); - if (!gravityDirection.isInverted()) { - return original.call(attacker); - } - return AntarchyGravityRotationUtil.rotWorldToPlayer(original.call(attacker), attacker.getXRot(), gravityDirection).x; - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/MoveControlGravityMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/MoveControlGravityMixin.java deleted file mode 100644 index 60116734..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/MoveControlGravityMixin.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; -import net.minecraft.world.entity.Mob; -import net.minecraft.world.entity.ai.control.MoveControl; -import net.minecraft.world.phys.Vec3; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(MoveControl.class) -public abstract class MoveControlGravityMixin { - @Shadow - @Final - protected Mob mob; - - @Shadow - protected double wantedX; - - @Shadow - protected double wantedY; - - @Shadow - protected double wantedZ; - - @Shadow - protected double speedModifier; - - @Inject(method = "setWantedPosition", at = @At("TAIL")) - private void antarchy$convertInvertedWantedPosition(double x, double y, double z, double speed, CallbackInfo ci) { - if (!AntarchyGravityApi.isGravityInverted(this.mob)) { - return; - } - - Vec3 worldOffset = new Vec3(x - this.mob.getX(), y - this.mob.getY(), z - this.mob.getZ()); - Vec3 localOffset = AntarchyGravityRotationUtil.vecWorldToPlayer( - worldOffset, - AntarchyGravityApi.getGravityDirection(this.mob)); - this.wantedX = this.mob.getX() + localOffset.x; - this.wantedY = this.mob.getY() + localOffset.y; - this.wantedZ = this.mob.getZ() + localOffset.z; - this.speedModifier = speed; - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/PathNavigationAccessor.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/PathNavigationAccessor.java deleted file mode 100644 index f7bdcedc..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/PathNavigationAccessor.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import net.minecraft.world.entity.Mob; -import net.minecraft.world.entity.ai.navigation.PathNavigation; -import net.minecraft.world.level.pathfinder.NodeEvaluator; -import net.minecraft.world.level.pathfinder.Path; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Mixin(PathNavigation.class) -/* - * Accessor for path nav internals used by gravity fixes. - */ -public interface PathNavigationAccessor { - @Accessor("mob") - Mob antarchy$getMob(); - - @Accessor("path") - Path antarchy$getPath(); - - @Accessor("nodeEvaluator") - void antarchy$setNodeEvaluator(NodeEvaluator nodeEvaluator); -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/PlayerGravityMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/PlayerGravityMixin.java deleted file mode 100644 index dd2d76f3..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/PlayerGravityMixin.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import com.llamalad7.mixinextras.sugar.Local; -import net.minecraft.core.BlockPos; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.phys.Vec2; -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.Redirect; - -@Mixin(Player.class) -/* - * Handles player-only gravity sync and movement fixes. - */ -public abstract class PlayerGravityMixin { - @Redirect( - method = "travel", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/world/entity/player/Player;getLookAngle()Lnet/minecraft/world/phys/Vec3;")) - private Vec3 antarchy$rotateTravelLookAngle(Player player) { - Vec3 lookAngle = player.getLookAngle(); - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(player); - if (!direction.isInverted() || player.isFallFlying()) return lookAngle; - return AntarchyGravityRotationUtil.vecWorldToPlayer(lookAngle, direction); - } - - @WrapOperation(method = "travel", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/core/BlockPos;containing(DDD)Lnet/minecraft/core/BlockPos;")) - private BlockPos antarchy$fixTravelBlockPos(double x, double y, double z, - Operation original) { - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection((Entity) (Object) this); - if (!direction.isInverted()) return original.call(x, y, z); - Vec3 rotate = AntarchyGravityRotationUtil.vecPlayerToWorld( - new Vec3(0.0D, 0.9D, 0.0D), direction); - return original.call(x - rotate.x, y - rotate.y + 0.9D, z - rotate.z); - } - - @WrapOperation(method = "attack", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/world/entity/player/Player;getYRot()F", ordinal = 0)) - private float antarchy$fixAttackYaw0(Player attacker, Operation original, - @Local(argsOnly = true) Entity target) { - AntarchyGravityDirection targetDir = AntarchyGravityApi.getGravityDirection(target); - AntarchyGravityDirection attackerDir = AntarchyGravityApi.getGravityDirection(attacker); - if (targetDir == attackerDir) return original.call(attacker); - Vec2 worldRot = AntarchyGravityRotationUtil.rotPlayerToWorld( - original.call(attacker), attacker.getXRot(), attackerDir); - return AntarchyGravityRotationUtil.rotWorldToPlayer(worldRot.x, worldRot.y, targetDir).x; - } - - @WrapOperation(method = "attack", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/world/entity/player/Player;getYRot()F", ordinal = 1)) - private float antarchy$fixAttackYaw1(Player attacker, Operation original, - @Local(argsOnly = true) Entity target) { - AntarchyGravityDirection targetDir = AntarchyGravityApi.getGravityDirection(target); - AntarchyGravityDirection attackerDir = AntarchyGravityApi.getGravityDirection(attacker); - if (targetDir == attackerDir) return original.call(attacker); - Vec2 worldRot = AntarchyGravityRotationUtil.rotPlayerToWorld( - original.call(attacker), attacker.getXRot(), attackerDir); - return AntarchyGravityRotationUtil.rotWorldToPlayer(worldRot.x, worldRot.y, targetDir).x; - } - - @WrapOperation(method = "attack", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/world/entity/player/Player;getYRot()F", ordinal = 2)) - private float antarchy$fixAttackYaw2(Player attacker, Operation original) { - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(attacker); - if (!direction.isInverted()) return original.call(attacker); - return AntarchyGravityRotationUtil.rotPlayerToWorld( - original.call(attacker), attacker.getXRot(), direction).x; - } - - @WrapOperation(method = "attack", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/world/entity/player/Player;getYRot()F", ordinal = 3)) - private float antarchy$fixAttackYaw3(Player attacker, Operation original) { - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(attacker); - if (!direction.isInverted()) return original.call(attacker); - return AntarchyGravityRotationUtil.rotPlayerToWorld( - original.call(attacker), attacker.getXRot(), direction).x; - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/PlayerPoseFitMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/PlayerPoseFitMixin.java deleted file mode 100644 index 64040e22..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/PlayerPoseFitMixin.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import net.minecraft.world.entity.EntityDimensions; -import net.minecraft.world.entity.Pose; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.phys.AABB; -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.CallbackInfoReturnable; - -@Mixin(Player.class) -/* - * Fixes pose checks for ceiling-walking players. - */ -public abstract class PlayerPoseFitMixin { - - @Inject(method = "canPlayerFitWithinBlocksAndEntitiesWhen", at = @At("HEAD"), cancellable = true) - private void antarchy$canFitPoseWhenInverted(Pose pose, CallbackInfoReturnable cir) { - Player player = (Player) (Object) this; - if (!AntarchyGravityApi.isGravityInverted(player)) { - return; - } - - EntityDimensions dimensions = player.getDimensions(pose); - Vec3 position = player.position(); - float halfWidth = dimensions.width() / 2.0F; - float height = dimensions.height(); - AABB invertedBox = new AABB( - position.x - halfWidth, position.y - height, position.z - halfWidth, - position.x + halfWidth, position.y, position.z + halfWidth - ); - cir.setReturnValue(player.level().noCollision(player, invertedBox)); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/PlayerSneakMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/PlayerSneakMixin.java deleted file mode 100644 index a854d195..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/PlayerSneakMixin.java +++ /dev/null @@ -1,100 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.MoverType; -import net.minecraft.world.entity.player.Abilities; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.Vec3; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(Player.class) -/* - * Makes sneaking and edge checks work upside down. - */ -public abstract class PlayerSneakMixin { - - @Shadow @Final private Abilities abilities; - @Shadow protected abstract boolean isStayingOnGroundSurface(); - - @Inject(method = "maybeBackOffFromEdge", at = @At("HEAD"), cancellable = true) - private void antarchy$fixSneakEdge(Vec3 movement, MoverType type, CallbackInfoReturnable cir) { - Entity this_ = (Entity) (Object) this; - AntarchyGravityDirection direction = AntarchyGravityApi.getGravityDirection(this_); - if (!direction.isInverted()) { - return; - } - float step = this_.maxUpStep(); - boolean isNearCeiling; - if (this_.onGround()) { - isNearCeiling = true; - } else { - float remaining = step - this_.fallDistance; - if (remaining > 0.0F) { - AABB bb = this_.getBoundingBox(); - isNearCeiling = !this_.level().noCollision(this_, - new AABB(bb.minX, bb.maxY, bb.minZ, - bb.maxX, bb.maxY + remaining + 1.0E-5, bb.maxZ)); - } else { - isNearCeiling = false; - } - } - - if (!this.abilities.flying - && (type == MoverType.SELF || type == MoverType.PLAYER) - && this.isStayingOnGroundSurface() - && isNearCeiling) { - Vec3 playerMovement = AntarchyGravityRotationUtil.vecWorldToPlayer(movement, direction); - double d = playerMovement.x; - double e = playerMovement.z; - - while (d != 0.0D && canFallAtLeastInverted(this_, d, 0.0D, step, direction)) { - if (Math.abs(d) <= 0.05D) d = 0.0D; - else if (d > 0.0D) d -= 0.05D; - else d += 0.05D; - } - while (e != 0.0D && canFallAtLeastInverted(this_, 0.0D, e, step, direction)) { - if (Math.abs(e) <= 0.05D) e = 0.0D; - else if (e > 0.0D) e -= 0.05D; - else e += 0.05D; - } - while (d != 0.0D && e != 0.0D && canFallAtLeastInverted(this_, d, e, step, direction)) { - if (Math.abs(d) <= 0.05D) d = 0.0D; - else if (d > 0.0D) d -= 0.05D; - else d += 0.05D; - - if (Math.abs(e) <= 0.05D) e = 0.0D; - else if (e > 0.0D) e -= 0.05D; - else e += 0.05D; - } - - cir.setReturnValue(AntarchyGravityRotationUtil.vecPlayerToWorld( - new Vec3(d, playerMovement.y, e), direction)); - - } else { - cir.setReturnValue(movement); - } - } - - - private static boolean canFallAtLeastInverted(Entity entity, - double dx, double dz, - float step, - AntarchyGravityDirection direction) { - Vec3 worldOffset = AntarchyGravityRotationUtil.vecPlayerToWorld( - new Vec3(dx, -step, dz), direction); - - AABB bb = entity.getBoundingBox(); - AABB probe = bb.move(worldOffset); - - return entity.level().noCollision(entity, probe); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ProjectileGravityMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ProjectileGravityMixin.java deleted file mode 100644 index eea80ce1..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ProjectileGravityMixin.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.ProjectileLaunchGravity; -import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisUndersideManager; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import com.llamalad7.mixinextras.sugar.Local; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.projectile.Projectile; -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(Projectile.class) -/* - * Keeps projectile movement in world space while reversing gravity and launch - * direction only inside the Thoraxis Underside. - */ -public abstract class ProjectileGravityMixin { - - @Inject(method = "shootFromRotation", at = @At("HEAD")) - private void antarchy$prepareGravityAwareShot( - Entity shooter, - float xRot, - float yRot, - float rotationOffset, - float velocity, - float inaccuracy, - CallbackInfo ci - ) { - ThoraxisUndersideManager.normalizeProjectileGravityFrame((Projectile) (Object) this); - } - - @Inject(method = "tick", at = @At("HEAD")) - private void antarchy$keepWorldMovementFrame(CallbackInfo ci) { - ThoraxisUndersideManager.normalizeProjectileGravityFrame((Projectile) (Object) this); - } - - @WrapOperation( - method = "shootFromRotation", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/world/entity/projectile/Projectile;shoot(DDDFF)V" - ) - ) - private void antarchy$rotateUndersideLaunchDirection( - Projectile projectile, - double x, - double y, - double z, - float velocity, - float inaccuracy, - Operation original, - @Local(argsOnly = true) Entity shooter - ) { - Vec3 direction = new Vec3(x, y, z); - if (AntarchyGravityApi.isGravityInverted(shooter)) { - direction = ProjectileLaunchGravity.toWorld( - direction, - AntarchyGravityApi.getGravityDirection(shooter) - ); - } - original.call(projectile, direction.x, direction.y, direction.z, velocity, inaccuracy); - } - -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/RandomStrollGoalGravityMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/RandomStrollGoalGravityMixin.java deleted file mode 100644 index a82324be..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/RandomStrollGoalGravityMixin.java +++ /dev/null @@ -1,161 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.util.Mth; -import net.minecraft.world.entity.PathfinderMob; -import net.minecraft.world.entity.Pose; -import net.minecraft.world.entity.ai.goal.RandomStrollGoal; -import net.minecraft.world.entity.EntityDimensions; -import net.minecraft.world.level.Level; -import net.minecraft.world.phys.AABB; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(RandomStrollGoal.class) -public abstract class RandomStrollGoalGravityMixin { - @Unique - private static final int ANTARCHY$INVERTED_STROLL_ATTEMPTS = 12; - @Unique - private static final int ANTARCHY$INVERTED_STROLL_HORIZONTAL_RANGE = 7; - @Unique - private static final int ANTARCHY$INVERTED_STROLL_VERTICAL_RANGE = 2; - - @Shadow - @Final - protected PathfinderMob mob; - - @Shadow - protected double wantedX; - - @Shadow - protected double wantedY; - - @Shadow - protected double wantedZ; - - @Shadow - @Final - protected double speedModifier; - - @Shadow - protected int interval; - - @Shadow - protected boolean forceTrigger; - - @Shadow - @Final - private boolean checkNoActionTime; - - @Unique - private int antarchy$invertedStrollTicks; - - @Inject(method = "canUse", at = @At("HEAD"), cancellable = true) - private void antarchy$useInvertedRandomStroll(CallbackInfoReturnable cir) { - if (!AntarchyGravityApi.isGravityInverted(this.mob)) { - return; - } - - if (this.mob.hasControllingPassenger()) { - cir.setReturnValue(false); - return; - } - - if (!this.forceTrigger) { - if (this.checkNoActionTime && this.mob.getNoActionTime() >= 100) { - cir.setReturnValue(false); - return; - } - int chance = Math.max(1, this.interval); - if (this.mob.getRandom().nextInt(chance) != 0) { - cir.setReturnValue(false); - return; - } - } - - cir.setReturnValue(this.antarchy$findInvertedStrollTarget()); - } - - @Inject(method = "start", at = @At("HEAD"), cancellable = true) - private void antarchy$startInvertedRandomStroll(CallbackInfo ci) { - if (!AntarchyGravityApi.isGravityInverted(this.mob)) { - return; - } - - this.mob.getNavigation().stop(); - this.mob.getMoveControl().setWantedPosition(this.wantedX, this.wantedY, this.wantedZ, this.speedModifier); - this.antarchy$invertedStrollTicks = 0; - this.forceTrigger = false; - ci.cancel(); - } - - @Inject(method = "canContinueToUse", at = @At("HEAD"), cancellable = true) - private void antarchy$continueInvertedRandomStroll(CallbackInfoReturnable cir) { - if (!AntarchyGravityApi.isGravityInverted(this.mob)) { - return; - } - - double dx = this.wantedX - this.mob.getX(); - double dy = this.wantedY - this.mob.getY(); - double dz = this.wantedZ - this.mob.getZ(); - boolean arrived = dx * dx + dy * dy + dz * dz <= 1.0D; - boolean timedOut = this.antarchy$invertedStrollTicks++ >= 200; - if (!arrived && !timedOut && !this.mob.hasControllingPassenger()) { - // RandomStrollGoal inherits Goal.tick(), so continuation is the - // declared per-tick hook available for refreshing direct movement. - this.mob.getMoveControl().setWantedPosition(this.wantedX, this.wantedY, this.wantedZ, this.speedModifier); - } - cir.setReturnValue(!this.mob.hasControllingPassenger() && !arrived && !timedOut); - } - - @Unique - private boolean antarchy$findInvertedStrollTarget() { - int baseX = Mth.floor(this.mob.getX()); - int baseY = Mth.floor(this.mob.getY() + this.mob.getBbHeight()) - 1; - int baseZ = Mth.floor(this.mob.getZ()); - - for (int attempt = 0; attempt < ANTARCHY$INVERTED_STROLL_ATTEMPTS; attempt++) { - int x = baseX + this.mob.getRandom().nextInt(ANTARCHY$INVERTED_STROLL_HORIZONTAL_RANGE * 2 + 1) - ANTARCHY$INVERTED_STROLL_HORIZONTAL_RANGE; - int y = baseY + this.mob.getRandom().nextInt(ANTARCHY$INVERTED_STROLL_VERTICAL_RANGE * 2 + 1) - ANTARCHY$INVERTED_STROLL_VERTICAL_RANGE; - int z = baseZ + this.mob.getRandom().nextInt(ANTARCHY$INVERTED_STROLL_HORIZONTAL_RANGE * 2 + 1) - ANTARCHY$INVERTED_STROLL_HORIZONTAL_RANGE; - if (this.antarchy$isValidInvertedStrollTarget(x, y, z)) { - this.wantedX = x + 0.5D; - this.wantedY = y + 1.0D - 1.0E-3D; - this.wantedZ = z + 0.5D; - return true; - } - } - - return false; - } - - @Unique - private boolean antarchy$isValidInvertedStrollTarget(int x, int y, int z) { - Level level = this.mob.level(); - BlockPos ceilingPos = new BlockPos(x, y + 1, z); - if (!level.getBlockState(ceilingPos).isFaceSturdy(level, ceilingPos, Direction.DOWN)) { - return false; - } - - EntityDimensions dimensions = this.mob.getDimensions(Pose.STANDING); - double halfWidth = dimensions.width() / 2.0D; - double topY = y + 1.0D - 1.0E-3D; - AABB bodyBox = new AABB( - x + 0.5D - halfWidth, - topY - dimensions.height(), - z + 0.5D - halfWidth, - x + 0.5D + halfWidth, - topY, - z + 0.5D + halfWidth - ).deflate(1.0E-4D); - return level.noCollision(this.mob, bodyBox); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ServerGamePacketListenerMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ServerGamePacketListenerMixin.java deleted file mode 100644 index 80622200..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ServerGamePacketListenerMixin.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; -import net.minecraft.network.protocol.game.ServerboundMovePlayerPacket; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.server.network.ServerGamePacketListenerImpl; -import net.minecraft.world.phys.Vec3; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.ModifyArg; -import org.spongepowered.asm.mixin.injection.ModifyVariable; - -@Mixin(ServerGamePacketListenerImpl.class) -/* - * Fixes move packet checks for inverted players. - */ -public abstract class ServerGamePacketListenerMixin { - - @Shadow - public ServerPlayer player; - - @Shadow - private double lastGoodX; - @Shadow - private double lastGoodY; - @Shadow - private double lastGoodZ; - - @ModifyVariable(method = "handleMovePlayer", - at = @At(value = "STORE", ordinal = 0), - ordinal = 0) - private boolean antarchy$fixHandleMovePlayerFlag(boolean originalFlag, - ServerboundMovePlayerPacket packet) { - AntarchyGravityDirection gravity = AntarchyGravityApi.getGravityDirection(this.player); - if (!gravity.isInverted()) { - return originalFlag; - } - double dx = packet.getX(this.player.getX()) - this.lastGoodX; - double dy = packet.getY(this.player.getY()) - this.lastGoodY; - double dz = packet.getZ(this.player.getZ()) - this.lastGoodZ; - Vec3 localVec = AntarchyGravityRotationUtil.vecWorldToPlayer(new Vec3(dx, dy, dz), gravity); - return localVec.y > 0.0; - } - - @ModifyArg(method = "handleMovePlayer", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/server/level/ServerPlayer;move(Lnet/minecraft/world/entity/MoverType;Lnet/minecraft/world/phys/Vec3;)V")) - private Vec3 antarchy$fixHandleMovePlayerVector(Vec3 worldDelta) { - AntarchyGravityDirection gravity = AntarchyGravityApi.getGravityDirection(this.player); - if (!gravity.isInverted()) { - return worldDelta; - } - return AntarchyGravityRotationUtil.vecWorldToPlayer(worldDelta, gravity); - } - - @ModifyArg(method = "handleMovePlayer", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/server/level/ServerPlayer;setOnGroundWithMovement(ZLnet/minecraft/world/phys/Vec3;)V"), - index = 0) - private boolean antarchy$fixHandleMovePlayerOnGround(boolean originalOnGround) { - AntarchyGravityDirection gravity = AntarchyGravityApi.getGravityDirection(this.player); - if (!gravity.isInverted()) { - return originalOnGround; - } - return originalOnGround || this.player.verticalCollisionBelow || this.player.verticalCollision; - } - - @ModifyArg(method = "handleMovePlayer", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/server/level/ServerPlayer;doCheckFallDamage(DDDZ)V"), - index = 3) - private boolean antarchy$fixHandleMovePlayerFallDamageOnGround(boolean originalOnGround) { - AntarchyGravityDirection gravity = AntarchyGravityApi.getGravityDirection(this.player); - if (!gravity.isInverted()) { - return originalOnGround; - } - return originalOnGround || this.player.verticalCollisionBelow || this.player.verticalCollision; - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ServerPlayerGravityMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ServerPlayerGravityMixin.java deleted file mode 100644 index 70629df2..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ServerPlayerGravityMixin.java +++ /dev/null @@ -1,116 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -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.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import com.llamalad7.mixinextras.sugar.Local; -import net.minecraft.core.BlockPos; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.material.FluidState; -import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.Vec3; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(ServerPlayer.class) -/* - * Fixes server-side fall damage for inverted players. - */ -public abstract class ServerPlayerGravityMixin { - @Unique - private float antarchy$invertedFallDistance = 0.0F; - - @Inject(method = "doCheckFallDamage", at = @At("HEAD"), cancellable = true) - private void antarchy$cancelFallDamageInAntiwater(double x, double y, double z, boolean onGround, CallbackInfo ci) { - ServerPlayer self = (ServerPlayer) (Object) this; - AntarchyGravityDirection gravity = AntarchyGravityApi.getGravityDirection(self); - if (!gravity.isInverted()) { - return; - } - if (!antarchy$isTouchingAntiwater(self)) { - return; - } - - self.fallDistance = 0.0F; - this.antarchy$invertedFallDistance = 0.0F; - ci.cancel(); - } - - @WrapOperation(method = "doCheckFallDamage", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/world/entity/player/Player;checkFallDamage(DZLnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/core/BlockPos;)V")) - private void antarchy$fixFallDamage(ServerPlayer instance, - double worldY, boolean onGround, - BlockState state, BlockPos pos, - Operation original, - @Local(ordinal = 0) double dx, - @Local(ordinal = 1) double dy, - @Local(ordinal = 2) double dz) { - ServerPlayer self = (ServerPlayer) (Object) this; - AntarchyGravityDirection gravity = AntarchyGravityApi.getGravityDirection(self); - if (!gravity.isInverted()) { - this.antarchy$invertedFallDistance = 0.0F; - original.call(instance, worldY, onGround, state, pos); - return; - } - if (antarchy$isTouchingAntiwater(self) || antarchy$passedThroughAntiwater(self, dx, dy, dz)) { - self.fallDistance = 0.0F; - this.antarchy$invertedFallDistance = 0.0F; - original.call(instance, 0.0D, onGround, state, pos); - return; - } - Vec3 localVec = AntarchyGravityRotationUtil.vecWorldToPlayer(new Vec3(dx, dy, dz), gravity); - if (!onGround) { - if (localVec.y < 0.0) { - this.antarchy$invertedFallDistance += (float)(-localVec.y); - } else { - this.antarchy$invertedFallDistance = 0.0F; - } - } else if (this.antarchy$invertedFallDistance > self.fallDistance) { - // Vanilla damage uses fallDistance on landing; keep our own inverted accumulator - // in sync because the server pipeline is clearing the field before that point. - self.fallDistance = this.antarchy$invertedFallDistance; - } - original.call(instance, localVec.y, onGround, state, pos); - if (onGround) { - this.antarchy$invertedFallDistance = 0.0F; - } - } - - @Unique - private boolean antarchy$isTouchingAntiwater(ServerPlayer player) { - return antarchy$intersectsAntiwater(player, player.getBoundingBox().inflate(0.05D)); - } - - @Unique - private boolean antarchy$passedThroughAntiwater(ServerPlayer player, double dx, double dy, double dz) { - AABB sweptBox = player.getBoundingBox().expandTowards(-dx, -dy, -dz).inflate(0.05D); - return antarchy$intersectsAntiwater(player, sweptBox); - } - - @Unique - private boolean antarchy$intersectsAntiwater(ServerPlayer player, AABB box) { - BlockPos.MutableBlockPos cursor = new BlockPos.MutableBlockPos(); - BlockPos min = BlockPos.containing(box.minX, box.minY, box.minZ); - BlockPos max = BlockPos.containing(box.maxX, box.maxY, box.maxZ); - 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 = player.level().getFluidState(cursor); - if (AntarchyFluidChecks.isAntiwater(fluidState)) { - return true; - } - } - } - } - return false; - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ThrowableProjectileGravityMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ThrowableProjectileGravityMixin.java deleted file mode 100644 index e4aa87f1..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ThrowableProjectileGravityMixin.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisUndersideManager; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import net.minecraft.world.entity.projectile.ThrowableProjectile; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -@Mixin(ThrowableProjectile.class) -/* - * Flips thrown projectile gravity from the projectile's current position. - */ -public abstract class ThrowableProjectileGravityMixin { - - @WrapOperation(method = "tick", at = @At( - value = "INVOKE", - target = "Lnet/minecraft/world/entity/projectile/ThrowableProjectile;applyGravity()V")) - private void antarchy$applyThrownProjectileGravityUpward(ThrowableProjectile self, Operation original) { - if (!ThoraxisUndersideManager.isInUnderside(self)) { - original.call(self); - return; - } - // Vanilla subtracts gravity from world Y; the Underside adds it instead. - double gravity = self.getGravity(); - self.setDeltaMovement(self.getDeltaMovement().add(0.0D, gravity, 0.0D)); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/client/CameraGravityMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/client/CameraGravityMixin.java deleted file mode 100644 index 42ccba3a..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/client/CameraGravityMixin.java +++ /dev/null @@ -1,93 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity.client; - -import com.craisinlord.antarchy.content.client.PortalGunRollClientState; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; -import net.minecraft.client.Camera; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.level.BlockGetter; -import net.minecraft.world.phys.Vec3; -import org.joml.Quaternionf; -import org.joml.Vector3f; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.Redirect; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(Camera.class) -public abstract class CameraGravityMixin { - @Shadow - private Entity entity; - - @Shadow - private Quaternionf rotation; - - @Shadow - private float eyeHeight; - - @Shadow - private float eyeHeightOld; - - private float antarchy$storedTickDelta; - - @Shadow - protected abstract void setPosition(double x, double y, double z); - - @Inject(method = "setup", at = @At("HEAD")) - private void antarchy$storeTickDelta(BlockGetter level, Entity entity, boolean detached, boolean mirrored, float partialTick, CallbackInfo ci) { - this.antarchy$storedTickDelta = partialTick; - } - - @Redirect( - method = "setup", - at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Camera;setPosition(DDD)V") - ) - private void antarchy$moveGravityCameraAnchor( - Camera camera, - double x, - double y, - double z, - BlockGetter level, - Entity entity, - boolean detached, - boolean mirrored, - float partialTick - ) { - if (entity == null) { - this.setPosition(x, y, z); - return; - } - - float flipProgress = AntarchyGravityApi.getGravityFlipProgress(entity, partialTick); - if (!AntarchyGravityApi.isGravityInverted(entity) && flipProgress <= 0.0F) { - this.setPosition(x, y, z); - return; - } - - Vec3 interpolatedPos = entity.getPosition(partialTick); - float normalEyeHeight = this.eyeHeightOld + (this.eyeHeight - this.eyeHeightOld) * partialTick; - Vector3f eyeOffset = new Vector3f(0.0F, normalEyeHeight, 0.0F); - eyeOffset.rotate(AntarchyGravityRotationUtil.getWorldRotationQuaternion(entity, partialTick)); - this.setPosition( - interpolatedPos.x + eyeOffset.x(), - interpolatedPos.y + eyeOffset.y(), - interpolatedPos.z + eyeOffset.z() - ); - } - - @Inject( - method = "setRotation", - at = @At(value = "INVOKE", target = "Lorg/joml/Quaternionf;rotationYXZ(FFF)Lorg/joml/Quaternionf;", shift = At.Shift.AFTER) - ) - private void antarchy$applyGravityRotation(CallbackInfo ci) { - if (this.entity == null) { - return; - } - if (AntarchyGravityApi.isGravityInverted(this.entity) || AntarchyGravityApi.getGravityFlipProgress(this.entity, this.antarchy$storedTickDelta) > 0.0F) { - this.rotation.premul(AntarchyGravityRotationUtil.getCameraRotationQuaternion(this.entity, this.antarchy$storedTickDelta)); - } - this.rotation.premul(new Quaternionf().fromAxisAngleDeg(0.0F, 0.0F, -1.0F, PortalGunRollClientState.getRollDegrees(this.antarchy$storedTickDelta))); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/client/ClientPacketListenerGravityMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/client/ClientPacketListenerGravityMixin.java deleted file mode 100644 index 9afe4f83..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/client/ClientPacketListenerGravityMixin.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity.client; - -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import net.minecraft.client.Minecraft; -import net.minecraft.client.multiplayer.ClientPacketListener; -import net.minecraft.world.phys.Vec3; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -@Mixin(ClientPacketListener.class) -/* - * Keeps client gravity state in sync from entity updates. - */ -public abstract class ClientPacketListenerGravityMixin { - - @WrapOperation(method = "handleExplosion", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/world/phys/Vec3;add(DDD)Lnet/minecraft/world/phys/Vec3;", - ordinal = 0)) - private Vec3 antarchy$fixExplosionKnockback(Vec3 current, - double x, double y, double z, - Operation original) { - if (Minecraft.getInstance().player == null) { - return original.call(current, x, y, z); - } - AntarchyGravityDirection gravity = - AntarchyGravityApi.getGravityDirection(Minecraft.getInstance().player); - if (!gravity.isInverted()) { - return original.call(current, x, y, z); - } - Vec3 local = AntarchyGravityRotationUtil.vecWorldToPlayer(new Vec3(x, y, z), gravity); - return original.call(current, local.x, local.y, local.z); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/client/EntityRenderDispatcherGravityMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/client/EntityRenderDispatcherGravityMixin.java deleted file mode 100644 index 057577a5..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/client/EntityRenderDispatcherGravityMixin.java +++ /dev/null @@ -1,117 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity.client; - -import com.craisinlord.antarchy.Antarchy; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.blaze3d.vertex.VertexConsumer; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.entity.EntityRenderDispatcher; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.phys.AABB; -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.ModifyVariable; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(EntityRenderDispatcher.class) -/* - * Rotates entity rendering for inverted gravity. - */ -public abstract class EntityRenderDispatcherGravityMixin { - @org.spongepowered.asm.mixin.Unique - private static boolean antarchy$loggedGravityRenderFailure; - - @Inject( - method = "render", - at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/vertex/PoseStack;translate(DDD)V", ordinal = 0, shift = At.Shift.AFTER) - ) - private void antarchy$rotateEntityRenderPose( - E entity, - double x, - double y, - double z, - float entityYaw, - float partialTick, - PoseStack poseStack, - MultiBufferSource bufferSource, - int packedLight, - CallbackInfo ci - ) { - try { - float flipProgress = AntarchyGravityApi.getGravityFlipProgress(entity, partialTick); - if (!AntarchyGravityApi.isGravityInverted(entity) && flipProgress <= 0.0F) { - return; - } - - poseStack.mulPose(AntarchyGravityRotationUtil.getCameraRotationQuaternion(entity, partialTick)); - } catch (Throwable throwable) { - antarchy$logGravityRenderFailure(entity, throwable); - } - } - - @ModifyVariable( - method = "renderHitbox", - at = @At(value = "INVOKE_ASSIGN", target = "Lnet/minecraft/world/phys/AABB;move(DDD)Lnet/minecraft/world/phys/AABB;", ordinal = 0), - ordinal = 0 - ) - private static AABB antarchy$rotateRenderedHitbox( - AABB box, - PoseStack poseStack, - VertexConsumer vertexConsumer, - Entity entity, - float red, - float green, - float blue, - float partialTick - ) { - try { - if (!AntarchyGravityApi.isGravityInverted(entity)) { - return box; - } - - return AntarchyGravityRotationUtil.boxWorldToPlayer( - box, - AntarchyGravityApi.getGravityDirection(entity) - ); - } catch (Throwable throwable) { - antarchy$logGravityRenderFailure(entity, throwable); - return box; - } - } - - @WrapOperation( - method = "renderHitbox", - at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Entity;getViewVector(F)Lnet/minecraft/world/phys/Vec3;", ordinal = 0) - ) - private static Vec3 antarchy$rotateRenderedHitboxViewVector(Entity entity, float partialTick, Operation original) { - Vec3 viewVector = original.call(entity, partialTick); - try { - if (!AntarchyGravityApi.isGravityInverted(entity)) { - return viewVector; - } - - return AntarchyGravityRotationUtil.vecWorldToPlayer( - viewVector, - AntarchyGravityApi.getGravityDirection(entity) - ); - } catch (Throwable throwable) { - antarchy$logGravityRenderFailure(entity, throwable); - return viewVector; - } - } - - @org.spongepowered.asm.mixin.Unique - private static void antarchy$logGravityRenderFailure(Entity entity, Throwable throwable) { - if (antarchy$loggedGravityRenderFailure) { - return; - } - - antarchy$loggedGravityRenderFailure = true; - Antarchy.LOGGER.error("Disabling Antarchy gravity render adjustments after a client render failure on entity {}", entity, throwable); - } -} diff --git a/common-1.21.1/src/main/resources/antarchy-common.mixins.json b/common-1.21.1/src/main/resources/antarchy-common.mixins.json index 8aff0c03..b3b9de57 100644 --- a/common-1.21.1/src/main/resources/antarchy-common.mixins.json +++ b/common-1.21.1/src/main/resources/antarchy-common.mixins.json @@ -72,49 +72,13 @@ "SquidzookaMultishotMixin", "TigerEyeCamouflageMixin", "TigerEyeVisibilityMixin", - "gravity.AbstractArrowGravityMixin", - "gravity.BehaviorUtilsGravityMixin", - "gravity.BucketItemGravityMixin", - "gravity.BubbleColumnGravityMixin", "gravity.ChunkMapAccessor", - "gravity.CrossbowItemGravityMixin", - "gravity.DirectionFacingMixin", - "gravity.EntityCollisionContextMixin", - "gravity.EntityGravityFrameMixin", - "gravity.EntityGravityMixin", - "gravity.EntityMoveMixin", - "gravity.EntityProjectileGravityMixin", - "gravity.ExplosionGravityMixin", "gravity.FallingBlockEntityBlockDataMixin", - "gravity.FireworkRocketGravityMixin", - "gravity.GroundPathNavigationMixin", - "gravity.LivingEntityMixin", - "gravity.MeleeAttackGoalGravityMixin", - "gravity.MoveControlGravityMixin", - "gravity.MobHurtMixin", - "gravity.PathNavigationAccessor", "gravity.PlayerAttackMixin", - "gravity.PlayerGravityMixin", - "gravity.PlayerPoseFitMixin", - "gravity.PlayerSneakMixin", - "gravity.RandomStrollGoalGravityMixin", - "gravity.ProjectileGravityMixin", "gravity.ServerChunkCacheAccessor", "gravity.ServerEntityAccessor", - "gravity.ServerGamePacketListenerMixin", - "gravity.ServerPlayerGravityMixin", - "gravity.ThrowableProjectileGravityMixin", "gravity.TrackedEntityAccessor", "compat.biolith.MultiNoiseBiomeSourceNullGuardMixin", - "compat.scguns.ScgunsProjectileEntityAccessMixin", - "compat.scguns.ScgunsProjectileEntityGravityMixin", - "compat.scguns.ScgunsArrowGravityMixin", - "compat.irons_spellbooks.IronsSpellbooksProjectileGravityMixin", - "compat.ars_nouveau.ArsNouveauProjectileGravityMixin", - "compat.alexscaves.AlexsCavesCandyCaneHookMixin", - "compat.alexscaves.AlexsCavesWaterBoltMixin", - "compat.alexscaves.AlexsCavesTephraMixin", - "compat.alexscaves.AlexsCavesDepthChargeMixin", "multipart.EntityMultipartLifecycleMixin", "time.EntityDeltaMovementTimeDilationMixin", "time.EntityMoveTimeDilationMixin", @@ -191,9 +155,6 @@ "client.TigerEyeNameTagHideMixin", "client.TemporalContractionLivingRendererMixin", "client.WolfRendererGrimMixin", - "gravity.client.CameraGravityMixin", - "gravity.client.ClientPacketListenerGravityMixin", - "gravity.client.EntityRenderDispatcherGravityMixin", "gravity.client.FallingBlockRendererBlockEntityMixin", "time.LivingEntityRendererAnimationTimeDilationMixin", "time.ParticleTimeDilationMixin", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/lang/de_de.json b/common-1.21.1/src/main/resources/assets/antarchy/lang/de_de.json index f59b20eb..2f1e98df 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/lang/de_de.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/lang/de_de.json @@ -526,8 +526,6 @@ "effect.antarchy.dread.description": "Verursacht visuelle und akustische Halluzinationen.", "effect.antarchy.paralyzed": "Gelähmt", "effect.antarchy.paralyzed.description": "Verhindert, dass sich Ziele bewegen.", - "effect.antarchy.inverted": "Umgekehrt", - "effect.antarchy.inverted.description": "Kehrt die Schwerkraft des Ziels um.", "effect.antarchy.commanded.description": "Kämpft für den Spieler, der das Ziel kommandiert hat.", "effect.antarchy.dilated.description": "Verlangsamt den Zeitablauf für das betroffene Wesen.", "effect.antarchy.stinky": "Stinkend", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/lang/en_us.json b/common-1.21.1/src/main/resources/assets/antarchy/lang/en_us.json index 0f6b120e..2f5affd4 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/lang/en_us.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/lang/en_us.json @@ -800,8 +800,6 @@ "effect.antarchy.dread.description": "Gives visual and audio hallucinations.", "effect.antarchy.paralyzed": "Paralyzed", "effect.antarchy.paralyzed.description": "Prevents targets from moving.", - "effect.antarchy.inverted": "Inverted", - "effect.antarchy.inverted.description": "Inverts the target's gravity.", "effect.antarchy.commanded": "Commanded", "effect.antarchy.commanded.description": "Fights for the player who commanded it.", "effect.antarchy.dilated": "Temporal Dilation", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/lang/es_es.json b/common-1.21.1/src/main/resources/assets/antarchy/lang/es_es.json index 3567985f..d546ce78 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/lang/es_es.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/lang/es_es.json @@ -526,8 +526,6 @@ "effect.antarchy.dread.description": "Provoca alucinaciones visuales y auditivas.", "effect.antarchy.paralyzed": "Paralizado", "effect.antarchy.paralyzed.description": "Impide que los objetivos se muevan.", - "effect.antarchy.inverted": "Invertido", - "effect.antarchy.inverted.description": "Invierte la gravedad del objetivo.", "effect.antarchy.commanded.description": "Lucha por el jugador que lo comandó.", "effect.antarchy.dilated.description": "Ralentiza el paso del tiempo para la criatura afectada.", "effect.antarchy.stinky": "Apestoso", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/lang/fr_fr.json b/common-1.21.1/src/main/resources/assets/antarchy/lang/fr_fr.json index 1da3b124..1608afe0 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/lang/fr_fr.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/lang/fr_fr.json @@ -526,8 +526,6 @@ "effect.antarchy.dread.description": "Provoque des hallucinations visuelles et sonores.", "effect.antarchy.paralyzed": "Paralysé", "effect.antarchy.paralyzed.description": "Empêche les cibles de se déplacer.", - "effect.antarchy.inverted": "Inversé", - "effect.antarchy.inverted.description": "Inverse la gravité de la cible.", "effect.antarchy.commanded.description": "Combat pour le joueur qui l’a commandé.", "effect.antarchy.dilated.description": "Ralentit le passage du temps pour l’entité affectée.", "effect.antarchy.stinky": "Puant", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/lang/it_it.json b/common-1.21.1/src/main/resources/assets/antarchy/lang/it_it.json index e3497a4c..f1529967 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/lang/it_it.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/lang/it_it.json @@ -526,8 +526,6 @@ "effect.antarchy.dread.description": "Provoca allucinazioni visive e sonore.", "effect.antarchy.paralyzed": "Paralizzato", "effect.antarchy.paralyzed.description": "Impedisce ai bersagli di muoversi.", - "effect.antarchy.inverted": "Invertito", - "effect.antarchy.inverted.description": "Inverte la gravità del bersaglio.", "effect.antarchy.commanded.description": "Combatte per il giocatore che lo ha comandato.", "effect.antarchy.dilated.description": "Rallenta il passare del tempo per l’entità colpita.", "effect.antarchy.stinky": "Puzzolente", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/lang/ja_jp.json b/common-1.21.1/src/main/resources/assets/antarchy/lang/ja_jp.json index 6d81f97f..9e08d8a0 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/lang/ja_jp.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/lang/ja_jp.json @@ -526,8 +526,6 @@ "effect.antarchy.dread.description": "視覚と聴覚の幻覚を引き起こします。", "effect.antarchy.paralyzed": "麻痺", "effect.antarchy.paralyzed.description": "対象が動けなくなります。", - "effect.antarchy.inverted": "重力反転", - "effect.antarchy.inverted.description": "対象の重力を反転させます。", "effect.antarchy.commanded.description": "命令したプレイヤーのために戦います。", "effect.antarchy.dilated.description": "影響を受けたエンティティの時間の流れを遅くします。", "effect.antarchy.stinky": "悪臭", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/lang/ko_kr.json b/common-1.21.1/src/main/resources/assets/antarchy/lang/ko_kr.json index 3a9f171b..d015ff0f 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/lang/ko_kr.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/lang/ko_kr.json @@ -526,8 +526,6 @@ "effect.antarchy.dread.description": "시각 및 청각 환각을 일으킵니다.", "effect.antarchy.paralyzed": "마비", "effect.antarchy.paralyzed.description": "대상이 움직이지 못하게 합니다.", - "effect.antarchy.inverted": "반전", - "effect.antarchy.inverted.description": "대상의 중력을 반전시킵니다.", "effect.antarchy.commanded.description": "명령한 플레이어를 위해 싸웁니다.", "effect.antarchy.dilated.description": "영향받은 개체의 시간 흐름을 늦춥니다.", "effect.antarchy.stinky": "악취", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/lang/pt_br.json b/common-1.21.1/src/main/resources/assets/antarchy/lang/pt_br.json index d418f422..dbbdf048 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/lang/pt_br.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/lang/pt_br.json @@ -526,8 +526,6 @@ "effect.antarchy.dread.description": "Provoca alucinações visuais e auditivas.", "effect.antarchy.paralyzed": "Paralisado", "effect.antarchy.paralyzed.description": "Impede que os alvos se movam.", - "effect.antarchy.inverted": "Invertido", - "effect.antarchy.inverted.description": "Inverte a gravidade do alvo.", "effect.antarchy.commanded.description": "Luta pelo jogador que o comandou.", "effect.antarchy.dilated.description": "Diminui a passagem do tempo para a entidade afetada.", "effect.antarchy.stinky": "Fedido", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/lang/ru_ru.json b/common-1.21.1/src/main/resources/assets/antarchy/lang/ru_ru.json index e05f5a01..0d158572 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/lang/ru_ru.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/lang/ru_ru.json @@ -497,8 +497,6 @@ "effect.antarchy.dread.description": "Вызывает зрительные и звуковые галлюцинации.", "effect.antarchy.paralyzed": "Паралич", "effect.antarchy.paralyzed.description": "Не дает целям двигаться.", - "effect.antarchy.inverted": "Инверсия", - "effect.antarchy.inverted.description": "Инвертирует гравитацию цели.", "effect.antarchy.commanded.description": "Сражается за игрока, который им командует.", "effect.antarchy.dilated.description": "Замедляет течение времени для существа под действием эффекта.", "effect.antarchy.stinky": "Вонючесть", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/lang/zh_cn.json b/common-1.21.1/src/main/resources/assets/antarchy/lang/zh_cn.json index 7c4c5d58..773b1a7a 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/lang/zh_cn.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/lang/zh_cn.json @@ -526,8 +526,6 @@ "effect.antarchy.dread.description": "会产生视觉和听觉幻觉。", "effect.antarchy.paralyzed": "麻痹", "effect.antarchy.paralyzed.description": "阻止目标移动。", - "effect.antarchy.inverted": "反转", - "effect.antarchy.inverted.description": "反转目标的重力。", "effect.antarchy.commanded.description": "为命令它的玩家而战。", "effect.antarchy.dilated.description": "减缓受影响生物的时间流逝。", "effect.antarchy.stinky": "臭气", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/lang/zh_tw.json b/common-1.21.1/src/main/resources/assets/antarchy/lang/zh_tw.json index 88424f7c..d3f6d342 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/lang/zh_tw.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/lang/zh_tw.json @@ -526,8 +526,6 @@ "effect.antarchy.dread.description": "會產生視覺與聽覺幻覺。", "effect.antarchy.paralyzed": "麻痺", "effect.antarchy.paralyzed.description": "阻止目標移動。", - "effect.antarchy.inverted": "反轉", - "effect.antarchy.inverted.description": "反轉目標的重力。", "effect.antarchy.commanded.description": "為命令它的玩家而戰。", "effect.antarchy.dilated.description": "減緩受影響生物的時間流逝。", "effect.antarchy.stinky": "臭氣", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/mob_effect/inverted.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/mob_effect/inverted.png deleted file mode 100644 index 77d8ce5ffeb3fc1578fae86c050c6bd3ee9d67fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 438 zcmV;n0ZIOeP)Px$a7jc#R5*>Dld)>TP!xv0#H0y`bWuntPA)Dk>Ez%GI5~9d+*jz-H|Qfccj)HS z7jWnxy0{1;6h%}bb+AG-$xR2jw@Fke{o!&shx`BMKj+@7aRH-RB~HfG;Y2%k&bUN; z`ut)ops2%I9P^&Hqp@6S7X?POO59%@SQ!BT8xc{|b8JLJd$t9j>o{>zM9-4%ZmwvS z@+Vdw%LQ7tPRAE?9Vbo+B+327fp>3rBG8^~>A{JJav*K5jDTh-&srSwa&Or>b6+UI zX=nnVWvjpKzf;4Lka68Kl?&IfejOxTY(%7XxsrKVU9}*I|ABJgof+Jp1ggV{)-2`e z!P((S$k;V32H_spuy|O{G(%RO`vT9~abK{Q`+{*4P}FmZTsKW_Z41J*uzFEl$B8?> zpk*JsdfDw6hmkt?oWBN0RVVqB8_T68Mb2Rm?o|ttO!hBGk!fi15u|U%H7tM>In_cI guf=leJ7 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 ); diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java index 8b2e8f61..b71e62b7 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java @@ -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 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); } diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClient.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClient.java index 3ba60763..afe2ba83 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClient.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClient.java @@ -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(); diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/entity/multipart/MultipartPartEntity.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/entity/multipart/MultipartPartEntity.java index 0f4b4646..6eaa3363 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/entity/multipart/MultipartPartEntity.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/entity/multipart/MultipartPartEntity.java @@ -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()); diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/AntimetalInversionMixin.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/AntimetalInversionMixin.java index 6a6f0ae2..80e3a5cd 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/AntimetalInversionMixin.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/AntimetalInversionMixin.java @@ -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) { diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/AntiwaterLivingEntityMixin.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/AntiwaterLivingEntityMixin.java index 7abc586f..9e8bac47 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/AntiwaterLivingEntityMixin.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/AntiwaterLivingEntityMixin.java @@ -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; } } diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/SpringyBootsFallDamageMixin.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/SpringyBootsFallDamageMixin.java index e1d6872e..e0ffdece 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/SpringyBootsFallDamageMixin.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/SpringyBootsFallDamageMixin.java @@ -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) { diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricClientNetworking.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricClientNetworking.java index 522b256d..02b9cc1c 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricClientNetworking.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricClientNetworking.java @@ -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) -> diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricNetworking.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricNetworking.java index bdaef55f..18f11e72 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricNetworking.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricNetworking.java @@ -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; diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java index 0c5ade2d..da5d098a 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java @@ -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 PARALYZED = MOB_EFFECTS.register("paralyzed", ParalyzedMobEffect::new); - public static final DeferredHolder INVERTED = MOB_EFFECTS.register("inverted", InvertedMobEffect::new); public static final DeferredHolder COMMANDED = MOB_EFFECTS.register("commanded", CommandedMobEffect::new); public static final DeferredHolder DILATED = MOB_EFFECTS.register("dilated", DilatedMobEffect::new); @@ -490,11 +489,11 @@ public final class AntarchyFabricMisc { public static final DeferredHolder INVERSION = POTIONS.register("inversion", - () -> new Potion(new MobEffectInstance(mobEffectHolder(INVERTED), 600))); + () -> new Potion(new MobEffectInstance(AnthologyEffects.inverted(), 600))); public static final DeferredHolder 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 COMMAND = POTIONS.register("command", () -> new Potion(new MobEffectInstance(mobEffectHolder(COMMANDED), 600))); public static final DeferredHolder LONG_COMMAND = POTIONS.register("long_command", diff --git a/fabric-1.21.1/src/main/resources/fabric.mod.json b/fabric-1.21.1/src/main/resources/fabric.mod.json index 93e915c7..a96dc70c 100644 --- a/fabric-1.21.1/src/main/resources/fabric.mod.json +++ b/fabric-1.21.1/src/main/resources/fabric.mod.json @@ -33,6 +33,7 @@ ], "depends": { "antos": ">=1.2.1", + "anthology": ">=1.0.0", "fabricloader": ">=${fabric_loader_version}", "minecraft": "~${minecraft_version}", "java": ">=21", diff --git a/gradle.properties b/gradle.properties index c8a01030..37b89bac 100644 --- a/gradle.properties +++ b/gradle.properties @@ -50,6 +50,7 @@ structurevoidtoggle_fabric=4.4.1+1.21 geckolib_version=4.8.4 architectury_api_version=13.0.11 +anthology_version=1.0.0 jei_version=19.27.0.336 diff --git a/neoforge-1.21.1/build.gradle b/neoforge-1.21.1/build.gradle index ff2de315..7277edc8 100644 --- a/neoforge-1.21.1/build.gradle +++ b/neoforge-1.21.1/build.gradle @@ -59,6 +59,8 @@ dependencies { compileOnly("curse.maven:intapi-${intapi_curseforge_id}:${intapi_curseforge_file_id_neoforge}") runtimeOnly("curse.maven:intapi-${intapi_curseforge_id}:${intapi_curseforge_file_id_neoforge}") implementation "software.bernie.geckolib:geckolib-neoforge-1.21.1:${geckolib_version}" + compileOnly(files(rootProject.file("anthology_jars/anthology-${anthology_version}+1.21.1-neoforge.jar"))) + runtimeOnly(files(rootProject.file("anthology_jars/anthology-${anthology_version}+1.21.1-neoforge.jar"))) compileOnly(files(rootProject.file("infinite_dimensions_jars/infinity-2.7.3+1.21.1-neoforge.jar"))) compileOnly(files(rootProject.file("infinite_dimensions_jars/stellarview-1.21.1-0.5.3-neoforge.jar"))) runtimeOnly(files(rootProject.file("infinite_dimensions_jars/infinity-2.7.3+1.21.1-neoforge.jar"))) diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java index 7b2cf7e6..6f416773 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java @@ -1,5 +1,6 @@ package com.craisinlord.antarchy.neoforge; +import com.craisinlord.anthology.effect.AnthologyEffects; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.compat.infinity.InfinityCompat; import com.craisinlord.antarchy.compat.infinity.InfinityCompatVersion; @@ -13,7 +14,6 @@ import com.craisinlord.antarchy.content.network.BloodCrystalKatanaTrailPayload; import com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageSync; import com.craisinlord.antarchy.content.portal.PermanentPortalType; import com.craisinlord.antarchy.neoforge.registry.*; -import com.craisinlord.antarchy.neoforge.network.AntarchyGravityNetworking; import net.neoforged.bus.api.IEventBus; import net.neoforged.fml.ModContainer; import net.neoforged.fml.ModList; @@ -272,7 +272,6 @@ public class AntarchyNeoforge { player, TigerEyeCamouflageSync.payload(player) )); - com.craisinlord.antarchy.content.gravity.AntarchyGravityApi.setSyncDispatcher(AntarchyGravityNetworking::syncEntity); com.craisinlord.antarchy.content.time.TimeDilationApi.setSyncDispatcher( com.craisinlord.antarchy.neoforge.network.AntarchyTimeDilationNetworking::syncRate ); @@ -411,7 +410,7 @@ public class AntarchyNeoforge { () -> AntarchyNeoforgeItems.STINK_BUG.get(), () -> AntarchyNeoforgeMisc.DREAD, () -> AntarchyNeoforgeMisc.PARALYZED, - () -> AntarchyNeoforgeMisc.INVERTED, + AnthologyEffects::inverted, () -> AntarchyNeoforgeMisc.STINKY, () -> AntarchyNeoforgeBlocks.OURANWOOD_ACORN_BLOCK.get(), () -> AntarchyNeoforgeBlocks.MOSSY_OURANWOOD_LOG.get(), diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforgeEvents.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforgeEvents.java index 8543ae1c..85193023 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforgeEvents.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforgeEvents.java @@ -4,7 +4,6 @@ import com.craisinlord.antarchy.Antarchy; 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; @@ -23,7 +22,6 @@ public final class AntarchyNeoforgeEvents { @SubscribeEvent public static void onRegisterCommands(RegisterCommandsEvent event) { CavarynCommand.register(event.getDispatcher()); - GravityCommand.register(event.getDispatcher()); CaterpillarCommand.register(event.getDispatcher()); DimensionalTearCommand.register(event.getDispatcher()); QueenLocateCommand.register(event.getDispatcher()); diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java index 19422740..7025eefd 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java @@ -117,6 +117,7 @@ public final class AntarchyNeoForgeClient { @SubscribeEvent public static void clientSetup(FMLClientSetupEvent event) { Antarchy.physicalClient = true; + com.craisinlord.antarchy.content.movement.AntarchyGravityHooks.registerClient(); event.enqueueWork(() -> { AntarchyArchivePreviews.register(); AntarchyComputerGames.register(); diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/content/fluid/AntiwaterFluidType.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/content/fluid/AntiwaterFluidType.java index 20c08c9d..338c3480 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/content/fluid/AntiwaterFluidType.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/content/fluid/AntiwaterFluidType.java @@ -1,8 +1,8 @@ package com.craisinlord.antarchy.neoforge.content.fluid; -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 net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.MoverType; import net.minecraft.world.entity.item.ItemEntity; @@ -31,9 +31,9 @@ public class AntiwaterFluidType extends FluidType { motion = new Vec3(motion.x, 0.2, motion.z); } - AntarchyGravityDirection gravityDirection = AntarchyGravityApi.getGravityDirection(entity); + GravityDirection gravityDirection = GravityApi.getGravityDirection(entity); Vec3 worldMotion = gravityDirection.isInverted() - ? AntarchyGravityRotationUtil.vecPlayerToWorld(motion, gravityDirection) + ? GravityRotationUtil.vecPlayerToWorld(motion, gravityDirection) : motion; double drag = entity.isSwimming() ? 0.9 : 0.8; @@ -45,7 +45,7 @@ public class AntiwaterFluidType extends FluidType { entity.setDeltaMovement( gravityDirection.isInverted() - ? AntarchyGravityRotationUtil.vecWorldToPlayer(worldMotion, gravityDirection) + ? GravityRotationUtil.vecWorldToPlayer(worldMotion, gravityDirection) : worldMotion ); if (entity.horizontalCollision && entity.isFree( @@ -55,7 +55,7 @@ public class AntiwaterFluidType extends FluidType { Vec3 boostedWorldMotion = new Vec3(worldMotion.x, 0.3D, worldMotion.z); entity.setDeltaMovement( gravityDirection.isInverted() - ? AntarchyGravityRotationUtil.vecWorldToPlayer(boostedWorldMotion, gravityDirection) + ? GravityRotationUtil.vecWorldToPlayer(boostedWorldMotion, gravityDirection) : boostedWorldMotion ); } diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/entity/multipart/MultipartPartEntity.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/entity/multipart/MultipartPartEntity.java index 7b8fece3..737a6ce5 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/entity/multipart/MultipartPartEntity.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/entity/multipart/MultipartPartEntity.java @@ -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; @@ -69,13 +69,13 @@ public class MultipartPartEntity extends PartEntity implements OwnableEn 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(); @@ -88,7 +88,7 @@ public class MultipartPartEntity extends PartEntity implements OwnableEn forward.x * this.definition.forwardOffset() + right.x * this.definition.lateralOffset(), this.definition.yOffset(), forward.z * this.definition.forwardOffset() + right.z * this.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.setRot(parent.getYRot(), parent.getXRot()); diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/network/AntarchyGravityNetworking.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/network/AntarchyGravityNetworking.java index 3181cb3a..756672e9 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/network/AntarchyGravityNetworking.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/network/AntarchyGravityNetworking.java @@ -1,7 +1,6 @@ package com.craisinlord.antarchy.neoforge.network; import com.craisinlord.antarchy.content.entity.DiamondMinecartEntity; -import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; import com.craisinlord.antarchy.content.item.BigBerthaItem; import com.craisinlord.antarchy.content.item.EyeOfTheStormItem; import com.craisinlord.antarchy.content.item.GravityGunItem; @@ -13,11 +12,9 @@ import com.craisinlord.antarchy.content.network.GravityGunPrimaryPayload; import com.craisinlord.antarchy.content.network.GravityGunScrollPayload; import com.craisinlord.antarchy.content.network.TemporalTunerScrollPayload; import com.craisinlord.antarchy.content.item.TemporalTunerItem; -import com.craisinlord.antarchy.content.network.GravityStatePayload; import com.craisinlord.antarchy.content.network.ImpactShakePayload; import com.craisinlord.antarchy.content.network.PortalGunPrimaryPayload; import com.craisinlord.antarchy.content.client.CameraShakeClientState; -import net.minecraft.world.entity.Entity; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.item.ItemStack; import net.minecraft.world.phys.Vec3; @@ -39,10 +36,6 @@ public final class AntarchyGravityNetworking { com.craisinlord.antarchy.content.network.PortalGunIndicatorRequestPayload.TYPE, com.craisinlord.antarchy.content.network.PortalGunIndicatorRequestPayload.STREAM_CODEC, AntarchyGravityNetworking::handlePortalGunIndicatorRequest - ).playToClient( - GravityStatePayload.TYPE, - GravityStatePayload.STREAM_CODEC, - AntarchyGravityNetworking::handleGravityState ).playToClient( ImpactShakePayload.TYPE, ImpactShakePayload.STREAM_CODEC, @@ -112,53 +105,6 @@ public final class AntarchyGravityNetworking { ); } - public static void syncToPlayer(ServerPlayer target, Entity entity) { - GravityStatePayload payload = new GravityStatePayload( - entity.getId(), - AntarchyGravityApi.getGravityDirection(entity), - AntarchyGravityApi.getPrevGravityDirection(entity), - AntarchyGravityApi.isGravityForced(entity), - AntarchyGravityApi.getTransitionDuration(entity), - AntarchyGravityApi.getTransitionRemaining(entity) - ); - PacketDistributor.sendToPlayer(target, payload); - } - - public static void syncEntity(Entity entity) { - GravityStatePayload payload = new GravityStatePayload( - entity.getId(), - AntarchyGravityApi.getGravityDirection(entity), - AntarchyGravityApi.getPrevGravityDirection(entity), - AntarchyGravityApi.isGravityForced(entity), - AntarchyGravityApi.getTransitionDuration(entity), - AntarchyGravityApi.getTransitionRemaining(entity) - ); - PacketDistributor.sendToPlayersTrackingEntityAndSelf(entity, payload); - } - - private static void handleGravityState(GravityStatePayload payload, IPayloadContext context) { - context.enqueueWork(() -> { - Entity entity = context.player().level().getEntity(payload.entityId()); - // On relog the local player entity may not yet be in the level's entity lookup, - // so fall back to context.player() to ensure the local player always gets synced. - if (entity == null && context.player().getId() == payload.entityId()) { - entity = context.player(); - } - if (entity == null) { - return; - } - - AntarchyGravityApi.applySyncedState( - entity, - payload.direction(), - payload.previousDirection(), - payload.forced(), - payload.transitionDuration(), - payload.transitionRemaining() - ); - }); - } - private static void handleImpactShake(ImpactShakePayload payload, IPayloadContext context) { context.enqueueWork(() -> CameraShakeClientState.triggerImpact( new Vec3(payload.x(), payload.y(), payload.z()), diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java index 691bd8b7..743077a7 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java @@ -1,5 +1,6 @@ package com.craisinlord.antarchy.neoforge.registry; +import com.craisinlord.anthology.effect.AnthologyEffects; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyObjects; @@ -36,7 +37,6 @@ import com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageController; import com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageSync; import com.craisinlord.antarchy.neoforge.AntarchyNeoForgeFluidTypes; import com.craisinlord.antarchy.neoforge.entity.multipart.MultipartPartEntity; -import com.craisinlord.antarchy.neoforge.network.AntarchyGravityNetworking; import net.minecraft.core.BlockPos; import net.minecraft.core.Holder; import net.minecraft.core.registries.BuiltInRegistries; @@ -326,7 +326,6 @@ public final class AntarchyNeoForgeEvents { return; } - AntarchyGravityNetworking.syncEntity(event.getTarget()); if (event.getTarget() instanceof com.craisinlord.antarchy.content.time.TimeDilationEntityAccess access && event.getEntity() instanceof ServerPlayer trackingPlayer) { com.craisinlord.antarchy.neoforge.network.AntarchyTimeDilationNetworking.syncRateToPlayer( @@ -495,7 +494,7 @@ public final class AntarchyNeoForgeEvents { return; } - MobEffectInstance existingInverted = livingEntity.getEffect(AntarchyNeoforgeMisc.INVERTED); + MobEffectInstance existingInverted = livingEntity.getEffect(AnthologyEffects.inverted()); long gameTime = livingEntity.level().getGameTime(); if (!shouldScanOverheadAntimetal(livingEntity, existingInverted, gameTime)) { return; @@ -511,8 +510,8 @@ public final class AntarchyNeoForgeEvents { "[antarchy-gravity] slow overhead antimetal scan targetType={} uuid={} pos=({}, {}, {}) dim={} elapsedMs={} inverted={} forced={} gameTime={}", livingEntity.getType(), livingEntity.getUUID(), livingEntity.getX(), livingEntity.getY(), livingEntity.getZ(), livingEntity.level().dimension().location(), elapsedMs, - com.craisinlord.antarchy.content.gravity.AntarchyGravityApi.isGravityInverted(livingEntity), - com.craisinlord.antarchy.content.gravity.AntarchyGravityApi.isGravityForced(livingEntity), + com.craisinlord.anthology.gravity.GravityApi.isGravityInverted(livingEntity), + com.craisinlord.anthology.gravity.GravityApi.isGravityForced(livingEntity), gameTime ); } @@ -521,7 +520,7 @@ public final class AntarchyNeoForgeEvents { } if (existingInverted == null || existingInverted.getDuration() <= ANTIMETAL_INVERTED_REFRESH_THRESHOLD_TICKS) { - livingEntity.addEffect(new MobEffectInstance(AntarchyNeoforgeMisc.INVERTED, ANTIMETAL_INVERTED_REFRESH_TICKS, 0, false, false, false)); + livingEntity.addEffect(new MobEffectInstance(AnthologyEffects.inverted(), ANTIMETAL_INVERTED_REFRESH_TICKS, 0, false, false, false)); spawnAntimetalInversionParticles(livingEntity); } } @@ -826,7 +825,7 @@ public final class AntarchyNeoForgeEvents { static void handleBloodCrystalBootsFall(LivingFallEvent event) { if (!(event.getEntity() instanceof Player player)) return; - if (!com.craisinlord.antarchy.content.gravity.AntarchyGravityApi.isGravityInverted(player)) return; + if (!com.craisinlord.anthology.gravity.GravityApi.isGravityInverted(player)) return; if (com.craisinlord.antarchy.content.enchantment.AntarchyEnchantments.featherRisingLevel(player) <= 0) return; event.setCanceled(true); } @@ -1160,10 +1159,10 @@ public final class AntarchyNeoForgeEvents { static void onInvertedEffectExpired(MobEffectEvent.Expired event) { if (event.getEffectInstance() == null) return; - if (!event.getEffectInstance().is(AntarchyNeoforgeMisc.INVERTED)) return; + if (!event.getEffectInstance().is(AnthologyEffects.inverted())) return; LivingEntity entity = event.getEntity(); if (!entity.level().isClientSide()) { - com.craisinlord.antarchy.content.gravity.AntarchyMountedGravityHelper.syncConnectedStackIgnoring(entity, entity); + com.craisinlord.anthology.gravity.MountedGravityHelper.syncConnectedStackIgnoring(entity, entity); if (entity instanceof Player player) { notifyNearbyReveriesOfInversionChange(player); } @@ -1261,7 +1260,7 @@ public final class AntarchyNeoForgeEvents { } if (event.getEntity().getType().is(AntarchyTags.Entities.INVERTED_IMMUNE) - && event.getEffectInstance().is(AntarchyNeoforgeMisc.INVERTED)) { + && event.getEffectInstance().is(AnthologyEffects.inverted())) { event.setResult(MobEffectEvent.Applicable.Result.DO_NOT_APPLY); return; } @@ -1279,18 +1278,18 @@ public final class AntarchyNeoForgeEvents { } if (event.getEntity() instanceof Player player - && event.getEffectInstance().is(AntarchyNeoforgeMisc.INVERTED) - && !player.hasEffect(AntarchyNeoforgeMisc.INVERTED)) { + && event.getEffectInstance().is(AnthologyEffects.inverted()) + && !player.hasEffect(AnthologyEffects.inverted())) { notifyNearbyReveriesOfInversionChange(player); } } static void onInvertedEffectRemoved(MobEffectEvent.Remove event) { - if (!event.getEffect().is(AntarchyNeoforgeMisc.INVERTED)) return; + if (!event.getEffect().is(AnthologyEffects.inverted())) return; LivingEntity entity = event.getEntity(); if (!entity.level().isClientSide()) { - com.craisinlord.antarchy.content.gravity.AntarchyMountedGravityHelper.syncConnectedStackIgnoring(entity, entity); + com.craisinlord.anthology.gravity.MountedGravityHelper.syncConnectedStackIgnoring(entity, entity); if (entity instanceof Player player) { notifyNearbyReveriesOfInversionChange(player); } @@ -1387,7 +1386,7 @@ public final class AntarchyNeoForgeEvents { DispenserBlock.registerBehavior(Items.HOPPER_MINECART, antimetalMinecartDispenseBehavior); DispenserBlock.registerBehavior(Items.COMMAND_BLOCK_MINECART, antimetalMinecartDispenseBehavior); LucidEyeProjectileEntity.defaultItemSupplier = () -> AntarchyNeoforgeItems.LUCID_PEARL.get(); - LucidEntity.invertedEffectSupplier = () -> AntarchyNeoforgeMisc.INVERTED; + LucidEntity.invertedEffectSupplier = AnthologyEffects::inverted; FluidInteractionRegistry.addInteraction( AntarchyNeoForgeFluidTypes.ANTIWATER_TYPE.get(), new FluidInteractionRegistry.InteractionInformation( @@ -1398,8 +1397,8 @@ public final class AntarchyNeoForgeEvents { ) ); LucidEntity.boltEntityTypeSupplier = () -> AntarchyNeoforgeEntites.LUCID_BOLT.get(); - LucidBoltEntity.invertedEffectSupplier = () -> AntarchyNeoforgeMisc.INVERTED; - LucidEyeProjectileEntity.invertedEffectSupplier = () -> AntarchyNeoforgeMisc.INVERTED; + LucidBoltEntity.invertedEffectSupplier = AnthologyEffects::inverted; + LucidEyeProjectileEntity.invertedEffectSupplier = AnthologyEffects::inverted; VortexEntity.windVortexTypeSupplier = () -> AntarchyNeoforgeEntites.WIND_VORTEX.get(); VortexChargeProjectileEntity.defaultItemSupplier = () -> AntarchyNeoforgeItems.VORTEX_CHARGE.get(); VortexChargeProjectileEntity.projectileTypeSupplier = () -> AntarchyNeoforgeEntites.VORTEX_CHARGE_PROJECTILE.get(); diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java index 0fa7fcdb..21eb8ac3 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java @@ -1,5 +1,6 @@ package com.craisinlord.antarchy.neoforge.registry; +import com.craisinlord.anthology.effect.AnthologyEffects; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.client.particle.InvertedGeyserBaseParticleOptions; import com.craisinlord.antarchy.content.client.particle.InvertedGeyserParticleOptions; @@ -8,7 +9,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; @@ -178,7 +178,6 @@ public final class AntarchyNeoforgeMisc { public static final DeferredHolder BLEEDING = MOB_EFFECTS.register("bleeding", BleedingMobEffect::new); public static final DeferredHolder BLOOD_MOON = MOB_EFFECTS.register("blood_moon", BloodMoonMobEffect::new); public static final DeferredHolder PARALYZED = MOB_EFFECTS.register("paralyzed", ParalyzedMobEffect::new); - public static final DeferredHolder INVERTED = MOB_EFFECTS.register("inverted", InvertedMobEffect::new); public static final DeferredHolder COMMANDED = MOB_EFFECTS.register("commanded", CommandedMobEffect::new); public static final DeferredHolder DILATED = MOB_EFFECTS.register("dilated", DilatedMobEffect::new); public static final DeferredHolder CONTRACTED = MOB_EFFECTS.register("contracted", ContractedMobEffect::new); @@ -193,9 +192,9 @@ public final class AntarchyNeoforgeMisc { // Potions public static final DeferredHolder INVERSION = POTIONS.register("inversion", - () -> new Potion(new MobEffectInstance(INVERTED, 600))); + () -> new Potion(new MobEffectInstance(AnthologyEffects.inverted(), 600))); public static final DeferredHolder LONG_INVERSION = POTIONS.register("long_inversion", - () -> new Potion("inversion", new MobEffectInstance(INVERTED, 2400))); + () -> new Potion("inversion", new MobEffectInstance(AnthologyEffects.inverted(), 2400))); public static final DeferredHolder COMMAND = POTIONS.register("command", () -> new Potion(new MobEffectInstance(COMMANDED, 600))); public static final DeferredHolder LONG_COMMAND = POTIONS.register("long_command", diff --git a/neoforge-1.21.1/src/main/resources/META-INF/neoforge.mods.toml b/neoforge-1.21.1/src/main/resources/META-INF/neoforge.mods.toml index 54dcfd04..92703040 100644 --- a/neoforge-1.21.1/src/main/resources/META-INF/neoforge.mods.toml +++ b/neoforge-1.21.1/src/main/resources/META-INF/neoforge.mods.toml @@ -35,6 +35,13 @@ displayURL="https://www.curseforge.com/minecraft/mc-mods/antarchy" ordering="AFTER" side="BOTH" +[[dependencies.antarchy]] + modId="anthology" + type="required" + versionRange="[1.0.0,)" + ordering="AFTER" + side="BOTH" + [[dependencies.antarchy]] modId="antos" type="required" From f7e7bebac3f9599908183d45d21095a1fbf4c833 Mon Sep 17 00:00:00 2001 From: craisinlord Date: Mon, 12 Oct 2026 19:55:08 -0500 Subject: [PATCH 2/2] anthology split --- .../com/craisinlord/antarchy/Antarchy.java | 4 +- .../config/AntarchyConfigCatalog.java | 1 - .../antarchy/config/AntarchySettings.java | 36 - .../content/AntarchyAnthologyHooks.java | 199 ++++ .../antarchy/content/AntarchyObjects.java | 7 - .../antarchy/content/AntarchyTags.java | 3 +- .../entity/UndertrialSpawnerBlockEntity.java | 3 +- .../client/CameraShakeClientState.java | 92 -- .../client/ClientTimeDilationTicker.java | 171 ---- .../client/ContractionAfterimages.java | 136 --- .../client/PortalGunClientTransit.java | 90 -- .../client/PortalGunCrosshairRenderer.java | 4 +- .../PortalGunEntityTransformationStack.java | 120 --- .../client/PortalGunPortalRenderState.java | 152 --- .../client/PortalGunRollClientState.java | 67 -- .../client/model/PortalGunPortalModel.java | 26 - .../renderer/IrisPortalSceneCompat.java | 61 -- .../renderer/PortalGunMoonViewRenderer.java | 14 +- .../renderer/PortalGunPortalRenderer.java | 103 +- .../client/renderer/PortalGunPortalRim.java | 186 ---- .../PortalGunPortalSceneRenderer.java | 242 ----- .../renderer/PortalGunPortalSectionViews.java | 165 ---- .../renderer/PortalGunPortalSkyQueries.java | 129 --- .../renderer/PortalGunPortalViewRenderer.java | 755 --------------- .../PortalGunPortalVisibilityQueries.java | 92 -- .../client/renderer/PortalRenderWatchdog.java | 56 -- .../renderer/PortalSectionGraphMarker.java | 5 - .../client/renderer/PortalStencilTarget.java | 170 ---- .../client/renderer/PortalTerrain.java | 33 - .../client/renderer/RoyalBeamRenderTypes.java | 26 - .../client/renderer/RoyalBossRenderer.java | 7 +- .../client/renderer/RoyalMountRenderer.java | 7 +- .../content/client/renderer/SodiumCompat.java | 26 - .../TemporalContractionAfterimageLayer.java | 2 +- .../renderer/TemporalContractionGeoLayer.java | 2 +- .../renderer/TimeDilationFieldRenderer.java | 25 - .../client/renderer/VanillaPortalTerrain.java | 134 --- .../renderer/sodium/SodiumPortalTerrain.java | 208 ----- .../content/effect/ContractedMobEffect.java | 28 - .../content/effect/DilatedMobEffect.java | 28 - .../content/effect/RoyalEffectHooks.java | 9 +- .../content/entity/ReverieEntity.java | 4 - .../content/entity/ToreterrorEntity.java | 6 +- .../basilisk/BasiliskMultipartLayout.java | 4 +- .../entity/glimmer/GlimmerFrogBehavior.java | 2 +- .../content/entity/kraken/KrakenEntity.java | 10 +- .../entity/kraken/KrakenMultipartLayout.java | 4 +- .../lucid/LucidEyeProjectileEntity.java | 2 +- .../multipart/MultipartEntityOwner.java | 40 - .../entity/multipart/MultipartFramework.java | 119 --- .../entity/multipart/MultipartLayout.java | 24 - .../entity/multipart/MultipartPartAccess.java | 5 - .../multipart/MultipartPartDefinition.java | 13 - .../network/MultipartAttackPayload.java | 28 - .../network/MultipartInteractPayload.java | 28 - .../entity/nightmare/NightmareEntity.java | 6 +- .../nightmare/NightmareMultipartLayout.java | 4 +- .../content/entity/royal/KingEntity.java | 16 +- .../content/entity/royal/QueenEntity.java | 18 +- .../entity/royal/RoyalBlackHoleEntity.java | 12 +- .../content/entity/royal/RoyalBossEntity.java | 49 +- .../royal/RoyalBossMultipartLayout.java | 4 +- .../entity/royal/RoyalMountEntity.java | 18 +- .../royal/beam/RoyalBeamController.java | 385 -------- .../entity/royal/beam/RoyalBeamSettings.java | 80 -- .../royal/beam/RoyalBeamTerrainMode.java | 7 - .../item/AttitudeAdjusterSlamManager.java | 4 +- .../item/RoyalGuardianSwordAbilities.java | 4 +- .../{time => item}/TemporalTunerAccess.java | 2 +- .../content/item/TemporalTunerItem.java | 1 - .../movement/AntarchyGravityHooks.java | 94 -- .../movement/DreamSandLowGravityAccess.java | 21 - .../content/network/ImpactShakePayload.java | 33 - .../content/network/ImpactShakeSync.java | 33 - .../network/PortalGunTransitPayload.java | 43 - .../network/TimeDilationFieldsPayload.java | 46 - .../network/TimeDilationRatePayload.java | 33 - .../portal/CrossDimensionTravelApi.java | 116 --- .../portalgun/PortalGunApertureCuller.java | 63 -- .../portalgun/PortalGunCollisionHelper.java | 139 --- .../portalgun/PortalGunPortalEntity.java | 879 +++--------------- .../portalgun/PortalGunPortalRegistry.java | 99 -- .../portalgun/PortalGunProjectionUtil.java | 60 -- .../portalgun/PortalGunTransformUtil.java | 127 --- .../portalgun/PortalGunTransitHandler.java | 18 - .../portalgun/PortalGunTransitMath.java | 138 --- .../portalgun/PortalGunWorldPortalShape.java | 201 ---- .../content/time/ChronosphereManager.java | 65 -- .../content/time/TimeDilationApi.java | 222 ----- .../content/time/TimeDilationCommand.java | 101 -- .../time/TimeDilationEntityAccess.java | 31 - .../content/time/TimeDilationFieldEntity.java | 237 ----- .../time/TimeDilationFieldSampler.java | 65 -- .../time/TimeDilationFieldSnapshot.java | 19 - .../TimeDilationFieldSnapshotSampler.java | 22 - .../content/time/TimeDilationManager.java | 257 ----- .../content/time/TimeDilationMath.java | 86 -- .../content/time/TimeDilationParticles.java | 49 - .../mixins/AbstractArrowAccessor.java | 17 - .../mixins/DreamSandLowGravityMixin.java | 126 --- .../mixins/FallingBlockEntityAccessor.java | 11 - .../mixins/PortalGunEntityCollisionMixin.java | 71 -- .../mixins/PortalGunEntityInWallMixin.java | 26 - .../PortalGunPlayerMovePacketMixin.java | 57 -- .../mixins/PortalGunProjectileHitMixin.java | 22 - ...verGamePacketListenerTeleportAccessor.java | 12 - .../mixins/StinkyLivingEntityMixin.java | 20 - ...lockEntityRenderDispatcherPortalMixin.java | 29 - .../mixins/client/CameraBasisAccessor.java | 18 - .../EntityBoundSoundInstanceAccessor.java | 12 - .../EntityRenderDispatcherPortalMixin.java | 24 - .../InventoryScreenRotationBypassMixin.java | 2 +- .../LevelRendererPortalLifecycleMixin.java | 37 - .../LevelRendererPortalSceneInvoker.java | 22 - .../LevelRendererPortalViewAreaAccessor.java | 163 ---- .../LevelRendererPortalViewAreaMixin.java | 36 - .../LivingEntityPortalLerpAccessor.java | 17 - .../mixins/client/LocalPlayerPortalMixin.java | 30 - .../client/LocalPlayerPortalTransitMixin.java | 37 - .../MinecraftMainRenderTargetAccessor.java | 14 - .../MinecraftPortalTransparencyMixin.java | 18 - .../PortalGunEntityTeleportPacketMixin.java | 68 -- .../client/PortalViewChunkCacheMixin.java | 17 - .../ScreenEffectRendererPortalMixin.java | 21 - .../SectionOcclusionGraphPortalMixin.java | 35 - .../sodium/RenderSectionManagerAccessor.java | 32 - .../RenderSectionManagerPortalTasksMixin.java | 24 - .../sodium/SodiumWorldRendererAccessor.java | 18 - .../StellarViewLunaDirectionMixin.java | 4 +- .../mixins/gravity/ChunkMapAccessor.java | 15 - .../gravity/EntityMountedGravityMixin.java | 34 - .../mixins/gravity/ServerEntityAccessor.java | 22 - .../mixins/gravity/TrackedEntityAccessor.java | 14 - .../EntityMultipartLifecycleMixin.java | 38 - .../AbstractArrowActionTimeDilationMixin.java | 36 - ...bstractArrowMovementTimeDilationMixin.java | 30 - .../mixins/time/CreeperTimeDilationMixin.java | 16 - .../time/EndCrystalTimeDilationMixin.java | 19 - .../time/EntityCrouchTimeDilationMixin.java | 23 - .../EntityDeltaMovementTimeDilationMixin.java | 39 - .../time/EntityMoveTimeDilationMixin.java | 47 - .../time/EntityRotationTimeDilationMixin.java | 38 - .../time/EntityTimeDilationStateMixin.java | 110 --- ...bAnimationControllerTimeDilationMixin.java | 24 - ...ngProjectileMovementTimeDilationMixin.java | 23 - .../ItemEntityRendererTimeDilationMixin.java | 43 - .../ItemEntityRotationTimeDilationMixin.java | 15 - ...EntityAttackCooldownTimeDilationMixin.java | 23 - ...ivingEntityChronosphereEquipmentMixin.java | 21 - .../LivingEntityFoodUseTimeDilationMixin.java | 30 - ...ivingEntityKnockbackTimeDilationMixin.java | 25 - ...ityRendererAnimationTimeDilationMixin.java | 84 -- .../LivingEntityTimeDilationCleanupMixin.java | 17 - .../time/LivingEntityTimeDilationMixin.java | 42 - .../time/LookControlTimeDilationMixin.java | 26 - .../MeleeAttackGoalTimeDilationMixin.java | 26 - .../time/MobAttackTimeDilationMixin.java | 35 - .../mixins/time/ParticlePositionAccessor.java | 17 - .../time/ParticleTimeDilationMixin.java | 64 -- .../time/PlayerCooldownTimeDilationMixin.java | 20 - .../mixins/time/PlayerTemporalTunerMixin.java | 4 +- .../time/PortalParticleTimeDilationMixin.java | 30 - .../time/PrimedTntTimeDilationMixin.java | 21 - .../time/ProjectileTimeDilationMixin.java | 21 - .../RangedAttackGoalTimeDilationMixin.java | 25 - .../RangedBowAttackGoalTimeDilationMixin.java | 29 - ...eversePortalParticleTimeDilationMixin.java | 30 - .../time/SoundEngineTimeDilationMixin.java | 78 -- .../mixins/time/TemporalMiningSpeedMixin.java | 39 - ...leProjectileMovementTimeDilationMixin.java | 23 - .../resources/antarchy-common.mixins.json | 67 +- .../resources/antarchy-sodium.mixins.json | 15 - .../portal_gun_portal.animation.json | 35 - .../antarchy/geo/portal_gun_portal.geo.json | 51 - .../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/shaders/core/portal_view.fsh | 12 - .../antarchy/shaders/core/portal_view.json | 14 - .../antarchy/shaders/core/portal_view.vsh | 11 - .../textures/mob_effect/contracted.png | Bin 440 -> 0 bytes .../antarchy/textures/mob_effect/dilated.png | Bin 447 -> 0 bytes .../advancement/enter_the_speed_force.json | 2 +- .../probably_wondering_how_i_got_here.json | 2 +- .../advancement/temporal_contradiction.json | 4 +- .../tags/entity_type/dilated_blacklist.json | 2 +- .../entity_type/time_dilation_immune.json | 0 fabric-1.21.1/build.gradle | 2 +- .../antarchy/fabric/AntarchyFabric.java | 1 - .../fabric/AntarchyFabricContent.java | 9 - .../antarchy/fabric/AntarchyFabricEvents.java | 22 - .../fabric/client/AntarchyFabricClient.java | 3 +- .../client/AntarchyFabricClientBootstrap.java | 25 - .../MultipartClientPartLevelRegistry.java | 37 - .../renderer/MultipartPartRenderer.java | 26 - .../FabricKrakenMultipartLayout.java | 65 -- .../entity/multipart/MultipartPartEntity.java | 211 ----- .../MultipartServerPartLevelRegistry.java | 37 - .../fabric/mixin/client/CameraShakeMixin.java | 50 - .../client/MultipartClientSpawnMixin.java | 20 - .../MultipartEntityLevelRegistryMixin.java | 34 - .../client/RenderTargetDepthStencilMixin.java | 28 - .../MultipartEntityLevelRegistryMixin.java | 37 - .../AntarchyFabricClientNetworking.java | 32 - .../network/AntarchyFabricNetworking.java | 94 -- .../AntarchyFabricTimeDilationNetworking.java | 39 - .../registry/AntarchyFabricEntities.java | 18 - .../fabric/registry/AntarchyFabricMisc.java | 12 +- .../resources/antarchy-fabric.mixins.json | 7 +- .../src/main/resources/fabric.mod.json | 1 - .../AntarchyConfigModuleNeoforge.java | 6 - .../antarchy/neoforge/AntarchyMiscConfig.java | 14 +- .../antarchy/neoforge/AntarchyNeoforge.java | 7 - .../neoforge/AntarchyNeoforgeEvents.java | 2 - .../client/AntarchyNeoForgeClient.java | 19 +- .../neoforge/client/CameraShakeHandler.java | 48 - .../client/ClientPartEntityRegistry.java | 19 - .../client/ClientTimeDilationHandler.java | 23 - .../client/HerculesBeetleClientHandler.java | 2 - .../PortalGunPortalViewRenderHandler.java | 22 - .../client/PortalGunRollClientHandler.java | 20 - .../entity/multipart/MultipartPartEntity.java | 207 ----- .../multipart/MultipartPartLevelRegistry.java | 62 -- .../entity/MultipartEntityBridgeMixin.java | 56 -- .../MultipartEntityLevelRegistryMixin.java | 34 - .../ClientLevelPartEntitiesAccessor.java | 16 - .../ServerLevelPartEntitiesAccessor.java | 16 - .../network/AntarchyGravityNetworking.java | 30 - .../AntarchyTimeDilationNetworking.java | 52 -- .../neoforge/network/MultipartNetworking.java | 95 -- .../registry/AntarchyNeoForgeEvents.java | 49 - .../registry/AntarchyNeoforgeEntites.java | 8 - .../registry/AntarchyNeoforgeMisc.java | 12 +- .../AntarchyNeoforgePayloadHandlers.java | 4 - .../resources/META-INF/neoforge.mods.toml | 3 - .../resources/antarchy-neoforge.mixins.json | 6 +- 244 files changed, 452 insertions(+), 11595 deletions(-) create mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchyAnthologyHooks.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/CameraShakeClientState.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/ClientTimeDilationTicker.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/ContractionAfterimages.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunClientTransit.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunEntityTransformationStack.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunPortalRenderState.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunRollClientState.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/model/PortalGunPortalModel.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/IrisPortalSceneCompat.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunPortalRim.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunPortalSceneRenderer.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunPortalSectionViews.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunPortalSkyQueries.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunPortalViewRenderer.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunPortalVisibilityQueries.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalRenderWatchdog.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalSectionGraphMarker.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalStencilTarget.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalTerrain.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/RoyalBeamRenderTypes.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/SodiumCompat.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TimeDilationFieldRenderer.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/VanillaPortalTerrain.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/sodium/SodiumPortalTerrain.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/effect/ContractedMobEffect.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/effect/DilatedMobEffect.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/MultipartEntityOwner.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/MultipartFramework.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/MultipartLayout.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/MultipartPartAccess.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/MultipartPartDefinition.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/network/MultipartAttackPayload.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/network/MultipartInteractPayload.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/beam/RoyalBeamController.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/beam/RoyalBeamSettings.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/beam/RoyalBeamTerrainMode.java rename common-1.21.1/src/main/java/com/craisinlord/antarchy/content/{time => item}/TemporalTunerAccess.java (74%) delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/movement/AntarchyGravityHooks.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/movement/DreamSandLowGravityAccess.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/ImpactShakePayload.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/ImpactShakeSync.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/PortalGunTransitPayload.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/TimeDilationFieldsPayload.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/TimeDilationRatePayload.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portal/CrossDimensionTravelApi.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunApertureCuller.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunCollisionHelper.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunPortalRegistry.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunProjectionUtil.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunTransformUtil.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunTransitHandler.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunTransitMath.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunWorldPortalShape.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/time/ChronosphereManager.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationApi.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationCommand.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationEntityAccess.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationFieldEntity.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationFieldSampler.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationFieldSnapshot.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationFieldSnapshotSampler.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationManager.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationMath.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationParticles.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/AbstractArrowAccessor.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/DreamSandLowGravityMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/FallingBlockEntityAccessor.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/PortalGunEntityCollisionMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/PortalGunEntityInWallMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/PortalGunPlayerMovePacketMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/PortalGunProjectileHitMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/ServerGamePacketListenerTeleportAccessor.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/StinkyLivingEntityMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/BlockEntityRenderDispatcherPortalMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/CameraBasisAccessor.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/EntityBoundSoundInstanceAccessor.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/EntityRenderDispatcherPortalMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/LevelRendererPortalLifecycleMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/LevelRendererPortalSceneInvoker.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/LevelRendererPortalViewAreaAccessor.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/LevelRendererPortalViewAreaMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/LivingEntityPortalLerpAccessor.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/LocalPlayerPortalMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/LocalPlayerPortalTransitMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/MinecraftMainRenderTargetAccessor.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/MinecraftPortalTransparencyMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/PortalGunEntityTeleportPacketMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/PortalViewChunkCacheMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/ScreenEffectRendererPortalMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/SectionOcclusionGraphPortalMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/sodium/RenderSectionManagerAccessor.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/sodium/RenderSectionManagerPortalTasksMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/sodium/SodiumWorldRendererAccessor.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ChunkMapAccessor.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityMountedGravityMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ServerEntityAccessor.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/TrackedEntityAccessor.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/multipart/EntityMultipartLifecycleMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/AbstractArrowActionTimeDilationMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/AbstractArrowMovementTimeDilationMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/CreeperTimeDilationMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/EndCrystalTimeDilationMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/EntityCrouchTimeDilationMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/EntityDeltaMovementTimeDilationMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/EntityMoveTimeDilationMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/EntityRotationTimeDilationMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/EntityTimeDilationStateMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/GeckoLibAnimationControllerTimeDilationMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/HurtingProjectileMovementTimeDilationMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/ItemEntityRendererTimeDilationMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/ItemEntityRotationTimeDilationMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityAttackCooldownTimeDilationMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityChronosphereEquipmentMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityFoodUseTimeDilationMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityKnockbackTimeDilationMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityRendererAnimationTimeDilationMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityTimeDilationCleanupMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityTimeDilationMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/LookControlTimeDilationMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/MeleeAttackGoalTimeDilationMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/MobAttackTimeDilationMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/ParticlePositionAccessor.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/ParticleTimeDilationMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/PlayerCooldownTimeDilationMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/PortalParticleTimeDilationMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/PrimedTntTimeDilationMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/ProjectileTimeDilationMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/RangedAttackGoalTimeDilationMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/RangedBowAttackGoalTimeDilationMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/ReversePortalParticleTimeDilationMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/SoundEngineTimeDilationMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/TemporalMiningSpeedMixin.java delete mode 100644 common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/ThrowableProjectileMovementTimeDilationMixin.java delete mode 100644 common-1.21.1/src/main/resources/antarchy-sodium.mixins.json delete mode 100644 common-1.21.1/src/main/resources/assets/antarchy/animations/portal_gun_portal.animation.json delete mode 100644 common-1.21.1/src/main/resources/assets/antarchy/geo/portal_gun_portal.geo.json delete mode 100644 common-1.21.1/src/main/resources/assets/antarchy/shaders/core/portal_view.fsh delete mode 100644 common-1.21.1/src/main/resources/assets/antarchy/shaders/core/portal_view.json delete mode 100644 common-1.21.1/src/main/resources/assets/antarchy/shaders/core/portal_view.vsh delete mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/mob_effect/contracted.png delete mode 100644 common-1.21.1/src/main/resources/assets/antarchy/textures/mob_effect/dilated.png rename common-1.21.1/src/main/resources/data/{antarchy => anthology}/tags/entity_type/time_dilation_immune.json (100%) delete mode 100644 fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/multipart/MultipartClientPartLevelRegistry.java delete mode 100644 fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/renderer/MultipartPartRenderer.java delete mode 100644 fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/entity/multipart/FabricKrakenMultipartLayout.java delete mode 100644 fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/entity/multipart/MultipartPartEntity.java delete mode 100644 fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/entity/multipart/MultipartServerPartLevelRegistry.java delete mode 100644 fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/CameraShakeMixin.java delete mode 100644 fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/MultipartClientSpawnMixin.java delete mode 100644 fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/MultipartEntityLevelRegistryMixin.java delete mode 100644 fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/RenderTargetDepthStencilMixin.java delete mode 100644 fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/entity/MultipartEntityLevelRegistryMixin.java delete mode 100644 fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricTimeDilationNetworking.java delete mode 100644 neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/CameraShakeHandler.java delete mode 100644 neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/ClientPartEntityRegistry.java delete mode 100644 neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/ClientTimeDilationHandler.java delete mode 100644 neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/PortalGunPortalViewRenderHandler.java delete mode 100644 neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/PortalGunRollClientHandler.java delete mode 100644 neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/entity/multipart/MultipartPartEntity.java delete mode 100644 neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/entity/multipart/MultipartPartLevelRegistry.java delete mode 100644 neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/mixins/entity/MultipartEntityBridgeMixin.java delete mode 100644 neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/mixins/entity/MultipartEntityLevelRegistryMixin.java delete mode 100644 neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/mixins/level/ClientLevelPartEntitiesAccessor.java delete mode 100644 neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/mixins/level/ServerLevelPartEntitiesAccessor.java delete mode 100644 neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/network/AntarchyTimeDilationNetworking.java delete mode 100644 neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/network/MultipartNetworking.java diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/Antarchy.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/Antarchy.java index 17733245..64ce493a 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/Antarchy.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/Antarchy.java @@ -1,7 +1,7 @@ package com.craisinlord.antarchy; import com.craisinlord.antarchy.content.computer.AntarchyArchiveLocators; -import com.craisinlord.antarchy.content.movement.AntarchyGravityHooks; +import com.craisinlord.antarchy.content.AntarchyAnthologyHooks; import com.craisinlord.antarchy.content.util.AttributeRangeInit; import com.craisinlord.antarchy.content.worldgen.VillagePoolAdditions; import com.craisinlord.integrated_api.events.lifecycle.ServerGoingToStartEvent; @@ -18,7 +18,7 @@ public class Antarchy { public static void init() { AttributeRangeInit.apply(); AntarchyArchiveLocators.register(); - AntarchyGravityHooks.register(); + AntarchyAnthologyHooks.register(); ServerGoingToStartEvent.EVENT.addListener(Antarchy::serverAboutToStart); } private static void serverAboutToStart(final ServerGoingToStartEvent event) { diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/config/AntarchyConfigCatalog.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/config/AntarchyConfigCatalog.java index c22179ea..37c6788a 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/config/AntarchyConfigCatalog.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/config/AntarchyConfigCatalog.java @@ -156,7 +156,6 @@ public final class AntarchyConfigCatalog { || name.equals("experimentalSettingsPopupDisabled") || name.equals("unlockAllArchives") || name.equals("entitySpecificFireOverlayEnabled") - || name.equals("dreamSandEnabled") || name.startsWith("dreamSand") || name.equals("ichorWitherEnabled") || name.startsWith("diamondMinecart") diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java index 17a5c964..03bc5da6 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java @@ -175,11 +175,7 @@ public final class AntarchySettings { private static double americanBonusSaturation = 1.0D; private static int americanRegenerationDurationTicks = 60; private static int americanRegenerationAmplifier = 0; - private static boolean dreamSandEnabled = true; private static boolean entitySpecificFireOverlayEnabled = true; - private static double dreamSandJumpVelocityMultiplier = 1.3D; - private static double dreamSandGravityMultiplier = 0.45D; - private static double dreamSandEffectDurationSeconds = 7.0D; private static double dreamSandFallingBlockGravityMultiplier = 0.4D; private static boolean ichorWitherEnabled = true; private static int nightmareHelmetArmorValue = 4; @@ -1926,46 +1922,14 @@ public final class AntarchySettings { americanRegenerationAmplifier = value; } - public static boolean dreamSandEnabled() { - return dreamSandEnabled; - } - public static boolean entitySpecificFireOverlayEnabled() { return entitySpecificFireOverlayEnabled; } - public static void setDreamSandEnabled(boolean value) { - dreamSandEnabled = value; - } - public static void setEntitySpecificFireOverlayEnabled(boolean value) { entitySpecificFireOverlayEnabled = value; } - public static double dreamSandJumpVelocityMultiplier() { - return dreamSandJumpVelocityMultiplier; - } - - public static void setDreamSandJumpVelocityMultiplier(double value) { - dreamSandJumpVelocityMultiplier = value; - } - - public static double dreamSandGravityMultiplier() { - return dreamSandGravityMultiplier; - } - - public static void setDreamSandGravityMultiplier(double value) { - dreamSandGravityMultiplier = value; - } - - public static double dreamSandEffectDurationSeconds() { - return dreamSandEffectDurationSeconds; - } - - public static void setDreamSandEffectDurationSeconds(double value) { - dreamSandEffectDurationSeconds = value; - } - public static double dreamSandFallingBlockGravityMultiplier() { return dreamSandFallingBlockGravityMultiplier; } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchyAnthologyHooks.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchyAnthologyHooks.java new file mode 100644 index 00000000..56b2f0fc --- /dev/null +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchyAnthologyHooks.java @@ -0,0 +1,199 @@ +package com.craisinlord.antarchy.content; + +import net.minecraft.world.item.ItemStack; +import net.minecraft.client.player.LocalPlayer; +import java.util.UUID; +import com.craisinlord.anthology.portal.client.PortalClientHooks; +import com.craisinlord.anthology.portal.PortalSettings; +import com.craisinlord.anthology.portal.PortalHooks; +import com.craisinlord.anthology.portal.PortalEntity; +import com.craisinlord.antarchy.content.portalgun.PortalGunProjectileEntity; +import com.craisinlord.antarchy.content.portalgun.PortalGunPortalEntity; +import com.craisinlord.antarchy.content.item.PortalGunItem; +import com.craisinlord.antarchy.content.client.renderer.PortalGunMoonViewRenderer; +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.item.BigBerthaItem; +import com.craisinlord.antarchy.content.client.HerculesBeetleImpactShakeClientState; +import com.craisinlord.anthology.shake.client.CameraShake; +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.effect.RoyalEffectEligibility; +import com.craisinlord.antarchy.content.enchantment.AntarchyEnchantments; +import com.craisinlord.antarchy.content.entity.BedBugEntity; +import com.craisinlord.antarchy.content.entity.portal.DimensionalTearEntity; +import com.craisinlord.antarchy.content.entity.royal.QueenEntity; +import com.craisinlord.antarchy.content.entity.royal.RoyalBlackHoleEntity; +import com.craisinlord.antarchy.content.fluid.AntarchyFluidChecks; +import com.craisinlord.antarchy.content.item.TemporalTunerAccess; +import com.craisinlord.antarchy.content.item.TemporalTunerItem; +import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisUndersideManager; +import com.craisinlord.anthology.effect.AnthologyEffects; +import com.craisinlord.anthology.gravity.GravityApi; +import com.craisinlord.anthology.gravity.GravityHooks; +import com.craisinlord.anthology.time.TimeDilationApi; +import com.craisinlord.anthology.time.TimeDilationFieldEntity; +import com.craisinlord.anthology.time.TimeDilationHooks; +import com.craisinlord.anthology.time.TimeDilationMath; +import com.craisinlord.anthology.time.client.ContractionAfterimages; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.player.Player; + +public final class AntarchyAnthologyHooks { + private AntarchyAnthologyHooks() { + } + + public static void register() { + GravityHooks.addInvertedRegion(ThoraxisUndersideManager::isInUnderside); + GravityHooks.addInvertedFluid(AntarchyFluidChecks::isAntiwater); + GravityHooks.addLoadListener(AntarchyAnthologyHooks::clearStaleUndersideInversion); + TimeDilationHooks.addTrackedPredicate(entity -> entity instanceof Player player && TemporalTunerItem.isAvailable(player)); + TimeDilationHooks.addRateSource(AntarchyAnthologyHooks::temporalTunerRate); + TimeDilationHooks.addFieldExclusion(AntarchyAnthologyHooks::excludedFromField); + TimeDilationHooks.addChronosphereLevelSource(AntarchyEnchantments::chronosphereLevel); + PortalHooks.setSettings(new AntarchyPortalSettings()); + PortalHooks.addTransitExclusion(entity -> entity instanceof PortalGunProjectileEntity); + } + + public static void registerClient() { + PortalClientHooks.registerCustomView(portal -> portal instanceof PortalGunPortalEntity gunPortal && gunPortal.isMoonPortal(), PortalGunMoonViewRenderer::render); + PortalClientHooks.setOutlinePolicy(AntarchyAnthologyHooks::outlinesPortal); + CameraShake.addStrengthSource(cameraPos -> HerculesBeetleImpactShakeClientState.getTicks() / 25.0F * 2.0F); + CameraShake.addStrengthSource(cameraPos -> BigBerthaItem.clientShakeTicks / 25.0F * 2.0F); + ContractionAfterimages.addActivator(living -> living instanceof Player player + && TemporalTunerItem.isAvailable(player) + && TimeDilationApi.getRate(living) > 1.0D); + } + + private static boolean outlinesPortal(PortalEntity portal, LocalPlayer viewer) { + if (!(portal instanceof PortalGunPortalEntity gunPortal) || gunPortal.getOwnerId() == null) { + return false; + } + UUID owner = gunPortal.getOwnerId(); + return owner.equals(viewer.getUUID()) + || owner.equals(heldGunOwner(viewer.getMainHandItem(), viewer.getUUID())) + || owner.equals(heldGunOwner(viewer.getOffhandItem(), viewer.getUUID())); + } + + private static UUID heldGunOwner(ItemStack stack, UUID fallback) { + return stack.getItem() instanceof PortalGunItem ? PortalGunItem.getPortalOwnerId(stack, fallback) : null; + } + + private static final class AntarchyPortalSettings implements PortalSettings { + @Override + public boolean seeThroughEnabled() { + return AntarchySettings.portalGunSeeThroughPortals(); + } + + @Override + public int maxLiveViews() { + return AntarchySettings.portalGunMaxLiveViews(); + } + + @Override + public double minFloorExitSpeed() { + return AntarchySettings.portalGunMinFloorExitSpeed(); + } + + @Override + public double maxExitSpeed() { + return AntarchySettings.portalGunMaxExitSpeed(); + } + + @Override + public boolean fancySurfaces() { + return AntarchySettings.portalGunFancyPortals(); + } + } + + private static double temporalTunerRate(Entity entity) { + if (!(entity instanceof Player player) || !(player instanceof TemporalTunerAccess access)) { + return TimeDilationMath.NORMAL_RATE; + } + if (TemporalTunerItem.isAvailable(player)) { + return TemporalTunerItem.getRate(player); + } + access.antarchy$setTemporalTunerRate(TimeDilationMath.NORMAL_RATE); + TemporalTunerItem.syncTooltipRate(player, TimeDilationMath.NORMAL_RATE); + return TimeDilationMath.NORMAL_RATE; + } + + private static boolean excludedFromField(TimeDilationFieldEntity field, Entity entity) { + if (!field.isOwnerAnchored() && entity instanceof RoyalBlackHoleEntity) { + return true; + } + if (!(field.owner() instanceof QueenEntity)) { + return false; + } + if (entity instanceof LivingEntity living && !RoyalEffectEligibility.canApplyDilated(living)) { + return true; + } + return !field.isOwnerAnchored() && entity.getType().is(AntarchyTags.Entities.QUEEN_DOES_NOT_ATTACK); + } + + private static void clearStaleUndersideInversion(Entity entity) { + if (!(entity instanceof Mob mob) + || !GravityApi.isGravityInverted(mob) + || !GravityApi.isGravityForced(mob)) { + return; + } + MobEffectInstance invertedEffect = mob.getEffect(AnthologyEffects.inverted()); + boolean aboveUndersideExit = ThoraxisUndersideManager.isAboveUndersideExit(mob); + int nearbyDimensionalTears = countNearbyDimensionalTears(mob); + if (invertedEffect != null + && invertedEffect.isAmbient() + && !invertedEffect.isVisible() + && aboveUndersideExit) { + clearInversion(mob); + Antarchy.LOGGER.warn( + "[antarchy-gravity] cleared stale underside inversion from loaded mob type={} uuid={} pos=({}, {}, {}) dim={} effectDuration={} nearbyDimensionalTears={}", + mob.getType(), mob.getUUID(), mob.getX(), mob.getY(), mob.getZ(), + mob.level() != null ? mob.level().dimension().location() : "?", + invertedEffect.getDuration(), nearbyDimensionalTears + ); + return; + } + if (invertedEffect != null + && mob instanceof BedBugEntity + && aboveUndersideExit + && ThoraxisUndersideManager.isThoraxis(mob.level())) { + clearInversion(mob); + Antarchy.LOGGER.warn( + "[antarchy-gravity] cleared loaded inverted bed bug above underside exit type={} uuid={} pos=({}, {}, {}) dim={} effectDuration={} effectAmbient={} effectVisible={} nearbyDimensionalTears={}", + mob.getType(), mob.getUUID(), mob.getX(), mob.getY(), mob.getZ(), + mob.level() != null ? mob.level().dimension().location() : "?", + invertedEffect.getDuration(), invertedEffect.isAmbient(), invertedEffect.isVisible(), nearbyDimensionalTears + ); + return; + } + Antarchy.LOGGER.info( + "[antarchy-gravity] loaded inverted mob type={} uuid={} pos=({}, {}, {}) dim={} hasInvertedEffect={} effectDuration={} effectAmbient={} effectVisible={} aboveUndersideExit={} nearbyDimensionalTears={}", + mob.getType(), mob.getUUID(), mob.getX(), mob.getY(), mob.getZ(), + mob.level() != null ? mob.level().dimension().location() : "?", + invertedEffect != null, + invertedEffect != null ? invertedEffect.getDuration() : -1, + invertedEffect != null && invertedEffect.isAmbient(), + invertedEffect != null && invertedEffect.isVisible(), + aboveUndersideExit, + nearbyDimensionalTears + ); + } + + private static void clearInversion(Mob mob) { + mob.removeEffect(AnthologyEffects.inverted()); + GravityApi.resetGravityState(mob); + } + + private static int countNearbyDimensionalTears(Mob mob) { + if (!(mob.level() instanceof ServerLevel serverLevel)) { + return -1; + } + return serverLevel.getEntitiesOfClass( + DimensionalTearEntity.class, + mob.getBoundingBox().inflate(48.0D), + Entity::isAlive + ).size(); + } +} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java index 4db97dd6..190d3c5f 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java @@ -32,7 +32,6 @@ import com.craisinlord.antarchy.content.entity.lucid.LucidEntity; import com.craisinlord.antarchy.content.entity.vortex.VortexChargeProjectileEntity; import com.craisinlord.antarchy.content.entity.vortex.VortexEntity; import com.craisinlord.antarchy.content.entity.vortex.WindVortexEntity; -import com.craisinlord.antarchy.content.time.TimeDilationFieldEntity; import com.craisinlord.antarchy.content.entity.nightmare.NightmareEntity; import com.craisinlord.antarchy.content.entity.nightmare.NightmareBiteEntity; import com.craisinlord.antarchy.content.entity.nightmare.NightmarePortalEntity; @@ -97,8 +96,6 @@ public final class AntarchyObjects { @SuppressWarnings("unchecked") public static Supplier> VORTEX_CHARGE_PROJECTILE = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") - public static Supplier> TIME_DILATION_FIELD = (Supplier>) UNBOUND; - @SuppressWarnings("unchecked") public static Supplier> ROYAL_BLACK_HOLE = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") public static Supplier> ROYAL_ASSAILANT_BLACK_HOLE = (Supplier>) UNBOUND; @@ -698,10 +695,6 @@ public final class AntarchyObjects { VORTEX_CHARGE_PROJECTILE = supplier; } - public static void setTimeDilationField(Supplier> supplier) { - TIME_DILATION_FIELD = supplier; - } - public static void setRoyalBlackHole(Supplier> supplier) { ROYAL_BLACK_HOLE = supplier; } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java index 63c0a129..34c6a62e 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java @@ -1,5 +1,6 @@ package com.craisinlord.antarchy.content; +import com.craisinlord.anthology.time.TimeDilationTags; import com.craisinlord.antarchy.Antarchy; import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceLocation; @@ -84,7 +85,7 @@ public final class AntarchyTags { public static final TagKey> LUCID_ANCHOR_IMMUNE = TagKey.create(Registries.ENTITY_TYPE, id("lucid_anchor_immune")); public static final TagKey> DIMENSIONAL_TEAR_COMMON_SPAWNS = TagKey.create(Registries.ENTITY_TYPE, id("dimensional_tear_common_spawns")); public static final TagKey> DIMENSIONAL_TEAR_RARE_SPAWNS = TagKey.create(Registries.ENTITY_TYPE, id("dimensional_tear_rare_spawns")); - public static final TagKey> TIME_DILATION_IMMUNE = TagKey.create(Registries.ENTITY_TYPE, id("time_dilation_immune")); + public static final TagKey> TIME_DILATION_IMMUNE = TimeDilationTags.TIME_DILATION_IMMUNE; public static final TagKey> QUEEN_DOES_NOT_ATTACK = TagKey.create(Registries.ENTITY_TYPE, id("queen_does_not_attack")); public static final TagKey> COMMANDED_BLACKLIST = TagKey.create(Registries.ENTITY_TYPE, id("commanded_blacklist")); public static final TagKey> DILATED_BLACKLIST = TagKey.create(Registries.ENTITY_TYPE, id("dilated_blacklist")); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/entity/UndertrialSpawnerBlockEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/entity/UndertrialSpawnerBlockEntity.java index 1ded37c0..3f236630 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/entity/UndertrialSpawnerBlockEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/block/entity/UndertrialSpawnerBlockEntity.java @@ -3,6 +3,7 @@ package com.craisinlord.antarchy.content.block.entity; import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.block.UndertrialSpawnerBlock; import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.anthology.effect.AnthologyEffects; import net.minecraft.core.BlockPos; import net.minecraft.core.particles.SimpleParticleType; import net.minecraft.core.Direction; @@ -116,7 +117,7 @@ public final class UndertrialSpawnerBlockEntity extends BlockEntity implements T mob.addEffect(new MobEffectInstance(AntarchyObjects.INVERTED_EFFECT.get(), EFFECT_DURATION, 0, false, true, true)); int roll = mob.getRandom().nextInt(100); if (roll < 30) { - mob.addEffect(new MobEffectInstance(effect("contracted"), EFFECT_DURATION, 0, false, true, true)); + mob.addEffect(new MobEffectInstance(AnthologyEffects.contracted(), EFFECT_DURATION, 0, false, true, true)); } else if (roll < 50) { mob.addEffect(new MobEffectInstance(effect("shrinking"), EFFECT_DURATION, 0, false, true, true)); } else if (roll < 65) { diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/CameraShakeClientState.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/CameraShakeClientState.java deleted file mode 100644 index e2a336f9..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/CameraShakeClientState.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.craisinlord.antarchy.content.client; - -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import java.util.function.BooleanSupplier; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.phys.Vec3; - -public final class CameraShakeClientState { - public static final double TORETERROR_RANGE = 48.0D; - public static final float TORETERROR_STRENGTH = 1.0F; - public static final double NIGHTMARE_RANGE = 32.0D; - public static final float NIGHTMARE_STRENGTH = 1.35F; - - private record Source(double range, float strength, BooleanSupplier active) { - } - - private record Impact(Vec3 position, float intensity, int remainingTicks, int totalTicks, float radius) { - private Impact ticked() { - return new Impact(position, intensity, remainingTicks - 1, totalTicks, radius); - } - } - - private static final Map SOURCES = new HashMap<>(); - private static final java.util.List IMPACTS = new java.util.ArrayList<>(); - - private CameraShakeClientState() { - } - - public static void register(LivingEntity entity, double range, float strength, BooleanSupplier active) { - SOURCES.putIfAbsent(entity, new Source(range, strength, active)); - } - - public static float getStrength(Vec3 cameraPos) { - float total = 0.0F; - Iterator> iterator = SOURCES.entrySet().iterator(); - while (iterator.hasNext()) { - Map.Entry entry = iterator.next(); - LivingEntity entity = entry.getKey(); - Source source = entry.getValue(); - if (entity.isRemoved() || !entity.isAlive() || !source.active().getAsBoolean()) { - iterator.remove(); - continue; - } - - double distance = Math.sqrt(cameraPos.distanceToSqr(entity.position().add(0.0D, entity.getBbHeight() * 0.5D, 0.0D))); - if (distance > source.range()) { - continue; - } - - total += (float) ((1.0D - distance / source.range()) * source.strength()); - } - - Iterator impactIterator = IMPACTS.iterator(); - while (impactIterator.hasNext()) { - Impact impact = impactIterator.next(); - if (impact.remainingTicks() <= 0) { - impactIterator.remove(); - continue; - } - double distance = Math.sqrt(cameraPos.distanceToSqr(impact.position())); - if (distance > impact.radius()) { - continue; - } - total += (float) ((1.0D - distance / impact.radius()) * impact.intensity() * (impact.remainingTicks() / (float) Math.max(1, impact.totalTicks()))); - } - - return total; - } - - public static void triggerImpact(Vec3 position, float intensity, int durationTicks, float radius) { - int ticks = Math.max(1, durationTicks); - IMPACTS.add(new Impact(position, intensity, ticks, ticks, Math.max(1.0F, radius))); - } - - public static void tick() { - for (int i = IMPACTS.size() - 1; i >= 0; i--) { - Impact impact = IMPACTS.get(i); - if (impact.remainingTicks() <= 1) { - IMPACTS.remove(i); - } else { - IMPACTS.set(i, impact.ticked()); - } - } - } - - public static void clear() { - SOURCES.clear(); - IMPACTS.clear(); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/ClientTimeDilationTicker.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/ClientTimeDilationTicker.java deleted file mode 100644 index aed3199f..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/ClientTimeDilationTicker.java +++ /dev/null @@ -1,171 +0,0 @@ -package com.craisinlord.antarchy.content.client; - -import com.craisinlord.antarchy.content.time.TimeDilationFieldSnapshot; -import com.craisinlord.antarchy.content.time.TimeDilationFieldSnapshotSampler; -import com.craisinlord.antarchy.content.time.TimeDilationMath; -import java.util.List; -import java.util.Map; -import java.util.WeakHashMap; -import net.minecraft.client.multiplayer.ClientLevel; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.item.ItemEntity; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.util.Mth; - -public final class ClientTimeDilationTicker { - private static volatile List activeFields = List.of(); - private static ClientLevel activeLevel; - private static final Map ITEM_SPIN_STATES = new WeakHashMap<>(); - private static final Map ATTACK_ANIMATION_STATES = new WeakHashMap<>(); - private static final Map WALK_ANIMATION_STATES = new WeakHashMap<>(); - private static final Map ANIMATION_CLOCKS = new WeakHashMap<>(); - - private ClientTimeDilationTicker() { - } - - public static void tick(ClientLevel level) { - if (activeLevel != level) { - activeLevel = level; - activeFields = List.of(); - ITEM_SPIN_STATES.clear(); - ATTACK_ANIMATION_STATES.clear(); - WALK_ANIMATION_STATES.clear(); - ANIMATION_CLOCKS.clear(); - ContractionAfterimages.clear(); - com.craisinlord.antarchy.content.time.TimeDilationApi.clearSyncedClientRates(); - } - ContractionAfterimages.tick(level); - } - - public static float dilateAnimationTime(Entity entity, float vanillaTime) { - double rate = com.craisinlord.antarchy.content.time.TimeDilationApi.getRate(entity); - if (rate >= TimeDilationMath.NORMAL_RATE) { - ANIMATION_CLOCKS.remove(entity); - return vanillaTime; - } - AnimationClockState state = ANIMATION_CLOCKS.computeIfAbsent(entity, - ignored -> new AnimationClockState(vanillaTime)); - float delta = vanillaTime - state.lastVanillaTime; - if (delta >= 0.0F) { - state.temporalTime += delta * (float) rate; - } - state.lastVanillaTime = vanillaTime; - return state.temporalTime; - } - - public static float dilateAttackAnimation(LivingEntity entity, float partialTick, float vanillaAnimation) { - double rate = com.craisinlord.antarchy.content.time.TimeDilationApi.getRate(entity); - if (rate >= TimeDilationMath.NORMAL_RATE) { - ATTACK_ANIMATION_STATES.remove(entity); - return vanillaAnimation; - } - AttackAnimationState state = ATTACK_ANIMATION_STATES.computeIfAbsent( - entity, ignored -> new AttackAnimationState(entity.tickCount, vanillaAnimation) - ); - if (state.lastTick != entity.tickCount) { - state.previous = state.current; - state.current += (vanillaAnimation - state.current) * (float) rate; - state.lastTick = entity.tickCount; - } - return state.previous + (state.current - state.previous) * partialTick; - } - - public static float dilateRotation(LivingEntity entity, float previous, float current, float partialTick) { - double rate = com.craisinlord.antarchy.content.time.TimeDilationApi.getRate(entity); - if (rate >= TimeDilationMath.NORMAL_RATE) { - return Mth.rotLerp(partialTick, previous, current); - } - return previous + Mth.wrapDegrees(current - previous) * partialTick * (float) rate; - } - - public static float dilatePitch(LivingEntity entity, float previous, float current, float partialTick) { - double rate = com.craisinlord.antarchy.content.time.TimeDilationApi.getRate(entity); - if (rate >= TimeDilationMath.NORMAL_RATE) { - return Mth.lerp(partialTick, previous, current); - } - return previous + (current - previous) * partialTick * (float) rate; - } - - public static float dilateWalkAmount(LivingEntity entity, float amount) { - double rate = com.craisinlord.antarchy.content.time.TimeDilationApi.getRate(entity); - return rate >= TimeDilationMath.NORMAL_RATE ? amount : amount * (float) rate; - } - - public static float dilateWalkPosition(LivingEntity entity, float vanillaPosition) { - double rate = com.craisinlord.antarchy.content.time.TimeDilationApi.getRate(entity); - if (Math.abs(rate - TimeDilationMath.NORMAL_RATE) < 0.001D) { - WALK_ANIMATION_STATES.remove(entity); - return vanillaPosition; - } - AnimationClockState state = WALK_ANIMATION_STATES.computeIfAbsent(entity, - ignored -> new AnimationClockState(vanillaPosition)); - float delta = vanillaPosition - state.lastVanillaTime; - if (delta >= 0.0F) { - state.temporalTime += delta * (float) rate; - } - state.lastVanillaTime = vanillaPosition; - return state.temporalTime; - } - - public static float dilateItemSpin(ItemEntity item, float vanillaSpin) { - double rate = com.craisinlord.antarchy.content.time.TimeDilationApi.getRate(item); - if (rate >= TimeDilationMath.NORMAL_RATE) { - ITEM_SPIN_STATES.remove(item); - return vanillaSpin; - } - ItemSpinState state = ITEM_SPIN_STATES.computeIfAbsent(item, ignored -> new ItemSpinState(vanillaSpin)); - float rawDelta = vanillaSpin - state.lastVanillaSpin; - state.lastVanillaSpin = vanillaSpin; - state.temporalSpin += rawDelta * (float) rate; - return state.temporalSpin; - } - - private static final class ItemSpinState { - private float lastVanillaSpin; - private float temporalSpin; - - private ItemSpinState(float initialSpin) { - this.lastVanillaSpin = initialSpin; - this.temporalSpin = initialSpin; - } - } - - private static final class AttackAnimationState { - private int lastTick; - private float previous; - private float current; - - private AttackAnimationState(int tick, float initial) { - this.lastTick = tick; - this.previous = initial; - this.current = initial; - } - } - - private static final class AnimationClockState { - private float lastVanillaTime; - private float temporalTime; - - private AnimationClockState(float initialTime) { - this.lastVanillaTime = initialTime; - this.temporalTime = initialTime; - } - } - - public static double rateAt(double x, double y, double z) { - List fields = activeFields; - if (fields.isEmpty()) { - return TimeDilationMath.NORMAL_RATE; - } - return TimeDilationFieldSnapshotSampler.sample(fields, x, y, z); - } - - public static void applyFields(List fields) { - activeFields = List.copyOf(fields); - } - - public static boolean hasActiveDilation() { - return !activeFields.isEmpty() - || com.craisinlord.antarchy.content.time.TimeDilationApi.hasSyncedClientRates(); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/ContractionAfterimages.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/ContractionAfterimages.java deleted file mode 100644 index a76fcb9a..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/ContractionAfterimages.java +++ /dev/null @@ -1,136 +0,0 @@ -package com.craisinlord.antarchy.content.client; - -import com.craisinlord.antarchy.content.effect.RoyalEffectHooks; -import com.craisinlord.antarchy.content.item.TemporalTunerItem; -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import java.util.ArrayDeque; -import java.util.Deque; -import java.util.Iterator; -import java.util.Map; -import java.util.WeakHashMap; -import java.util.List; -import java.util.concurrent.CopyOnWriteArrayList; -import java.util.function.Function; -import java.util.function.Predicate; -import net.minecraft.core.Holder; -import net.minecraft.client.multiplayer.ClientLevel; -import net.minecraft.world.effect.MobEffect; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.LivingEntity; - -public final class ContractionAfterimages { - public static final int MAX_SAMPLES = 10; - public static final int SAMPLE_LIFETIME_TICKS = 13; - public static final int DEFAULT_COLOR = 0xFFD35A; - private static final List> ACTIVATORS = new CopyOnWriteArrayList<>(); - private static final List> COLOR_PROVIDERS = new CopyOnWriteArrayList<>(); - - private static final Map> HISTORY = new WeakHashMap<>(); - - private ContractionAfterimages() { - } - - public static void tick(ClientLevel level) { - int now = (int) (level.getGameTime() & 0x7fffffffL); - - Iterator>> iterator = HISTORY.entrySet().iterator(); - while (iterator.hasNext()) { - LivingEntity tracked = iterator.next().getKey(); - if (tracked == null || tracked.isRemoved() || !tracked.isAlive() || !isActive(tracked)) { - iterator.remove(); - } - } - } - - public static void observe(LivingEntity living) { - if (!isActive(living)) { - return; - } - int now = (int) (living.level().getGameTime() & 0x7fffffffL); - Deque samples = HISTORY.computeIfAbsent(living, ignored -> new ArrayDeque<>()); - samples.addFirst(new Sample(living, now)); - while (samples.size() > MAX_SAMPLES) { - samples.removeLast(); - } - } - - public static Deque samples(LivingEntity entity) { - return HISTORY.get(entity); - } - - public static void addActivator(Predicate activator) { - ACTIVATORS.add(activator); - } - - public static void addColorProvider(Function provider) { - COLOR_PROVIDERS.add(provider); - } - - public static int colorFor(Entity entity) { - if (!(entity instanceof LivingEntity living)) { - return DEFAULT_COLOR; - } - for (Function provider : COLOR_PROVIDERS) { - Integer color = provider.apply(living); - if (color != null) { - return color & 0xFFFFFF; - } - } - return DEFAULT_COLOR; - } - - public static boolean isActive(LivingEntity living) { - Holder holder = RoyalEffectHooks.contractedHolder(); - boolean contracted = holder != null && living.hasEffect(holder); - boolean tuned = living instanceof net.minecraft.world.entity.player.Player player - && TemporalTunerItem.isAvailable(player) - && TimeDilationApi.getRate(living) > 1.0D; - if (living.isInvisible()) { - return false; - } - if (contracted || tuned) { - return true; - } - for (Predicate activator : ACTIVATORS) { - if (activator.test(living)) { - return true; - } - } - return false; - } - - public static float fade(Sample sample, int now) { - float elapsed = now - sample.recordedTick; - return Math.max(0.0F, 1.0F - elapsed / SAMPLE_LIFETIME_TICKS); - } - - public static void clear() { - HISTORY.clear(); - } - - public static final class Sample { - public final double x; - public final double y; - public final double z; - public final float bodyYaw; - public final float headYaw; - public final float xRot; - public final float limbPos; - public final float limbSpeed; - public final float ageInTicks; - public final int recordedTick; - - Sample(LivingEntity entity, int recordedTick) { - this.x = entity.getX(); - this.y = entity.getY(); - this.z = entity.getZ(); - this.bodyYaw = entity.yBodyRot; - this.headYaw = entity.getYHeadRot(); - this.xRot = entity.getXRot(); - this.limbPos = entity.walkAnimation.position(); - this.limbSpeed = Math.min(entity.walkAnimation.speed(), 1.0F); - this.ageInTicks = entity.tickCount; - this.recordedTick = recordedTick; - } - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunClientTransit.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunClientTransit.java deleted file mode 100644 index 5cbdec42..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunClientTransit.java +++ /dev/null @@ -1,90 +0,0 @@ -package com.craisinlord.antarchy.content.client; - -import com.craisinlord.antarchy.content.network.PortalGunTransitPayload; -import com.craisinlord.anthology.gravity.GravityApi; -import com.craisinlord.antarchy.content.portalgun.PortalGunPortalEntity; -import com.craisinlord.antarchy.content.portalgun.PortalGunTransformUtil; -import com.craisinlord.antarchy.content.portalgun.PortalGunTransitMath; -import net.minecraft.client.Minecraft; -import net.minecraft.client.multiplayer.ClientPacketListener; -import net.minecraft.client.player.LocalPlayer; -import net.minecraft.network.protocol.common.ServerboundCustomPayloadPacket; -import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.Vec3; - -public final class PortalGunClientTransit { - private static long cooldownUntil; - - private PortalGunClientTransit() { - } - - public static void afterLocalMove(LocalPlayer player, AABB startBox, Vec3 velocity) { - if (player.level() == null || !player.isAlive() || player.isPassenger() || player.isSpectator()) { - return; - } - long gameTime = player.level().getGameTime(); - if (gameTime < cooldownUntil && cooldownUntil - gameTime <= PortalGunPortalEntity.TELEPORT_COOLDOWN_TICKS) { - return; - } - AABB currentBox = player.getBoundingBox(); - if (velocity.lengthSqr() <= 1.0E-12D && startBox.getCenter().distanceToSqr(currentBox.getCenter()) <= 1.0E-10D) { - return; - } - ClientPacketListener connection = Minecraft.getInstance().getConnection(); - if (connection == null) { - return; - } - Vec3 crossingVelocity = GravityApi.isGravityInverted(player) - ? PortalGunTransitMath.entityVelocityToWorld(player, velocity) - : velocity; - for (PortalGunPortalEntity portal : PortalGunPortalEntity.findPortalsNearBounds(player.level(), startBox.minmax(currentBox).expandTowards(crossingVelocity).inflate(1.0D))) { - PortalGunPortalEntity linked = portal.getLinkedPortal(); - if (linked == null || !linked.isAlive()) { - continue; - } - if (portal.resolveCrossing(player, startBox, currentBox, crossingVelocity) == null) { - continue; - } - Vec3 look = player.getLookAngle(); - connection.send(new ServerboundCustomPayloadPacket(new PortalGunTransitPayload( - portal.getId(), PortalGunTransitMath.entityPosition(startBox, player), player.position(), velocity))); - PortalGunPortalEntity.PortalTransit transit = portal.computeTransit(player, linked, currentBox, velocity, look); - Vec3 rollLook = GravityApi.isGravityInverted(player) - ? PortalGunTransitMath.entityVelocityToWorld(player, look) - : look; - PortalGunRollClientState.onTransit(portal, linked, rollLook); - apply(player, transit); - cooldownUntil = gameTime + PortalGunPortalEntity.TELEPORT_COOLDOWN_TICKS; - return; - } - } - - private static void apply(LocalPlayer player, PortalGunPortalEntity.PortalTransit transit) { - Vec3 position = transit.position(); - float yaw = PortalGunTransformUtil.yawFromLook(transit.look()); - float pitch = PortalGunTransformUtil.pitchFromLook(transit.look()); - player.setPos(position.x, position.y, position.z); - player.xo = position.x; - player.yo = position.y; - player.zo = position.z; - player.xOld = position.x; - player.yOld = position.y; - player.zOld = position.z; - player.setYRot(yaw); - player.setXRot(pitch); - player.yRotO = yaw; - player.xRotO = pitch; - player.setYHeadRot(yaw); - player.yHeadRotO = yaw; - player.setYBodyRot(yaw); - player.yBodyRotO = yaw; - player.setDeltaMovement(transit.velocity()); - Vec3 fallVelocity = PortalGunTransitMath.entityVelocityToWorld(player, transit.velocity()); - player.fallDistance = PortalGunTransitMath.exitFallDistance(player.fallDistance, fallVelocity, player); - player.setOnGround(false); - player.horizontalCollision = false; - player.verticalCollision = false; - player.verticalCollisionBelow = false; - player.setPortalCooldown(PortalGunPortalEntity.TELEPORT_COOLDOWN_TICKS); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunCrosshairRenderer.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunCrosshairRenderer.java index 5e2662e7..0c26c5a1 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunCrosshairRenderer.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunCrosshairRenderer.java @@ -79,8 +79,8 @@ public final class PortalGunCrosshairRenderer { long gameTime = level.getGameTime(); if (cachedLevel != level || cachedGameTime != gameTime || !gunId.equals(cachedGunId)) { Set portals = EnumSet.noneOf(PortalGunPortalEntity.PortalSide.class); - for (PortalGunPortalEntity portal : com.craisinlord.antarchy.content.portalgun.PortalGunPortalRegistry.all(level)) { - if (portal.isAlive() && gunId.equals(portal.getGunId())) { + for (com.craisinlord.anthology.portal.PortalEntity entry : com.craisinlord.anthology.portal.PortalRegistry.all(level)) { + if (entry instanceof PortalGunPortalEntity portal && portal.isAlive() && gunId.equals(portal.getGunId())) { portals.add(portal.getPortalSide()); } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunEntityTransformationStack.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunEntityTransformationStack.java deleted file mode 100644 index 552213f4..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunEntityTransformationStack.java +++ /dev/null @@ -1,120 +0,0 @@ -package com.craisinlord.antarchy.content.client; - -import com.craisinlord.antarchy.content.portalgun.PortalGunPortalEntity; -import com.craisinlord.antarchy.content.portalgun.PortalGunTransformUtil; -import java.util.ArrayDeque; -import java.util.Deque; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.phys.Vec3; - -public final class PortalGunEntityTransformationStack { - private final Entity entity; - private final Deque stack = new ArrayDeque<>(); - - public PortalGunEntityTransformationStack(Entity entity) { - this.entity = entity; - } - - public void push() { - this.stack.push(EntityTransformation.capture(this.entity)); - } - - public void pop() { - if (!this.stack.isEmpty()) { - this.stack.pop().restore(this.entity); - } - } - - public Vec3 moveEntity(PortalGunPortalEntity sourcePortal, PortalGunPortalEntity destinationPortal, float partialTick) { - double eyeHeight = this.entity.getEyeHeight(); - Vec3 interpolatedEye = new Vec3( - net.minecraft.util.Mth.lerp(partialTick, this.entity.xo, this.entity.getX()), - net.minecraft.util.Mth.lerp(partialTick, this.entity.yo, this.entity.getY()) + eyeHeight, - net.minecraft.util.Mth.lerp(partialTick, this.entity.zo, this.entity.getZ()) - ); - Vec3 previousEye = new Vec3(this.entity.xo, this.entity.yo + eyeHeight, this.entity.zo); - Vec3 transformedEye = destinationPortal.position().add(PortalGunTransformUtil.transformPosition(sourcePortal, destinationPortal, interpolatedEye.subtract(sourcePortal.position()))); - Vec3 transformedPreviousEye = destinationPortal.position().add(PortalGunTransformUtil.transformPosition(sourcePortal, destinationPortal, previousEye.subtract(sourcePortal.position()))); - Vec3 transformed = transformedEye.subtract(0.0D, eyeHeight, 0.0D); - Vec3 transformedPrevious = transformedPreviousEye.subtract(0.0D, eyeHeight, 0.0D); - Vec3 look = PortalGunTransformUtil.transformVector(sourcePortal, destinationPortal, this.entity.getLookAngle()).normalize(); - Vec3 previousLook = PortalGunTransformUtil.transformVector( - sourcePortal, - destinationPortal, - Vec3.directionFromRotation(this.entity.xRotO, this.entity.yRotO) - ).normalize(); - Vec3 velocity = PortalGunTransformUtil.transformVector(sourcePortal, destinationPortal, this.entity.getDeltaMovement()); - float yaw = PortalGunTransformUtil.yawFromLook(look); - float pitch = PortalGunTransformUtil.pitchFromLook(look); - float previousYaw = PortalGunTransformUtil.yawFromLook(previousLook); - float previousPitch = PortalGunTransformUtil.pitchFromLook(previousLook); - float yawDelta = net.minecraft.util.Mth.wrapDegrees(yaw - this.entity.getYRot()); - this.entity.setPos(transformed.x, transformed.y, transformed.z); - this.entity.xo = transformedPrevious.x; - this.entity.yo = transformedPrevious.y; - this.entity.zo = transformedPrevious.z; - this.entity.setYRot(yaw); - this.entity.setXRot(pitch); - this.entity.yRotO = previousYaw; - this.entity.xRotO = previousPitch; - this.entity.setDeltaMovement(velocity); - if (this.entity instanceof LivingEntity living) { - living.setYHeadRot(living.getYHeadRot() + yawDelta); - living.setYBodyRot(living.yBodyRot + yawDelta); - living.yHeadRotO += yawDelta; - living.yBodyRotO += yawDelta; - } - return transformed; - } - - public void reset() { - while (!this.stack.isEmpty()) { - this.pop(); - } - } - - private record EntityTransformation( - double x, - double y, - double z, - double xo, - double yo, - double zo, - float yRot, - float xRot, - float yRotO, - float xRotO, - float yHeadRot, - float yHeadRotO, - float yBodyRot, - float yBodyRotO, - Vec3 deltaMovement - ) { - private static EntityTransformation capture(Entity entity) { - float yHeadRot = entity instanceof LivingEntity living ? living.getYHeadRot() : entity.getYRot(); - float yHeadRotO = entity instanceof LivingEntity living ? living.yHeadRotO : entity.yRotO; - float yBodyRot = entity instanceof LivingEntity living ? living.yBodyRot : entity.getYRot(); - float yBodyRotO = entity instanceof LivingEntity living ? living.yBodyRotO : entity.yRotO; - return new EntityTransformation(entity.getX(), entity.getY(), entity.getZ(), entity.xo, entity.yo, entity.zo, entity.getYRot(), entity.getXRot(), entity.yRotO, entity.xRotO, yHeadRot, yHeadRotO, yBodyRot, yBodyRotO, entity.getDeltaMovement()); - } - - private void restore(Entity entity) { - entity.setPos(this.x, this.y, this.z); - entity.xo = this.xo; - entity.yo = this.yo; - entity.zo = this.zo; - entity.setYRot(this.yRot); - entity.setXRot(this.xRot); - entity.yRotO = this.yRotO; - entity.xRotO = this.xRotO; - entity.setDeltaMovement(this.deltaMovement); - if (entity instanceof LivingEntity living) { - living.setYHeadRot(this.yHeadRot); - living.yHeadRotO = this.yHeadRotO; - living.setYBodyRot(this.yBodyRot); - living.yBodyRotO = this.yBodyRotO; - } - } - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunPortalRenderState.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunPortalRenderState.java deleted file mode 100644 index ed40f53f..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunPortalRenderState.java +++ /dev/null @@ -1,152 +0,0 @@ -package com.craisinlord.antarchy.content.client; - -import com.craisinlord.antarchy.content.portalgun.PortalGunWorldPortalShape; -import com.craisinlord.antarchy.content.portalgun.PortalGunApertureCuller; -import java.util.ArrayDeque; -import java.util.Deque; -import java.util.UUID; -import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.Vec3; -import org.joml.Matrix4f; - -public final class PortalGunPortalRenderState { - private static final ThreadLocal> ACTIVE_DESTINATION_SHAPES = ThreadLocal.withInitial(ArrayDeque::new); - private static final ThreadLocal> ACTIVE_SOURCE_SHAPES = ThreadLocal.withInitial(ArrayDeque::new); - private static final ThreadLocal> ACTIVE_CONTEXTS = ThreadLocal.withInitial(ArrayDeque::new); - private static final ThreadLocal> ACTIVE_CULLERS = ThreadLocal.withInitial(ArrayDeque::new); - private static final ThreadLocal RENDER_ALL_DEPTH = ThreadLocal.withInitial(() -> 0); - - private PortalGunPortalRenderState() { - } - - public static void pushPortalView(PortalGunWorldPortalShape sourceShape, PortalGunWorldPortalShape destinationShape, boolean renderAll) { - ACTIVE_SOURCE_SHAPES.get().push(sourceShape); - ACTIVE_DESTINATION_SHAPES.get().push(destinationShape); - if (renderAll) { - RENDER_ALL_DEPTH.set(RENDER_ALL_DEPTH.get() + 1); - } - } - - public static void pushPortalView(PortalRenderContext context) { - ACTIVE_CONTEXTS.get().push(context); - ACTIVE_CULLERS.get().push(PortalGunApertureCuller.create(context.destinationShape(), context.cameraPos())); - pushPortalView(context.sourceShape(), context.destinationShape(), context.renderAll()); - } - - public static void popPortalView(boolean renderAll) { - Deque sourceShapes = ACTIVE_SOURCE_SHAPES.get(); - if (!sourceShapes.isEmpty()) { - sourceShapes.pop(); - } - if (sourceShapes.isEmpty()) { - ACTIVE_SOURCE_SHAPES.remove(); - } - Deque destinationShapes = ACTIVE_DESTINATION_SHAPES.get(); - if (!destinationShapes.isEmpty()) { - destinationShapes.pop(); - } - if (destinationShapes.isEmpty()) { - ACTIVE_DESTINATION_SHAPES.remove(); - } - if (renderAll) { - int depth = Math.max(0, RENDER_ALL_DEPTH.get() - 1); - if (depth == 0) { - RENDER_ALL_DEPTH.remove(); - } else { - RENDER_ALL_DEPTH.set(depth); - } - } - Deque contexts = ACTIVE_CONTEXTS.get(); - if (!contexts.isEmpty()) { - contexts.pop(); - } - if (contexts.isEmpty()) { - ACTIVE_CONTEXTS.remove(); - } - Deque cullers = ACTIVE_CULLERS.get(); - if (!cullers.isEmpty()) { - cullers.pop(); - } - if (cullers.isEmpty()) { - ACTIVE_CULLERS.remove(); - } - } - - public static void pushDestinationShape(PortalGunWorldPortalShape shape) { - ACTIVE_DESTINATION_SHAPES.get().push(shape); - } - - public static void popDestinationShape() { - Deque shapes = ACTIVE_DESTINATION_SHAPES.get(); - if (!shapes.isEmpty()) { - shapes.pop(); - } - if (shapes.isEmpty()) { - ACTIVE_DESTINATION_SHAPES.remove(); - } - } - - public static PortalGunWorldPortalShape getDestinationShape() { - Deque shapes = ACTIVE_DESTINATION_SHAPES.get(); - return shapes.isEmpty() ? null : shapes.peek(); - } - - public static PortalGunWorldPortalShape getSourceShape() { - Deque shapes = ACTIVE_SOURCE_SHAPES.get(); - return shapes.isEmpty() ? null : shapes.peek(); - } - - public static PortalRenderContext getContext() { - Deque contexts = ACTIVE_CONTEXTS.get(); - return contexts.isEmpty() ? null : contexts.peek(); - } - - public static int getRenderLevel() { - return ACTIVE_CONTEXTS.get().size(); - } - - public static boolean renderAll() { - return RENDER_ALL_DEPTH.get() > 0; - } - - public static boolean shouldRenderBounds(AABB bounds) { - if (renderAll()) { - return true; - } - PortalRenderContext context = getContext(); - if (context == null) { - PortalGunWorldPortalShape destinationShape = getDestinationShape(); - PortalGunWorldPortalShape sourceShape = getSourceShape(); - return destinationShape == null || shouldRenderBounds(bounds, sourceShape, destinationShape, false); - } - if (!context.destinationShape().intersectsFront(bounds, 0.125D)) { - return false; - } - Deque cullers = ACTIVE_CULLERS.get(); - return cullers.isEmpty() || cullers.peek().intersects(bounds); - } - - private static boolean shouldRenderBounds(AABB bounds, PortalGunWorldPortalShape sourceShape, PortalGunWorldPortalShape destinationShape, boolean renderAll) { - if (renderAll) { - return true; - } - if (!destinationShape.intersectsFront(bounds, 0.125D)) { - return false; - } - return true; - } - - public record PortalRenderContext( - PortalGunWorldPortalShape sourceShape, - PortalGunWorldPortalShape destinationShape, - Vec3 cameraPos, - Vec3 look, - Vec3 up, - Matrix4f viewMatrix, - Matrix4f projectionMatrix, - int renderLevel, - boolean renderAll, - UUID destinationId - ) { - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunRollClientState.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunRollClientState.java deleted file mode 100644 index fc6a85f7..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/PortalGunRollClientState.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.craisinlord.antarchy.content.client; - -import com.craisinlord.antarchy.content.portalgun.PortalGunPortalEntity; -import com.craisinlord.antarchy.content.portalgun.PortalGunTransformUtil; -import net.minecraft.client.Minecraft; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.phys.Vec3; - -public final class PortalGunRollClientState { - private static final double PORTAL_QUERY_RADIUS = 12.0D; - private static final float ROLL_DECAY = 0.85F; - private static final float ROLL_EPSILON = 0.05F; - private static float previousRollDegrees; - private static float rollDegrees; - - private PortalGunRollClientState() { - } - - public static float getRollDegrees() { - return rollDegrees; - } - - public static float getRollDegrees(float partialTick) { - return previousRollDegrees + (rollDegrees - previousRollDegrees) * partialTick; - } - - public static boolean isEntityInsidePortal(Minecraft minecraft, Entity entity) { - if (minecraft.level == null || entity == null) { - return false; - } - for (PortalGunPortalEntity portal : com.craisinlord.antarchy.content.portalgun.PortalGunPortalRegistry.near(minecraft.level, entity.getBoundingBox().inflate(PORTAL_QUERY_RADIUS))) { - if (portal.intersectsEntityBounds(entity)) { - return true; - } - } - return false; - } - - public static boolean isCameraInsidePortal(Minecraft minecraft) { - Entity cameraEntity = minecraft.getCameraEntity(); - return cameraEntity != null && isEntityInsidePortal(minecraft, cameraEntity); - } - - public static void clear() { - previousRollDegrees = 0.0F; - rollDegrees = 0.0F; - } - - public static void tick(Minecraft minecraft) { - if (minecraft.level == null || minecraft.player == null) { - clear(); - return; - } - previousRollDegrees = rollDegrees; - rollDegrees *= ROLL_DECAY; - if (Math.abs(rollDegrees) < ROLL_EPSILON) { - rollDegrees = 0.0F; - } - } - - public static void onTransit(PortalGunPortalEntity sourcePortal, PortalGunPortalEntity destinationPortal, Vec3 look) { - Vec3 transformedLook = PortalGunTransformUtil.transformVector(sourcePortal, destinationPortal, look).normalize(); - Vec3 transformedUp = PortalGunTransformUtil.transformVector(sourcePortal, destinationPortal, PortalGunTransformUtil.upVectorFromLookAndRoll(look, rollDegrees)).normalize(); - rollDegrees = PortalGunTransformUtil.rollFromOrientation(transformedLook, transformedUp); - previousRollDegrees = rollDegrees; - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/model/PortalGunPortalModel.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/model/PortalGunPortalModel.java deleted file mode 100644 index d12f735f..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/model/PortalGunPortalModel.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.craisinlord.antarchy.content.client.model; - -import com.craisinlord.antarchy.Antarchy; -import com.craisinlord.antarchy.content.portalgun.PortalGunPortalEntity; -import net.minecraft.resources.ResourceLocation; -import software.bernie.geckolib.model.GeoModel; - -public class PortalGunPortalModel extends GeoModel { - private static final ResourceLocation BLUE_TEXTURE = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/vfx/portal_gun_portal_blue.png"); - private static final ResourceLocation ORANGE_TEXTURE = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/vfx/portal_gun_portal_orange.png"); - - @Override - public ResourceLocation getModelResource(PortalGunPortalEntity animatable) { - return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "geo/portal_gun_portal.geo.json"); - } - - @Override - public ResourceLocation getTextureResource(PortalGunPortalEntity animatable) { - return animatable.getPortalSide() == PortalGunPortalEntity.PortalSide.BLUE ? BLUE_TEXTURE : ORANGE_TEXTURE; - } - - @Override - public ResourceLocation getAnimationResource(PortalGunPortalEntity animatable) { - return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "animations/portal_gun_portal.animation.json"); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/IrisPortalSceneCompat.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/IrisPortalSceneCompat.java deleted file mode 100644 index 5dea9bef..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/IrisPortalSceneCompat.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.craisinlord.antarchy.content.client.renderer; - -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import net.minecraft.client.renderer.LevelRenderer; - -final class IrisPortalSceneCompat { - private static final Field PIPELINE_FIELD; - private static final Method GET_PIPELINE_MANAGER; - private static final Method GET_PIPELINE; - - static { - Field field = null; - Method manager = null; - Method pipeline = null; - try { - Class iris = Class.forName("net.irisshaders.iris.Iris"); - manager = iris.getMethod("getPipelineManager"); - pipeline = manager.getReturnType().getMethod("getPipelineNullable"); - field = LevelRenderer.class.getDeclaredField("pipeline"); - field.setAccessible(true); - } catch (ReflectiveOperationException | RuntimeException | LinkageError ignored) { - field = null; - } - PIPELINE_FIELD = field; - GET_PIPELINE_MANAGER = field == null ? null : manager; - GET_PIPELINE = field == null ? null : pipeline; - } - - private IrisPortalSceneCompat() { - } - - static boolean begin(LevelRenderer renderer) { - if (PIPELINE_FIELD == null) { - return false; - } - try { - if (PIPELINE_FIELD.get(renderer) != null) { - return false; - } - Object pipeline = GET_PIPELINE.invoke(GET_PIPELINE_MANAGER.invoke(null)); - if (pipeline == null) { - return false; - } - PIPELINE_FIELD.set(renderer, pipeline); - return true; - } catch (ReflectiveOperationException | RuntimeException ignored) { - return false; - } - } - - static void end(LevelRenderer renderer, boolean installed) { - if (!installed) { - return; - } - try { - PIPELINE_FIELD.set(renderer, null); - } catch (ReflectiveOperationException | RuntimeException ignored) { - } - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunMoonViewRenderer.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunMoonViewRenderer.java index c8d29a8d..7db70f3d 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunMoonViewRenderer.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunMoonViewRenderer.java @@ -1,8 +1,8 @@ package com.craisinlord.antarchy.content.client.renderer; import com.craisinlord.antarchy.Antarchy; -import com.craisinlord.antarchy.content.portalgun.PortalGunTransformUtil; -import com.craisinlord.antarchy.content.portalgun.PortalGunWorldPortalShape; +import com.craisinlord.anthology.portal.PortalTransforms; +import com.craisinlord.anthology.portal.PortalShape; import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.BufferBuilder; @@ -37,13 +37,13 @@ public final class PortalGunMoonViewRenderer { private PortalGunMoonViewRenderer() { } - public static void render(Minecraft minecraft, PortalGunWorldPortalShape source, Vec3 cameraPos, Vec3 look, Vec3 up, + public static void render(Minecraft minecraft, PortalShape source, Vec3 cameraPos, Vec3 look, Vec3 up, Matrix4f rootProjection, float partialTick) { - PortalGunWorldPortalShape exit = new PortalGunWorldPortalShape(Vec3.ZERO, EXIT_NORMAL, EXIT_UP, EXIT_NORMAL.cross(EXIT_UP), + PortalShape exit = new PortalShape(Vec3.ZERO, EXIT_NORMAL, EXIT_UP, EXIT_NORMAL.cross(EXIT_UP), source.halfWidth(), source.halfHeight(), source.halfDepth()); - Vec3 moonLook = PortalGunTransformUtil.transformVector(source, exit, look).normalize(); - Vec3 moonUp = PortalGunTransformUtil.transformVector(source, exit, up).normalize(); - Matrix4f view = new Matrix4f().rotation(PortalGunTransformUtil.orientationQuaternion(moonLook, moonUp).conjugate(new Quaternionf())); + Vec3 moonLook = PortalTransforms.transformVector(source, exit, look).normalize(); + Vec3 moonUp = PortalTransforms.transformVector(source, exit, up).normalize(); + Matrix4f view = new Matrix4f().rotation(PortalTransforms.orientationQuaternion(moonLook, moonUp).conjugate(new Quaternionf())); Vec3 earthDirection = new Vec3(0.0D, Math.sin(EARTH_ELEVATION), Math.cos(EARTH_ELEVATION)); Matrix4fStack modelViewStack = RenderSystem.getModelViewStack(); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunPortalRenderer.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunPortalRenderer.java index bd654eda..749b18d3 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunPortalRenderer.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunPortalRenderer.java @@ -1,108 +1,11 @@ package com.craisinlord.antarchy.content.client.renderer; -import com.craisinlord.antarchy.Antarchy; -import com.craisinlord.antarchy.config.AntarchySettings; -import com.craisinlord.antarchy.content.client.model.PortalGunPortalModel; import com.craisinlord.antarchy.content.portalgun.PortalGunPortalEntity; -import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.blaze3d.vertex.VertexConsumer; -import net.minecraft.client.GraphicsStatus; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.LightTexture; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.RenderType; +import com.craisinlord.anthology.portal.client.PortalEntityRenderer; import net.minecraft.client.renderer.entity.EntityRendererProvider; -import net.minecraft.client.renderer.texture.OverlayTexture; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.phys.Vec3; -import org.jetbrains.annotations.Nullable; -import org.joml.Matrix4f; -import software.bernie.geckolib.renderer.GeoEntityRenderer; -public class PortalGunPortalRenderer extends GeoEntityRenderer { +public class PortalGunPortalRenderer extends PortalEntityRenderer { public PortalGunPortalRenderer(EntityRendererProvider.Context context) { - super(context, new PortalGunPortalModel()); - this.shadowRadius = 0.0F; - } - - @Override - public void render(PortalGunPortalEntity entity, float entityYaw, float partialTick, PoseStack poseStack, MultiBufferSource bufferSource, int packedLight) { - poseStack.pushPose(); - Matrix4f pose = poseStack.last().pose(); - float portalScale = entity.getPortalVisualScale(partialTick); - float halfWidth = entity.getPortalWidth() * 0.5F; - float halfHeight = entity.getPortalHeight() * 0.5F; - ResourceLocation texture = portalTexture(entity); - VertexConsumer consumer = bufferSource.getBuffer(RenderType.entityTranslucent(texture)); - if (isFancyPortalsEnabled()) { - float frameV = Math.floorMod((int) ((entity.level().getGameTime() + partialTick) / 5.0F), 4) * 0.25F; - putAnimatedPortalVertex(consumer, pose, entity, portalScale, frameV, -halfWidth, -halfHeight, 0.0F, 1.0F); - putAnimatedPortalVertex(consumer, pose, entity, portalScale, frameV, -halfWidth, halfHeight, 0.0F, 0.0F); - putAnimatedPortalVertex(consumer, pose, entity, portalScale, frameV, halfWidth, halfHeight, 1.0F, 0.0F); - putAnimatedPortalVertex(consumer, pose, entity, portalScale, frameV, halfWidth, -halfHeight, 1.0F, 1.0F); - } else { - putPortalVertex(consumer, pose, entity, portalScale, -halfWidth, -halfHeight, 0.0F, 1.0F, true); - putPortalVertex(consumer, pose, entity, portalScale, -halfWidth, halfHeight, 0.0F, 0.0F, true); - putPortalVertex(consumer, pose, entity, portalScale, halfWidth, halfHeight, 1.0F, 0.0F, true); - putPortalVertex(consumer, pose, entity, portalScale, halfWidth, -halfHeight, 1.0F, 1.0F, true); - } - VertexConsumer edge = bufferSource.getBuffer(RenderType.entityTranslucent(PortalGunPortalRim.texture(entity))); - float rimWidth = halfWidth + PortalGunPortalRim.EXTRA_WIDTH; - float rimHeight = halfHeight + PortalGunPortalRim.EXTRA_HEIGHT; - putPortalVertex(edge, pose, entity, portalScale, -rimWidth, -rimHeight, 0.0F, 1.0F, true); - putPortalVertex(edge, pose, entity, portalScale, -rimWidth, rimHeight, 0.0F, 0.0F, true); - putPortalVertex(edge, pose, entity, portalScale, rimWidth, rimHeight, 1.0F, 0.0F, true); - putPortalVertex(edge, pose, entity, portalScale, rimWidth, -rimHeight, 1.0F, 1.0F, true); - poseStack.popPose(); - } - - private static ResourceLocation portalTexture(PortalGunPortalEntity entity) { - return isFancyPortalsEnabled() - ? entity.getVariant().vortexTexture(entity.getPortalSide()) - : PortalGunPortalRim.texture(entity); - } - - private static boolean isFancyPortalsEnabled() { - Minecraft minecraft = Minecraft.getInstance(); - return AntarchySettings.portalGunFancyPortals() - && minecraft.options.graphicsMode().get() == GraphicsStatus.FANCY; - } - - private static void putAnimatedPortalVertex(VertexConsumer consumer, Matrix4f pose, PortalGunPortalEntity entity, float portalScale, float frameV, float horizontal, float vertical, float u, float v) { - Vec3 position = entity.getWidthVec().normalize().scale(horizontal * portalScale) - .add(entity.getUpVec().normalize().scale(vertical * portalScale)) - .add(entity.getNormalVec().normalize().scale(0.03125D)); - consumer.addVertex(pose, (float) position.x, (float) position.y, (float) position.z) - .setColor(255, 255, 255, 210) - .setUv(u, frameV + v * 0.25F) - .setOverlay(OverlayTexture.NO_OVERLAY) - .setLight(LightTexture.FULL_BRIGHT) - .setNormal((float) entity.getNormalVec().x, (float) entity.getNormalVec().y, (float) entity.getNormalVec().z); - } - - private static void putPortalVertex(VertexConsumer consumer, Matrix4f pose, PortalGunPortalEntity entity, float portalScale, float horizontal, float vertical, float u, float v, boolean channelTint) { - Vec3 position = entity.getWidthVec().normalize().scale(horizontal * portalScale) - .add(entity.getUpVec().normalize().scale(vertical * portalScale)) - .add(entity.getNormalVec().normalize().scale(0.03125D)); - int color = entity.getPortalColor(); - int red = channelTint ? color >> 16 & 0xFF : 255; - int green = channelTint ? color >> 8 & 0xFF : 255; - int blue = channelTint ? color & 0xFF : 255; - int alpha = channelTint ? PortalGunPortalRim.ENTITY_ALPHA : 210; - consumer.addVertex(pose, (float) position.x, (float) position.y, (float) position.z) - .setColor(red, green, blue, alpha) - .setUv(u, v) - .setOverlay(OverlayTexture.NO_OVERLAY) - .setLight(LightTexture.FULL_BRIGHT) - .setNormal((float) entity.getNormalVec().x, (float) entity.getNormalVec().y, (float) entity.getNormalVec().z); - } - - @Override - protected void applyRotations(PortalGunPortalEntity animatable, PoseStack poseStack, float ageInTicks, float rotationYaw, float partialTick, float nativeScale) { - } - - @Override - public @Nullable RenderType getRenderType(PortalGunPortalEntity animatable, ResourceLocation texture, @Nullable MultiBufferSource bufferSource, float partialTick) { - return RenderType.entityTranslucent(portalTexture(animatable)); + super(context); } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunPortalRim.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunPortalRim.java deleted file mode 100644 index 135b8339..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunPortalRim.java +++ /dev/null @@ -1,186 +0,0 @@ -package com.craisinlord.antarchy.content.client.renderer; - -import com.craisinlord.antarchy.Antarchy; -import com.craisinlord.antarchy.content.item.PortalGunItem; -import com.craisinlord.antarchy.content.portalgun.PortalGunPortalEntity; -import com.mojang.blaze3d.platform.GlStateManager; -import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.BufferBuilder; -import com.mojang.blaze3d.vertex.BufferUploader; -import com.mojang.blaze3d.vertex.DefaultVertexFormat; -import com.mojang.blaze3d.vertex.MeshData; -import com.mojang.blaze3d.vertex.Tesselator; -import com.mojang.blaze3d.vertex.VertexFormat; -import com.mojang.blaze3d.vertex.VertexSorting; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.UUID; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.GameRenderer; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.phys.Vec3; -import org.joml.Matrix4f; -import org.joml.Matrix4fStack; -import org.lwjgl.opengl.GL11; - -public final class PortalGunPortalRim { - public static final float EXTRA_WIDTH = 0.0F; - public static final float EXTRA_HEIGHT = 0.0F; - public static final int ENTITY_ALPHA = 150; - private static final double OVERLAY_OFFSET = 0.05D; - private static final int HIDDEN_RIM_ALPHA = 170; - private static final ResourceLocation BLUE_TEXTURE = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/vfx/portal_gun_portal_blue.png"); - private static final ResourceLocation ORANGE_TEXTURE = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/vfx/portal_gun_portal_orange.png"); - - private PortalGunPortalRim() { - } - - public static ResourceLocation texture(PortalGunPortalEntity portal) { - return portal.getPortalSide() == PortalGunPortalEntity.PortalSide.BLUE ? BLUE_TEXTURE : ORANGE_TEXTURE; - } - - static void drawOverView(PortalGunPortalEntity portal, Vec3 cameraPos, Matrix4f viewMatrix, Matrix4f projectionMatrix, float partialTick) { - withCameraMatrices(viewMatrix, projectionMatrix, () -> { - RenderSystem.disableDepthTest(); - RenderSystem.depthMask(false); - RenderSystem.defaultBlendFunc(); - drawRims(List.of(portal), cameraPos, partialTick, ENTITY_ALPHA); - }); - } - - static void drawHiddenOutlines(Minecraft minecraft, Vec3 cameraPos, Matrix4f viewMatrix, Matrix4f projectionMatrix, float partialTick) { - drawHiddenOutlines(minecraft, cameraPos, viewMatrix, projectionMatrix, partialTick, null); - } - - static void drawHiddenOutlines(Minecraft minecraft, Vec3 cameraPos, Matrix4f viewMatrix, Matrix4f projectionMatrix, float partialTick, - PortalGunPortalEntity excluded) { - if (minecraft.level == null || minecraft.player == null) { - return; - } - List ownedPortals = collectOwnedPortals(minecraft); - if (excluded != null) { - ownedPortals.remove(excluded); - } - if (ownedPortals.isEmpty()) { - return; - } - withCameraMatrices(viewMatrix, projectionMatrix, () -> { - RenderSystem.enableDepthTest(); - RenderSystem.depthMask(false); - RenderSystem.depthFunc(GL11.GL_GREATER); - RenderSystem.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE); - drawRims(ownedPortals, cameraPos, partialTick, HIDDEN_RIM_ALPHA); - }); - } - - private static void withCameraMatrices(Matrix4f viewMatrix, Matrix4f projectionMatrix, Runnable draw) { - Matrix4fStack modelViewStack = RenderSystem.getModelViewStack(); - Matrix4f previousProjection = new Matrix4f(RenderSystem.getProjectionMatrix()); - VertexSorting previousSorting = RenderSystem.getVertexSorting(); - modelViewStack.pushMatrix(); - try { - modelViewStack.set(viewMatrix); - RenderSystem.applyModelViewMatrix(); - RenderSystem.setProjectionMatrix(new Matrix4f(projectionMatrix), VertexSorting.DISTANCE_TO_ORIGIN); - RenderSystem.setShader(GameRenderer::getPositionTexColorShader); - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - RenderSystem.disableCull(); - RenderSystem.enableBlend(); - draw.run(); - } finally { - RenderSystem.depthFunc(GL11.GL_LEQUAL); - RenderSystem.enableDepthTest(); - RenderSystem.depthMask(true); - RenderSystem.defaultBlendFunc(); - RenderSystem.disableBlend(); - RenderSystem.enableCull(); - RenderSystem.setProjectionMatrix(previousProjection, previousSorting); - modelViewStack.popMatrix(); - RenderSystem.applyModelViewMatrix(); - } - } - - private static List collectOwnedPortals(Minecraft minecraft) { - Set owners = new HashSet<>(); - Player player = minecraft.player; - owners.add(player.getUUID()); - addGunOwner(owners, player.getMainHandItem(), player.getUUID()); - addGunOwner(owners, player.getOffhandItem(), player.getUUID()); - List portals = new ArrayList<>(); - for (PortalGunPortalEntity portal : com.craisinlord.antarchy.content.portalgun.PortalGunPortalRegistry.all(minecraft.level)) { - if (portal.isAlive() && owners.contains(portal.getOwnerId())) { - portals.add(portal); - } - } - return portals; - } - - private static void addGunOwner(Set owners, ItemStack stack, UUID fallback) { - if (stack.getItem() instanceof PortalGunItem) { - UUID owner = PortalGunItem.getPortalOwnerId(stack, fallback); - if (owner != null) { - owners.add(owner); - } - } - } - - private static void drawRims(List portals, Vec3 cameraPos, float partialTick, int alpha) { - drawRimsWithTexture(portals, cameraPos, partialTick, alpha, BLUE_TEXTURE, PortalGunPortalEntity.PortalSide.BLUE); - drawRimsWithTexture(portals, cameraPos, partialTick, alpha, ORANGE_TEXTURE, PortalGunPortalEntity.PortalSide.ORANGE); - } - - private static void drawRimsWithTexture(List portals, Vec3 cameraPos, float partialTick, int alpha, - ResourceLocation texture, PortalGunPortalEntity.PortalSide side) { - BufferBuilder buffer = null; - for (PortalGunPortalEntity portal : portals) { - if (portal.getPortalSide() != side) { - continue; - } - if (buffer == null) { - buffer = Tesselator.getInstance().begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX_COLOR); - } - addRim(buffer, portal, cameraPos, partialTick, alpha); - } - if (buffer == null) { - return; - } - MeshData mesh = buffer.build(); - if (mesh == null) { - return; - } - RenderSystem.setShaderTexture(0, texture); - BufferUploader.drawWithShader(mesh); - } - - private static void addRim(BufferBuilder buffer, PortalGunPortalEntity portal, Vec3 cameraPos, float partialTick, int alpha) { - float scale = portal.getPortalVisualScale(partialTick); - if (scale <= 0.0F) { - return; - } - Vec3 right = portal.getWidthVec().normalize(); - Vec3 up = portal.getUpVec().normalize(); - Vec3 center = portal.position().add(portal.getNormalVec().normalize().scale(OVERLAY_OFFSET)).subtract(cameraPos); - double halfWidth = (portal.getPortalWidth() * 0.5D + EXTRA_WIDTH) * scale; - double halfHeight = (portal.getPortalHeight() * 0.5D + EXTRA_HEIGHT) * scale; - int color = portal.getPortalColor(); - int red = color >> 16 & 0xFF; - int green = color >> 8 & 0xFF; - int blue = color & 0xFF; - addVertex(buffer, center, right, up, -halfWidth, -halfHeight, 0.0F, 1.0F, red, green, blue, alpha); - addVertex(buffer, center, right, up, -halfWidth, halfHeight, 0.0F, 0.0F, red, green, blue, alpha); - addVertex(buffer, center, right, up, halfWidth, halfHeight, 1.0F, 0.0F, red, green, blue, alpha); - addVertex(buffer, center, right, up, halfWidth, -halfHeight, 1.0F, 1.0F, red, green, blue, alpha); - } - - private static void addVertex(BufferBuilder buffer, Vec3 center, Vec3 right, Vec3 up, double horizontal, double vertical, - float u, float v, int red, int green, int blue, int alpha) { - Vec3 position = center.add(right.scale(horizontal)).add(up.scale(vertical)); - buffer.addVertex((float) position.x, (float) position.y, (float) position.z) - .setUv(u, v) - .setColor(red, green, blue, alpha); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunPortalSceneRenderer.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunPortalSceneRenderer.java deleted file mode 100644 index cb35171b..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunPortalSceneRenderer.java +++ /dev/null @@ -1,242 +0,0 @@ -package com.craisinlord.antarchy.content.client.renderer; - -import com.craisinlord.antarchy.content.portalgun.PortalGunPortalEntity; -import com.craisinlord.antarchy.mixins.client.LevelRendererPortalSceneInvoker; -import com.craisinlord.antarchy.mixins.client.LevelRendererPortalViewAreaAccessor; -import com.mojang.blaze3d.platform.Lighting; -import com.mojang.blaze3d.shaders.FogShape; -import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.BufferBuilder; -import com.mojang.blaze3d.vertex.BufferUploader; -import com.mojang.blaze3d.vertex.DefaultVertexFormat; -import com.mojang.blaze3d.vertex.MeshData; -import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.blaze3d.vertex.Tesselator; -import com.mojang.blaze3d.vertex.VertexFormat; -import com.mojang.blaze3d.vertex.VertexSorting; -import java.util.UUID; -import java.util.function.Consumer; -import net.minecraft.client.Camera; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.FogRenderer; -import net.minecraft.client.renderer.GameRenderer; -import net.minecraft.client.renderer.LevelRenderer; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.RenderBuffers; -import net.minecraft.client.renderer.RenderType; -import net.minecraft.client.renderer.culling.Frustum; -import net.minecraft.core.BlockPos; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.phys.Vec3; -import org.joml.Matrix4f; -import org.joml.Matrix4fStack; -import org.lwjgl.opengl.GL11; - -public final class PortalGunPortalSceneRenderer { - private static RenderBuffers portalBuffers; - private static boolean renderingScene; - - private PortalGunPortalSceneRenderer() { - } - - public static MultiBufferSource.BufferSource bufferSource() { - if (portalBuffers == null) { - portalBuffers = new RenderBuffers(1); - } - return portalBuffers.bufferSource(); - } - - public static boolean isRenderingScene() { - return renderingScene; - } - - public static void render(Minecraft minecraft, Camera camera, float partialTick, Matrix4f viewMatrix, - Matrix4f projection, Matrix4f skyProjection, Frustum frustum, - PortalTerrain terrain, Consumer crossingEntities, - UUID sourceId, UUID destinationId, int viewLevel) { - LevelRenderer renderer = minecraft.levelRenderer; - LevelRendererPortalViewAreaAccessor state = (LevelRendererPortalViewAreaAccessor) renderer; - LevelRendererPortalSceneInvoker scene = (LevelRendererPortalSceneInvoker) renderer; - Vec3 cameraPosition = camera.getPosition(); - double cameraX = cameraPosition.x; - double cameraY = cameraPosition.y; - double cameraZ = cameraPosition.z; - - int previousRainSoundTime = state.antarchy$getRainSoundTime(); - Matrix4fStack modelViewStack = RenderSystem.getModelViewStack(); - Matrix4f previousProjection = new Matrix4f(RenderSystem.getProjectionMatrix()); - VertexSorting previousSorting = RenderSystem.getVertexSorting(); - float previousFogStart = RenderSystem.getShaderFogStart(); - float previousFogEnd = RenderSystem.getShaderFogEnd(); - float[] previousFogColor = RenderSystem.getShaderFogColor().clone(); - FogShape previousFogShape = RenderSystem.getShaderFogShape(); - Camera previousBlockEntityCamera = minecraft.getBlockEntityRenderDispatcher().camera; - modelViewStack.pushMatrix(); - modelViewStack.identity(); - RenderSystem.applyModelViewMatrix(); - renderingScene = true; - boolean irisPipelineInstalled = IrisPortalSceneCompat.begin(renderer); - terrain.begin(minecraft); - try { - float renderDistance = minecraft.gameRenderer.getRenderDistance(); - BlockPos cameraBlockPos = BlockPos.containing(cameraX, cameraY, cameraZ); - boolean foggy = minecraft.level.effects().isFoggyAt(cameraBlockPos.getX(), cameraBlockPos.getY()) - || minecraft.gui.getBossOverlay().shouldCreateWorldFog(); - - { - RenderSystem.setShaderGameTime(minecraft.level.getGameTime(), partialTick); - minecraft.getBlockEntityRenderDispatcher().prepare(minecraft.level, camera, minecraft.hitResult); - minecraft.getEntityRenderDispatcher().prepare(minecraft.level, camera, minecraft.crosshairPickEntity); - FogRenderer.setupColor(camera, partialTick, minecraft.level, minecraft.options.getEffectiveRenderDistance(), - minecraft.gameRenderer.getDarkenWorldAmount(partialTick)); - FogRenderer.levelFogColor(); - fillBackground(RenderSystem.getShaderFogColor()); - RenderSystem.setProjectionMatrix(skyProjection, VertexSorting.DISTANCE_TO_ORIGIN); - FogRenderer.setupFog(camera, FogRenderer.FogMode.FOG_SKY, renderDistance, foggy, partialTick); - RenderSystem.setShader(GameRenderer::getPositionShader); - if (irisPipelineInstalled || PortalGunPortalSkyQueries.shouldRenderSky(sourceId, destinationId, viewLevel)) { - renderer.renderSky(viewMatrix, skyProjection, partialTick, camera, foggy, - () -> FogRenderer.setupFog(camera, FogRenderer.FogMode.FOG_SKY, renderDistance, foggy, partialTick)); - } - } - - RenderSystem.setProjectionMatrix(projection, VertexSorting.DISTANCE_TO_ORIGIN); - FogRenderer.setupFog(camera, FogRenderer.FogMode.FOG_TERRAIN, Math.max(renderDistance, 32.0F), foggy, partialTick); - { - RenderSystem.enableDepthTest(); - RenderSystem.depthMask(true); - terrain.drawLayer(minecraft, RenderType.solid(), cameraPosition, viewMatrix, projection); - terrain.drawLayer(minecraft, RenderType.cutoutMipped(), cameraPosition, viewMatrix, projection); - terrain.drawLayer(minecraft, RenderType.cutout(), cameraPosition, viewMatrix, projection); - } - - if (minecraft.level.effects().constantAmbientLight()) { - Lighting.setupNetherLevel(); - } else { - Lighting.setupLevel(); - } - modelViewStack.pushMatrix(); - modelViewStack.mul(viewMatrix); - RenderSystem.applyModelViewMatrix(); - PoseStack poseStack = new PoseStack(); - MultiBufferSource.BufferSource buffers = bufferSource(); - try { - { - for (Entity entity : minecraft.level.entitiesForRendering()) { - if (!minecraft.getEntityRenderDispatcher().shouldRender(entity, frustum, cameraX, cameraY, cameraZ) - && !entity.hasIndirectPassenger(minecraft.player)) { - continue; - } - if (entity instanceof PortalGunPortalEntity portal && !portal.shouldRenderFront(cameraPosition)) { - continue; - } - if (entity == camera.getEntity() - && entity.getBoundingBox().inflate(0.1D).contains(cameraPosition) - && (!(entity instanceof LivingEntity living) || !living.isSleeping())) { - continue; - } - scene.antarchy$renderPortalEntity(entity, cameraX, cameraY, cameraZ, partialTick, poseStack, buffers); - } - crossingEntities.accept(poseStack); - } - buffers.endBatch(); - - { - terrain.forEachBlockEntity(minecraft, frustum, blockEntity -> - renderBlockEntity(minecraft, blockEntity, cameraX, cameraY, cameraZ, partialTick, poseStack, buffers)); - } - buffers.endBatch(); - if (!irisPipelineInstalled) { - PortalGunPortalSkyQueries.querySkyVisibility(sourceId, destinationId, viewLevel); - } - - { - terrain.drawLayer(minecraft, RenderType.translucent(), cameraPosition, viewMatrix, projection); - buffers.endBatch(); - terrain.drawLayer(minecraft, RenderType.tripwire(), cameraPosition, viewMatrix, projection); - minecraft.particleEngine.render(minecraft.gameRenderer.lightTexture(), camera, partialTick); - } - - { - RenderSystem.depthMask(false); - scene.antarchy$renderPortalWeather(minecraft.gameRenderer.lightTexture(), partialTick, cameraX, cameraY, cameraZ); - scene.antarchy$renderPortalWorldBorder(camera); - } - } finally { - try { - buffers.endBatch(); - } finally { - modelViewStack.popMatrix(); - RenderSystem.applyModelViewMatrix(); - } - } - } finally { - renderingScene = false; - IrisPortalSceneCompat.end(renderer, irisPipelineInstalled); - terrain.end(minecraft); - state.antarchy$setRainSoundTime(previousRainSoundTime); - modelViewStack.popMatrix(); - RenderSystem.applyModelViewMatrix(); - RenderSystem.setProjectionMatrix(previousProjection, previousSorting); - RenderSystem.setShaderFogStart(previousFogStart); - RenderSystem.setShaderFogEnd(previousFogEnd); - RenderSystem.setShaderFogColor(previousFogColor[0], previousFogColor[1], previousFogColor[2], previousFogColor[3]); - RenderSystem.setShaderFogShape(previousFogShape); - if (previousBlockEntityCamera != null) { - minecraft.getBlockEntityRenderDispatcher().prepare(minecraft.level, previousBlockEntityCamera, minecraft.hitResult); - } - RenderSystem.depthMask(true); - RenderSystem.enableDepthTest(); - RenderSystem.enableCull(); - RenderSystem.disableBlend(); - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - } - } - - private static void fillBackground(float[] fogColor) { - int previousDepthFunction = GL11.glGetInteger(GL11.GL_DEPTH_FUNC); - Matrix4f previousProjection = new Matrix4f(RenderSystem.getProjectionMatrix()); - VertexSorting previousSorting = RenderSystem.getVertexSorting(); - BufferBuilder buffer = Tesselator.getInstance().begin(VertexFormat.Mode.TRIANGLES, DefaultVertexFormat.POSITION); - buffer.addVertex(-1.0F, -1.0F, 0.99999F); - buffer.addVertex(3.0F, -1.0F, 0.99999F); - buffer.addVertex(-1.0F, 3.0F, 0.99999F); - MeshData mesh = buffer.build(); - try { - RenderSystem.enableDepthTest(); - RenderSystem.depthMask(true); - RenderSystem.colorMask(true, true, true, true); - RenderSystem.disableBlend(); - RenderSystem.disableCull(); - GL11.glDepthFunc(GL11.GL_ALWAYS); - RenderSystem.setProjectionMatrix(new Matrix4f(), previousSorting); - RenderSystem.setShader(GameRenderer::getPositionShader); - RenderSystem.setShaderColor(fogColor[0], fogColor[1], fogColor[2], 1.0F); - if (mesh != null) { - BufferUploader.drawWithShader(mesh); - } - } finally { - GL11.glDepthFunc(previousDepthFunction); - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - RenderSystem.setProjectionMatrix(previousProjection, previousSorting); - RenderSystem.enableCull(); - } - } - - private static void renderBlockEntity(Minecraft minecraft, BlockEntity blockEntity, double cameraX, double cameraY, double cameraZ, - float partialTick, PoseStack poseStack, MultiBufferSource.BufferSource buffers) { - if (!blockEntity.hasLevel() || !blockEntity.getType().isValid(blockEntity.getBlockState())) { - return; - } - BlockPos pos = blockEntity.getBlockPos(); - poseStack.pushPose(); - try { - poseStack.translate(pos.getX() - cameraX, pos.getY() - cameraY, pos.getZ() - cameraZ); - minecraft.getBlockEntityRenderDispatcher().render(blockEntity, partialTick, poseStack, buffers); - } finally { - poseStack.popPose(); - } - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunPortalSectionViews.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunPortalSectionViews.java deleted file mode 100644 index 40f6e547..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunPortalSectionViews.java +++ /dev/null @@ -1,165 +0,0 @@ -package com.craisinlord.antarchy.content.client.renderer; - -import com.craisinlord.antarchy.mixins.client.LevelRendererPortalViewAreaAccessor; -import it.unimi.dsi.fastutil.objects.ObjectArrayList; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.UUID; -import net.minecraft.client.Camera; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.SectionOcclusionGraph; -import net.minecraft.client.renderer.ViewArea; -import net.minecraft.client.renderer.chunk.SectionRenderDispatcher; -import net.minecraft.client.renderer.culling.Frustum; -import net.minecraft.core.SectionPos; -import net.minecraft.world.level.ChunkPos; -import net.minecraft.world.phys.Vec3; -import org.joml.Matrix4f; - -public final class PortalGunPortalSectionViews { - private static final int MAX_VIEWS = 8; - private static final double SEED_OFFSET = 0.5D; - private static final LinkedHashMap VIEWS = new LinkedHashMap<>(8, 0.75F, true); - private static volatile SectionOcclusionGraph[] graphs = new SectionOcclusionGraph[0]; - private static ViewArea ownerArea; - private static int mainSectionX = Integer.MIN_VALUE; - private static int mainSectionY = Integer.MIN_VALUE; - private static int mainSectionZ = Integer.MIN_VALUE; - - private PortalGunPortalSectionViews() { - } - - public static boolean canView(Minecraft minecraft, Vec3 exitCenter) { - ViewArea area = ((LevelRendererPortalViewAreaAccessor) minecraft.levelRenderer).antarchy$getViewArea(); - if (area == null) { - return false; - } - LevelRendererPortalViewAreaAccessor accessor = (LevelRendererPortalViewAreaAccessor) minecraft.levelRenderer; - int limit = area.getViewDistance() - 1; - return Math.abs(SectionPos.posToSectionCoord(exitCenter.x) - accessor.antarchy$getLastCameraSectionX()) <= limit - && Math.abs(SectionPos.posToSectionCoord(exitCenter.z) - accessor.antarchy$getLastCameraSectionZ()) <= limit; - } - - public static View prepare(Minecraft minecraft, UUID exitId, Vec3 exitCenter, Vec3 exitNormal, Frustum frustum) { - LevelRendererPortalViewAreaAccessor accessor = (LevelRendererPortalViewAreaAccessor) minecraft.levelRenderer; - ViewArea area = accessor.antarchy$getViewArea(); - if (area != ownerArea) { - clear(); - ownerArea = area; - } - int sectionX = accessor.antarchy$getLastCameraSectionX(); - int sectionY = accessor.antarchy$getLastCameraSectionY(); - int sectionZ = accessor.antarchy$getLastCameraSectionZ(); - if (sectionX != mainSectionX || sectionY != mainSectionY || sectionZ != mainSectionZ) { - mainSectionX = sectionX; - mainSectionY = sectionY; - mainSectionZ = sectionZ; - for (View view : VIEWS.values()) { - view.graph.invalidate(); - } - } - View view = VIEWS.get(exitId); - if (view == null) { - view = new View(area); - VIEWS.put(exitId, view); - trim(); - publishGraphs(); - } - Vec3 seed = exitCenter.add(exitNormal.normalize().scale(SEED_OFFSET)); - if (!seed.equals(view.seed)) { - view.seed = seed; - view.seedCamera = new SeedCamera(seed); - view.updateFrustum = centredFrustum(seed); - view.graph.invalidate(); - } - view.partialUpdates.clear(); - view.graph.update(minecraft.smartCull, view.seedCamera, view.updateFrustum(), view.partialUpdates); - view.visibleSections.clear(); - view.graph.addSectionsInFrustum(frustum, view.visibleSections); - return view; - } - - public static void onSectionCompiled(SectionRenderDispatcher.RenderSection section) { - for (SectionOcclusionGraph graph : graphs) { - graph.onSectionCompiled(section); - } - } - - public static void onChunkLoaded(ChunkPos pos) { - for (SectionOcclusionGraph graph : graphs) { - graph.onChunkLoaded(pos); - } - } - - public static void onChunkDropped(ChunkPos pos) { - for (SectionOcclusionGraph graph : graphs) { - graph.invalidate(); - } - } - - public static void clear() { - for (View view : VIEWS.values()) { - view.release(); - } - VIEWS.clear(); - publishGraphs(); - ownerArea = null; - mainSectionX = Integer.MIN_VALUE; - mainSectionY = Integer.MIN_VALUE; - mainSectionZ = Integer.MIN_VALUE; - } - - private static void publishGraphs() { - graphs = VIEWS.values().stream().map(view -> view.graph).toArray(SectionOcclusionGraph[]::new); - } - - private static void trim() { - Iterator> iterator = VIEWS.entrySet().iterator(); - while (VIEWS.size() > MAX_VIEWS && iterator.hasNext()) { - View view = iterator.next().getValue(); - iterator.remove(); - view.release(); - } - } - - public static final class View { - private final SectionOcclusionGraph graph = new SectionOcclusionGraph(); - private final List partialUpdates = new ArrayList<>(); - private final ObjectArrayList visibleSections = new ObjectArrayList<>(); - private Vec3 seed; - private Camera seedCamera; - private Frustum updateFrustum; - - private View(ViewArea area) { - ((PortalSectionGraphMarker) this.graph).antarchy$markPortalGraph(); - this.graph.waitAndReset(area); - } - - public ObjectArrayList visibleSections() { - return this.visibleSections; - } - - private Frustum updateFrustum() { - return this.updateFrustum; - } - - private void release() { - this.graph.waitAndReset(null); - } - } - - private static Frustum centredFrustum(Vec3 position) { - Frustum frustum = new Frustum(new Matrix4f(), new Matrix4f().setPerspective((float) Math.toRadians(90.0D), 1.0F, 0.05F, 1024.0F)); - frustum.prepare(position.x, position.y, position.z); - return frustum; - } - - private static final class SeedCamera extends Camera { - private SeedCamera(Vec3 position) { - this.setPosition(position); - } - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunPortalSkyQueries.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunPortalSkyQueries.java deleted file mode 100644 index 4b2caaee..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunPortalSkyQueries.java +++ /dev/null @@ -1,129 +0,0 @@ -package com.craisinlord.antarchy.content.client.renderer; - -import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.BufferBuilder; -import com.mojang.blaze3d.vertex.BufferUploader; -import com.mojang.blaze3d.vertex.DefaultVertexFormat; -import com.mojang.blaze3d.vertex.MeshData; -import com.mojang.blaze3d.vertex.Tesselator; -import com.mojang.blaze3d.vertex.VertexFormat; -import com.mojang.blaze3d.vertex.VertexSorting; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.UUID; -import net.minecraft.client.renderer.GameRenderer; -import org.joml.Matrix4f; -import org.joml.Matrix4fStack; -import org.lwjgl.opengl.GL11; -import org.lwjgl.opengl.GL15; - -public final class PortalGunPortalSkyQueries { - private static final int MAX_ENTRIES = 128; - private static final LinkedHashMap QUERIES = new LinkedHashMap<>(16, 0.75F, true); - - private PortalGunPortalSkyQueries() { - } - - public static boolean shouldRenderSky(UUID source, UUID destination, int level) { - QueryState state = QUERIES.get(new Key(source, destination, level)); - if (state == null) { - return true; - } - poll(state); - return !state.hasResult || state.visible; - } - - public static void querySkyVisibility(UUID source, UUID destination, int level) { - Key key = new Key(source, destination, level); - QueryState state = QUERIES.computeIfAbsent(key, ignored -> new QueryState(GL15.glGenQueries())); - poll(state); - if (state.inFlight) { - trim(); - return; - } - MeshData mesh = buildFarPlane(); - if (mesh == null) { - trim(); - return; - } - Matrix4fStack modelViewStack = RenderSystem.getModelViewStack(); - Matrix4f previousProjection = new Matrix4f(RenderSystem.getProjectionMatrix()); - VertexSorting previousSorting = RenderSystem.getVertexSorting(); - int previousDepthFunction = GL11.glGetInteger(GL11.GL_DEPTH_FUNC); - modelViewStack.pushMatrix(); - GL15.glBeginQuery(GL15.GL_SAMPLES_PASSED, state.query); - try { - RenderSystem.enableDepthTest(); - RenderSystem.depthMask(false); - RenderSystem.colorMask(false, false, false, false); - RenderSystem.disableBlend(); - RenderSystem.disableCull(); - GL11.glDepthFunc(GL11.GL_LEQUAL); - modelViewStack.identity(); - RenderSystem.applyModelViewMatrix(); - RenderSystem.setProjectionMatrix(new Matrix4f(), previousSorting); - RenderSystem.setShader(GameRenderer::getPositionShader); - BufferUploader.drawWithShader(mesh); - } finally { - GL15.glEndQuery(GL15.GL_SAMPLES_PASSED); - state.inFlight = true; - GL11.glDepthFunc(previousDepthFunction); - RenderSystem.colorMask(true, true, true, true); - RenderSystem.depthMask(true); - RenderSystem.enableCull(); - RenderSystem.setProjectionMatrix(previousProjection, previousSorting); - modelViewStack.popMatrix(); - RenderSystem.applyModelViewMatrix(); - } - trim(); - } - - public static void clear() { - for (QueryState state : QUERIES.values()) { - GL15.glDeleteQueries(state.query); - } - QUERIES.clear(); - } - - private static void poll(QueryState state) { - if (state.inFlight && GL15.glGetQueryObjecti(state.query, GL15.GL_QUERY_RESULT_AVAILABLE) != 0) { - state.visible = GL15.glGetQueryObjecti(state.query, GL15.GL_QUERY_RESULT) != 0; - state.hasResult = true; - state.inFlight = false; - } - } - - private static MeshData buildFarPlane() { - BufferBuilder buffer = Tesselator.getInstance().begin(VertexFormat.Mode.TRIANGLES, DefaultVertexFormat.POSITION); - buffer.addVertex(-1.0F, -1.0F, 0.99999F); - buffer.addVertex(3.0F, -1.0F, 0.99999F); - buffer.addVertex(-1.0F, 3.0F, 0.99999F); - return buffer.build(); - } - - private static void trim() { - Iterator> iterator = QUERIES.entrySet().iterator(); - while (QUERIES.size() > MAX_ENTRIES && iterator.hasNext()) { - QueryState state = iterator.next().getValue(); - if (!state.inFlight) { - GL15.glDeleteQueries(state.query); - iterator.remove(); - } - } - } - - private record Key(UUID source, UUID destination, int level) { - } - - private static final class QueryState { - private final int query; - private boolean inFlight; - private boolean hasResult; - private boolean visible = true; - - private QueryState(int query) { - this.query = query; - } - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunPortalViewRenderer.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunPortalViewRenderer.java deleted file mode 100644 index 9e993b52..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunPortalViewRenderer.java +++ /dev/null @@ -1,755 +0,0 @@ -package com.craisinlord.antarchy.content.client.renderer; - -import com.craisinlord.antarchy.Antarchy; -import com.craisinlord.antarchy.config.AntarchySettings; -import com.craisinlord.antarchy.content.client.PortalGunEntityTransformationStack; -import com.craisinlord.antarchy.content.client.PortalGunPortalRenderState; -import com.craisinlord.antarchy.content.portalgun.PortalGunPortalEntity; -import com.craisinlord.antarchy.content.portalgun.PortalGunProjectionUtil; -import com.craisinlord.antarchy.content.portalgun.PortalGunTransformUtil; -import com.craisinlord.antarchy.content.portalgun.PortalGunWorldPortalShape; -import com.craisinlord.antarchy.mixins.client.CameraBasisAccessor; -import com.craisinlord.antarchy.mixins.client.MinecraftMainRenderTargetAccessor; -import com.mojang.blaze3d.pipeline.RenderTarget; -import com.mojang.blaze3d.pipeline.TextureTarget; -import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.BufferBuilder; -import com.mojang.blaze3d.vertex.BufferUploader; -import com.mojang.blaze3d.vertex.DefaultVertexFormat; -import com.mojang.blaze3d.vertex.MeshData; -import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.blaze3d.vertex.Tesselator; -import com.mojang.blaze3d.vertex.VertexFormat; -import com.mojang.blaze3d.vertex.VertexSorting; -import java.util.ArrayList; -import java.util.Collections; -import java.util.IdentityHashMap; -import java.util.List; -import java.util.Set; -import net.minecraft.client.Camera; -import net.minecraft.client.DeltaTracker; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.GameRenderer; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.ShaderInstance; -import net.minecraft.client.renderer.culling.Frustum; -import net.minecraft.util.Mth; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.Vec3; -import org.joml.Matrix4f; -import org.joml.Matrix4fStack; -import org.joml.Quaternionf; -import org.joml.Vector3f; -import org.joml.Vector4f; -import org.lwjgl.opengl.GL11; - -public final class PortalGunPortalViewRenderer { - private static final int MAX_VIEW_LEVELS = 2; - private static final double PORTAL_SEARCH_RADIUS = 128.0D; - private static final int PORTAL_TARGET_FILTER = 9729; - private static final double SURFACE_OFFSET = 0.04D; - private static final double EXIT_CLIP_OFFSET = 0.01D; - private static final int APERTURE_SEGMENTS = 32; - private static final double APERTURE_RIM_FRACTION = 0.92D; - private static TextureTarget offscreenTarget; - private static ShaderInstance portalViewShader; - private static boolean renderingPortalView; - private static boolean loggedMissingPortalViewShader; - private static long lastRenderFailureTick = Long.MIN_VALUE; - - private PortalGunPortalViewRenderer() { - } - - public static void setPortalViewShader(ShaderInstance shader) { - portalViewShader = shader; - } - - public static void clearPortalViewShader() { - portalViewShader = null; - } - - public static boolean isEnabled() { - return AntarchySettings.portalGunSeeThroughPortals(); - } - - public static void releaseTargets() { - PortalGunPortalVisibilityQueries.clear(); - PortalGunPortalSkyQueries.clear(); - PortalGunPortalSectionViews.clear(); - if (offscreenTarget != null) { - offscreenTarget.destroyBuffers(); - offscreenTarget = null; - } - } - - public static void render(Camera camera, Matrix4f poseMatrix, Matrix4f projectionMatrix, DeltaTracker tickCounter) { - if (renderingPortalView) { - return; - } - renderHiddenOutlines(camera, poseMatrix, projectionMatrix, tickCounter); - if (isEnabled()) { - renderViews(camera, poseMatrix, projectionMatrix, tickCounter); - } - } - - private static void renderHiddenOutlines(Camera camera, Matrix4f poseMatrix, Matrix4f projectionMatrix, DeltaTracker tickCounter) { - Minecraft minecraft = Minecraft.getInstance(); - if (minecraft.level == null || camera == null || poseMatrix == null || projectionMatrix == null || tickCounter == null) { - return; - } - try { - minecraft.getMainRenderTarget().bindWrite(true); - PortalGunPortalRim.drawHiddenOutlines(minecraft, camera.getPosition(), new Matrix4f(poseMatrix), new Matrix4f(projectionMatrix), - tickCounter.getGameTimeDeltaPartialTick(true)); - } catch (RuntimeException exception) { - logRenderFailure(minecraft, exception); - } - } - - private static void renderViews(Camera camera, Matrix4f poseMatrix, Matrix4f projectionMatrix, DeltaTracker tickCounter) { - PortalRenderWatchdog.frame(); - Minecraft minecraft = Minecraft.getInstance(); - if (minecraft.level == null || minecraft.gameRenderer == null || camera == null || poseMatrix == null || projectionMatrix == null || tickCounter == null) { - return; - } - Entity cameraEntity = minecraft.getCameraEntity(); - if (cameraEntity == null) { - return; - } - Vec3 cameraPos = camera.getPosition(); - Matrix4f rootViewMatrix = new Matrix4f(poseMatrix); - Matrix4f rootProjection = new Matrix4f(projectionMatrix); - float partialTick = tickCounter.getGameTimeDeltaPartialTick(true); - RenderTarget mainTarget = minecraft.getMainRenderTarget(); - int width = mainTarget.width; - int height = mainTarget.height; - - List portals = collectPortals(minecraft, cameraPos); - if (portals.isEmpty()) { - return; - } - List candidates = new ArrayList<>(); - for (PortalGunPortalEntity portal : portals) { - boolean moon = portal.isMoonPortal(); - PortalGunPortalEntity linked = moon ? null : portal.getLinkedPortal(); - if (!moon && (linked == null || !linked.isAlive()) || !portal.shouldRenderFront(cameraPos)) { - continue; - } - ScreenClip clip = computeScreenClip(cameraPos, rootViewMatrix, rootProjection, portal, partialTick, width, height); - if (clip != null) { - candidates.add(new RootCandidate(portal, linked, clip)); - } - } - candidates.sort((left, right) -> Integer.compare(right.clip().area(), left.clip().area())); - int maxRootViews = AntarchySettings.portalGunMaxLiveViews(); - if (candidates.size() > maxRootViews) { - candidates = candidates.subList(0, maxRootViews); - } - if (candidates.isEmpty()) { - return; - } - - boolean directStencil = PortalStencilTarget.supportsDirect(mainTarget); - if (!directStencil && portalViewShader == null) { - if (!loggedMissingPortalViewShader) { - loggedMissingPortalViewShader = true; - Antarchy.LOGGER.error("Portal gun destination view shader is unavailable; skipping offscreen portal rendering"); - } - return; - } - Matrix4f cameraToWorld = new Matrix4f(rootViewMatrix).invert(); - Vector3f rootLook = cameraToWorld.transformDirection(new Vector3f(0.0F, 0.0F, -1.0F)).normalize(); - Vector3f rootUp = cameraToWorld.transformDirection(new Vector3f(0.0F, 1.0F, 0.0F)).normalize(); - RenderContext rootContext = new RenderContext(cameraPos, new Vec3(rootLook), new Vec3(rootUp), rootViewMatrix); - ViewBudget budget = new ViewBudget(maxRootViews * 2); - PortalRenderWatchdog.portalViewDrawn(); - renderingPortalView = true; - RenderSystem.backupProjectionMatrix(); - try { - if (directStencil) { - PortalStencilTarget.beginFrame(mainTarget); - } - for (RootCandidate candidate : candidates) { - if (!budget.tryReserve()) { - break; - } - try { - if (candidate.linked() == null) { - if (directStencil) { - renderMoonViewDirect(minecraft, partialTick, rootContext, rootProjection, candidate.portal(), candidate.clip()); - } else { - renderMoonViewOffscreen(minecraft, partialTick, rootContext, rootProjection, candidate.portal(), candidate.clip()); - } - } else if (directStencil) { - renderViewDirect(minecraft, cameraEntity, partialTick, rootContext, rootProjection, rootProjection, - candidate.portal(), candidate.linked(), 0, candidate.clip(), null, budget); - } else { - renderViewOffscreen(minecraft, cameraEntity, partialTick, rootContext, rootProjection, - candidate.portal(), candidate.linked(), candidate.clip()); - } - } catch (RuntimeException exception) { - logRenderFailure(minecraft, exception); - if (directStencil) { - PortalStencilTarget.beginFrame(mainTarget); - } - } - } - } catch (RuntimeException exception) { - logRenderFailure(minecraft, exception); - } finally { - try { - if (directStencil) { - PortalStencilTarget.endFrame(); - } - restorePortalDrawState(); - mainTarget.bindWrite(true); - minecraft.getEntityRenderDispatcher().prepare(minecraft.level, camera, minecraft.crosshairPickEntity); - minecraft.getBlockEntityRenderDispatcher().prepare(minecraft.level, camera, minecraft.hitResult); - } catch (RuntimeException exception) { - logRenderFailure(minecraft, exception); - } finally { - RenderSystem.restoreProjectionMatrix(); - renderingPortalView = false; - } - } - } - - private static void renderViewDirect(Minecraft minecraft, Entity cameraEntity, float partialTick, RenderContext context, - Matrix4f rootProjection, Matrix4f parentProjection, - PortalGunPortalEntity source, PortalGunPortalEntity destination, - int parentLevel, ScreenClip clip, ScreenClip parentClip, ViewBudget budget) { - PortalGunWorldPortalShape exit = destination.getWorldPortalShape(); - if (!PortalTerrain.canView(minecraft, exit.center())) { - return; - } - boolean root = parentLevel == 0; - boolean visible = !root || PortalGunPortalVisibilityQueries.shouldRender(source.getUUID(), destination.getUUID()); - RenderTarget target = minecraft.getMainRenderTarget(); - PortalStencilTarget.pushAperture(parentLevel, () -> { - boolean queryStarted = root && PortalGunPortalVisibilityQueries.begin(source.getUUID(), destination.getUUID()); - try { - drawPortalMask(context.cameraPos(), context.viewMatrix(), parentProjection, source, partialTick); - } finally { - if (root) { - PortalGunPortalVisibilityQueries.end(source.getUUID(), destination.getUUID(), queryStarted); - } - } - }); - try { - if (!visible) { - return; - } - RenderContext transformed = transformContext(context, source, destination); - Matrix4f clippedProjection = applyPortalClipPlane(rootProjection, transformed, destination); - RenderSystem.enableScissor(clip.x(), clip.y(), clip.width(), clip.height()); - renderScene(minecraft, cameraEntity, partialTick, transformed, rootProjection, clippedProjection, - source, destination, clip, target.width, target.height, parentLevel + 1); - PortalGunPortalRim.drawHiddenOutlines(minecraft, transformed.cameraPos(), transformed.viewMatrix(), clippedProjection, - partialTick, destination); - if (parentLevel + 1 < MAX_VIEW_LEVELS) { - renderNestedViews(minecraft, cameraEntity, partialTick, transformed, rootProjection, clippedProjection, - destination, parentLevel + 1, clip, budget, target.width, target.height); - } - } finally { - try { - if (visible) { - PortalStencilTarget.drawInside(parentLevel + 1); - PortalGunPortalRim.drawOverView(source, context.cameraPos(), context.viewMatrix(), parentProjection, partialTick); - } - } finally { - PortalStencilTarget.popAperture(parentLevel, - () -> restorePortalApertureDepth(context.cameraPos(), context.viewMatrix(), parentProjection, source, partialTick)); - } - if (parentClip == null) { - RenderSystem.disableScissor(); - } else { - RenderSystem.enableScissor(parentClip.x(), parentClip.y(), parentClip.width(), parentClip.height()); - } - } - } - - private static void renderMoonViewDirect(Minecraft minecraft, float partialTick, RenderContext context, - Matrix4f rootProjection, PortalGunPortalEntity source, ScreenClip clip) { - PortalStencilTarget.pushAperture(0, () -> drawPortalMask(context.cameraPos(), context.viewMatrix(), rootProjection, source, partialTick)); - try { - RenderSystem.enableScissor(clip.x(), clip.y(), clip.width(), clip.height()); - PortalGunMoonViewRenderer.render(minecraft, source.getWorldPortalShape(), context.cameraPos(), context.look(), context.up(), - rootProjection, partialTick); - } finally { - try { - PortalStencilTarget.drawInside(1); - PortalGunPortalRim.drawOverView(source, context.cameraPos(), context.viewMatrix(), rootProjection, partialTick); - } finally { - PortalStencilTarget.popAperture(0, - () -> restorePortalApertureDepth(context.cameraPos(), context.viewMatrix(), rootProjection, source, partialTick)); - RenderSystem.disableScissor(); - } - } - } - - private static void renderMoonViewOffscreen(Minecraft minecraft, float partialTick, RenderContext context, - Matrix4f rootProjection, PortalGunPortalEntity source, ScreenClip clip) { - RenderTarget mainTarget = minecraft.getMainRenderTarget(); - TextureTarget target = ensureOffscreenTarget(mainTarget.width, mainTarget.height); - MinecraftMainRenderTargetAccessor targetAccessor = (MinecraftMainRenderTargetAccessor) minecraft; - targetAccessor.antarchy$setMainRenderTarget(target); - try { - target.bindWrite(true); - RenderSystem.disableScissor(); - target.clear(Minecraft.ON_OSX); - target.bindWrite(true); - RenderSystem.enableScissor(clip.x(), clip.y(), clip.width(), clip.height()); - PortalGunMoonViewRenderer.render(minecraft, source.getWorldPortalShape(), context.cameraPos(), context.look(), context.up(), - rootProjection, partialTick); - } finally { - RenderSystem.disableScissor(); - targetAccessor.antarchy$setMainRenderTarget(mainTarget); - mainTarget.bindWrite(true); - } - RenderSystem.setProjectionMatrix(rootProjection, VertexSorting.DISTANCE_TO_ORIGIN); - drawPortalComposite(context.cameraPos(), context.viewMatrix(), rootProjection, source, partialTick, target.getColorTextureId()); - } - - private static void renderNestedViews(Minecraft minecraft, Entity cameraEntity, float partialTick, RenderContext viewContext, - Matrix4f rootProjection, Matrix4f viewProjection, PortalGunPortalEntity exit, - int level, ScreenClip viewClip, ViewBudget budget, int width, int height) { - PortalGunWorldPortalShape exitShape = exit.getWorldPortalShape(); - for (PortalGunPortalEntity child : collectPortals(minecraft, viewContext.cameraPos())) { - if (!budget.hasRemaining()) { - return; - } - PortalGunPortalEntity childLinked = child.getLinkedPortal(); - if (child == exit || childLinked == null || !childLinked.isAlive() - || !child.shouldRenderFront(viewContext.cameraPos()) - || !exitShape.intersectsFront(child.getBoundingBox(), 0.0D)) { - continue; - } - ScreenClip childClip = computeScreenClip(viewContext.cameraPos(), viewContext.viewMatrix(), viewProjection, - child, partialTick, width, height); - childClip = childClip == null ? null : childClip.intersect(viewClip); - if (childClip == null || !budget.tryReserve()) { - continue; - } - renderViewDirect(minecraft, cameraEntity, partialTick, viewContext, rootProjection, viewProjection, - child, childLinked, level, childClip, viewClip, budget); - } - } - - private static void renderViewOffscreen(Minecraft minecraft, Entity cameraEntity, float partialTick, RenderContext context, - Matrix4f rootProjection, PortalGunPortalEntity source, - PortalGunPortalEntity destination, ScreenClip clip) { - if (!PortalTerrain.canView(minecraft, destination.getWorldPortalShape().center())) { - return; - } - RenderTarget mainTarget = minecraft.getMainRenderTarget(); - TextureTarget target = ensureOffscreenTarget(mainTarget.width, mainTarget.height); - RenderContext transformed = transformContext(context, source, destination); - Matrix4f clippedProjection = applyPortalClipPlane(rootProjection, transformed, destination); - MinecraftMainRenderTargetAccessor targetAccessor = (MinecraftMainRenderTargetAccessor) minecraft; - targetAccessor.antarchy$setMainRenderTarget(target); - try { - target.bindWrite(true); - RenderSystem.disableScissor(); - target.clear(Minecraft.ON_OSX); - target.bindWrite(true); - RenderSystem.enableScissor(clip.x(), clip.y(), clip.width(), clip.height()); - renderScene(minecraft, cameraEntity, partialTick, transformed, rootProjection, clippedProjection, - source, destination, clip, target.width, target.height, 1); - PortalGunPortalRim.drawHiddenOutlines(minecraft, transformed.cameraPos(), transformed.viewMatrix(), clippedProjection, - partialTick, destination); - } finally { - RenderSystem.disableScissor(); - targetAccessor.antarchy$setMainRenderTarget(mainTarget); - mainTarget.bindWrite(true); - } - RenderSystem.setProjectionMatrix(rootProjection, VertexSorting.DISTANCE_TO_ORIGIN); - drawPortalComposite(context.cameraPos(), context.viewMatrix(), rootProjection, source, partialTick, target.getColorTextureId()); - } - - private static void renderScene(Minecraft minecraft, Entity cameraEntity, float partialTick, RenderContext transformed, - Matrix4f rootProjection, Matrix4f clippedProjection, - PortalGunPortalEntity source, PortalGunPortalEntity destination, - ScreenClip clip, int width, int height, int level) { - PortalGunWorldPortalShape exit = destination.getWorldPortalShape(); - PortalCamera portalCamera = new PortalCamera(); - portalCamera.setup(minecraft.level, cameraEntity, partialTick, transformed.cameraPos(), transformed.look(), transformed.up()); - Frustum frustum = new Frustum(transformed.viewMatrix(), cropProjectionToScreenClip(rootProjection, clip, width, height)); - frustum.prepare(transformed.cameraPos().x, transformed.cameraPos().y, transformed.cameraPos().z); - PortalGunPortalRenderState.pushPortalView(new PortalGunPortalRenderState.PortalRenderContext( - source.getWorldPortalShape(), exit, transformed.cameraPos(), transformed.look(), transformed.up(), - transformed.viewMatrix(), clippedProjection, level, false, destination.getUUID())); - try { - PortalTerrain terrain = PortalTerrain.prepare(minecraft, destination.getUUID(), exit.center(), exit.normal(), frustum); - PortalGunPortalSceneRenderer.render(minecraft, portalCamera, partialTick, transformed.viewMatrix(), clippedProjection, - rootProjection, frustum, terrain, - poseStack -> renderCrossingEntities(minecraft, transformed.cameraPos(), partialTick, source, destination, poseStack), - source.getUUID(), destination.getUUID(), level); - } finally { - PortalGunPortalRenderState.popPortalView(false); - } - } - - private static List collectPortals(Minecraft minecraft, Vec3 cameraPos) { - List portals = new ArrayList<>(); - for (PortalGunPortalEntity portal : com.craisinlord.antarchy.content.portalgun.PortalGunPortalRegistry.all(minecraft.level)) { - if (portal.isAlive() && portal.distanceToSqr(cameraPos) <= PORTAL_SEARCH_RADIUS * PORTAL_SEARCH_RADIUS) { - portals.add(portal); - } - } - portals.sort((left, right) -> Double.compare(left.distanceToSqr(cameraPos), right.distanceToSqr(cameraPos))); - return portals; - } - - private static void logRenderFailure(Minecraft minecraft, RuntimeException exception) { - long gameTime = minecraft.level == null ? Long.MIN_VALUE : minecraft.level.getGameTime(); - if (lastRenderFailureTick == Long.MIN_VALUE || gameTime == Long.MIN_VALUE || gameTime - lastRenderFailureTick >= 100L) { - lastRenderFailureTick = gameTime; - Antarchy.LOGGER.error("Portal gun portal view render failed", exception); - } - } - - private static TextureTarget ensureOffscreenTarget(int width, int height) { - if (offscreenTarget == null) { - offscreenTarget = new TextureTarget(width, height, true, Minecraft.ON_OSX); - offscreenTarget.setClearColor(0.0F, 0.0F, 0.0F, 1.0F); - } else if (offscreenTarget.width != width || offscreenTarget.height != height) { - offscreenTarget.resize(width, height, Minecraft.ON_OSX); - } - offscreenTarget.setFilterMode(PORTAL_TARGET_FILTER); - return offscreenTarget; - } - - private static RenderContext transformContext(RenderContext context, PortalGunPortalEntity source, PortalGunPortalEntity destination) { - PortalGunWorldPortalShape sourceShape = source.getWorldPortalShape(); - PortalGunWorldPortalShape destinationShape = destination.getWorldPortalShape(); - Vec3 relativeEye = context.cameraPos().subtract(sourceShape.center()); - Vec3 destinationEye = destinationShape.center().add(PortalGunTransformUtil.transformPosition(sourceShape, destinationShape, relativeEye)); - Vec3 look = PortalGunTransformUtil.transformVector(sourceShape, destinationShape, context.look()).normalize(); - Vec3 up = PortalGunTransformUtil.transformVector(sourceShape, destinationShape, context.up()).normalize(); - Matrix4f viewMatrix = new Matrix4f().rotation(PortalGunTransformUtil.orientationQuaternion(look, up).conjugate(new Quaternionf())); - return new RenderContext(destinationEye, look, up, viewMatrix); - } - - private static Matrix4f applyPortalClipPlane(Matrix4f projection, RenderContext context, PortalGunPortalEntity destination) { - PortalGunWorldPortalShape exit = destination.getWorldPortalShape(); - return PortalGunProjectionUtil.clipAtExit(projection, context.cameraPos(), context.look(), context.up(), - exit.center().add(exit.normal().scale(EXIT_CLIP_OFFSET)), exit.normal()); - } - - private static ScreenClip computeScreenClip(Vec3 cameraPos, Matrix4f viewMatrix, Matrix4f projectionMatrix, - PortalGunPortalEntity portal, float partialTick, int width, int height) { - List clipVertices = projectPortalPolygon(new Matrix4f(projectionMatrix).mul(viewMatrix), cameraPos, portal, partialTick); - if (clipVertices.size() < 3) { - return null; - } - float minX = Float.POSITIVE_INFINITY; - float minY = Float.POSITIVE_INFINITY; - float maxX = Float.NEGATIVE_INFINITY; - float maxY = Float.NEGATIVE_INFINITY; - for (Vector4f projected : clipVertices) { - float invW = 1.0F / projected.w; - float screenX = (projected.x * invW * 0.5F + 0.5F) * width; - float screenY = (projected.y * invW * 0.5F + 0.5F) * height; - minX = Math.min(minX, screenX); - minY = Math.min(minY, screenY); - maxX = Math.max(maxX, screenX); - maxY = Math.max(maxY, screenY); - } - if (maxX <= 0.0F || minX >= width || maxY <= 0.0F || minY >= height) { - return null; - } - int x = Mth.clamp((int) Math.floor(minX), 0, width - 1); - int maxClipX = Mth.clamp((int) Math.ceil(maxX), x + 1, width); - int y = Mth.clamp((int) Math.floor(minY), 0, height - 1); - int maxClipY = Mth.clamp((int) Math.ceil(maxY), y + 1, height); - return new ScreenClip(x, y, maxClipX - x, maxClipY - y); - } - - private static Matrix4f cropProjectionToScreenClip(Matrix4f projectionMatrix, ScreenClip clip, int width, int height) { - float left = (float) (clip.x() * 2.0D / width - 1.0D); - float right = (float) ((clip.x() + clip.width()) * 2.0D / width - 1.0D); - float bottom = (float) (clip.y() * 2.0D / height - 1.0D); - float top = (float) ((clip.y() + clip.height()) * 2.0D / height - 1.0D); - float widthNdc = Math.max(1.0E-5F, right - left); - float heightNdc = Math.max(1.0E-5F, top - bottom); - return new Matrix4f() - .translate(-(right + left) / widthNdc, -(top + bottom) / heightNdc, 0.0F) - .scale(2.0F / widthNdc, 2.0F / heightNdc, 1.0F) - .mul(projectionMatrix); - } - - private static List clipPolygon(List vertices, boolean nearPlane) { - if (vertices.isEmpty()) { - return vertices; - } - List clipped = new ArrayList<>(vertices.size() + 2); - Vector4f previous = vertices.get(vertices.size() - 1); - float previousDistance = clipPlaneDistance(previous, nearPlane); - for (Vector4f current : vertices) { - float currentDistance = clipPlaneDistance(current, nearPlane); - boolean previousInside = previousDistance >= 0.0F; - boolean currentInside = currentDistance >= 0.0F; - if (previousInside != currentInside) { - float amount = previousDistance / (previousDistance - currentDistance); - clipped.add(new Vector4f( - previous.x + (current.x - previous.x) * amount, - previous.y + (current.y - previous.y) * amount, - previous.z + (current.z - previous.z) * amount, - previous.w + (current.w - previous.w) * amount - )); - } - if (currentInside) { - clipped.add(new Vector4f(current)); - } - previous = current; - previousDistance = currentDistance; - } - return clipped; - } - - private static float clipPlaneDistance(Vector4f vertex, boolean nearPlane) { - return nearPlane ? vertex.z + vertex.w : vertex.w - 0.001F; - } - - private static List projectPortalPolygon(Matrix4f combined, Vec3 cameraPos, PortalGunPortalEntity portal, float partialTick) { - Vec3[] corners = apertureOutline(portal, partialTick); - List polygon = new ArrayList<>(corners.length); - for (Vec3 corner : corners) { - Vec3 relative = corner.subtract(cameraPos); - polygon.add(new Vector4f((float) relative.x, (float) relative.y, (float) relative.z, 1.0F).mul(combined)); - } - polygon = clipPolygon(polygon, false); - return clipPolygon(polygon, true); - } - - static Vec3[] apertureOutline(PortalGunPortalEntity portal, float partialTick) { - float scale = portal.getPortalVisualScale(partialTick); - PortalGunWorldPortalShape shape = portal.getWorldPortalShape().scaleAperture(scale); - double radiusHorizontal = Math.min(shape.halfWidth(), (shape.halfWidth() + PortalGunPortalRim.EXTRA_WIDTH * scale) * APERTURE_RIM_FRACTION); - double radiusVertical = Math.min(shape.halfHeight(), (shape.halfHeight() + PortalGunPortalRim.EXTRA_HEIGHT * scale) * APERTURE_RIM_FRACTION); - return shape.getOutline(SURFACE_OFFSET, APERTURE_SEGMENTS, radiusHorizontal, radiusVertical); - } - - private static MeshData buildAperture(Vec3 cameraPos, Matrix4f viewMatrix, Matrix4f projectionMatrix, - PortalGunPortalEntity portal, float partialTick, boolean withScreenUv) { - List polygon = projectPortalPolygon(new Matrix4f(projectionMatrix).mul(viewMatrix), cameraPos, portal, partialTick); - if (polygon.size() < 3) { - return null; - } - BufferBuilder buffer = Tesselator.getInstance().begin(VertexFormat.Mode.TRIANGLES, - withScreenUv ? DefaultVertexFormat.POSITION_TEX : DefaultVertexFormat.POSITION); - for (int index = 1; index + 1 < polygon.size(); index++) { - addClipVertex(buffer, polygon.get(0), withScreenUv); - addClipVertex(buffer, polygon.get(index), withScreenUv); - addClipVertex(buffer, polygon.get(index + 1), withScreenUv); - } - return buffer.build(); - } - - private static void addClipVertex(BufferBuilder buffer, Vector4f clipPosition, boolean withScreenUv) { - float inverseW = 1.0F / clipPosition.w(); - float ndcX = clipPosition.x() * inverseW; - float ndcY = clipPosition.y() * inverseW; - float ndcZ = clipPosition.z() * inverseW; - if (withScreenUv) { - buffer.addVertex(ndcX, ndcY, ndcZ).setUv(ndcX * 0.5F + 0.5F, ndcY * 0.5F + 0.5F); - } else { - buffer.addVertex(ndcX, ndcY, ndcZ); - } - } - - private static void drawPortalMask(Vec3 cameraPos, Matrix4f viewMatrix, Matrix4f projectionMatrix, PortalGunPortalEntity portal, float partialTick) { - drawClipSpaceMesh(buildAperture(cameraPos, viewMatrix, projectionMatrix, portal, partialTick, false)); - } - - private static void restorePortalApertureDepth(Vec3 cameraPos, Matrix4f viewMatrix, Matrix4f projectionMatrix, - PortalGunPortalEntity portal, float partialTick) { - MeshData mesh = buildAperture(cameraPos, viewMatrix, projectionMatrix, portal, partialTick, false); - int previousDepthFunction = GL11.glGetInteger(GL11.GL_DEPTH_FUNC); - GL11.glDepthFunc(GL11.GL_ALWAYS); - try { - drawClipSpaceMesh(mesh); - } finally { - GL11.glDepthFunc(previousDepthFunction); - } - } - - private static void drawClipSpaceMesh(MeshData mesh) { - if (mesh == null) { - return; - } - Matrix4fStack modelViewStack = RenderSystem.getModelViewStack(); - Matrix4f previousProjection = new Matrix4f(RenderSystem.getProjectionMatrix()); - VertexSorting previousSorting = RenderSystem.getVertexSorting(); - modelViewStack.pushMatrix(); - try { - RenderSystem.disableCull(); - RenderSystem.disableBlend(); - modelViewStack.identity(); - RenderSystem.applyModelViewMatrix(); - RenderSystem.setProjectionMatrix(new Matrix4f(), previousSorting); - RenderSystem.setShader(GameRenderer::getPositionShader); - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - BufferUploader.drawWithShader(mesh); - } finally { - RenderSystem.setProjectionMatrix(previousProjection, previousSorting); - modelViewStack.popMatrix(); - RenderSystem.applyModelViewMatrix(); - RenderSystem.enableCull(); - } - } - - private static void drawPortalComposite(Vec3 cameraPos, Matrix4f viewMatrix, Matrix4f projectionMatrix, - PortalGunPortalEntity portal, float partialTick, int textureId) { - MeshData mesh = buildAperture(cameraPos, viewMatrix, projectionMatrix, portal, partialTick, true); - if (mesh == null || portalViewShader == null) { - if (mesh != null) { - mesh.close(); - } - return; - } - Matrix4fStack modelViewStack = RenderSystem.getModelViewStack(); - Matrix4f previousProjection = new Matrix4f(RenderSystem.getProjectionMatrix()); - VertexSorting previousSorting = RenderSystem.getVertexSorting(); - modelViewStack.pushMatrix(); - try { - RenderSystem.disableBlend(); - RenderSystem.depthMask(false); - RenderSystem.enableDepthTest(); - RenderSystem.disableCull(); - modelViewStack.identity(); - RenderSystem.applyModelViewMatrix(); - RenderSystem.setProjectionMatrix(new Matrix4f(), previousSorting); - portalViewShader.setSampler("Sampler0", textureId); - RenderSystem.setShader(() -> portalViewShader); - RenderSystem.setShaderTexture(0, textureId); - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - BufferUploader.drawWithShader(mesh); - } finally { - RenderSystem.setProjectionMatrix(previousProjection, previousSorting); - modelViewStack.popMatrix(); - RenderSystem.applyModelViewMatrix(); - restorePortalDrawState(); - } - } - - private static void renderCrossingEntities(Minecraft minecraft, Vec3 cameraPos, float partialTick, - PortalGunPortalEntity sourcePortal, PortalGunPortalEntity destinationPortal, PoseStack poseStack) { - MultiBufferSource.BufferSource bufferSource = PortalGunPortalSceneRenderer.bufferSource(); - List entities = minecraft.level.getEntities((Entity) null, sourcePortal.getWorldPortalShape().getBoundsForCulling(), - entity -> isCrossing(entity, sourcePortal, destinationPortal)); - Set rendered = Collections.newSetFromMap(new IdentityHashMap<>()); - try { - for (Entity entity : entities) { - renderCrossingEntityTree(minecraft, cameraPos, partialTick, sourcePortal, destinationPortal, entity, poseStack, bufferSource, rendered); - } - } finally { - bufferSource.endBatch(); - } - } - - private static void renderCrossingEntityTree(Minecraft minecraft, Vec3 cameraPos, float partialTick, PortalGunPortalEntity sourcePortal, - PortalGunPortalEntity destinationPortal, Entity entity, PoseStack poseStack, - MultiBufferSource.BufferSource bufferSource, Set rendered) { - if (!isCrossing(entity, sourcePortal, destinationPortal) || !rendered.add(entity)) { - return; - } - PortalGunEntityTransformationStack transformationStack = new PortalGunEntityTransformationStack(entity); - transformationStack.push(); - try { - Vec3 position = transformationStack.moveEntity(sourcePortal, destinationPortal, partialTick); - float yaw = Mth.rotLerp(partialTick, entity.yRotO, entity.getYRot()); - int light = minecraft.getEntityRenderDispatcher().getPackedLightCoords(entity, partialTick); - PortalGunPortalRenderState.pushDestinationShape(destinationPortal.getWorldPortalShape()); - try { - minecraft.getEntityRenderDispatcher().render(entity, position.x - cameraPos.x, position.y - cameraPos.y, - position.z - cameraPos.z, yaw, partialTick, poseStack, bufferSource, light); - } finally { - PortalGunPortalRenderState.popDestinationShape(); - } - } finally { - transformationStack.pop(); - } - for (Entity passenger : entity.getPassengers()) { - renderCrossingEntityTree(minecraft, cameraPos, partialTick, sourcePortal, destinationPortal, passenger, poseStack, bufferSource, rendered); - } - } - - private static boolean isCrossing(Entity entity, PortalGunPortalEntity sourcePortal, PortalGunPortalEntity destinationPortal) { - return entity != null - && entity.isAlive() - && !(entity instanceof PortalGunPortalEntity) - && entity != sourcePortal - && entity != destinationPortal - && entity != Minecraft.getInstance().getCameraEntity() - && sourcePortal.intersectsEntityBounds(entity); - } - - private static void restorePortalDrawState() { - RenderSystem.disableScissor(); - RenderSystem.enableCull(); - RenderSystem.enableDepthTest(); - RenderSystem.depthMask(true); - RenderSystem.colorMask(true, true, true, true); - RenderSystem.defaultBlendFunc(); - RenderSystem.disableBlend(); - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - } - - private static final class PortalCamera extends Camera { - private void setup(net.minecraft.world.level.BlockGetter level, Entity cameraEntity, float partialTick, Vec3 position, Vec3 look, Vec3 up) { - super.setup(level, cameraEntity, true, false, partialTick); - Vec3 normalizedLook = look.normalize(); - Vec3 normalizedUp = up.subtract(normalizedLook.scale(up.dot(normalizedLook))).normalize(); - this.setPosition(position); - this.setRotation(PortalGunTransformUtil.yawFromLook(normalizedLook), PortalGunTransformUtil.pitchFromLook(normalizedLook)); - Quaternionf orientation = PortalGunTransformUtil.orientationQuaternion(normalizedLook, normalizedUp); - this.rotation().set(orientation); - CameraBasisAccessor basis = (CameraBasisAccessor) (Object) this; - basis.antarchy$getForwards().set(0.0F, 0.0F, -1.0F).rotate(orientation); - basis.antarchy$getUp().set(0.0F, 1.0F, 0.0F).rotate(orientation); - basis.antarchy$getLeft().set(-1.0F, 0.0F, 0.0F).rotate(orientation); - } - } - - private record RenderContext(Vec3 cameraPos, Vec3 look, Vec3 up, Matrix4f viewMatrix) { - } - - private record RootCandidate(PortalGunPortalEntity portal, PortalGunPortalEntity linked, ScreenClip clip) { - } - - private static final class ViewBudget { - private int remaining; - - private ViewBudget(int maximumViews) { - this.remaining = maximumViews; - } - - private boolean tryReserve() { - if (this.remaining <= 0) { - return false; - } - this.remaining--; - return true; - } - - private boolean hasRemaining() { - return this.remaining > 0; - } - } - - private record ScreenClip(int x, int y, int width, int height) { - private int area() { - return this.width * this.height; - } - - private ScreenClip intersect(ScreenClip other) { - int minX = Math.max(this.x, other.x); - int minY = Math.max(this.y, other.y); - int maxX = Math.min(this.x + this.width, other.x + other.width); - int maxY = Math.min(this.y + this.height, other.y + other.height); - return maxX <= minX || maxY <= minY ? null : new ScreenClip(minX, minY, maxX - minX, maxY - minY); - } - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunPortalVisibilityQueries.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunPortalVisibilityQueries.java deleted file mode 100644 index 25db1fa9..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalGunPortalVisibilityQueries.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.craisinlord.antarchy.content.client.renderer; - -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.UUID; -import org.lwjgl.opengl.GL15; - -public final class PortalGunPortalVisibilityQueries { - private static final int MAX_ENTRIES = 128; - private static final LinkedHashMap QUERIES = new LinkedHashMap<>(16, 0.75F, true); - - private PortalGunPortalVisibilityQueries() { - } - - public static boolean shouldRender(UUID source, UUID destination) { - QueryState state = QUERIES.get(new Pair(source, destination)); - if (state == null) { - return true; - } - if (state.inFlight && GL15.glGetQueryObjecti(state.query, GL15.GL_QUERY_RESULT_AVAILABLE) != 0) { - state.visible = GL15.glGetQueryObjecti(state.query, GL15.GL_QUERY_RESULT) != 0; - state.hasResult = true; - state.inFlight = false; - } - return !state.hasResult || state.visible; - } - - public static boolean begin(UUID source, UUID destination) { - Pair pair = new Pair(source, destination); - QueryState state = QUERIES.computeIfAbsent(pair, key -> new QueryState(GL15.glGenQueries())); - if (state.inFlight || state.active) { - trim(); - return false; - } - state.active = true; - try { - GL15.glBeginQuery(GL15.GL_SAMPLES_PASSED, state.query); - } catch (RuntimeException | Error exception) { - state.active = false; - throw exception; - } - trim(); - return true; - } - - public static void end(UUID source, UUID destination, boolean started) { - if (!started) { - return; - } - QueryState state = QUERIES.get(new Pair(source, destination)); - if (state == null || !state.active) { - return; - } - GL15.glEndQuery(GL15.GL_SAMPLES_PASSED); - state.active = false; - state.inFlight = true; - } - - public static void clear() { - for (QueryState state : QUERIES.values()) { - GL15.glDeleteQueries(state.query); - } - QUERIES.clear(); - } - - private static void trim() { - Iterator> iterator = QUERIES.entrySet().iterator(); - while (QUERIES.size() > MAX_ENTRIES && iterator.hasNext()) { - QueryState state = iterator.next().getValue(); - if (!state.active) { - GL15.glDeleteQueries(state.query); - iterator.remove(); - } - } - } - - private record Pair(UUID source, UUID destination) { - } - - private static final class QueryState { - private final int query; - private boolean active; - private boolean inFlight; - private boolean hasResult; - private boolean visible = true; - - private QueryState(int query) { - this.query = query; - } - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalRenderWatchdog.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalRenderWatchdog.java deleted file mode 100644 index 849a54cb..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalRenderWatchdog.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.craisinlord.antarchy.content.client.renderer; - -import com.craisinlord.antarchy.Antarchy; - -final class PortalRenderWatchdog { - private static final long STALL_NANOS = 5_000_000_000L; - private static final long RECENT_PORTAL_NANOS = 10_000_000_000L; - private static volatile Thread renderThread; - private static volatile long lastFrameNanos; - private static volatile long lastPortalViewNanos = Long.MIN_VALUE; - private static volatile boolean reportedStall; - private static Thread watcher; - - private PortalRenderWatchdog() { - } - - static void frame() { - lastFrameNanos = System.nanoTime(); - reportedStall = false; - if (watcher == null) { - renderThread = Thread.currentThread(); - watcher = new Thread(PortalRenderWatchdog::watch, "Antarchy portal render watchdog"); - watcher.setDaemon(true); - watcher.start(); - } - } - - static void portalViewDrawn() { - lastPortalViewNanos = System.nanoTime(); - } - - private static void watch() { - while (true) { - try { - Thread.sleep(1000L); - } catch (InterruptedException exception) { - return; - } - long now = System.nanoTime(); - long lastFrame = lastFrameNanos; - long lastPortal = lastPortalViewNanos; - Thread thread = renderThread; - if (reportedStall || thread == null || lastPortal == Long.MIN_VALUE - || now - lastFrame < STALL_NANOS || lastFrame - lastPortal > RECENT_PORTAL_NANOS) { - continue; - } - reportedStall = true; - StringBuilder stack = new StringBuilder(); - for (StackTraceElement element : thread.getStackTrace()) { - stack.append("\n\tat ").append(element); - } - Antarchy.LOGGER.warn("Render thread has not finished a frame for {} ms after portal views were drawn (state {}). Stack:{}", - (now - lastFrame) / 1_000_000L, thread.getState(), stack); - } - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalSectionGraphMarker.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalSectionGraphMarker.java deleted file mode 100644 index 9d5e7588..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalSectionGraphMarker.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.craisinlord.antarchy.content.client.renderer; - -public interface PortalSectionGraphMarker { - void antarchy$markPortalGraph(); -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalStencilTarget.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalStencilTarget.java deleted file mode 100644 index a644722c..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalStencilTarget.java +++ /dev/null @@ -1,170 +0,0 @@ -package com.craisinlord.antarchy.content.client.renderer; - -import com.craisinlord.antarchy.Antarchy; -import com.mojang.blaze3d.pipeline.RenderTarget; -import com.mojang.blaze3d.systems.RenderSystem; -import java.util.Collections; -import java.util.IdentityHashMap; -import java.util.Map; -import java.util.Objects; -import org.lwjgl.opengl.GL11; -import org.lwjgl.opengl.GL30; - -public final class PortalStencilTarget { - private static final int GL_INCR = 7682; - private static final int GL_DECR = 7683; - private static final Map MAIN_STENCIL_ATTACHMENTS = Collections.synchronizedMap(new IdentityHashMap<>()); - private static final Map UNSUPPORTED_MAIN_TARGETS = Collections.synchronizedMap(new IdentityHashMap<>()); - - private PortalStencilTarget() { - } - - public static void prepareMainTarget(RenderTarget target) { - target.bindWrite(true); - if (stencilBits() > 0) { - UNSUPPORTED_MAIN_TARGETS.remove(target); - return; - } - if (Objects.equals(UNSUPPORTED_MAIN_TARGETS.get(target), target.frameBufferId)) { - return; - } - try { - java.lang.reflect.Method enabled = target.getClass().getMethod("isStencilEnabled"); - if (!Boolean.TRUE.equals(enabled.invoke(target))) { - target.getClass().getMethod("enableStencil").invoke(target); - } - } catch (ReflectiveOperationException ignored) { - } - target.bindWrite(true); - if (stencilBits() <= 0) { - try { - ensureMainStencilAttachment(target); - } catch (IllegalStateException exception) { - UNSUPPORTED_MAIN_TARGETS.put(target, target.frameBufferId); - Antarchy.LOGGER.debug("Portal gun direct stencil is unavailable ({}); using offscreen portal rendering", exception.getMessage()); - } - } - } - - public static boolean supportsDirect(RenderTarget target) { - target.bindWrite(true); - return stencilBits() > 0; - } - - public static void beginFrame(RenderTarget target) { - target.bindWrite(true); - RenderSystem.disableScissor(); - RenderSystem.stencilMask(0xFF); - RenderSystem.clearStencil(0); - GL11.glClear(GL11.GL_STENCIL_BUFFER_BIT); - GL11.glEnable(GL11.GL_STENCIL_TEST); - drawInside(0); - } - - public static void endFrame() { - GL11.glDisable(GL11.GL_STENCIL_TEST); - RenderSystem.stencilMask(0xFF); - RenderSystem.stencilFunc(GL11.GL_ALWAYS, 0, 0xFF); - RenderSystem.stencilOp(GL11.GL_KEEP, GL11.GL_KEEP, GL11.GL_KEEP); - RenderSystem.colorMask(true, true, true, true); - RenderSystem.depthMask(true); - RenderSystem.enableDepthTest(); - } - - public static void pushAperture(int parentLevel, Runnable drawAperture) { - GL11.glEnable(GL11.GL_STENCIL_TEST); - RenderSystem.stencilMask(0xFF); - RenderSystem.stencilFunc(GL11.GL_EQUAL, parentLevel, 0xFF); - RenderSystem.stencilOp(GL11.GL_KEEP, GL11.GL_KEEP, GL_INCR); - RenderSystem.colorMask(false, false, false, false); - RenderSystem.depthMask(false); - RenderSystem.enableDepthTest(); - try { - drawAperture.run(); - } finally { - drawInside(parentLevel + 1); - } - } - - public static void popAperture(int parentLevel, Runnable drawApertureDepth) { - GL11.glEnable(GL11.GL_STENCIL_TEST); - RenderSystem.stencilMask(0xFF); - RenderSystem.stencilFunc(GL11.GL_EQUAL, parentLevel + 1, 0xFF); - RenderSystem.stencilOp(GL11.GL_KEEP, GL11.GL_KEEP, GL_DECR); - RenderSystem.colorMask(false, false, false, false); - RenderSystem.depthMask(true); - RenderSystem.enableDepthTest(); - try { - drawApertureDepth.run(); - } finally { - drawInside(parentLevel); - } - } - - public static void drawInside(int level) { - RenderSystem.stencilMask(0x00); - RenderSystem.stencilFunc(GL11.GL_EQUAL, level, 0xFF); - RenderSystem.stencilOp(GL11.GL_KEEP, GL11.GL_KEEP, GL11.GL_KEEP); - RenderSystem.colorMask(true, true, true, true); - RenderSystem.depthMask(true); - RenderSystem.enableDepthTest(); - } - - public static void release(RenderTarget target) { - UNSUPPORTED_MAIN_TARGETS.remove(target); - Attachment mainAttachment = MAIN_STENCIL_ATTACHMENTS.remove(target); - if (mainAttachment != null) { - GL30.glDeleteRenderbuffers(mainAttachment.renderbuffer()); - } - } - - public static void clear() { - for (Attachment attachment : MAIN_STENCIL_ATTACHMENTS.values()) { - GL30.glDeleteRenderbuffers(attachment.renderbuffer()); - } - MAIN_STENCIL_ATTACHMENTS.clear(); - UNSUPPORTED_MAIN_TARGETS.clear(); - } - - private static void ensureMainStencilAttachment(RenderTarget target) { - Attachment attachment = MAIN_STENCIL_ATTACHMENTS.get(target); - if (attachment != null - && attachment.framebuffer() == target.frameBufferId - && attachment.width() == target.width - && attachment.height() == target.height) { - throw new IllegalStateException("Main render target stencil attachment has no stencil bits"); - } - if (attachment != null) { - GL30.glDeleteRenderbuffers(attachment.renderbuffer()); - MAIN_STENCIL_ATTACHMENTS.remove(target); - } - int previousRenderbuffer = GL11.glGetInteger(GL30.GL_RENDERBUFFER_BINDING); - int renderbuffer = GL30.glGenRenderbuffers(); - try { - GL30.glBindRenderbuffer(GL30.GL_RENDERBUFFER, renderbuffer); - GL30.glRenderbufferStorage(GL30.GL_RENDERBUFFER, GL30.GL_STENCIL_INDEX8, target.width, target.height); - GL30.glFramebufferRenderbuffer(GL30.GL_FRAMEBUFFER, GL30.GL_STENCIL_ATTACHMENT, GL30.GL_RENDERBUFFER, renderbuffer); - int status = GL30.glCheckFramebufferStatus(GL30.GL_FRAMEBUFFER); - if (status != GL30.GL_FRAMEBUFFER_COMPLETE) { - GL30.glFramebufferRenderbuffer(GL30.GL_FRAMEBUFFER, GL30.GL_STENCIL_ATTACHMENT, GL30.GL_RENDERBUFFER, 0); - throw new IllegalStateException("Main render target is incomplete with stencil attachment: 0x" + Integer.toHexString(status)); - } - MAIN_STENCIL_ATTACHMENTS.put(target, new Attachment(target.frameBufferId, renderbuffer, target.width, target.height)); - } catch (RuntimeException | Error exception) { - GL30.glDeleteRenderbuffers(renderbuffer); - throw exception; - } finally { - GL30.glBindRenderbuffer(GL30.GL_RENDERBUFFER, previousRenderbuffer); - } - } - - private static int stencilBits() { - int type = GL30.glGetFramebufferAttachmentParameteri(GL30.GL_FRAMEBUFFER, GL30.GL_STENCIL_ATTACHMENT, - GL30.GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE); - return type == GL11.GL_NONE ? 0 : GL30.glGetFramebufferAttachmentParameteri(GL30.GL_FRAMEBUFFER, - GL30.GL_STENCIL_ATTACHMENT, GL30.GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE); - } - - private record Attachment(int framebuffer, int renderbuffer, int width, int height) { - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalTerrain.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalTerrain.java deleted file mode 100644 index 3fede2fd..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/PortalTerrain.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.craisinlord.antarchy.content.client.renderer; - -import java.util.function.Consumer; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.RenderType; -import net.minecraft.client.renderer.culling.Frustum; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.phys.Vec3; -import org.joml.Matrix4f; - -public interface PortalTerrain { - static boolean canView(Minecraft minecraft, Vec3 exitCenter) { - return SodiumCompat.isLoaded() - ? com.craisinlord.antarchy.content.client.renderer.sodium.SodiumPortalTerrain.canView(minecraft, exitCenter) - : PortalGunPortalSectionViews.canView(minecraft, exitCenter); - } - - static PortalTerrain prepare(Minecraft minecraft, java.util.UUID exitId, Vec3 exitCenter, Vec3 exitNormal, Frustum frustum) { - return SodiumCompat.isLoaded() - ? com.craisinlord.antarchy.content.client.renderer.sodium.SodiumPortalTerrain.prepare(minecraft, frustum) - : VanillaPortalTerrain.prepare(minecraft, exitId, exitCenter, exitNormal, frustum); - } - - int sectionCount(); - - void begin(Minecraft minecraft); - - void end(Minecraft minecraft); - - void drawLayer(Minecraft minecraft, RenderType renderType, Vec3 cameraPosition, Matrix4f viewMatrix, Matrix4f projection); - - void forEachBlockEntity(Minecraft minecraft, Frustum frustum, Consumer consumer); -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/RoyalBeamRenderTypes.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/RoyalBeamRenderTypes.java deleted file mode 100644 index 51b2221f..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/RoyalBeamRenderTypes.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.craisinlord.antarchy.content.client.renderer; - -import com.mojang.blaze3d.vertex.DefaultVertexFormat; -import com.mojang.blaze3d.vertex.VertexFormat; -import net.minecraft.client.renderer.RenderStateShard; -import net.minecraft.client.renderer.RenderType; -import net.minecraft.resources.ResourceLocation; - -public class RoyalBeamRenderTypes extends RenderType { - public RoyalBeamRenderTypes(String name, VertexFormat format, VertexFormat.Mode mode, int bufferSize, - boolean affectsCrumbling, boolean sortOnUpload, Runnable setupState, Runnable clearState) { - super(name, format, mode, bufferSize, affectsCrumbling, sortOnUpload, setupState, clearState); - } - - public static RenderType beam(ResourceLocation texture) { - return create("tremorzilla_beam", DefaultVertexFormat.NEW_ENTITY, VertexFormat.Mode.QUADS, 256, true, true, - CompositeState.builder() - .setTextureState(new TextureStateShard(texture, false, false)) - .setShaderState(RenderStateShard.RENDERTYPE_ENERGY_SWIRL_SHADER) - .setTransparencyState(RenderStateShard.TRANSLUCENT_TRANSPARENCY) - .setCullState(RenderStateShard.NO_CULL) - .setLightmapState(RenderStateShard.LIGHTMAP) - .setOutputState(RenderStateShard.ITEM_ENTITY_TARGET) - .createCompositeState(false)); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/RoyalBossRenderer.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/RoyalBossRenderer.java index 2ba7b663..cae52e7f 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/RoyalBossRenderer.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/RoyalBossRenderer.java @@ -1,5 +1,6 @@ package com.craisinlord.antarchy.content.client.renderer; +import com.craisinlord.anthology.beam.client.BeamRenderTypes; import com.craisinlord.antarchy.content.client.model.RoyalBossModel; import com.craisinlord.antarchy.content.entity.royal.RoyalBossEntity; import com.craisinlord.antarchy.content.entity.royal.KingEntity; @@ -204,13 +205,13 @@ public class RoyalBossRenderer extends GeoEntityRenderer { poseStack.mulPose(Axis.ZP.rotationDegrees(45.0F)); org.joml.Matrix4f pose = poseStack.last().pose(); - VertexConsumer innerBuffer = bufferSource.getBuffer(RoyalBeamRenderTypes.beam(inner)); + VertexConsumer innerBuffer = bufferSource.getBuffer(BeamRenderTypes.beam(inner)); drawLocalBeam(innerBuffer, pose, length, BEAM_INNER_RADIUS, 4, innerV, 0.5F); - VertexConsumer outerBuffer = bufferSource.getBuffer(RoyalBeamRenderTypes.beam(outer)); + VertexConsumer outerBuffer = bufferSource.getBuffer(BeamRenderTypes.beam(outer)); drawLocalBeam(outerBuffer, pose, length, BEAM_OUTER_RADIUS, 8, outerV, 0.15F); ResourceLocation endTexture = endTextures[(entity.tickCount / 2) % endTextures.length]; - VertexConsumer endBuffer = bufferSource.getBuffer(RoyalBeamRenderTypes.beam(endTexture)); + VertexConsumer endBuffer = bufferSource.getBuffer(BeamRenderTypes.beam(endTexture)); drawBeamImpact(endBuffer, pose, (float) length - 1.5F, BEAM_INNER_RADIUS); poseStack.popPose(); } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/RoyalMountRenderer.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/RoyalMountRenderer.java index b3cc96fd..50a90756 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/RoyalMountRenderer.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/RoyalMountRenderer.java @@ -1,5 +1,6 @@ package com.craisinlord.antarchy.content.client.renderer; +import com.craisinlord.anthology.beam.client.BeamRenderTypes; import com.craisinlord.antarchy.content.client.model.RoyalMountModel; import com.craisinlord.antarchy.content.entity.royal.RoyalMountEntity; import com.mojang.blaze3d.vertex.PoseStack; @@ -95,12 +96,12 @@ public class RoyalMountRenderer extends GeoEntityRenderer { poseStack.mulPose(com.mojang.math.Axis.XP.rotation((float) (-Math.PI * 0.5D + pitch))); poseStack.mulPose(com.mojang.math.Axis.ZP.rotationDegrees(45.0F)); org.joml.Matrix4f pose = poseStack.last().pose(); - VertexConsumer innerBuffer = bufferSource.getBuffer(RoyalBeamRenderTypes.beam(inner)); + VertexConsumer innerBuffer = bufferSource.getBuffer(BeamRenderTypes.beam(inner)); drawLocalBeam(innerBuffer, pose, length, 0.375F, 4, innerV, 0.5F); - VertexConsumer outerBuffer = bufferSource.getBuffer(RoyalBeamRenderTypes.beam(outer)); + VertexConsumer outerBuffer = bufferSource.getBuffer(BeamRenderTypes.beam(outer)); drawLocalBeam(outerBuffer, pose, length, 0.44F, 8, outerV, 0.15F); ResourceLocation endTexture = endTextures[(entity.tickCount / 2) % endTextures.length]; - VertexConsumer endBuffer = bufferSource.getBuffer(RoyalBeamRenderTypes.beam(endTexture)); + VertexConsumer endBuffer = bufferSource.getBuffer(BeamRenderTypes.beam(endTexture)); RoyalBossRenderer.drawBeamImpact(endBuffer, pose, (float) length - 1.5F, 0.375F); poseStack.popPose(); } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/SodiumCompat.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/SodiumCompat.java deleted file mode 100644 index a463d860..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/SodiumCompat.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.craisinlord.antarchy.content.client.renderer; - -public final class SodiumCompat { - private static final String SODIUM_RENDERER_CLASS = "net.caffeinemc.mods.sodium.client.render.SodiumWorldRenderer"; - private static Boolean loaded; - - private SodiumCompat() { - } - - public static boolean isLoaded() { - if (loaded == null) { - loaded = detect(); - } - return loaded; - } - - private static boolean detect() { - String resource = SODIUM_RENDERER_CLASS.replace('.', '/') + ".class"; - ClassLoader contextLoader = Thread.currentThread().getContextClassLoader(); - if (contextLoader != null && contextLoader.getResource(resource) != null) { - return true; - } - ClassLoader ownLoader = SodiumCompat.class.getClassLoader(); - return ownLoader != null && ownLoader.getResource(resource) != null; - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TemporalContractionAfterimageLayer.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TemporalContractionAfterimageLayer.java index 4b72bbec..d04eaf04 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TemporalContractionAfterimageLayer.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TemporalContractionAfterimageLayer.java @@ -1,6 +1,6 @@ package com.craisinlord.antarchy.content.client.renderer; -import com.craisinlord.antarchy.content.client.ContractionAfterimages; +import com.craisinlord.anthology.time.client.ContractionAfterimages; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import java.util.Deque; diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TemporalContractionGeoLayer.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TemporalContractionGeoLayer.java index ea561b5c..23dc2704 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TemporalContractionGeoLayer.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TemporalContractionGeoLayer.java @@ -1,6 +1,6 @@ package com.craisinlord.antarchy.content.client.renderer; -import com.craisinlord.antarchy.content.client.ContractionAfterimages; +import com.craisinlord.anthology.time.client.ContractionAfterimages; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import java.util.Deque; diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TimeDilationFieldRenderer.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TimeDilationFieldRenderer.java deleted file mode 100644 index b3b81d29..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/TimeDilationFieldRenderer.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.craisinlord.antarchy.content.client.renderer; - -import com.craisinlord.antarchy.content.time.TimeDilationFieldEntity; -import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.entity.EntityRenderer; -import net.minecraft.client.renderer.entity.EntityRendererProvider; -import net.minecraft.resources.ResourceLocation; - -public class TimeDilationFieldRenderer extends EntityRenderer { - public TimeDilationFieldRenderer(EntityRendererProvider.Context context) { - super(context); - this.shadowRadius = 0.0F; - } - - @Override - public void render(TimeDilationFieldEntity entity, float entityYaw, float partialTick, PoseStack poseStack, - MultiBufferSource bufferSource, int packedLight) { - } - - @Override - public ResourceLocation getTextureLocation(TimeDilationFieldEntity entity) { - return ResourceLocation.withDefaultNamespace("textures/misc/unknown_pack.png"); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/VanillaPortalTerrain.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/VanillaPortalTerrain.java deleted file mode 100644 index 3a2278a6..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/VanillaPortalTerrain.java +++ /dev/null @@ -1,134 +0,0 @@ -package com.craisinlord.antarchy.content.client.renderer; - -import com.craisinlord.antarchy.content.client.PortalGunPortalRenderState; -import com.craisinlord.antarchy.mixins.client.LevelRendererPortalViewAreaAccessor; -import com.mojang.blaze3d.shaders.Uniform; -import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.VertexBuffer; -import com.mojang.blaze3d.vertex.VertexFormat; -import it.unimi.dsi.fastutil.objects.ObjectArrayList; -import it.unimi.dsi.fastutil.objects.ObjectListIterator; -import java.util.UUID; -import java.util.function.Consumer; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.RenderType; -import net.minecraft.client.renderer.ShaderInstance; -import net.minecraft.client.renderer.chunk.RenderRegionCache; -import net.minecraft.client.renderer.chunk.SectionRenderDispatcher; -import net.minecraft.client.renderer.culling.Frustum; -import net.minecraft.core.BlockPos; -import net.minecraft.core.SectionPos; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.Vec3; -import org.joml.Matrix4f; - -final class VanillaPortalTerrain implements PortalTerrain { - private static final int MAX_REBUILDS_PER_SCENE = 32; - - private final ObjectArrayList sections; - - private VanillaPortalTerrain(ObjectArrayList sections) { - this.sections = sections; - } - - static VanillaPortalTerrain prepare(Minecraft minecraft, UUID exitId, Vec3 exitCenter, Vec3 exitNormal, Frustum frustum) { - PortalGunPortalSectionViews.View view = PortalGunPortalSectionViews.prepare(minecraft, exitId, exitCenter, exitNormal, frustum); - view.visibleSections().removeIf(section -> !PortalGunPortalRenderState.shouldRenderBounds(section.getBoundingBox())); - queueDirtySections(minecraft, view.visibleSections()); - return new VanillaPortalTerrain(view.visibleSections()); - } - - @Override - public int sectionCount() { - return this.sections.size(); - } - - @Override - public void begin(Minecraft minecraft) { - } - - @Override - public void end(Minecraft minecraft) { - } - - @Override - public void drawLayer(Minecraft minecraft, RenderType renderType, Vec3 cameraPosition, Matrix4f viewMatrix, Matrix4f projection) { - renderType.setupRenderState(); - ShaderInstance shader = RenderSystem.getShader(); - if (shader == null) { - renderType.clearRenderState(); - return; - } - shader.setDefaultUniforms(VertexFormat.Mode.QUADS, viewMatrix, projection, minecraft.getWindow()); - shader.apply(); - Uniform chunkOffset = shader.CHUNK_OFFSET; - boolean frontToBack = renderType != RenderType.translucent(); - ObjectListIterator iterator = - this.sections.listIterator(frontToBack ? 0 : this.sections.size()); - try { - while (frontToBack ? iterator.hasNext() : iterator.hasPrevious()) { - SectionRenderDispatcher.RenderSection section = frontToBack ? iterator.next() : iterator.previous(); - if (section.getCompiled().isEmpty(renderType)) { - continue; - } - VertexBuffer buffer = section.getBuffer(renderType); - BlockPos origin = section.getOrigin(); - if (chunkOffset != null) { - chunkOffset.set((float) (origin.getX() - cameraPosition.x), (float) (origin.getY() - cameraPosition.y), - (float) (origin.getZ() - cameraPosition.z)); - chunkOffset.upload(); - } - buffer.bind(); - buffer.draw(); - } - } finally { - if (chunkOffset != null) { - chunkOffset.set(0.0F, 0.0F, 0.0F); - } - shader.clear(); - VertexBuffer.unbind(); - renderType.clearRenderState(); - } - } - - @Override - public void forEachBlockEntity(Minecraft minecraft, Frustum frustum, Consumer consumer) { - for (SectionRenderDispatcher.RenderSection section : this.sections) { - for (BlockEntity blockEntity : section.getCompiled().getRenderableBlockEntities()) { - consumer.accept(blockEntity); - } - } - LevelRendererPortalViewAreaAccessor state = (LevelRendererPortalViewAreaAccessor) minecraft.levelRenderer; - synchronized (state.antarchy$getGlobalBlockEntities()) { - for (BlockEntity blockEntity : state.antarchy$getGlobalBlockEntities()) { - if (frustum.isVisible(new AABB(blockEntity.getBlockPos()).inflate(1.0D))) { - consumer.accept(blockEntity); - } - } - } - } - - private static void queueDirtySections(Minecraft minecraft, ObjectArrayList sections) { - SectionRenderDispatcher dispatcher = minecraft.levelRenderer.getSectionRenderDispatcher(); - if (dispatcher == null) { - return; - } - RenderRegionCache cache = null; - int queued = 0; - for (SectionRenderDispatcher.RenderSection section : sections) { - if (queued >= MAX_REBUILDS_PER_SCENE) { - break; - } - if (!section.isDirty() || !minecraft.level.getLightEngine().lightOnInSection(SectionPos.of(section.getOrigin()))) { - continue; - } - if (cache == null) { - cache = new RenderRegionCache(); - } - section.rebuildSectionAsync(dispatcher, cache); - section.setNotDirty(); - queued++; - } - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/sodium/SodiumPortalTerrain.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/sodium/SodiumPortalTerrain.java deleted file mode 100644 index 5f73b554..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/client/renderer/sodium/SodiumPortalTerrain.java +++ /dev/null @@ -1,208 +0,0 @@ -package com.craisinlord.antarchy.content.client.renderer.sodium; - -import com.craisinlord.antarchy.content.client.PortalGunPortalRenderState; -import com.craisinlord.antarchy.content.client.renderer.PortalTerrain; -import com.craisinlord.antarchy.mixins.compat.sodium.RenderSectionManagerAccessor; -import com.craisinlord.antarchy.mixins.compat.sodium.SodiumWorldRendererAccessor; -import java.util.ArrayDeque; -import java.util.EnumMap; -import java.util.Map; -import java.util.function.Consumer; -import net.caffeinemc.mods.sodium.client.SodiumClientMod; -import net.caffeinemc.mods.sodium.client.gl.device.RenderDevice; -import net.caffeinemc.mods.sodium.client.render.SodiumWorldRenderer; -import net.caffeinemc.mods.sodium.client.render.chunk.ChunkRenderMatrices; -import net.caffeinemc.mods.sodium.client.render.chunk.RenderSection; -import net.caffeinemc.mods.sodium.client.render.chunk.RenderSectionManager; -import net.caffeinemc.mods.sodium.client.render.chunk.TaskQueueType; -import net.caffeinemc.mods.sodium.client.render.chunk.lists.CoordinateSectionVisitor; -import net.caffeinemc.mods.sodium.client.render.chunk.lists.SortedRenderLists; -import net.caffeinemc.mods.sodium.client.render.chunk.lists.TreeSectionCollector; -import net.caffeinemc.mods.sodium.client.render.chunk.terrain.DefaultTerrainRenderPasses; -import net.caffeinemc.mods.sodium.client.render.chunk.terrain.TerrainRenderPass; -import net.caffeinemc.mods.sodium.client.render.viewport.Viewport; -import net.caffeinemc.mods.sodium.client.render.viewport.ViewportProvider; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.RenderType; -import net.minecraft.client.renderer.culling.Frustum; -import net.minecraft.core.SectionPos; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.Vec3; -import org.joml.Matrix4f; - -public final class SodiumPortalTerrain implements PortalTerrain { - private static final int FIRST_PORTAL_FRAME = -1_000_000; - private static final int MAX_PENDING_TASKS_PER_QUEUE = 256; - private static final Map> PENDING_TASKS = new EnumMap<>(TaskQueueType.class); - private static int nextFrame = FIRST_PORTAL_FRAME; - - private final SodiumWorldRenderer worldRenderer; - private final RenderSectionManager sectionManager; - private final SortedRenderLists renderLists; - private final int sectionCount; - private SortedRenderLists previousRenderLists; - private boolean previousEntityCulling; - - private SodiumPortalTerrain(SodiumWorldRenderer worldRenderer, RenderSectionManager sectionManager, SortedRenderLists renderLists, int sectionCount) { - this.worldRenderer = worldRenderer; - this.sectionManager = sectionManager; - this.renderLists = renderLists; - this.sectionCount = sectionCount; - } - - public static boolean canView(Minecraft minecraft, Vec3 exitCenter) { - SodiumWorldRenderer worldRenderer = SodiumWorldRenderer.instanceNullable(); - if (worldRenderer == null || minecraft.player == null - || ((SodiumWorldRendererAccessor) worldRenderer).antarchy$getRenderSectionManager() == null) { - return false; - } - int limit = minecraft.options.getEffectiveRenderDistance(); - return Math.abs(SectionPos.posToSectionCoord(exitCenter.x) - minecraft.player.chunkPosition().x) <= limit - && Math.abs(SectionPos.posToSectionCoord(exitCenter.z) - minecraft.player.chunkPosition().z) <= limit; - } - - public static PortalTerrain prepare(Minecraft minecraft, Frustum frustum) { - SodiumWorldRenderer worldRenderer = SodiumWorldRenderer.instanceNullable(); - RenderSectionManager sectionManager = worldRenderer == null ? null - : ((SodiumWorldRendererAccessor) worldRenderer).antarchy$getRenderSectionManager(); - if (sectionManager == null) { - return EmptyTerrain.INSTANCE; - } - RenderSectionManagerAccessor manager = (RenderSectionManagerAccessor) sectionManager; - int frame = nextFrame--; - if (nextFrame > FIRST_PORTAL_FRAME) { - nextFrame = FIRST_PORTAL_FRAME; - } - Viewport viewport = ((ViewportProvider) frustum).sodium$createViewport(); - TreeSectionCollector collector = new TreeSectionCollector(frame, - SodiumClientMod.options().performance.chunkBuildDeferMode.getImportantRebuildQueueType(), - manager.antarchy$getSortBehavior().getDeferMode().getImportantRebuildQueueType(), - manager.antarchy$getSectionByPosition()); - int[] visited = {0}; - CoordinateSectionVisitor apertureFilter = (x, y, z) -> { - int minX = SectionPos.sectionToBlockCoord(x); - int minY = SectionPos.sectionToBlockCoord(y); - int minZ = SectionPos.sectionToBlockCoord(z); - if (PortalGunPortalRenderState.shouldRenderBounds(new AABB(minX, minY, minZ, minX + 16, minY + 16, minZ + 16))) { - collector.visit(x, y, z); - visited[0]++; - } - }; - manager.antarchy$getRenderableSectionTree().prepareForTraversal(); - manager.antarchy$getRenderableSectionTree().traverse(apertureFilter, viewport, manager.antarchy$getSearchDistance()); - SortedRenderLists renderLists = collector.createRenderLists(viewport); - stashPendingTasks(collector.getTaskLists()); - sectionManager.markGraphDirty(); - return new SodiumPortalTerrain(worldRenderer, sectionManager, renderLists, visited[0]); - } - - public static void drainPendingTasks(Map> taskLists) { - if (PENDING_TASKS.isEmpty() || taskLists == null) { - return; - } - for (Map.Entry> entry : PENDING_TASKS.entrySet()) { - ArrayDeque queue = taskLists.get(entry.getKey()); - if (queue == null) { - continue; - } - int limit = entry.getKey().queueSizeLimit(); - for (RenderSection section : entry.getValue()) { - if (queue.size() >= limit) { - break; - } - if (!section.isDisposed() && section.getPendingUpdate() != 0 && section.getRunningJob() == null) { - queue.add(section); - } - } - } - PENDING_TASKS.clear(); - } - - private static void stashPendingTasks(Map> taskLists) { - for (Map.Entry> entry : taskLists.entrySet()) { - if (entry.getValue().isEmpty()) { - continue; - } - ArrayDeque pending = PENDING_TASKS.computeIfAbsent(entry.getKey(), type -> new ArrayDeque<>()); - for (RenderSection section : entry.getValue()) { - if (pending.size() >= MAX_PENDING_TASKS_PER_QUEUE) { - break; - } - pending.add(section); - } - } - } - - @Override - public int sectionCount() { - return this.sectionCount; - } - - @Override - public void begin(Minecraft minecraft) { - RenderSectionManagerAccessor manager = (RenderSectionManagerAccessor) this.sectionManager; - SodiumWorldRendererAccessor renderer = (SodiumWorldRendererAccessor) this.worldRenderer; - this.previousRenderLists = manager.antarchy$getRenderLists(); - this.previousEntityCulling = renderer.antarchy$getUseEntityCulling(); - manager.antarchy$setRenderLists(this.renderLists); - renderer.antarchy$setUseEntityCulling(false); - } - - @Override - public void end(Minecraft minecraft) { - ((RenderSectionManagerAccessor) this.sectionManager).antarchy$setRenderLists(this.previousRenderLists); - ((SodiumWorldRendererAccessor) this.worldRenderer).antarchy$setUseEntityCulling(this.previousEntityCulling); - } - - @Override - public void forEachBlockEntity(Minecraft minecraft, Frustum frustum, Consumer consumer) { - this.worldRenderer.iterateVisibleBlockEntities(consumer); - } - - @Override - public void drawLayer(Minecraft minecraft, RenderType renderType, Vec3 cameraPosition, Matrix4f viewMatrix, Matrix4f projection) { - TerrainRenderPass[] passes; - if (renderType == RenderType.solid()) { - passes = new TerrainRenderPass[] {DefaultTerrainRenderPasses.SOLID, DefaultTerrainRenderPasses.CUTOUT}; - } else if (renderType == RenderType.translucent()) { - passes = new TerrainRenderPass[] {DefaultTerrainRenderPasses.TRANSLUCENT}; - } else { - return; - } - ChunkRenderMatrices matrices = new ChunkRenderMatrices(projection, viewMatrix); - RenderDevice.enterManagedCode(); - try { - for (TerrainRenderPass pass : passes) { - this.sectionManager.renderLayer(matrices, pass, cameraPosition.x, cameraPosition.y, cameraPosition.z); - } - } finally { - RenderDevice.exitManagedCode(); - } - } - - private enum EmptyTerrain implements PortalTerrain { - INSTANCE; - - @Override - public int sectionCount() { - return 0; - } - - @Override - public void begin(Minecraft minecraft) { - } - - @Override - public void end(Minecraft minecraft) { - } - - @Override - public void drawLayer(Minecraft minecraft, RenderType renderType, Vec3 cameraPosition, Matrix4f viewMatrix, Matrix4f projection) { - } - - @Override - public void forEachBlockEntity(Minecraft minecraft, Frustum frustum, Consumer consumer) { - } - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/effect/ContractedMobEffect.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/effect/ContractedMobEffect.java deleted file mode 100644 index d67c276d..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/effect/ContractedMobEffect.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.craisinlord.antarchy.content.effect; - -import net.minecraft.world.effect.MobEffect; -import net.minecraft.world.effect.MobEffectCategory; -import net.minecraft.world.entity.LivingEntity; - -public final class ContractedMobEffect extends MobEffect { - public static final double RATE = 2.0D; - public static final double STRONG_RATE = 3.0D; - - public ContractedMobEffect() { - super(MobEffectCategory.BENEFICIAL, 0xD5A63A); - } - - @Override - public boolean applyEffectTick(LivingEntity entity, int amplifier) { - return true; - } - - @Override - public boolean shouldApplyEffectTickThisTick(int duration, int amplifier) { - return true; - } - - public static double rateForAmplifier(int amplifier) { - return amplifier > 0 ? STRONG_RATE : RATE; - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/effect/DilatedMobEffect.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/effect/DilatedMobEffect.java deleted file mode 100644 index 74932485..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/effect/DilatedMobEffect.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.craisinlord.antarchy.content.effect; - -import net.minecraft.world.effect.MobEffect; -import net.minecraft.world.effect.MobEffectCategory; -import net.minecraft.world.entity.LivingEntity; - -public final class DilatedMobEffect extends MobEffect { - public static final double RATE = 0.35D; - public static final double STRONG_RATE = 0.2D; - - public DilatedMobEffect() { - super(MobEffectCategory.HARMFUL, 0x6C4AB6); - } - - @Override - public boolean applyEffectTick(LivingEntity entity, int amplifier) { - return true; - } - - @Override - public boolean shouldApplyEffectTickThisTick(int duration, int amplifier) { - return true; - } - - public static double rateForAmplifier(int amplifier) { - return amplifier > 0 ? STRONG_RATE : RATE; - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/effect/RoyalEffectHooks.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/effect/RoyalEffectHooks.java index fa9db08f..bddce8fb 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/effect/RoyalEffectHooks.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/effect/RoyalEffectHooks.java @@ -1,5 +1,6 @@ package com.craisinlord.antarchy.content.effect; +import com.craisinlord.anthology.effect.AnthologyEffects; import com.craisinlord.antarchy.Antarchy; import net.minecraft.core.Holder; import net.minecraft.core.registries.BuiltInRegistries; @@ -11,10 +12,6 @@ import net.minecraft.world.effect.MobEffect; public final class RoyalEffectHooks { private static final ResourceKey COMMANDED_KEY = ResourceKey.create(Registries.MOB_EFFECT, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "commanded")); - private static final ResourceKey DILATED_KEY = ResourceKey.create(Registries.MOB_EFFECT, - ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "dilated")); - private static final ResourceKey CONTRACTED_KEY = ResourceKey.create(Registries.MOB_EFFECT, - ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "contracted")); private RoyalEffectHooks() { } @@ -24,10 +21,10 @@ public final class RoyalEffectHooks { } public static Holder dilatedHolder() { - return BuiltInRegistries.MOB_EFFECT.getHolder(DILATED_KEY).orElse(null); + return AnthologyEffects.dilated(); } public static Holder contractedHolder() { - return BuiltInRegistries.MOB_EFFECT.getHolder(CONTRACTED_KEY).orElse(null); + return AnthologyEffects.contracted(); } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ReverieEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ReverieEntity.java index 55a706ec..7ac7dc38 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ReverieEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ReverieEntity.java @@ -10,7 +10,6 @@ import com.craisinlord.antarchy.content.fluid.AntarchyFluidChecks; import com.craisinlord.anthology.gravity.GravityApi; import com.craisinlord.anthology.gravity.GravityDirection; import com.craisinlord.anthology.gravity.GravityRotationUtil; -import com.craisinlord.antarchy.content.movement.DreamSandLowGravityAccess; import java.util.EnumSet; import java.util.List; import java.util.UUID; @@ -659,9 +658,6 @@ public class ReverieEntity extends PathfinderMob implements FlyingAnimal, GeoEnt if (this.isPlayerInsideAntiwater(focus)) { return false; } - if (focus instanceof DreamSandLowGravityAccess access && access.antarchy$getDreamSandLandingGraceTicks() > 0) { - return false; - } GravityDirection gravityDirection = GravityApi.getGravityDirection(focus); Vec3 localMotion = GravityRotationUtil.vecWorldToPlayer(focus.getDeltaMovement(), gravityDirection); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ToreterrorEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ToreterrorEntity.java index 9a2a2c64..253be8da 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ToreterrorEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/ToreterrorEntity.java @@ -226,10 +226,10 @@ public class ToreterrorEntity extends Monster implements GeoEntity { super.tick(); if (this.level().isClientSide) { if (this.isJumpShaking()) { - com.craisinlord.antarchy.content.client.CameraShakeClientState.register( + com.craisinlord.anthology.shake.client.CameraShake.register( this, - com.craisinlord.antarchy.content.client.CameraShakeClientState.TORETERROR_RANGE, - com.craisinlord.antarchy.content.client.CameraShakeClientState.TORETERROR_STRENGTH, + 48.0D, + 1.0F, this::isJumpShaking ); } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/basilisk/BasiliskMultipartLayout.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/basilisk/BasiliskMultipartLayout.java index 92895960..87a87660 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/basilisk/BasiliskMultipartLayout.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/basilisk/BasiliskMultipartLayout.java @@ -1,7 +1,7 @@ package com.craisinlord.antarchy.content.entity.basilisk; -import com.craisinlord.antarchy.content.entity.multipart.MultipartLayout; -import com.craisinlord.antarchy.content.entity.multipart.MultipartPartDefinition; +import com.craisinlord.anthology.multipart.MultipartLayout; +import com.craisinlord.anthology.multipart.MultipartPartDefinition; import net.minecraft.world.entity.Entity; import net.minecraft.world.phys.Vec3; diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerFrogBehavior.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerFrogBehavior.java index 3768123f..6d2e1bd4 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerFrogBehavior.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/glimmer/GlimmerFrogBehavior.java @@ -2,7 +2,7 @@ package com.craisinlord.antarchy.content.entity.glimmer; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.AntarchyObjects; -import com.craisinlord.antarchy.content.entity.multipart.MultipartEntityOwner; +import com.craisinlord.anthology.multipart.MultipartEntityOwner; import net.minecraft.core.registries.Registries; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakenEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakenEntity.java index 22f3a19e..1758cb39 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakenEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakenEntity.java @@ -8,8 +8,8 @@ import com.craisinlord.antarchy.content.boss.BossCombatUtil; import com.craisinlord.antarchy.content.damage.AntarchyDamageSources; import com.craisinlord.antarchy.content.entity.MissileSquidEntity; import com.craisinlord.antarchy.content.entity.OctopusBombEntity; -import com.craisinlord.antarchy.content.entity.multipart.MultipartEntityOwner; -import com.craisinlord.antarchy.content.entity.multipart.MultipartLayout; +import com.craisinlord.anthology.multipart.MultipartEntityOwner; +import com.craisinlord.anthology.multipart.MultipartLayout; import com.craisinlord.antarchy.content.damage.AntarchyDamageTypes; import java.util.List; @@ -162,18 +162,18 @@ public class KrakenEntity extends Monster implements GeoEntity, MultipartEntityO } @Override - public MultipartLayout antarchy$getMultipartLayout() { + public MultipartLayout anthology$getMultipartLayout() { return KrakenMultipartLayout.INSTANCE; } @Override @Nullable - public Entity[] antarchy$getMultipartParts() { + public Entity[] anthology$getMultipartParts() { return this.multipartParts; } @Override - public void antarchy$setMultipartParts(@Nullable Entity[] parts) { + public void anthology$setMultipartParts(@Nullable Entity[] parts) { this.multipartParts = parts; } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakenMultipartLayout.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakenMultipartLayout.java index e4058999..6d3d7590 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakenMultipartLayout.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakenMultipartLayout.java @@ -1,7 +1,7 @@ package com.craisinlord.antarchy.content.entity.kraken; -import com.craisinlord.antarchy.content.entity.multipart.MultipartLayout; -import com.craisinlord.antarchy.content.entity.multipart.MultipartPartDefinition; +import com.craisinlord.anthology.multipart.MultipartLayout; +import com.craisinlord.anthology.multipart.MultipartPartDefinition; public final class KrakenMultipartLayout implements MultipartLayout { public static final KrakenMultipartLayout INSTANCE = new KrakenMultipartLayout(); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/lucid/LucidEyeProjectileEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/lucid/LucidEyeProjectileEntity.java index db426319..d7e06d82 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/lucid/LucidEyeProjectileEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/lucid/LucidEyeProjectileEntity.java @@ -35,7 +35,7 @@ public class LucidEyeProjectileEntity extends ThrowableItemProjectile { @Override protected double getDefaultGravity() { - return 0.03D; + return -0.03D; } @Override diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/MultipartEntityOwner.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/MultipartEntityOwner.java deleted file mode 100644 index 9e5c1a9d..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/MultipartEntityOwner.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.craisinlord.antarchy.content.entity.multipart; - -import net.minecraft.world.InteractionHand; -import net.minecraft.world.InteractionResult; -import net.minecraft.world.damagesource.DamageSource; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.phys.Vec3; - -public interface MultipartEntityOwner { - MultipartLayout antarchy$getMultipartLayout(); - - Entity[] antarchy$getMultipartParts(); - - void antarchy$setMultipartParts(Entity[] parts); - - default Entity[] antarchy$createMultipartParts() { - return MultipartFramework.createMultipartParts(this); - } - - default void antarchy$spawnMultipartParts() { - MultipartFramework.spawnMultipartParts(this); - } - - default void antarchy$discardMultipartParts() { - MultipartFramework.discardMultipartParts(this); - } - - default void antarchy$syncMultipartParts() { - MultipartFramework.syncMultipartParts(this); - } - - default boolean antarchy$hurtMultipartPart(Entity part, DamageSource source, float amount) { - return ((Entity) this).hurt(source, amount); - } - - default InteractionResult antarchy$interactMultipartPart(Entity part, Player player, Vec3 hitPosition, InteractionHand hand) { - return ((Entity) this).interactAt(player, hitPosition, hand); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/MultipartFramework.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/MultipartFramework.java deleted file mode 100644 index ba954583..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/MultipartFramework.java +++ /dev/null @@ -1,119 +0,0 @@ -package com.craisinlord.antarchy.content.entity.multipart; - -import java.util.Objects; -import java.util.UUID; -import org.jetbrains.annotations.Nullable; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.level.Level; - -public final class MultipartFramework { - private static final org.slf4j.Logger LOGGER = org.slf4j.LoggerFactory.getLogger(MultipartFramework.class); - private static boolean warnedMissingFactory; - - public interface PartFactory { - Entity create(MultipartEntityOwner owner, int partIndex, MultipartPartDefinition spec); - } - - public interface NetworkBridge { - void sendAttack(UUID parentId, int partIndex, float damage); - - void sendInteract(UUID parentId, int partIndex, int handId); - } - - private static final NetworkBridge NOOP_BRIDGE = new NetworkBridge() { - @Override - public void sendAttack(UUID parentId, int partIndex, float damage) { - } - - @Override - public void sendInteract(UUID parentId, int partIndex, int handId) { - } - }; - - @Nullable - private static PartFactory partFactory; - private static NetworkBridge networkBridge = NOOP_BRIDGE; - private MultipartFramework() { - } - - public static void bootstrap( - PartFactory partFactory, - NetworkBridge networkBridge - ) { - MultipartFramework.partFactory = Objects.requireNonNull(partFactory, "partFactory"); - MultipartFramework.networkBridge = Objects.requireNonNull(networkBridge, "networkBridge"); - } - - public static Entity[] createMultipartParts(MultipartEntityOwner owner) { - if (partFactory == null) { - if (!warnedMissingFactory) { - warnedMissingFactory = true; - LOGGER.warn("Multipart part factory has not been bootstrapped on this platform; " - + "multipart entities will fall back to their base hitbox only"); - } - return new Entity[0]; - } - - MultipartLayout layout = owner.antarchy$getMultipartLayout(); - MultipartPartDefinition[] parts = layout.parts(); - Entity[] created = new Entity[parts.length]; - for (int i = 0; i < parts.length; i++) { - created[i] = createMultipartPart(owner, i, parts[i]); - } - return created; - } - - public static Entity createMultipartPart(MultipartEntityOwner owner, int index, MultipartPartDefinition spec) { - PartFactory factory = partFactory; - if (factory == null) { - throw new IllegalStateException("Multipart part factory has not been bootstrapped"); - } - - return factory.create(owner, index, spec); - } - - public static void spawnMultipartParts(MultipartEntityOwner owner) { - Entity[] parts = owner.antarchy$getMultipartParts(); - if (parts == null) { - parts = owner.antarchy$createMultipartParts(); - owner.antarchy$setMultipartParts(parts); - } - syncMultipartParts(owner); - } - - public static void discardMultipartParts(MultipartEntityOwner owner) { - Entity[] parts = owner.antarchy$getMultipartParts(); - if (parts == null) { - return; - } - - for (Entity part : parts) { - if (part != null) { - part.discard(); - } - } - - owner.antarchy$setMultipartParts(null); - } - - public static void syncMultipartParts(MultipartEntityOwner owner) { - Entity[] parts = owner.antarchy$getMultipartParts(); - if (parts == null) { - return; - } - - for (Entity part : parts) { - if (part instanceof MultipartPartAccess access) { - access.antarchy$syncFromParent(); - } - } - } - - public static void sendMultipartAttack(UUID parentId, int partIndex, float damage) { - networkBridge.sendAttack(parentId, partIndex, damage); - } - - public static void sendMultipartInteract(UUID parentId, int partIndex, int handId) { - networkBridge.sendInteract(parentId, partIndex, handId); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/MultipartLayout.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/MultipartLayout.java deleted file mode 100644 index 81bf5b01..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/MultipartLayout.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.craisinlord.antarchy.content.entity.multipart; - -import net.minecraft.world.entity.Entity; -import net.minecraft.world.phys.Vec3; - -public interface MultipartLayout { - MultipartPartDefinition[] parts(); - - default MultipartPartDefinition part(int index) { - return this.parts()[index]; - } - - default Vec3 getPartPosition(Entity parent, MultipartPartDefinition spec) { - double yawRadians = Math.toRadians(parent.getYRot()); - Vec3 forward = new Vec3(-Math.sin(yawRadians), 0.0D, Math.cos(yawRadians)); - Vec3 right = new Vec3(forward.z, 0.0D, -forward.x); - - return new Vec3( - parent.getX() + forward.x * spec.forwardOffset() + right.x * spec.lateralOffset(), - parent.getY() + spec.yOffset(), - parent.getZ() + forward.z * spec.forwardOffset() + right.z * spec.lateralOffset() - ); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/MultipartPartAccess.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/MultipartPartAccess.java deleted file mode 100644 index d2b36603..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/MultipartPartAccess.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.craisinlord.antarchy.content.entity.multipart; - -public interface MultipartPartAccess { - void antarchy$syncFromParent(); -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/MultipartPartDefinition.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/MultipartPartDefinition.java deleted file mode 100644 index 194758e5..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/MultipartPartDefinition.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.craisinlord.antarchy.content.entity.multipart; - -public record MultipartPartDefinition( - String name, - float width, - float height, - float damageMultiplier, - double forwardOffset, - double yOffset, - double lateralOffset, - boolean collisionEnabled -) { -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/network/MultipartAttackPayload.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/network/MultipartAttackPayload.java deleted file mode 100644 index dfb7f0f1..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/network/MultipartAttackPayload.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.craisinlord.antarchy.content.entity.multipart.network; - -import com.craisinlord.antarchy.Antarchy; -import io.netty.buffer.ByteBuf; -import java.util.UUID; -import net.minecraft.network.codec.ByteBufCodecs; -import net.minecraft.network.codec.StreamCodec; -import net.minecraft.network.protocol.common.custom.CustomPacketPayload; -import net.minecraft.resources.ResourceLocation; - -public record MultipartAttackPayload(UUID parentId, int partIndex, float damage) implements CustomPacketPayload { - public static final Type TYPE = - new Type<>(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "multipart_attack")); - public static final StreamCodec STREAM_CODEC = StreamCodec.composite( - ByteBufCodecs.STRING_UTF8.map(UUID::fromString, UUID::toString), - MultipartAttackPayload::parentId, - ByteBufCodecs.VAR_INT, - MultipartAttackPayload::partIndex, - ByteBufCodecs.FLOAT, - MultipartAttackPayload::damage, - MultipartAttackPayload::new - ); - - @Override - public Type type() { - return TYPE; - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/network/MultipartInteractPayload.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/network/MultipartInteractPayload.java deleted file mode 100644 index 7bf3e9f1..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/multipart/network/MultipartInteractPayload.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.craisinlord.antarchy.content.entity.multipart.network; - -import com.craisinlord.antarchy.Antarchy; -import io.netty.buffer.ByteBuf; -import java.util.UUID; -import net.minecraft.network.codec.ByteBufCodecs; -import net.minecraft.network.codec.StreamCodec; -import net.minecraft.network.protocol.common.custom.CustomPacketPayload; -import net.minecraft.resources.ResourceLocation; - -public record MultipartInteractPayload(UUID parentId, int partIndex, int handId) implements CustomPacketPayload { - public static final Type TYPE = - new Type<>(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "multipart_interact")); - public static final StreamCodec STREAM_CODEC = StreamCodec.composite( - ByteBufCodecs.STRING_UTF8.map(UUID::fromString, UUID::toString), - MultipartInteractPayload::parentId, - ByteBufCodecs.VAR_INT, - MultipartInteractPayload::partIndex, - ByteBufCodecs.VAR_INT, - MultipartInteractPayload::handId, - MultipartInteractPayload::new - ); - - @Override - public Type type() { - return TYPE; - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareEntity.java index 69aae1ec..b88b3994 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareEntity.java @@ -348,10 +348,10 @@ public class NightmareEntity extends Monster implements GeoEntity { this.tickClientParticles(); this.updateFlightRotation(); if (this.isRoaring()) { - com.craisinlord.antarchy.content.client.CameraShakeClientState.register( + com.craisinlord.anthology.shake.client.CameraShake.register( this, - com.craisinlord.antarchy.content.client.CameraShakeClientState.NIGHTMARE_RANGE, - com.craisinlord.antarchy.content.client.CameraShakeClientState.NIGHTMARE_STRENGTH, + 32.0D, + 1.35F, this::isRoaring ); } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareMultipartLayout.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareMultipartLayout.java index 79f7f90c..553bde30 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareMultipartLayout.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareMultipartLayout.java @@ -1,7 +1,7 @@ package com.craisinlord.antarchy.content.entity.nightmare; -import com.craisinlord.antarchy.content.entity.multipart.MultipartLayout; -import com.craisinlord.antarchy.content.entity.multipart.MultipartPartDefinition; +import com.craisinlord.anthology.multipart.MultipartLayout; +import com.craisinlord.anthology.multipart.MultipartPartDefinition; public final class NightmareMultipartLayout implements MultipartLayout { public static final NightmareMultipartLayout INSTANCE = new NightmareMultipartLayout(); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/KingEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/KingEntity.java index 7514eadc..084ae543 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/KingEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/KingEntity.java @@ -53,8 +53,8 @@ import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import org.jetbrains.annotations.Nullable; import org.joml.Vector3f; -import com.craisinlord.antarchy.content.entity.royal.beam.RoyalBeamSettings; -import com.craisinlord.antarchy.content.entity.royal.beam.RoyalBeamTerrainMode; +import com.craisinlord.anthology.beam.BeamSettings; +import com.craisinlord.anthology.beam.BeamTerrainMode; import com.craisinlord.antarchy.content.entity.royal.beam.RoyalBeamElement; import com.craisinlord.antarchy.content.menu.RoyalJudgmentMenu; import com.craisinlord.antarchy.content.menu.RoyalJudgmentState; @@ -398,8 +398,8 @@ public class KingEntity extends RoyalBossEntity { protected SoundEvent royalBeamEndSound() { return AntarchySoundEvents.KING_BEAM_SHOOT.get(); } @Override - protected RoyalBeamSettings royalBeamSettings() { - return new RoyalBeamSettings(AntarchySettings.kingBeamRange(), AntarchySettings.kingBeamTracking(), 7.5D, + protected BeamSettings royalBeamSettings() { + return new BeamSettings(AntarchySettings.kingBeamRange(), AntarchySettings.kingBeamTracking(), 7.5D, AntarchySettings.kingBeamDurationTicks(), AntarchySettings.kingBeamTravelTicks(), AntarchySettings.kingBeamCooldownTicks(), 6.0F, 6.0F, (float) AntarchySettings.kingBeamDamage(), 1.0F, 3, 100.0D, (float) AntarchySettings.kingBeamTerrainRadius(), 4.0F, AntarchySettings.kingBeamTerrainCap(), @@ -407,8 +407,8 @@ public class KingEntity extends RoyalBossEntity { } @Override - protected RoyalBeamTerrainMode royalBeamTerrainMode() { - return RoyalBeamTerrainMode.BUILD_ICE; + protected BeamTerrainMode royalBeamTerrainMode() { + return BeamTerrainMode.BUILD_ICE; } @Override @@ -422,8 +422,8 @@ public class KingEntity extends RoyalBossEntity { } @Override - protected RoyalBeamTerrainMode royalBeamTerrainMode(@Nullable RoyalHead head) { - return head != null && head.slot() == RoyalHead.Slot.RIGHT ? RoyalBeamTerrainMode.BUILD_ICE : RoyalBeamTerrainMode.NONE; + protected BeamTerrainMode royalBeamTerrainMode(@Nullable RoyalHead head) { + return head != null && head.slot() == RoyalHead.Slot.RIGHT ? BeamTerrainMode.BUILD_ICE : BeamTerrainMode.NONE; } @Override diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/QueenEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/QueenEntity.java index a2887bd0..f8464c77 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/QueenEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/QueenEntity.java @@ -10,8 +10,8 @@ import com.craisinlord.anthology.gravity.GravityApi; import com.craisinlord.anthology.gravity.GravityDirection; import com.craisinlord.anthology.gravity.GravityRotationUtil; import com.craisinlord.anthology.gravity.GravityTransition; -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import com.craisinlord.antarchy.content.time.TimeDilationFieldEntity; +import com.craisinlord.anthology.time.TimeDilationApi; +import com.craisinlord.anthology.time.TimeDilationFieldEntity; import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisUndersideManager; import java.util.ArrayList; import java.util.HashMap; @@ -51,8 +51,8 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.AABB; -import com.craisinlord.antarchy.content.entity.royal.beam.RoyalBeamSettings; -import com.craisinlord.antarchy.content.entity.royal.beam.RoyalBeamTerrainMode; +import com.craisinlord.anthology.beam.BeamSettings; +import com.craisinlord.anthology.beam.BeamTerrainMode; import com.craisinlord.antarchy.content.entity.royal.beam.RoyalBeamElement; import com.craisinlord.antarchy.content.entity.royal.attack.RoyalAttackLane; import com.craisinlord.antarchy.content.entity.royal.attack.RoyalEffectController; @@ -406,8 +406,8 @@ public class QueenEntity extends RoyalBossEntity { protected SoundEvent royalBeamEndSound() { return AntarchySoundEvents.QUEEN_BEAM_END.get(); } @Override - protected RoyalBeamSettings royalBeamSettings() { - return new RoyalBeamSettings(AntarchySettings.queenBeamRange(), AntarchySettings.queenBeamTracking(), 7.5D, + protected BeamSettings royalBeamSettings() { + return new BeamSettings(AntarchySettings.queenBeamRange(), AntarchySettings.queenBeamTracking(), 7.5D, AntarchySettings.queenBeamDurationTicks(), AntarchySettings.queenBeamTravelTicks(), AntarchySettings.queenBeamCooldownTicks(), 6.0F, 6.0F, (float) AntarchySettings.queenBeamDamage(), 1.0F, 3, 100.0D, (float) AntarchySettings.queenBeamTerrainRadius(), 4.0F, AntarchySettings.queenBeamTerrainCap(), @@ -415,8 +415,8 @@ public class QueenEntity extends RoyalBossEntity { } @Override - protected RoyalBeamTerrainMode royalBeamTerrainMode() { - return RoyalBeamTerrainMode.DESTROY; + protected BeamTerrainMode royalBeamTerrainMode() { + return BeamTerrainMode.DESTROY; } @Override @@ -1157,7 +1157,7 @@ public class QueenEntity extends RoyalBossEntity { TimeDilationFieldEntity field = TimeDilationApi.createField(level, this.position(), QUEEN_CHRONOSPHERE_RADIUS, QUEEN_CHRONOSPHERE_RATE, QUEEN_CHRONOSPHERE_DURATION, this.getUUID()); - field.configureQueenChronosphere(this); + field.configureOwnerAnchored(this); this.startRoyalRecovery(35); } case "debris_cyclone" -> { diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalBlackHoleEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalBlackHoleEntity.java index 2a287cab..cd00bdf7 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalBlackHoleEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalBlackHoleEntity.java @@ -1,8 +1,9 @@ package com.craisinlord.antarchy.content.entity.royal; +import com.craisinlord.anthology.time.TimeDilationAnchor; import com.craisinlord.antarchy.content.AntarchyObjects; -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import com.craisinlord.antarchy.content.time.TimeDilationFieldEntity; +import com.craisinlord.anthology.time.TimeDilationApi; +import com.craisinlord.anthology.time.TimeDilationFieldEntity; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.entity.BlockSuction; import java.util.UUID; @@ -36,7 +37,7 @@ import software.bernie.geckolib.animation.PlayState; import software.bernie.geckolib.animation.RawAnimation; import software.bernie.geckolib.util.GeckoLibUtil; -public class RoyalBlackHoleEntity extends Entity implements GeoEntity { +public class RoyalBlackHoleEntity extends Entity implements GeoEntity, TimeDilationAnchor { private static final EntityDataAccessor RADIUS = SynchedEntityData.defineId(RoyalBlackHoleEntity.class, EntityDataSerializers.FLOAT); private static final EntityDataAccessor COLLAPSING = @@ -248,6 +249,11 @@ public class RoyalBlackHoleEntity extends Entity implements GeoEntity { } /** Returns the center of the animated black-hole cube in world coordinates. */ + @Override + public Vec3 timeDilationCenter() { + return this.effectCenter(); + } + public Vec3 effectCenter() { double animationSeconds = Math.min(CORE_RISE_END_SECONDS, this.animationAge / 20.0D); double riseProgress = animationSeconds / CORE_RISE_END_SECONDS; diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalBossEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalBossEntity.java index 148d75bc..8b669228 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalBossEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalBossEntity.java @@ -1,12 +1,13 @@ package com.craisinlord.antarchy.content.entity.royal; +import com.craisinlord.anthology.beam.BeamOwner; import com.craisinlord.antarchy.config.AntarchySettings; -import com.craisinlord.antarchy.content.entity.multipart.MultipartEntityOwner; -import com.craisinlord.antarchy.content.entity.multipart.MultipartLayout; -import com.craisinlord.antarchy.content.entity.multipart.MultipartPartDefinition; -import com.craisinlord.antarchy.content.entity.royal.beam.RoyalBeamController; -import com.craisinlord.antarchy.content.entity.royal.beam.RoyalBeamSettings; -import com.craisinlord.antarchy.content.entity.royal.beam.RoyalBeamTerrainMode; +import com.craisinlord.anthology.multipart.MultipartEntityOwner; +import com.craisinlord.anthology.multipart.MultipartLayout; +import com.craisinlord.anthology.multipart.MultipartPartDefinition; +import com.craisinlord.anthology.beam.BeamController; +import com.craisinlord.anthology.beam.BeamSettings; +import com.craisinlord.anthology.beam.BeamTerrainMode; import com.craisinlord.antarchy.content.entity.royal.beam.RoyalBeamElement; import com.craisinlord.antarchy.content.entity.royal.attack.RoyalAttackLane; import com.craisinlord.antarchy.content.entity.royal.attack.RoyalAttackScheduler; @@ -69,7 +70,7 @@ import software.bernie.geckolib.animation.PlayState; import software.bernie.geckolib.animation.RawAnimation; import software.bernie.geckolib.util.GeckoLibUtil; -public abstract class RoyalBossEntity extends Monster implements GeoEntity, MultipartEntityOwner { +public abstract class RoyalBossEntity extends Monster implements GeoEntity, MultipartEntityOwner, BeamOwner { public static final float MODEL_RENDER_SCALE = 2.0F; public static final float GAMEPLAY_WIDTH = 28.0F; public static final float GAMEPLAY_HEIGHT = 15.0F; @@ -165,7 +166,7 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult private static final RawAnimation DEATH_ANIM = RawAnimation.begin().thenPlayAndHold("death"); private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); - protected final RoyalBeamController[] beamControllers = new RoyalBeamController[3]; + protected final BeamController[] beamControllers = new BeamController[3]; protected final RoyalAttackScheduler attackScheduler = new RoyalAttackScheduler(); private final ServerBossEvent bossEvent; private final RoyalHead[] heads = { @@ -202,7 +203,7 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult protected RoyalBossEntity(EntityType entityType, Level level) { super(entityType, level); for (int i = 0; i < this.beamControllers.length; i++) { - this.beamControllers[i] = new RoyalBeamController(this); + this.beamControllers[i] = new BeamController(this); } this.xpReward = 500; this.groundMoveControl = new MoveControl(this); @@ -247,9 +248,9 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult protected abstract SoundEvent royalBeamEndSound(); - protected abstract RoyalBeamSettings royalBeamSettings(); + protected abstract BeamSettings royalBeamSettings(); - protected abstract RoyalBeamTerrainMode royalBeamTerrainMode(); + protected abstract BeamTerrainMode royalBeamTerrainMode(); protected RoyalBeamElement royalBeamElement(@Nullable RoyalHead head) { return RoyalBeamElement.GENERIC; @@ -266,7 +267,7 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult protected void tickRoyalBeamEffects(RoyalHead head, Vec3 start, Vec3 end) { } - protected RoyalBeamTerrainMode royalBeamTerrainMode(@Nullable RoyalHead head) { + protected BeamTerrainMode royalBeamTerrainMode(@Nullable RoyalHead head) { return this.royalBeamTerrainMode(); } @@ -350,18 +351,18 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult } @Override - public MultipartLayout antarchy$getMultipartLayout() { + public MultipartLayout anthology$getMultipartLayout() { return RoyalBossMultipartLayout.INSTANCE; } @Override @Nullable - public Entity[] antarchy$getMultipartParts() { + public Entity[] anthology$getMultipartParts() { return this.multipartParts; } @Override - public void antarchy$setMultipartParts(@Nullable Entity[] parts) { + public void anthology$setMultipartParts(@Nullable Entity[] parts) { this.multipartParts = parts; } @@ -642,7 +643,7 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult } for (RoyalHead head : this.heads) { int index = head.slot().ordinal(); - RoyalBeamController controller = this.beamControllers[index]; + BeamController controller = this.beamControllers[index]; if (controller.isFiring()) { LivingEntity beamTarget = head.target(this.level()); if (!head.shooting() || beamTarget == null || !beamTarget.isAlive() @@ -688,7 +689,7 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult || !this.targetInBeamLine(head, target)) { continue; } - RoyalBeamSettings beamSettings = this.royalBeamSettings(); + BeamSettings beamSettings = this.royalBeamSettings(); int duration = Math.max(1, beamSettings.durationTicks()); int cooldown = Math.max(1, Mth.floor(beamSettings.cooldownTicks() * phase.cooldownScale())); int windup = Math.max(0, AntarchySettings.queenBeamWindupTicks()); @@ -1220,7 +1221,7 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult for (RoyalHead head : this.heads) { head.reset(); } - for (RoyalBeamController controller : this.beamControllers) { + for (BeamController controller : this.beamControllers) { controller.stop(); } this.setFiringRoyalBeam(false); @@ -1330,7 +1331,7 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult public void setFiringRoyalBeam(boolean firing) { } - public RoyalBeamController beamController() { + public BeamController beamController() { return this.beamControllers[0]; } @@ -1463,6 +1464,16 @@ public abstract class RoyalBossEntity extends Monster implements GeoEntity, Mult this.applyRoyalDamageModifier(); } + @Override + public float scaleBeamDamage(float damage) { + return this.scaleRoyalDamage(damage); + } + + @Override + public boolean canBeamDamage(LivingEntity target) { + return this.canDamageWithRoyalAttack(target); + } + public float scaleRoyalDamage(double damage) { return (float) (damage * this.royalDamageMultiplier); } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalBossMultipartLayout.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalBossMultipartLayout.java index fe61f4e7..41e27f97 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalBossMultipartLayout.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalBossMultipartLayout.java @@ -1,7 +1,7 @@ package com.craisinlord.antarchy.content.entity.royal; -import com.craisinlord.antarchy.content.entity.multipart.MultipartLayout; -import com.craisinlord.antarchy.content.entity.multipart.MultipartPartDefinition; +import com.craisinlord.anthology.multipart.MultipartLayout; +import com.craisinlord.anthology.multipart.MultipartPartDefinition; public final class RoyalBossMultipartLayout implements MultipartLayout { public static final RoyalBossMultipartLayout INSTANCE = new RoyalBossMultipartLayout(); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalMountEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalMountEntity.java index 437fafa0..3fdb8d95 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalMountEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/RoyalMountEntity.java @@ -4,12 +4,12 @@ import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.AntarchyTags; import com.craisinlord.antarchy.content.entity.royal.beam.RoyalBeamElement; -import com.craisinlord.antarchy.content.entity.royal.beam.RoyalBeamController; -import com.craisinlord.antarchy.content.entity.royal.beam.RoyalBeamSettings; -import com.craisinlord.antarchy.content.entity.royal.beam.RoyalBeamTerrainMode; +import com.craisinlord.anthology.beam.BeamController; +import com.craisinlord.anthology.beam.BeamSettings; +import com.craisinlord.anthology.beam.BeamTerrainMode; import com.craisinlord.antarchy.content.effect.RoyalEffectEligibility; import com.craisinlord.antarchy.content.effect.RoyalEffectHooks; -import com.craisinlord.antarchy.content.time.TimeDilationApi; +import com.craisinlord.anthology.time.TimeDilationApi; import net.minecraft.resources.ResourceLocation; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; @@ -136,7 +136,7 @@ public abstract class RoyalMountEntity extends TamableAnimal implements GeoEntit private int flapSoundTimer; private boolean riderAscendPressed; private boolean riderDescendPressed; - private final RoyalBeamController beamController = new RoyalBeamController(this); + private final BeamController beamController = new BeamController(this); private int beamWindupTicks; private int beamCooldownTicks; private int beamHead; @@ -540,7 +540,7 @@ public abstract class RoyalMountEntity extends TamableAnimal implements GeoEntit } } if (this.beamController.isFiring()) { - this.beamController.tick(this.beamShootFrom(), this.getTarget(), this.beamSettings(), RoyalBeamTerrainMode.NONE, this::setBeamEndPosition); + this.beamController.tick(this.beamShootFrom(), this.getTarget(), this.beamSettings(), BeamTerrainMode.NONE, this::setBeamEndPosition); if (!this.beamController.isFiring()) { this.entityData.set(BEAM_ACTIVE, false); this.entityData.set(BEAM_HEAD, -1); @@ -598,9 +598,9 @@ public abstract class RoyalMountEntity extends TamableAnimal implements GeoEntit level.sendParticles(ParticleTypes.END_ROD, center.x, center.y + 0.5D, center.z, 28, 1.2D, 0.6D, 1.2D, 0.03D); } - private RoyalBeamSettings beamSettings() { + private BeamSettings beamSettings() { float damage = this instanceof PrincessEntity ? 10.0F : 12.0F; - return new RoyalBeamSettings(28.0D, 0.08D, 4.0D, BEAM_DURATION_TICKS, 6, BEAM_COOLDOWN_TICKS, + return new BeamSettings(28.0D, 0.08D, 4.0D, BEAM_DURATION_TICKS, 6, BEAM_COOLDOWN_TICKS, 0.35F, 0.45F, damage, 0.45F, 3, 0.0D, 0.0F, 0.0F, 0, 0.0F, 0.0F, 0.0F, false, true); } @@ -622,7 +622,7 @@ public abstract class RoyalMountEntity extends TamableAnimal implements GeoEntit return this.entityData.get(HAS_BEAM_END) ? new Vec3(this.entityData.get(BEAM_END_X), this.entityData.get(BEAM_END_Y), this.entityData.get(BEAM_END_Z)) : null; } public RoyalBeamElement getBeamElement() { return RoyalBeamElement.GENERIC; } - public RoyalBeamController beamController() { return this.beamController; } + public BeamController beamController() { return this.beamController; } private void setBeamEndPosition(@Nullable Vec3 position) { this.entityData.set(HAS_BEAM_END, position != null); if (position != null) { diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/beam/RoyalBeamController.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/beam/RoyalBeamController.java deleted file mode 100644 index cdf14c68..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/beam/RoyalBeamController.java +++ /dev/null @@ -1,385 +0,0 @@ -package com.craisinlord.antarchy.content.entity.royal.beam; - -import com.craisinlord.antarchy.content.entity.royal.RoyalBossEntity; -import java.util.List; -import java.util.HashSet; -import java.util.Set; -import java.util.function.Consumer; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.tags.BlockTags; -import net.minecraft.util.Mth; -import net.minecraft.world.damagesource.DamageSource; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.EntitySelector; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.Mob; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.entity.ai.attributes.Attributes; -import net.minecraft.world.level.ClipContext; -import net.minecraft.world.level.GameRules; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.HitResult; -import net.minecraft.world.phys.Vec3; -import org.jetbrains.annotations.Nullable; - -public final class RoyalBeamController { - private static final int INITIAL_TRACKING_DELAY_TICKS = 8; - private final LivingEntity owner; - private Vec3 serverTarget; - private Vec3 beamEndPosition; - private int beamTicks; - private int beamAgeTicks; - private int trackingDelayTicks; - private int terrainMutationsThisTick; - private final Set damagedThisTick = new HashSet<>(); - private static final int ICE_MUTATIONS_PER_TICK = 3; - private static final float ICE_IMPACT_RADIUS = 2.0F; - - public RoyalBeamController(LivingEntity owner) { - this.owner = owner; - } - - public RoyalBeamController(Mob owner) { - this((LivingEntity) owner); - } - - public boolean isFiring() { - return this.beamTicks > 0; - } - - public int beamTicks() { - return this.beamTicks; - } - - @Nullable - public Vec3 beamEndPosition() { - return this.beamEndPosition; - } - - public void start(Vec3 shootFrom, Vec3 target, int durationTicks) { - this.serverTarget = target; - this.beamEndPosition = target; - this.beamTicks = Math.max(1, durationTicks); - this.beamAgeTicks = 0; - this.trackingDelayTicks = INITIAL_TRACKING_DELAY_TICKS; - } - - public void stop() { - this.serverTarget = null; - this.beamEndPosition = null; - this.beamTicks = 0; - this.beamAgeTicks = 0; - } - - public void tick( - Vec3 shootFrom, - @Nullable LivingEntity target, - RoyalBeamSettings settings, - RoyalBeamTerrainMode terrainMode, - Consumer<@Nullable Vec3> syncedEndPosition - ) { - this.tick(shootFrom, owner.getLookAngle(), target, settings, terrainMode, syncedEndPosition); - } - - public void tick( - Vec3 shootFrom, - Vec3 shootDirection, - @Nullable LivingEntity target, - RoyalBeamSettings settings, - RoyalBeamTerrainMode terrainMode, - Consumer<@Nullable Vec3> syncedEndPosition - ) { - this.tick(shootFrom, shootDirection, target, settings, terrainMode, syncedEndPosition, false); - } - - public void tick( - Vec3 shootFrom, - Vec3 shootDirection, - @Nullable LivingEntity target, - RoyalBeamSettings settings, - RoyalBeamTerrainMode terrainMode, - Consumer<@Nullable Vec3> syncedEndPosition, - boolean useTrackedTargetAim - ) { - if (this.beamTicks <= 0) { - syncedEndPosition.accept(null); - return; - } - - this.beamTicks--; - this.beamAgeTicks++; - this.terrainMutationsThisTick = 0; - if (this.trackingDelayTicks > 0) { - this.trackingDelayTicks--; - } else if (target != null && target.isAlive()) { - Vec3 targetEye = target.getEyePosition(); - this.serverTarget = this.serverTarget == null - ? targetEye - : this.serverTarget.add(targetEye.subtract(this.serverTarget).scale(settings.targetTracking())); - } - if (this.serverTarget == null) { - this.stop(); - syncedEndPosition.accept(null); - return; - } - - Vec3 trackedDirection = this.serverTarget.subtract(shootFrom); - Vec3 direction = useTrackedTargetAim && trackedDirection.lengthSqr() >= 1.0E-7D - ? trackedDirection.normalize() - : shootDirection.lengthSqr() < 1.0E-7D - ? this.owner.getLookAngle().normalize() - : shootDirection.normalize(); - double committedDistance = Math.min(settings.range(), Math.max(settings.pathStep(), - this.serverTarget.subtract(shootFrom).dot(direction))); - double travelProgress = Mth.clamp(this.beamAgeTicks / (double) settings.travelTicks(), 0.0D, 1.0D); - double currentRange = Math.max(settings.pathStep(), committedDistance * travelProgress); - Vec3 clipEnd = shootFrom.add(direction.scale(currentRange)); - HitResult hit = this.owner.level().clip(new ClipContext( - shootFrom, - clipEnd, - ClipContext.Block.COLLIDER, - ClipContext.Fluid.NONE, - this.owner - )); - this.beamEndPosition = hit.getLocation(); - syncedEndPosition.accept(this.beamEndPosition); - - if (!this.owner.level().isClientSide && this.beamEndPosition != null) { - boolean impactedBlock = hit.getType() == HitResult.Type.BLOCK; - marchDamageAndTerrain(shootFrom, this.beamEndPosition, settings, terrainMode, impactedBlock); - } - - if (this.beamTicks <= 0) { - this.stop(); - syncedEndPosition.accept(null); - } - } - - private void marchDamageAndTerrain( - Vec3 shootFrom, - Vec3 beamEnd, - RoyalBeamSettings settings, - RoyalBeamTerrainMode terrainMode, - boolean impactedBlock - ) { - Vec3 direction = beamEnd.subtract(shootFrom).normalize(); - double distance = shootFrom.distanceTo(beamEnd); - DamageSource damageSource = this.owner instanceof Player player - ? player.damageSources().playerAttack(player) - : this.owner.damageSources().mobAttack(this.owner); - this.damagedThisTick.clear(); - boolean pathMutates = terrainMode == RoyalBeamTerrainMode.DESTROY; - for (double walked = settings.pathStep(); walked < Math.min(distance, settings.range()); walked += settings.pathStep()) { - Vec3 sample = shootFrom.add(direction.scale(walked)); - hurtEntitiesAround(sample, settings.pathDamageRadius(), this.scaledDamage(settings.damage()), settings.knockback(), damageSource, settings.requireLineOfSightForDamage(), this.damagedThisTick); - if (pathMutates && shouldMutateTerrain(settings, walked)) { - mutateTerrainAround(sample, settings.pathTerrainRadius(), settings, terrainMode); - } - } - - hurtEntitiesAround(beamEnd, settings.impactDamageRadius(), this.scaledDamage(settings.damage()), settings.knockback(), damageSource, settings.requireLineOfSightForDamage(), this.damagedThisTick); - - if (!shouldMutateTerrain(settings, distance)) { - return; - } - if (terrainMode == RoyalBeamTerrainMode.BUILD_ICE) { - if (impactedBlock) { - mutateTerrainAround(beamEnd, ICE_IMPACT_RADIUS, settings, terrainMode); - } - } else { - mutateTerrainAround(beamEnd, settings.impactTerrainRadius(), settings, terrainMode); - } - } - - private float scaledDamage(float damage) { - return this.owner instanceof RoyalBossEntity royalBoss ? royalBoss.scaleRoyalDamage(damage) : damage; - } - - private boolean shouldMutateTerrain(RoyalBeamSettings settings, double distanceFromOwner) { - return settings.terrainEnabled() - && settings.maxTerrainMutationsPerTick() > 0 - && this.beamTicks % settings.terrainIntervalTicks() == 0 - && distanceFromOwner <= settings.maxTerrainDistance() - && this.owner.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); - } - - private boolean hurtEntitiesAround( - Vec3 center, - float radius, - float damageAmount, - float knockbackAmount, - DamageSource damageSource, - boolean requireLineOfSight, - Set damagedThisTick - ) { - if (radius <= 0.0F || damageAmount <= 0.0F) { - return false; - } - - AABB aabb = new AABB(center.subtract(radius, radius, radius), center.add(radius, radius, radius)); - List entities = this.owner.level().getEntitiesOfClass( - LivingEntity.class, - aabb, - EntitySelector.NO_CREATIVE_OR_SPECTATOR - ); - boolean hurtAny = false; - for (LivingEntity living : entities) { - if (living.is(this.owner) - || this.owner.isAlliedTo(living) - || !(this.owner instanceof Player) && living.getType() == this.owner.getType() - || this.owner instanceof RoyalBossEntity royalBoss && !royalBoss.canDamageWithRoyalAttack(living) - || living.distanceToSqr(center) > radius * radius - || damagedThisTick.contains(living.getId()) - || requireLineOfSight && !canEntityBeHurtFrom(center, living)) { - continue; - } - if (living.hurt(damageSource, damageAmount)) { - damagedThisTick.add(living.getId()); - hurtAny = true; - knockbackTarget(living, knockbackAmount); - } - } - return hurtAny; - } - - private boolean canEntityBeHurtFrom(Vec3 center, LivingEntity living) { - Vec3 targetCenter = living.position().add(0.0D, living.getBbHeight() * 0.5D, 0.0D); - return this.owner.level().clip(new ClipContext( - center, - targetCenter, - ClipContext.Block.COLLIDER, - ClipContext.Fluid.NONE, - this.owner - )).getType() == HitResult.Type.MISS; - } - - private void knockbackTarget(Entity target, double strength) { - if (strength <= 0.0D) { - return; - } - - double resistance = target instanceof LivingEntity living - ? living.getAttributeValue(Attributes.KNOCKBACK_RESISTANCE) - : 0.0D; - double appliedStrength = strength * Math.max(0.0D, 1.0D - resistance); - if (appliedStrength <= 0.0D) { - return; - } - - Vec3 push = target.position().subtract(this.owner.position()).multiply(1.0D, 0.0D, 1.0D).normalize().scale(appliedStrength); - Vec3 movement = target.getDeltaMovement(); - target.setDeltaMovement( - movement.x * 0.5D + push.x, - Math.min(0.4D, movement.y * 0.5D + appliedStrength), - movement.z * 0.5D + push.z - ); - target.hasImpulse = true; - } - - private void mutateTerrainAround( - Vec3 center, - float radius, - RoyalBeamSettings settings, - RoyalBeamTerrainMode terrainMode - ) { - if (terrainMode == RoyalBeamTerrainMode.NONE || radius <= 0.0F) { - return; - } - - Level level = this.owner.level(); - int minX = Mth.floor(center.x - radius); - int minY = Mth.floor(center.y - radius); - int minZ = Mth.floor(center.z - radius); - int maxX = Mth.floor(center.x + radius); - int maxY = Mth.floor(center.y + radius); - int maxZ = Mth.floor(center.z + radius); - float radiusSqr = radius * radius; - - int cap = terrainMode == RoyalBeamTerrainMode.BUILD_ICE - ? Math.min(ICE_MUTATIONS_PER_TICK, settings.maxTerrainMutationsPerTick()) - : settings.maxTerrainMutationsPerTick(); - for (BlockPos cursor : BlockPos.betweenClosed(minX, minY, minZ, maxX, maxY, maxZ)) { - if (this.terrainMutationsThisTick >= cap) { - return; - } - BlockPos pos = cursor.immutable(); - if (pos.distToCenterSqr(center.x, center.y, center.z) > radiusSqr - || this.owner.getRandom().nextFloat() > settings.terrainMutationChance() - || pos.getY() < level.getMinBuildHeight() - || pos.getY() >= level.getMaxBuildHeight() - || !level.getWorldBorder().isWithinBounds(pos)) { - continue; - } - - BlockState existing = level.getBlockState(pos); - if (terrainMode == RoyalBeamTerrainMode.DESTROY) { - destroyBeamBlock(level, pos, existing, settings); - } else if (terrainMode == RoyalBeamTerrainMode.BUILD_ICE) { - buildIceBlock(level, pos, existing, settings); - } - } - } - - private void destroyBeamBlock(Level level, BlockPos pos, BlockState existing, RoyalBeamSettings settings) { - if (existing.isAir() - || level.getBlockEntity(pos) != null - || existing.getDestroySpeed(level, pos) < 0.0F - || existing.getBlock().getExplosionResistance() > settings.maxTerrainResistance() - || existing.getCollisionShape(level, pos).isEmpty()) { - return; - } - - if (this.owner.getRandom().nextFloat() <= settings.terrainDropChance()) { - level.destroyBlock(pos, true, this.owner); - } else { - level.levelEvent(2001, pos, Block.getId(existing)); - level.setBlockAndUpdate(pos, Blocks.AIR.defaultBlockState()); - } - this.terrainMutationsThisTick++; - } - - private void buildIceBlock(Level level, BlockPos pos, BlockState existing, RoyalBeamSettings settings) { - boolean replaceable = existing.isAir() - || existing.canBeReplaced() - || !existing.getFluidState().isEmpty(); - if (!replaceable || level.getBlockEntity(pos) != null || existing.is(BlockTags.ICE)) { - return; - } - if (!touchesFreezableSurface(level, pos)) { - return; - } - - level.levelEvent(2001, pos, Block.getId(existing)); - level.setBlock(pos, randomIceBlock().defaultBlockState(), Block.UPDATE_ALL); - this.terrainMutationsThisTick++; - } - - private static boolean touchesFreezableSurface(Level level, BlockPos pos) { - for (Direction direction : Direction.values()) { - BlockPos neighbor = pos.relative(direction); - BlockState state = level.getBlockState(neighbor); - if (state.is(BlockTags.ICE) || state.is(Blocks.SNOW_BLOCK)) { - continue; - } - if (state.isFaceSturdy(level, neighbor, direction.getOpposite())) { - return true; - } - } - return false; - } - - private Block randomIceBlock() { - return switch (this.owner.getRandom().nextInt(5)) { - case 0 -> Blocks.BLUE_ICE; - case 1 -> Blocks.PACKED_ICE; - case 2 -> Blocks.FROSTED_ICE; - case 3 -> Blocks.SNOW_BLOCK; - default -> Blocks.ICE; - }; - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/beam/RoyalBeamSettings.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/beam/RoyalBeamSettings.java deleted file mode 100644 index 24d418b8..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/beam/RoyalBeamSettings.java +++ /dev/null @@ -1,80 +0,0 @@ -package com.craisinlord.antarchy.content.entity.royal.beam; - -public record RoyalBeamSettings( - double range, - double targetTracking, - double pathStep, - int durationTicks, - int travelTicks, - int cooldownTicks, - float pathDamageRadius, - float impactDamageRadius, - float damage, - float knockback, - int terrainIntervalTicks, - double maxTerrainDistance, - float pathTerrainRadius, - float impactTerrainRadius, - int maxTerrainMutationsPerTick, - float terrainMutationChance, - float terrainDropChance, - float maxTerrainResistance, - boolean terrainEnabled, - boolean requireLineOfSightForDamage -) { - public static RoyalBeamSettings gauntletPower() { - return new RoyalBeamSettings(64.0D, 0.0D, 2.0D, 18, 4, 50, 0.9F, 1.8F, - 9.0F, 0.8F, 1, 64.0D, 0.8F, 1.8F, 6, 1.0F, 1.0F, 50.0F, true, false); - } - - public static RoyalBeamSettings gauntletInfinity() { - return new RoyalBeamSettings(64.0D, 0.0D, 1.5D, 24, 4, 1200, 1.25F, 2.5F, - 28.0F, 1.8F, 1, 64.0D, 1.0F, 2.0F, 0, 0.0F, 0.0F, 0.0F, false, false); - } - - public static RoyalBeamSettings tremorzillaLike(float damage, boolean terrainEnabled) { - return new RoyalBeamSettings( - 100.0D, - 0.1D, - 7.5D, - 30, - 12, - 90, - 6.0F, - 6.0F, - damage, - 1.0F, - 3, - 100.0D, - 5.0F, - 4.0F, - 192, - 1.0F, - 0.08F, - 15.0F, - terrainEnabled, - true - ); - } - - public RoyalBeamSettings { - range = Math.max(1.0D, range); - targetTracking = Math.clamp(targetTracking, 0.0D, 1.0D); - pathStep = Math.max(1.0D, pathStep); - durationTicks = Math.max(1, durationTicks); - travelTicks = Math.max(1, travelTicks); - cooldownTicks = Math.max(1, cooldownTicks); - pathDamageRadius = Math.max(0.0F, pathDamageRadius); - impactDamageRadius = Math.max(0.0F, impactDamageRadius); - damage = Math.max(0.0F, damage); - knockback = Math.max(0.0F, knockback); - terrainIntervalTicks = Math.max(1, terrainIntervalTicks); - maxTerrainDistance = Math.max(0.0D, maxTerrainDistance); - pathTerrainRadius = Math.max(0.0F, pathTerrainRadius); - impactTerrainRadius = Math.max(0.0F, impactTerrainRadius); - maxTerrainMutationsPerTick = Math.max(0, maxTerrainMutationsPerTick); - terrainMutationChance = Math.clamp(terrainMutationChance, 0.0F, 1.0F); - terrainDropChance = Math.clamp(terrainDropChance, 0.0F, 1.0F); - maxTerrainResistance = Math.max(0.0F, maxTerrainResistance); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/beam/RoyalBeamTerrainMode.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/beam/RoyalBeamTerrainMode.java deleted file mode 100644 index 4d848e8a..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/entity/royal/beam/RoyalBeamTerrainMode.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.craisinlord.antarchy.content.entity.royal.beam; - -public enum RoyalBeamTerrainMode { - NONE, - DESTROY, - BUILD_ICE -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/AttitudeAdjusterSlamManager.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/AttitudeAdjusterSlamManager.java index 3adeeddc..da718797 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/AttitudeAdjusterSlamManager.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/AttitudeAdjusterSlamManager.java @@ -1,9 +1,9 @@ package com.craisinlord.antarchy.content.item; +import com.craisinlord.anthology.shake.CameraShakeSync; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.anthology.gravity.GravityDirection; import com.craisinlord.anthology.gravity.GravityRotationUtil; -import com.craisinlord.antarchy.content.network.ImpactShakeSync; import java.util.HashMap; import java.util.Iterator; import java.util.Map; @@ -279,7 +279,7 @@ public final class AttitudeAdjusterSlamManager { } private static void shake(ServerLevel level, Vec3 pos, float intensity, int durationTicks) { - ImpactShakeSync.sendNearby(level, pos, intensity, durationTicks, IMPACT_SHAKE_RADIUS); + CameraShakeSync.sendNearby(level, pos, intensity, durationTicks, IMPACT_SHAKE_RADIUS); } private static Vec3 horizontalAway(Vec3 from, Vec3 to, Vec3 fallback) { diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/RoyalGuardianSwordAbilities.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/RoyalGuardianSwordAbilities.java index 70109ee2..6ec5b1c3 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/RoyalGuardianSwordAbilities.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/RoyalGuardianSwordAbilities.java @@ -1,10 +1,10 @@ package com.craisinlord.antarchy.content.item; +import com.craisinlord.anthology.shake.CameraShakeSync; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.effect.CommandedEntityAccess; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.entity.royal.RoyalIceSpikeEntity; -import com.craisinlord.antarchy.content.network.ImpactShakeSync; import java.util.HashSet; import java.util.Set; import java.util.UUID; @@ -111,7 +111,7 @@ public final class RoyalGuardianSwordAbilities { level.sendParticles(FIRE_GOLD, center.x, center.y, center.z, 28, 1.1D, 0.8D, 1.1D, 0.04D); level.sendParticles(ParticleTypes.EXPLOSION, center.x, center.y, center.z, 3, 0.8D, 0.6D, 0.8D, 0.0D); level.playSound(null, BlockPos.containing(center), SoundEvents.GENERIC_EXPLODE.value(), SoundSource.PLAYERS, 1.0F, 1.05F); - ImpactShakeSync.sendNearby(level, center, FIRE_SHAKE_INTENSITY, FIRE_SHAKE_DURATION, FIRE_SHAKE_RADIUS); + CameraShakeSync.sendNearby(level, center, FIRE_SHAKE_INTENSITY, FIRE_SHAKE_DURATION, FIRE_SHAKE_RADIUS); } private static void placeBoundedFire(ServerLevel level, Vec3 center, int cap) { diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/time/TemporalTunerAccess.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/TemporalTunerAccess.java similarity index 74% rename from common-1.21.1/src/main/java/com/craisinlord/antarchy/content/time/TemporalTunerAccess.java rename to common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/TemporalTunerAccess.java index 988d615c..39c283fb 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/time/TemporalTunerAccess.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/TemporalTunerAccess.java @@ -1,4 +1,4 @@ -package com.craisinlord.antarchy.content.time; +package com.craisinlord.antarchy.content.item; public interface TemporalTunerAccess { double antarchy$getTemporalTunerRate(); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/TemporalTunerItem.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/TemporalTunerItem.java index 642481a2..164456b0 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/TemporalTunerItem.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/item/TemporalTunerItem.java @@ -1,7 +1,6 @@ package com.craisinlord.antarchy.content.item; import com.craisinlord.antarchy.config.AntarchySettings; -import com.craisinlord.antarchy.content.time.TemporalTunerAccess; import net.minecraft.ChatFormatting; import net.minecraft.network.chat.Component; import net.minecraft.world.entity.player.Player; diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/movement/AntarchyGravityHooks.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/movement/AntarchyGravityHooks.java deleted file mode 100644 index 5ad12022..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/movement/AntarchyGravityHooks.java +++ /dev/null @@ -1,94 +0,0 @@ -package com.craisinlord.antarchy.content.movement; - -import com.craisinlord.antarchy.Antarchy; -import com.craisinlord.antarchy.content.client.PortalGunRollClientState; -import com.craisinlord.antarchy.content.entity.BedBugEntity; -import com.craisinlord.antarchy.content.entity.portal.DimensionalTearEntity; -import com.craisinlord.antarchy.content.fluid.AntarchyFluidChecks; -import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisUndersideManager; -import com.craisinlord.anthology.effect.AnthologyEffects; -import com.craisinlord.anthology.gravity.GravityApi; -import com.craisinlord.anthology.gravity.GravityHooks; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.effect.MobEffectInstance; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.Mob; - -public final class AntarchyGravityHooks { - private AntarchyGravityHooks() { - } - - public static void register() { - GravityHooks.addInvertedRegion(ThoraxisUndersideManager::isInUnderside); - GravityHooks.addInvertedFluid(AntarchyFluidChecks::isAntiwater); - GravityHooks.addLoadListener(AntarchyGravityHooks::clearStaleUndersideInversion); - } - - public static void registerClient() { - GravityHooks.addCameraRollSource(PortalGunRollClientState::getRollDegrees); - } - - private static void clearStaleUndersideInversion(Entity entity) { - if (!(entity instanceof Mob mob) - || !GravityApi.isGravityInverted(mob) - || !GravityApi.isGravityForced(mob)) { - return; - } - MobEffectInstance invertedEffect = mob.getEffect(AnthologyEffects.inverted()); - boolean aboveUndersideExit = ThoraxisUndersideManager.isAboveUndersideExit(mob); - int nearbyDimensionalTears = countNearbyDimensionalTears(mob); - if (invertedEffect != null - && invertedEffect.isAmbient() - && !invertedEffect.isVisible() - && aboveUndersideExit) { - clearInversion(mob); - Antarchy.LOGGER.warn( - "[antarchy-gravity] cleared stale underside inversion from loaded mob type={} uuid={} pos=({}, {}, {}) dim={} effectDuration={} nearbyDimensionalTears={}", - mob.getType(), mob.getUUID(), mob.getX(), mob.getY(), mob.getZ(), - mob.level() != null ? mob.level().dimension().location() : "?", - invertedEffect.getDuration(), nearbyDimensionalTears - ); - return; - } - if (invertedEffect != null - && mob instanceof BedBugEntity - && aboveUndersideExit - && ThoraxisUndersideManager.isThoraxis(mob.level())) { - clearInversion(mob); - Antarchy.LOGGER.warn( - "[antarchy-gravity] cleared loaded inverted bed bug above underside exit type={} uuid={} pos=({}, {}, {}) dim={} effectDuration={} effectAmbient={} effectVisible={} nearbyDimensionalTears={}", - mob.getType(), mob.getUUID(), mob.getX(), mob.getY(), mob.getZ(), - mob.level() != null ? mob.level().dimension().location() : "?", - invertedEffect.getDuration(), invertedEffect.isAmbient(), invertedEffect.isVisible(), nearbyDimensionalTears - ); - return; - } - Antarchy.LOGGER.info( - "[antarchy-gravity] loaded inverted mob type={} uuid={} pos=({}, {}, {}) dim={} hasInvertedEffect={} effectDuration={} effectAmbient={} effectVisible={} aboveUndersideExit={} nearbyDimensionalTears={}", - mob.getType(), mob.getUUID(), mob.getX(), mob.getY(), mob.getZ(), - mob.level() != null ? mob.level().dimension().location() : "?", - invertedEffect != null, - invertedEffect != null ? invertedEffect.getDuration() : -1, - invertedEffect != null && invertedEffect.isAmbient(), - invertedEffect != null && invertedEffect.isVisible(), - aboveUndersideExit, - nearbyDimensionalTears - ); - } - - private static void clearInversion(Mob mob) { - mob.removeEffect(AnthologyEffects.inverted()); - GravityApi.resetGravityState(mob); - } - - private static int countNearbyDimensionalTears(Mob mob) { - if (!(mob.level() instanceof ServerLevel serverLevel)) { - return -1; - } - return serverLevel.getEntitiesOfClass( - DimensionalTearEntity.class, - mob.getBoundingBox().inflate(48.0D), - Entity::isAlive - ).size(); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/movement/DreamSandLowGravityAccess.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/movement/DreamSandLowGravityAccess.java deleted file mode 100644 index d4bc5187..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/movement/DreamSandLowGravityAccess.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.craisinlord.antarchy.content.movement; - -public interface DreamSandLowGravityAccess { - boolean antarchy$isDreamSandLowGravityActive(); - - void antarchy$setDreamSandLowGravityActive(boolean active); - - int antarchy$getDreamSandLowGravityTicksRemaining(); - - void antarchy$setDreamSandLowGravityTicksRemaining(int ticks); - - int antarchy$getDreamSandLandingGraceTicks(); - - void antarchy$setDreamSandLandingGraceTicks(int ticks); - - default void antarchy$clearDreamSandLowGravity() { - antarchy$setDreamSandLowGravityActive(false); - antarchy$setDreamSandLowGravityTicksRemaining(0); - antarchy$setDreamSandLandingGraceTicks(0); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/ImpactShakePayload.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/ImpactShakePayload.java deleted file mode 100644 index 25f1c213..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/ImpactShakePayload.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.craisinlord.antarchy.content.network; - -import com.craisinlord.antarchy.Antarchy; -import io.netty.buffer.ByteBuf; -import net.minecraft.network.codec.ByteBufCodecs; -import net.minecraft.network.codec.StreamCodec; -import net.minecraft.network.protocol.common.custom.CustomPacketPayload; -import net.minecraft.resources.ResourceLocation; - -public record ImpactShakePayload(double x, double y, double z, float intensity, int durationTicks, float radius) implements CustomPacketPayload { - public static final Type TYPE = - new Type<>(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "impact_shake")); - public static final StreamCodec STREAM_CODEC = StreamCodec.composite( - ByteBufCodecs.DOUBLE, - ImpactShakePayload::x, - ByteBufCodecs.DOUBLE, - ImpactShakePayload::y, - ByteBufCodecs.DOUBLE, - ImpactShakePayload::z, - ByteBufCodecs.FLOAT, - ImpactShakePayload::intensity, - ByteBufCodecs.VAR_INT, - ImpactShakePayload::durationTicks, - ByteBufCodecs.FLOAT, - ImpactShakePayload::radius, - ImpactShakePayload::new - ); - - @Override - public Type type() { - return TYPE; - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/ImpactShakeSync.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/ImpactShakeSync.java deleted file mode 100644 index d8981ae6..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/ImpactShakeSync.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.craisinlord.antarchy.content.network; - -import java.util.function.BiConsumer; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.phys.Vec3; - -public final class ImpactShakeSync { - private static final BiConsumer NOOP = (player, payload) -> { - }; - private static volatile BiConsumer sink = NOOP; - - private ImpactShakeSync() { - } - - public static void setSink(BiConsumer sink) { - ImpactShakeSync.sink = sink == null ? NOOP : sink; - } - - public static void send(ServerPlayer player, ImpactShakePayload payload) { - sink.accept(player, payload); - } - - public static void sendNearby(ServerLevel level, Vec3 pos, float intensity, int durationTicks, float radius) { - ImpactShakePayload payload = new ImpactShakePayload(pos.x, pos.y, pos.z, intensity, durationTicks, radius); - double radiusSqr = radius * radius; - for (ServerPlayer player : level.players()) { - if (player.distanceToSqr(pos.x, pos.y, pos.z) <= radiusSqr) { - send(player, payload); - } - } - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/PortalGunTransitPayload.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/PortalGunTransitPayload.java deleted file mode 100644 index 8e6cd584..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/PortalGunTransitPayload.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.craisinlord.antarchy.content.network; - -import com.craisinlord.antarchy.Antarchy; -import io.netty.buffer.ByteBuf; -import net.minecraft.network.codec.StreamCodec; -import net.minecraft.network.protocol.common.custom.CustomPacketPayload; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.phys.Vec3; - -public record PortalGunTransitPayload(int portalId, Vec3 start, Vec3 end, Vec3 velocity) implements CustomPacketPayload { - public static final Type TYPE = new Type<>(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "portal_gun_transit")); - public static final StreamCodec STREAM_CODEC = StreamCodec.of(PortalGunTransitPayload::write, PortalGunTransitPayload::read); - - private static void write(ByteBuf buffer, PortalGunTransitPayload payload) { - buffer.writeInt(payload.portalId()); - writeVec(buffer, payload.start()); - writeVec(buffer, payload.end()); - writeVec(buffer, payload.velocity()); - } - - private static PortalGunTransitPayload read(ByteBuf buffer) { - int portalId = buffer.readInt(); - Vec3 start = readVec(buffer); - Vec3 end = readVec(buffer); - Vec3 velocity = readVec(buffer); - return new PortalGunTransitPayload(portalId, start, end, velocity); - } - - private static void writeVec(ByteBuf buffer, Vec3 vector) { - buffer.writeDouble(vector.x); - buffer.writeDouble(vector.y); - buffer.writeDouble(vector.z); - } - - private static Vec3 readVec(ByteBuf buffer) { - return new Vec3(buffer.readDouble(), buffer.readDouble(), buffer.readDouble()); - } - - @Override - public Type type() { - return TYPE; - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/TimeDilationFieldsPayload.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/TimeDilationFieldsPayload.java deleted file mode 100644 index ef89e944..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/TimeDilationFieldsPayload.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.craisinlord.antarchy.content.network; - -import com.craisinlord.antarchy.Antarchy; -import com.craisinlord.antarchy.content.time.TimeDilationFieldSnapshot; -import io.netty.buffer.ByteBuf; -import java.util.List; -import net.minecraft.network.codec.ByteBufCodecs; -import net.minecraft.network.codec.StreamCodec; -import net.minecraft.network.protocol.common.custom.CustomPacketPayload; -import net.minecraft.resources.ResourceLocation; - -public record TimeDilationFieldsPayload(List fields) implements CustomPacketPayload { - public static final Type TYPE = - new Type<>(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "time_dilation_fields")); - - private static final StreamCodec FIELD_CODEC = StreamCodec.of( - (buf, field) -> { - buf.writeDouble(field.x()); - buf.writeDouble(field.y()); - buf.writeDouble(field.z()); - buf.writeDouble(field.radius()); - buf.writeDouble(field.rate()); - buf.writeInt(field.age()); - buf.writeInt(field.durationTicks()); - }, - buf -> new TimeDilationFieldSnapshot( - buf.readDouble(), buf.readDouble(), buf.readDouble(), buf.readDouble(), - buf.readDouble(), buf.readInt(), buf.readInt() - ) - ); - - public static final StreamCodec STREAM_CODEC = StreamCodec.composite( - ByteBufCodecs.collection(java.util.ArrayList::new, FIELD_CODEC, 128), - TimeDilationFieldsPayload::fields, - TimeDilationFieldsPayload::new - ); - - public TimeDilationFieldsPayload { - fields = List.copyOf(fields); - } - - @Override - public Type type() { - return TYPE; - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/TimeDilationRatePayload.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/TimeDilationRatePayload.java deleted file mode 100644 index e97d8280..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/network/TimeDilationRatePayload.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.craisinlord.antarchy.content.network; - -import com.craisinlord.antarchy.Antarchy; -import io.netty.buffer.ByteBuf; -import java.util.UUID; -import net.minecraft.network.codec.ByteBufCodecs; -import net.minecraft.network.codec.StreamCodec; -import net.minecraft.network.protocol.common.custom.CustomPacketPayload; -import net.minecraft.resources.ResourceLocation; - -public record TimeDilationRatePayload(UUID entityUuid, double rate) implements CustomPacketPayload { - public static final Type TYPE = - new Type<>(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "time_dilation_rate")); - private static final StreamCodec UUID_CODEC = StreamCodec.of( - (buf, uuid) -> { - buf.writeLong(uuid.getMostSignificantBits()); - buf.writeLong(uuid.getLeastSignificantBits()); - }, - buf -> new UUID(buf.readLong(), buf.readLong()) - ); - public static final StreamCodec STREAM_CODEC = StreamCodec.composite( - UUID_CODEC, - TimeDilationRatePayload::entityUuid, - ByteBufCodecs.DOUBLE, - TimeDilationRatePayload::rate, - TimeDilationRatePayload::new - ); - - @Override - public Type type() { - return TYPE; - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portal/CrossDimensionTravelApi.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portal/CrossDimensionTravelApi.java deleted file mode 100644 index 47af4878..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portal/CrossDimensionTravelApi.java +++ /dev/null @@ -1,116 +0,0 @@ -package com.craisinlord.antarchy.content.portal; - -import java.util.LinkedHashSet; -import java.util.Set; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.vehicle.DismountHelper; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.Heightmap; -import net.minecraft.world.level.portal.DimensionTransition; -import net.minecraft.world.phys.Vec3; -import org.jetbrains.annotations.Nullable; - -public final class CrossDimensionTravelApi { - private static final int HORIZONTAL_SEARCH_RADIUS = 8; - private static final int VERTICAL_SEARCH_RADIUS = 8; - - private CrossDimensionTravelApi() { - } - - public static boolean transferToSafePosition(Entity entity, ServerLevel destination, BlockPos preferred) { - if (!entity.isAlive() || !(entity.level() instanceof ServerLevel source)) { - return false; - } - Vec3 arrival = findSafePosition(entity, destination, preferred); - if (arrival == null) { - return false; - } - if (entity instanceof ServerPlayer player) { - player.teleportTo(destination, arrival.x, arrival.y, arrival.z, player.getYRot(), player.getXRot()); - player.setPortalCooldown(); - return true; - } - if (source == destination) { - entity.teleportTo(arrival.x, arrival.y, arrival.z); - entity.setPortalCooldown(); - return true; - } - Entity moved = entity.changeDimension(new DimensionTransition( - destination, - arrival, - Vec3.ZERO, - entity.getYRot(), - entity.getXRot(), - DimensionTransition.PLAY_PORTAL_SOUND - )); - if (moved != null) { - moved.setPortalCooldown(); - return true; - } - return false; - } - - @Nullable - public static Vec3 findSafePosition(Entity entity, ServerLevel destination, BlockPos preferred) { - Set candidates = new LinkedHashSet<>(); - candidates.add(preferred); - for (int radius = 0; radius <= HORIZONTAL_SEARCH_RADIUS; radius++) { - for (int x = -radius; x <= radius; x++) { - for (int z = -radius; z <= radius; z++) { - if (radius > 0 && Math.abs(x) != radius && Math.abs(z) != radius) { - continue; - } - BlockPos column = preferred.offset(x, 0, z); - if (destination.hasChunkAt(column)) { - BlockPos surface = destination.getHeightmapPos(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, column); - candidates.add(surface); - candidates.add(surface.above()); - } - for (int y = 0; y <= VERTICAL_SEARCH_RADIUS; y++) { - candidates.add(column.above(y)); - if (y > 0) { - candidates.add(column.below(y)); - } - } - } - } - } - for (BlockPos candidate : candidates) { - if (!isAreaLoaded(destination, candidate)) { - continue; - } - Vec3 safe = DismountHelper.findSafeDismountLocation(entity.getType(), destination, candidate, true); - if (safe != null && isValidPosition(destination, safe)) { - return safe; - } - } - return null; - } - - private static boolean isAreaLoaded(ServerLevel level, BlockPos center) { - if (center.getY() <= level.getMinBuildHeight() || center.getY() >= level.getMaxBuildHeight() - 1 - || !level.getWorldBorder().isWithinBounds(center)) { - return false; - } - for (Direction direction : Direction.values()) { - if (!level.hasChunkAt(center.relative(direction))) { - return false; - } - } - return level.hasChunkAt(center) && level.hasChunkAt(center.above()); - } - - private static boolean isValidPosition(ServerLevel level, Vec3 position) { - BlockPos feet = BlockPos.containing(position); - BlockPos head = feet.above(); - BlockState feetState = level.getBlockState(feet); - BlockState headState = level.getBlockState(head); - return feetState.getFluidState().isEmpty() && headState.getFluidState().isEmpty() - && feetState.getCollisionShape(level, feet).isEmpty() - && headState.getCollisionShape(level, head).isEmpty(); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunApertureCuller.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunApertureCuller.java deleted file mode 100644 index 8143b7ce..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunApertureCuller.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.craisinlord.antarchy.content.portalgun; - -import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.Vec3; - -/** - * Conservative side planes through the destination opening and virtual eye. - * The exit plane itself is handled separately so bounds crossing it remain visible. - */ -public final class PortalGunApertureCuller { - private static final double MIN_EYE_DISTANCE = 0.05D; - private static final double PLANE_PADDING = 0.5D; - - private final Vec3 eye; - private final Vec3[] inwardNormals; - - private PortalGunApertureCuller(Vec3 eye, Vec3[] inwardNormals) { - this.eye = eye; - this.inwardNormals = inwardNormals; - } - - public static PortalGunApertureCuller create(PortalGunWorldPortalShape aperture, Vec3 eye) { - double eyeDepth = aperture.localCoords(eye).depth(); - if (eyeDepth >= -MIN_EYE_DISTANCE) { - return new PortalGunApertureCuller(eye, null); - } - Vec3[] corners = aperture.getCorners(0.0D); - Vec3 centerRay = aperture.center().subtract(eye); - Vec3[] normals = new Vec3[corners.length]; - for (int index = 0; index < corners.length; index++) { - Vec3 first = corners[index].subtract(eye); - Vec3 second = corners[(index + 1) % corners.length].subtract(eye); - Vec3 normal = first.cross(second); - if (normal.lengthSqr() < 1.0E-8D) { - return new PortalGunApertureCuller(eye, null); - } - normal = normal.normalize(); - if (normal.dot(centerRay) < 0.0D) { - normal = normal.scale(-1.0D); - } - normals[index] = normal; - } - return new PortalGunApertureCuller(eye, normals); - } - - public boolean intersects(AABB bounds) { - if (inwardNormals == null) { - return true; - } - for (Vec3 normal : inwardNormals) { - double supportX = normal.x >= 0.0D ? bounds.maxX : bounds.minX; - double supportY = normal.y >= 0.0D ? bounds.maxY : bounds.minY; - double supportZ = normal.z >= 0.0D ? bounds.maxZ : bounds.minZ; - double maxDistance = (supportX - eye.x) * normal.x - + (supportY - eye.y) * normal.y - + (supportZ - eye.z) * normal.z; - if (maxDistance < -PLANE_PADDING) { - return false; - } - } - return true; - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunCollisionHelper.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunCollisionHelper.java deleted file mode 100644 index 63ffe32b..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunCollisionHelper.java +++ /dev/null @@ -1,139 +0,0 @@ -package com.craisinlord.antarchy.content.portalgun; - -import java.util.List; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.Vec3; -import net.minecraft.world.phys.shapes.Shapes; -import net.minecraft.world.phys.shapes.VoxelShape; - -public final class PortalGunCollisionHelper { - private static final double SEARCH_PADDING = 1.5D; - private static final double PLANE_TOLERANCE = 0.06D; - private static final double EDGE_PADDING = 0.2D; - private static final double DEPTH_PADDING = 0.45D; - private static final double BORDER_TOLERANCE = 0.02D; - private static final double BORDER_THICKNESS = 0.0125D; - - private PortalGunCollisionHelper() { - } - - public static Vec3 resolveCollision(Entity entity, AABB startBox, Vec3 movement, Vec3 collided) { - if (movement.lengthSqr() <= 1.0E-7D) { - return collided; - } - AABB pathBox = startBox.expandTowards(movement).inflate(SEARCH_PADDING); - List nearby = PortalGunPortalEntity.findPortalsNearBounds(entity.level(), pathBox); - if (nearby.isEmpty()) { - return collided; - } - Vec3 adjusted = collided; - for (PortalGunPortalEntity portal : nearby) { - Vec3 candidateAdjusted = resolveCollisionAgainstPortal(entity, startBox, movement, adjusted, portal); - if (candidateAdjusted.distanceToSqr(movement) < adjusted.distanceToSqr(movement)) { - adjusted = candidateAdjusted; - } - } - return adjusted; - } - - private static Vec3 resolveCollisionAgainstPortal(Entity entity, AABB startBox, Vec3 movement, Vec3 collided, PortalGunPortalEntity portal) { - PortalGunPortalEntity linked = portal.getLinkedPortal(); - if (linked == null || !linked.isAlive() || portal.isTeleportCoolingDown(entity)) { - return collided; - } - PortalGunWorldPortalShape shape = portal.getWorldPortalShape(); - Vec3 normal = portal.getNormalVec().normalize(); - double desiredNormal = movement.dot(normal); - double collidedNormal = collided.dot(normal); - if (desiredNormal >= -1.0E-5D || desiredNormal >= collidedNormal - 1.0E-5D) { - return collided; - } - if (!canUsePortalPassThrough(entity, startBox, movement, portal, shape)) { - return collided; - } - double restoreAmount = desiredNormal - collidedNormal; - Vec3 adjusted = collided.add(normal.scale(restoreAmount)); - return applyBorderCollision(entity, startBox, adjusted, portal); - } - - private static boolean canUsePortalPassThrough(Entity entity, AABB startBox, Vec3 movement, PortalGunPortalEntity portal, PortalGunWorldPortalShape shape) { - AABB endBox = startBox.move(movement); - if (!portal.getPortalInsides(entity).intersects(startBox) - && !portal.getPortalInsides(entity).intersects(endBox) - && !intersectsPortalWindow(startBox, shape) - && !intersectsPortalWindow(endBox, shape) - && !segmentIntersectsPortalWindow(entity, portal, startBox, endBox)) { - return false; - } - Vec3 startProbe = portal.teleportProbePosition(entity, startBox); - Vec3 endProbe = portal.teleportProbePosition(entity, endBox); - if (portal.crossesPortal(startProbe, endProbe)) { - return true; - } - PortalGunWorldPortalShape.PortalLocalCoords startCoords = shape.localCoords(startProbe); - PortalGunWorldPortalShape.PortalLocalCoords endCoords = shape.localCoords(endProbe); - return startCoords.depth() > 0.0D - && endCoords.depth() >= -PLANE_TOLERANCE - && Math.abs(endCoords.horizontal()) <= shape.halfWidth() + EDGE_PADDING - && Math.abs(endCoords.vertical()) <= shape.halfHeight() + EDGE_PADDING - && projectedWindowOverlap(shape, startProbe, endProbe); - } - - private static boolean intersectsPortalWindow(AABB box, PortalGunWorldPortalShape shape) { - for (Vec3 corner : corners(box)) { - PortalGunWorldPortalShape.PortalLocalCoords coords = shape.localCoords(corner); - if (Math.abs(coords.horizontal()) <= shape.halfWidth() + EDGE_PADDING - && Math.abs(coords.vertical()) <= shape.halfHeight() + EDGE_PADDING - && coords.depth() <= DEPTH_PADDING - && coords.depth() >= -PLANE_TOLERANCE) { - return true; - } - } - return false; - } - - private static boolean segmentIntersectsPortalWindow(Entity entity, PortalGunPortalEntity portal, AABB startBox, AABB endBox) { - return portal.crossesPortal(portal.teleportProbePosition(entity, startBox), portal.teleportProbePosition(entity, endBox)); - } - - private static boolean projectedWindowOverlap(PortalGunWorldPortalShape shape, Vec3 startProbe, Vec3 endProbe) { - PortalGunWorldPortalShape.PortalLocalCoords start = shape.localCoords(startProbe); - PortalGunWorldPortalShape.PortalLocalCoords end = shape.localCoords(endProbe); - return Math.abs(start.horizontal()) <= shape.halfWidth() + BORDER_TOLERANCE - && Math.abs(start.vertical()) <= shape.halfHeight() + BORDER_TOLERANCE - && Math.abs(end.horizontal()) <= shape.halfWidth() + BORDER_TOLERANCE - && Math.abs(end.vertical()) <= shape.halfHeight() + BORDER_TOLERANCE; - } - - private static Vec3 applyBorderCollision(Entity entity, AABB startBox, Vec3 movement, PortalGunPortalEntity portal) { - if (movement.lengthSqr() <= 1.0E-7D) { - return movement; - } - AABB endBox = startBox.move(movement); - if (!portal.getPortalInsides(entity).intersects(startBox) - && !portal.getPortalInsides(entity).intersects(endBox) - && !intersectsPortalWindow(startBox, portal.getWorldPortalShape()) - && !intersectsPortalWindow(endBox, portal.getWorldPortalShape())) { - return movement; - } - List shapes = portal.getWorldPortalShape().getCollisionBoundaries(BORDER_THICKNESS).stream() - .map(Shapes::create) - .toList(); - Vec3 collided = Entity.collideBoundingBox(entity, movement, startBox, entity.level(), shapes); - return collided.distanceToSqr(movement) < 1.0E-7D ? movement : collided; - } - - private static Vec3[] corners(AABB box) { - return new Vec3[] { - new Vec3(box.minX, box.minY, box.minZ), - new Vec3(box.minX, box.minY, box.maxZ), - new Vec3(box.minX, box.maxY, box.minZ), - new Vec3(box.minX, box.maxY, box.maxZ), - new Vec3(box.maxX, box.minY, box.minZ), - new Vec3(box.maxX, box.minY, box.maxZ), - new Vec3(box.maxX, box.maxY, box.minZ), - new Vec3(box.maxX, box.maxY, box.maxZ) - }; - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunPortalEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunPortalEntity.java index 2bc65c47..4c8f8a82 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunPortalEntity.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunPortalEntity.java @@ -2,23 +2,20 @@ package com.craisinlord.antarchy.content.portalgun; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.config.AntarchySettings; -import com.craisinlord.anthology.gravity.GravityApi; import com.craisinlord.antarchy.content.block.entity.PortalGunPortalBaseBlockEntity; import com.craisinlord.antarchy.content.block.entity.PortalGunPortalCellAccess; import com.craisinlord.antarchy.content.block.entity.PortalGunPortalFaceRecord; import com.craisinlord.antarchy.content.block.entity.PortalGunPortalMasterBlockEntity; import com.craisinlord.antarchy.content.damage.AntarchyDamageSources; import com.craisinlord.antarchy.content.entity.BlockSuction; -import com.craisinlord.antarchy.mixins.AbstractArrowAccessor; -import com.craisinlord.antarchy.mixins.FallingBlockEntityAccessor; -import com.craisinlord.antarchy.mixins.ServerGamePacketListenerTeleportAccessor; -import com.craisinlord.antarchy.mixins.gravity.ChunkMapAccessor; -import com.craisinlord.antarchy.mixins.gravity.ServerEntityAccessor; -import com.craisinlord.antarchy.mixins.gravity.TrackedEntityAccessor; +import com.craisinlord.anthology.portal.PortalAppearance; +import com.craisinlord.anthology.portal.PortalEntity; +import com.craisinlord.anthology.portal.PortalShape; +import com.craisinlord.anthology.portal.PortalSounds; +import com.craisinlord.anthology.portal.PortalTransitMath; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; -import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; @@ -32,46 +29,31 @@ import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; import net.minecraft.nbt.NbtUtils; import net.minecraft.nbt.Tag; -import net.minecraft.network.protocol.game.ClientboundSetEntityMotionPacket; -import net.minecraft.network.protocol.game.ClientboundTeleportEntityPacket; 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.util.Mth; import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; -import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.ExperienceOrb; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.item.FallingBlockEntity; import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.item.PrimedTnt; -import net.minecraft.world.entity.vehicle.VehicleEntity; -import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.entity.projectile.AbstractArrow; import net.minecraft.world.entity.projectile.Projectile; -import net.minecraft.world.entity.item.FallingBlockEntity; +import net.minecraft.world.entity.vehicle.VehicleEntity; import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.Vec3; -import software.bernie.geckolib.animatable.GeoEntity; -import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; -import software.bernie.geckolib.animation.AnimatableManager; -import software.bernie.geckolib.animation.AnimationController; -import software.bernie.geckolib.animation.AnimationState; -import software.bernie.geckolib.animation.PlayState; -import software.bernie.geckolib.animation.RawAnimation; -import software.bernie.geckolib.util.GeckoLibUtil; -public class PortalGunPortalEntity extends Entity implements GeoEntity { +public class PortalGunPortalEntity extends PortalEntity { public enum PortalSide { BLUE, ORANGE @@ -80,25 +62,17 @@ public class PortalGunPortalEntity extends Entity implements GeoEntity { private static final EntityDataAccessor SIDE = SynchedEntityData.defineId(PortalGunPortalEntity.class, EntityDataSerializers.INT); private static final EntityDataAccessor> OWNER_ID = SynchedEntityData.defineId(PortalGunPortalEntity.class, EntityDataSerializers.OPTIONAL_UUID); private static final EntityDataAccessor> GUN_ID = SynchedEntityData.defineId(PortalGunPortalEntity.class, EntityDataSerializers.OPTIONAL_UUID); - private static final EntityDataAccessor FACING = SynchedEntityData.defineId(PortalGunPortalEntity.class, EntityDataSerializers.INT); - private static final EntityDataAccessor UP_AXIS = SynchedEntityData.defineId(PortalGunPortalEntity.class, EntityDataSerializers.INT); - private static final EntityDataAccessor> LINKED_PORTAL = SynchedEntityData.defineId(PortalGunPortalEntity.class, EntityDataSerializers.OPTIONAL_UUID); - private static final EntityDataAccessor LINKED_PORTAL_ENTITY_ID = SynchedEntityData.defineId(PortalGunPortalEntity.class, EntityDataSerializers.INT); private static final EntityDataAccessor VARIANT = SynchedEntityData.defineId(PortalGunPortalEntity.class, EntityDataSerializers.INT); - private static final EntityDataAccessor PORTAL_WIDTH = SynchedEntityData.defineId(PortalGunPortalEntity.class, EntityDataSerializers.INT); - private static final EntityDataAccessor PORTAL_HEIGHT = SynchedEntityData.defineId(PortalGunPortalEntity.class, EntityDataSerializers.INT); - private static final EntityDataAccessor OPENING_ANIMATION_ID = SynchedEntityData.defineId(PortalGunPortalEntity.class, EntityDataSerializers.INT); private static final EntityDataAccessor MOON = SynchedEntityData.defineId(PortalGunPortalEntity.class, EntityDataSerializers.BOOLEAN); - private static final RawAnimation OPEN_ANIM = RawAnimation.begin().thenPlay("open"); - private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); - private static final int OPEN_TICKS = 5; - public static final int TELEPORT_COOLDOWN_TICKS = 3; - private static final String DEBUG_TRAVERSAL_PROPERTY = "antarchy.portalGun.debugTraversal"; - private static final double PORTAL_INSIDE_SHIFT = 0.05D; - private static final double HALF_DEPTH = 0.35D; - private static final double MAX_CLIENT_TRANSIT_START_ERROR_SQR = 1.0D; - private static final double MAX_CLIENT_TRANSIT_MOVEMENT_SQR = 100.0D; - private static final double PROJECTILE_PLANE_TOLERANCE = 0.1D; + private static final ResourceLocation BLUE_RIM_TEXTURE = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/vfx/portal_gun_portal_blue.png"); + private static final ResourceLocation ORANGE_RIM_TEXTURE = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/vfx/portal_gun_portal_orange.png"); + private static final PortalSounds SOUNDS = new PortalSounds( + () -> sound("portal_enter"), + () -> sound("portal_exit"), + () -> sound("portal_ambient"), + 80, + 0.18F + ); private static final double MOON_RANGE = 14.0D; private static final double MOON_RAY_MIN_OUTWARD = -0.2D; private static final double MOON_PULL_STRENGTH = 0.15D; @@ -115,14 +89,9 @@ public class PortalGunPortalEntity extends Entity implements GeoEntity { private static final int MOON_WIND_INTERVAL = 40; private static final int MOON_BLOCK_MAX_FLIGHT_TICKS = 80; private static final double MOON_BLOCK_SWALLOW_RADIUS = 2.0D; - private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); - private final Map teleportCooldowns = new HashMap<>(); + private final PortalAppearance appearance = new GunAppearance(); private UUID ownerId; private UUID gunId; - private UUID linkedPortalId; - private int ageTicks; - private int lastOpeningAnimationId; - private int pairTime; private int moonTicks; private int moonSuckedBlocks; private final Map moonLiftedBlocks = new HashMap<>(); @@ -131,33 +100,18 @@ public class PortalGunPortalEntity extends Entity implements GeoEntity { private BlockPos basePos = BlockPos.ZERO; private BlockPos[] portalSpots = new BlockPos[] {BlockPos.ZERO, BlockPos.ZERO}; private Set compensatedSpots = Set.of(); - private PortalGunWorldPortalShape cachedShape; - private Vec3 cachedShapePosition; - private int cachedShapeFacing; - private int cachedShapeUpAxis; - private int cachedShapeWidth; - private int cachedShapeHeight; public PortalGunPortalEntity(EntityType entityType, Level level) { super(entityType, level); - this.setInvulnerable(true); - this.noPhysics = true; - this.noCulling = true; } @Override protected void defineSynchedData(SynchedEntityData.Builder builder) { + super.defineSynchedData(builder); builder.define(SIDE, PortalSide.BLUE.ordinal()); builder.define(OWNER_ID, Optional.empty()); builder.define(GUN_ID, Optional.empty()); - builder.define(FACING, Direction.NORTH.get3DDataValue()); - builder.define(UP_AXIS, Direction.UP.get3DDataValue()); - builder.define(LINKED_PORTAL, Optional.empty()); - builder.define(LINKED_PORTAL_ENTITY_ID, -1); builder.define(VARIANT, PortalGunVariant.DEFAULT.id()); - builder.define(PORTAL_WIDTH, 1); - builder.define(PORTAL_HEIGHT, 2); - builder.define(OPENING_ANIMATION_ID, 0); builder.define(MOON, false); } @@ -168,10 +122,7 @@ public class PortalGunPortalEntity extends Entity implements GeoEntity { this.entityData.set(GUN_ID, Optional.ofNullable(gunId)); this.entityData.set(VARIANT, (variant == null ? PortalGunVariant.DEFAULT : variant).id()); this.entityData.set(SIDE, side.ordinal()); - this.entityData.set(FACING, placement.facing().get3DDataValue()); - this.entityData.set(UP_AXIS, placement.upAxis().get3DDataValue()); - this.entityData.set(PORTAL_WIDTH, placement.width()); - this.entityData.set(PORTAL_HEIGHT, placement.height()); + this.setGeometry(placement.facing(), placement.upAxis(), placement.width(), placement.height()); this.supportOrigin = placement.supportOrigin().immutable(); this.masterPos = placement.masterPos().immutable(); this.basePos = placement.basePos().immutable(); @@ -179,24 +130,8 @@ public class PortalGunPortalEntity extends Entity implements GeoEntity { this.compensatedSpots = Set.copyOf(placement.compensatedSpots()); } - public void linkTo(PortalGunPortalEntity other) { - this.linkedPortalId = other.getUUID(); - this.entityData.set(LINKED_PORTAL, Optional.of(other.getUUID())); - this.entityData.set(LINKED_PORTAL_ENTITY_ID, other.getId()); - this.pairTime = (int) this.level().getGameTime(); - } - - public void restorePair(UUID linkedPortalId, int pairTime) { - this.linkedPortalId = linkedPortalId; - this.entityData.set(LINKED_PORTAL, Optional.ofNullable(linkedPortalId)); - this.entityData.set(LINKED_PORTAL_ENTITY_ID, -1); - this.pairTime = pairTime; - } - public void openToMoon() { - this.linkedPortalId = null; - this.entityData.set(LINKED_PORTAL, Optional.empty()); - this.entityData.set(LINKED_PORTAL_ENTITY_ID, -1); + this.clearLink(); this.entityData.set(MOON, true); this.moonTicks = 0; this.moonSuckedBlocks = 0; @@ -211,18 +146,6 @@ public class PortalGunPortalEntity extends Entity implements GeoEntity { return ordinal == PortalSide.ORANGE.ordinal() ? PortalSide.ORANGE : PortalSide.BLUE; } - public Direction getFacingDirection() { - return Direction.from3DDataValue(this.entityData.get(FACING)); - } - - public Direction getUpAxis() { - return Direction.from3DDataValue(this.entityData.get(UP_AXIS)); - } - - public UUID getLinkedPortalId() { - return this.entityData.get(LINKED_PORTAL).orElse(this.linkedPortalId); - } - public BlockPos getMasterPos() { return this.masterPos; } @@ -243,6 +166,10 @@ public class PortalGunPortalEntity extends Entity implements GeoEntity { return this.getVariant().color(this.getPortalSide()); } + public ResourceLocation getRimTexture() { + return this.getPortalSide() == PortalSide.BLUE ? BLUE_RIM_TEXTURE : ORANGE_RIM_TEXTURE; + } + public BlockPos getBasePos() { return this.basePos; } @@ -260,400 +187,51 @@ public class PortalGunPortalEntity extends Entity implements GeoEntity { return false; } - public int getPortalWidth() { return this.entityData.get(PORTAL_WIDTH); } - - public int getPortalHeight() { return this.entityData.get(PORTAL_HEIGHT); } - - public void restartOpeningAnimation() { - int animationId = this.entityData.get(OPENING_ANIMATION_ID) + 1; - this.entityData.set(OPENING_ANIMATION_ID, animationId); - this.lastOpeningAnimationId = animationId; - this.ageTicks = 0; - } - public Set getCompensatedSpots() { return Set.copyOf(this.compensatedSpots); } - public int getPairTime() { - return this.pairTime; + @Override + public PortalAppearance appearance() { + return this.appearance; } - public PortalGunPortalEntity getLinkedPortal() { - UUID linkedId = this.getLinkedPortalId(); - if (linkedId == null) { - return null; - } - if (this.level() instanceof ServerLevel serverLevel) { - return serverLevel.getEntity(linkedId) instanceof PortalGunPortalEntity portal && !portal.isRemoved() ? portal : null; - } - return PortalGunPortalRegistry.find(this.level(), linkedId); + @Override + public boolean hasCustomView() { + return this.isMoonPortal(); } - public Vec3 getNormalVec() { - return Vec3.atLowerCornerOf(this.getFacingDirection().getNormal()); + @Override + protected PortalSounds sounds() { + return SOUNDS; } - public Vec3 getUpVec() { - return Vec3.atLowerCornerOf(this.getUpAxis().getNormal()); + @Override + protected float ambientPitch() { + return this.getPortalSide() == PortalSide.BLUE ? 1.05F : 0.92F; } - public Vec3 getWidthVec() { - return this.getNormalVec().cross(this.getUpVec()).normalize(); - } - - public PortalGunWorldPortalShape getWorldPortalShape() { - Vec3 position = this.position(); - int facing = this.entityData.get(FACING); - int upAxis = this.entityData.get(UP_AXIS); - int width = this.getPortalWidth(); - int height = this.getPortalHeight(); - PortalGunWorldPortalShape shape = this.cachedShape; - if (shape == null || !position.equals(this.cachedShapePosition) || facing != this.cachedShapeFacing - || upAxis != this.cachedShapeUpAxis || width != this.cachedShapeWidth || height != this.cachedShapeHeight) { - shape = new PortalGunWorldPortalShape(position, this.getNormalVec().normalize(), this.getUpVec().normalize(), this.getWidthVec().normalize(), width / 2.0D, height / 2.0D, HALF_DEPTH); - this.cachedShape = shape; - this.cachedShapePosition = position; - this.cachedShapeFacing = facing; - this.cachedShapeUpAxis = upAxis; - this.cachedShapeWidth = width; - this.cachedShapeHeight = height; - } - return shape; - } - - public AABB getPlane() { - return this.getWorldPortalShape().getPlane(); - } - - public AABB getFlatPlane() { - return this.getWorldPortalShape().getFlatPlane(); - } - - public AABB getScanRange() { - return this.getWorldPortalShape().getScanRange(); - } - - public AABB getPortalInsides() { - return this.getWorldPortalShape().getPortalInsides(); - } - - public AABB getPortalInsides(Entity entity) { - double shiftAmount = Math.min(PORTAL_INSIDE_SHIFT, Math.abs(this.getWorldPortalShape().localCoords(entity.position()).depth())); - return this.getPortalInsides().move(this.getNormalVec().normalize().scale(shiftAmount)); - } - - public AABB getTeleportPlane(double offset) { - return this.getWorldPortalShape().getTeleportPlane(offset); - } - - public AABB getCollisionRemovalAabbForEntity(Entity entity) { - double speed = entity.getDeltaMovement().length(); - double extent = Math.max(1.0D, Math.max(entity.getBbWidth(), entity.getBbHeight()) + speed); - return this.getFlatPlane().expandTowards(this.getNormalVec().normalize().scale(extent)); - } - - public Vec3 teleportProbePosition(Entity entity) { - return entity.position().add(0.0D, this.getTeleportProbeHeight(entity), 0.0D); - } - - public Vec3 teleportProbePosition(Entity entity, AABB bounds) { - double x = (bounds.minX + bounds.maxX) * 0.5D; - double y = bounds.minY; - double z = (bounds.minZ + bounds.maxZ) * 0.5D; - y += this.getTeleportProbeHeight(entity); - return new Vec3(x, y, z); - } - - private double getTeleportProbeHeight(Entity entity) { - return entity instanceof LivingEntity living ? living.getEyeHeight(living.getPose()) : entity.getEyeHeight(); - } - - public PortalCrossing resolveCrossing(Entity entity, AABB previousBox, AABB currentBox, Vec3 attemptedMovement) { - PortalGunWorldPortalShape shape = this.getWorldPortalShape(); - if (!PortalGunTransitMath.crossesWithBody(shape, previousBox, currentBox, attemptedMovement)) { - return null; - } - return new PortalCrossing(this.teleportProbePosition(entity, currentBox)); - } - - public PortalTransit computeTransit(PortalGunPortalEntity destination, AABB box, Vec3 velocity, Vec3 look) { - PortalGunWorldPortalShape source = this.getWorldPortalShape(); - PortalGunWorldPortalShape target = destination.getWorldPortalShape(); - AABB exitBox = PortalGunTransitMath.exitBox(source, target, box); - Vec3 exitVelocity = PortalGunTransitMath.exitVelocity(source, target, velocity, - AntarchySettings.portalGunMinFloorExitSpeed(), AntarchySettings.portalGunMaxExitSpeed()); - Vec3 exitLook = PortalGunTransitMath.transformVector(source, target, look).normalize(); - return new PortalTransit(exitBox, PortalGunTransitMath.feetPosition(exitBox), exitVelocity, exitLook); - } - - public PortalTransit computeTransit(Entity entity, PortalGunPortalEntity destination, AABB box, Vec3 velocity, Vec3 look) { - if (!GravityApi.isGravityInverted(entity)) { - return computeTransit(destination, box, velocity, look); - } - PortalGunWorldPortalShape source = this.getWorldPortalShape(); - PortalGunWorldPortalShape target = destination.getWorldPortalShape(); - AABB exitBox = PortalGunTransitMath.exitBox(source, target, box); - Vec3 worldVelocity = PortalGunTransitMath.entityVelocityToWorld(entity, velocity); - Vec3 worldExitVelocity = PortalGunTransitMath.exitVelocity(source, target, worldVelocity, - AntarchySettings.portalGunMinFloorExitSpeed(), AntarchySettings.portalGunMaxExitSpeed()); - Vec3 exitVelocity = PortalGunTransitMath.entityVelocityFromWorld(entity, worldExitVelocity); - Vec3 worldLook = PortalGunTransitMath.entityVelocityToWorld(entity, look); - Vec3 worldExitLook = PortalGunTransitMath.transformVector(source, target, worldLook).normalize(); - Vec3 exitLook = PortalGunTransitMath.entityVelocityFromWorld(entity, worldExitLook); - return new PortalTransit(exitBox, PortalGunTransitMath.entityPosition(exitBox, entity), exitVelocity, exitLook); - } - - public static void teleportEntityAfterMovement(Entity entity, AABB previousBox, Vec3 velocity) { - if (entity instanceof Player) { - return; - } - teleportAfterMovement(entity, previousBox, entity.getBoundingBox(), velocity); - } - - public static void teleportPlayerAfterMovementPacket(ServerPlayer player, AABB previousBox, Vec3 claimedMovement) { - Vec3 transitVelocity = PortalGunTransitMath.entityVelocityFromWorld(player, claimedMovement); - teleportAfterMovement(player, previousBox, previousBox.move(claimedMovement), transitVelocity, claimedMovement); - } - - private static void teleportAfterMovement(Entity entity, AABB previousBox, AABB currentBox, Vec3 velocity) { - teleportAfterMovement(entity, previousBox, currentBox, velocity, - PortalGunTransitMath.entityVelocityToWorld(entity, velocity)); - } - - private static void teleportAfterMovement(Entity entity, AABB previousBox, AABB currentBox, Vec3 velocity, Vec3 attemptedMovement) { - if (entity.level().isClientSide || !entity.isAlive() || entity.isPassenger() || entity instanceof PortalGunPortalEntity) { - return; - } - if (velocity.lengthSqr() <= 1.0E-12D && previousBox.getCenter().distanceToSqr(currentBox.getCenter()) <= 1.0E-10D) { - return; - } - AABB sweptBounds = previousBox.minmax(currentBox).expandTowards(attemptedMovement).inflate(1.0D); - for (PortalGunPortalEntity portal : findPortalsNearBounds(entity.level(), sweptBounds)) { - if (!(portal.level() instanceof ServerLevel serverLevel) || !portal.canTeleportEntity(entity)) { - continue; - } - PortalGunPortalEntity linked = portal.findLinkedPortal(serverLevel); - if (linked == null || !linked.isAlive()) { - continue; - } - PortalCrossing crossing = portal.resolveCrossing(entity, previousBox, currentBox, attemptedMovement); - if (crossing != null) { - if (entity instanceof Player && Boolean.getBoolean(DEBUG_TRAVERSAL_PROPERTY)) { - Antarchy.LOGGER.info("Portal gun traversal accepted path=server portal={} player={} probe={} linked={}", - portal.getUUID(), entity.getUUID(), crossing.probe(), linked.getUUID()); - } - portal.teleportEntity(entity, linked, currentBox, velocity, false); - return; - } + @Override + protected void clientTick() { + if (this.isMoonPortal()) { + this.spawnMoonParticles(); } } - public static boolean handleClientTransit(ServerPlayer player, int portalId, Vec3 start, Vec3 end, Vec3 velocity) { - if (!player.isAlive() || player.isPassenger() || player.isSpectator()) { - return false; - } - if (((ServerGamePacketListenerTeleportAccessor) player.connection).antarchy$getAwaitingPositionFromClient() != null) { - return true; - } - if (!isFinite(start) || !isFinite(end) || !isFinite(velocity) - || start.distanceToSqr(player.position()) > MAX_CLIENT_TRANSIT_START_ERROR_SQR - || end.distanceToSqr(start) > MAX_CLIENT_TRANSIT_MOVEMENT_SQR - || velocity.lengthSqr() > MAX_CLIENT_TRANSIT_MOVEMENT_SQR) { - return false; - } - if (!(player.level() instanceof ServerLevel serverLevel) - || !(serverLevel.getEntity(portalId) instanceof PortalGunPortalEntity portal) - || !portal.isAlive()) { - return false; - } - PortalGunPortalEntity linked = portal.findLinkedPortal(serverLevel); - if (linked == null || !linked.isAlive()) { - return false; - } - AABB startBox = player.getBoundingBox().move(start.subtract(player.position())); - AABB endBox = startBox.move(end.subtract(start)); - Vec3 crossingVelocity = PortalGunTransitMath.entityVelocityToWorld(player, velocity); - if (portal.resolveCrossing(player, startBox, endBox, crossingVelocity) == null) { - return false; - } - if (Boolean.getBoolean(DEBUG_TRAVERSAL_PROPERTY)) { - Antarchy.LOGGER.info("Portal gun traversal accepted path=client portal={} player={} end={} velocity={} linked={}", - portal.getUUID(), player.getUUID(), end, velocity, linked.getUUID()); - } - portal.teleportEntity(player, linked, endBox, velocity, true); - return true; + @Override + protected boolean isStillValid(ServerLevel level) { + return this.gunId != null && this.isStillRegistered(level) && this.hasValidSurface(); } - public static boolean passProjectileThroughPortal(Projectile projectile, BlockHitResult hit) { - if (projectile instanceof PortalGunProjectileEntity || projectile.isRemoved() || projectile.isPassenger()) { - return false; - } - Vec3 location = hit.getLocation(); - Vec3 velocity = projectile.getDeltaMovement(); - for (PortalGunPortalEntity portal : findPortalsNearBounds(projectile.level(), new AABB(location, location).inflate(0.5D))) { - if (portal.getFacingDirection() != hit.getDirection() || portal.isTeleportCoolingDown(projectile)) { - continue; - } - PortalGunWorldPortalShape shape = portal.getWorldPortalShape(); - PortalGunWorldPortalShape.PortalLocalCoords coords = shape.localCoords(location); - if (Math.abs(coords.depth()) > PROJECTILE_PLANE_TOLERANCE - || Math.abs(coords.horizontal()) > shape.halfWidth() - || Math.abs(coords.vertical()) > shape.halfHeight() - || velocity.dot(shape.normal()) >= 0.0D) { - continue; - } - PortalGunPortalEntity linked = projectile.level() instanceof ServerLevel serverLevel ? portal.findLinkedPortal(serverLevel) : portal.getLinkedPortal(); - if (linked == null || !linked.isAlive()) { - continue; - } - AABB crossingBox = projectile.getBoundingBox().move(location.subtract(projectile.position())); - if (projectile.level().isClientSide) { - PortalTransit transit = portal.computeTransit(projectile, linked, crossingBox, velocity, projectile.getLookAngle()); - Vec3 exit = transit.position(); - projectile.setPos(exit.x, exit.y, exit.z); - projectile.xo = exit.x; - projectile.yo = exit.y; - projectile.zo = exit.z; - projectile.setDeltaMovement(transit.velocity()); - orientAlongVelocity(projectile, transit.velocity()); - projectile.setPortalCooldown(TELEPORT_COOLDOWN_TICKS); - } else { - portal.teleportEntity(projectile, linked, crossingBox, velocity, false); - } + @Override + protected boolean tickBeforeTransit(ServerLevel level) { + if (this.isMoonPortal()) { + this.tickMoon(level); return true; } return false; } - private static void orientAlongVelocity(Entity entity, Vec3 velocity) { - if (velocity.lengthSqr() < 1.0E-12D) { - return; - } - float yaw = (float) Math.toDegrees(Math.atan2(velocity.x, velocity.z)); - float pitch = (float) Math.toDegrees(Math.atan2(velocity.y, velocity.horizontalDistance())); - entity.setYRot(yaw); - entity.setXRot(pitch); - entity.yRotO = yaw; - entity.xRotO = pitch; - } - - private static boolean isFinite(Vec3 vector) { - return Double.isFinite(vector.x) && Double.isFinite(vector.y) && Double.isFinite(vector.z); - } - - public static List findPortalsNearBounds(Level level, AABB bounds) { - List portals = null; - for (PortalGunPortalEntity portal : PortalGunPortalRegistry.all(level)) { - if (portal.isAlive() && portal.getWorldPortalShape().getBoundsForCulling().intersects(bounds)) { - if (portals == null) { - portals = new java.util.ArrayList<>(2); - } - portals.add(portal); - } - } - return portals == null ? List.of() : portals; - } - - @Override - public void setLevelCallback(net.minecraft.world.level.entity.EntityInLevelCallback callback) { - super.setLevelCallback(callback); - if (callback == net.minecraft.world.level.entity.EntityInLevelCallback.NULL) { - PortalGunPortalRegistry.untrack(this); - } else { - PortalGunPortalRegistry.track(this); - } - } - - public boolean containsPoint(Vec3 position) { - return this.getWorldPortalShape().contains(position, 0.0D); - } - - public boolean intersectsEntityBounds(Entity entity) { - AABB bounds = entity.getBoundingBox(); - for (Vec3 corner : new Vec3[] { - new Vec3(bounds.minX, bounds.minY, bounds.minZ), - new Vec3(bounds.minX, bounds.minY, bounds.maxZ), - new Vec3(bounds.minX, bounds.maxY, bounds.minZ), - new Vec3(bounds.minX, bounds.maxY, bounds.maxZ), - new Vec3(bounds.maxX, bounds.minY, bounds.minZ), - new Vec3(bounds.maxX, bounds.minY, bounds.maxZ), - new Vec3(bounds.maxX, bounds.maxY, bounds.minZ), - new Vec3(bounds.maxX, bounds.maxY, bounds.maxZ) - }) { - if (this.getWorldPortalShape().contains(corner, 0.08D)) { - return true; - } - } - return this.getPortalInsides(entity).intersects(bounds); - } - - public boolean crossesPortal(Vec3 previousProbePosition, Vec3 currentProbePosition) { - return this.getWorldPortalShape().crosses(previousProbePosition, currentProbePosition); - } - - public boolean shouldRenderFront(Vec3 cameraPos) { - return this.getWorldPortalShape().shouldRenderFront(cameraPos); - } - - public float getPortalVisualScale(float partialTick) { - return Mth.clamp((this.ageTicks - 1.0F + partialTick) / OPEN_TICKS, 0.0F, 1.0F); - } - - @Override - public void tick() { - super.tick(); - if (!this.isRemoved()) { - PortalGunPortalRegistry.track(this); - } - int openingAnimationId = this.entityData.get(OPENING_ANIMATION_ID); - if (openingAnimationId != this.lastOpeningAnimationId) { - this.lastOpeningAnimationId = openingAnimationId; - this.ageTicks = 0; - } else { - this.ageTicks++; - } - this.yRotO = this.getYRot(); - this.xRotO = this.getXRot(); - if (this.level().isClientSide) { - if (this.isMoonPortal()) { - this.spawnMoonParticles(); - } - return; - } - if (!(this.level() instanceof ServerLevel serverLevel)) { - return; - } - this.tickTeleportCooldowns(); - if (this.gunId == null || !this.isStillRegistered(serverLevel)) { - this.discard(); - return; - } - if (!this.hasValidSurface()) { - this.discard(); - return; - } - if (this.isMoonPortal()) { - this.tickMoon(serverLevel); - return; - } - PortalGunPortalEntity linked = this.findLinkedPortal(serverLevel); - if (linked == null || !linked.isAlive()) { - if (Boolean.getBoolean(DEBUG_TRAVERSAL_PROPERTY) && this.ageTicks % 40 == 0) { - Antarchy.LOGGER.info("Portal gun traversal unavailable portal={} side={} linked={} loaded={}", - this.getUUID(), this.getPortalSide(), this.linkedPortalId, linked != null); - } - if (this.ageTicks % 100 == 0) { - Antarchy.LOGGER.debug("Portal gun portal has no loaded linked portal portal={} owner={} side={} linked={}", this.getUUID(), this.ownerId, this.getPortalSide(), this.linkedPortalId); - } - return; - } - if (this.ageTicks % 80 == 0) { - this.level().playSound(null, this.blockPosition(), sound("portal_ambient"), SoundSource.BLOCKS, 0.18F, this.getPortalSide() == PortalSide.BLUE ? 1.05F : 0.92F); - } - this.tickTeleport(linked); - } - private void tickMoon(ServerLevel level) { this.moonTicks++; if (this.moonTicks >= AntarchySettings.portalGunMoonPortalSeconds() * 20) { @@ -664,7 +242,7 @@ public class PortalGunPortalEntity extends Entity implements GeoEntity { if (this.moonTicks % MOON_WIND_INTERVAL == 1) { level.playSound(null, this.getX(), this.getY(), this.getZ(), SoundEvents.ELYTRA_FLYING, SoundSource.BLOCKS, 1.4F, 0.55F); } - PortalGunWorldPortalShape shape = this.getWorldPortalShape(); + PortalShape shape = this.getWorldPortalShape(); Player owner = this.getOwnerId() == null ? null : level.getPlayerByUUID(this.getOwnerId()); this.pullMoonEntities(level, shape, owner); this.tickMoonLiftedBlocks(level, shape); @@ -673,14 +251,14 @@ public class PortalGunPortalEntity extends Entity implements GeoEntity { } } - private void pullMoonEntities(ServerLevel level, PortalGunWorldPortalShape shape, Player owner) { + private void pullMoonEntities(ServerLevel level, PortalShape shape, Player owner) { Vec3 center = shape.center(); AABB area = new AABB(center, center).inflate(MOON_RANGE); Vec3 target = center.add(shape.normal().scale(0.3D)); boolean vacuumTick = this.moonTicks % MOON_VACUUM_INTERVAL == 0; for (Entity entity : level.getEntities(this, area, this::canMoonAffect)) { Vec3 position = entity.getBoundingBox().getCenter(); - PortalGunWorldPortalShape.PortalLocalCoords local = shape.localCoords(position); + PortalShape.PortalLocalCoords local = shape.localCoords(position); double depth = local.depth(); double distance = position.distanceTo(center); if (depth < -0.5D || distance > MOON_RANGE) { @@ -697,7 +275,7 @@ public class PortalGunPortalEntity extends Entity implements GeoEntity { } double falloff = 1.0D - distance / MOON_RANGE; double strength = MOON_PULL_STRENGTH * (0.35D + falloff * falloff * 1.6D); - Vec3 worldMotion = PortalGunTransitMath.entityVelocityToWorld(entity, entity.getDeltaMovement()) + Vec3 worldMotion = PortalTransitMath.entityVelocityToWorld(entity, entity.getDeltaMovement()) .scale(0.92D) .add(target.subtract(position).normalize().scale(strength)); if (worldMotion.length() > MOON_MAX_SPEED) { @@ -709,7 +287,7 @@ public class PortalGunPortalEntity extends Entity implements GeoEntity { private boolean canMoonAffect(Entity entity) { if (!entity.isAlive() || entity.isPassenger() || entity.isSpectator() - || entity instanceof PortalGunPortalEntity || entity instanceof PortalGunProjectileEntity) { + || entity instanceof PortalEntity || entity instanceof PortalGunProjectileEntity) { return false; } if (entity instanceof Player player && player.isCreative()) { @@ -732,7 +310,7 @@ public class PortalGunPortalEntity extends Entity implements GeoEntity { return true; } - private void holdInVacuum(ServerLevel level, Entity entity, PortalGunWorldPortalShape shape, Player owner, boolean vacuumTick) { + private void holdInVacuum(ServerLevel level, Entity entity, PortalShape shape, Player owner, boolean vacuumTick) { Vec3 hold = shape.center().add(shape.normal().scale(MOON_HOLD_DEPTH + entity.getBbWidth() * 0.5D)); applyMoonMotion(entity, hold.subtract(entity.getBoundingBox().getCenter()).scale(0.45D)); if (vacuumTick && entity instanceof LivingEntity living) { @@ -741,7 +319,7 @@ public class PortalGunPortalEntity extends Entity implements GeoEntity { } private static void applyMoonMotion(Entity entity, Vec3 worldMotion) { - entity.setDeltaMovement(PortalGunTransitMath.entityVelocityFromWorld(entity, worldMotion)); + entity.setDeltaMovement(PortalTransitMath.entityVelocityFromWorld(entity, worldMotion)); entity.hasImpulse = true; entity.fallDistance = 0.0F; if (entity instanceof LivingEntity) { @@ -749,7 +327,7 @@ public class PortalGunPortalEntity extends Entity implements GeoEntity { } } - private void pullMoonBlocks(ServerLevel level, PortalGunWorldPortalShape shape, Player owner) { + private void pullMoonBlocks(ServerLevel level, PortalShape shape, Player owner) { int cap = AntarchySettings.portalGunMoonBlockCap(); int pulled = 0; for (int ray = 0; ray < MOON_BLOCK_RAYS && pulled < MOON_BLOCKS_PER_PULL && this.moonSuckedBlocks < cap; ray++) { @@ -787,7 +365,7 @@ public class PortalGunPortalEntity extends Entity implements GeoEntity { } } - private void tickMoonLiftedBlocks(ServerLevel level, PortalGunWorldPortalShape shape) { + private void tickMoonLiftedBlocks(ServerLevel level, PortalShape shape) { Iterator> iterator = this.moonLiftedBlocks.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry entry = iterator.next(); @@ -814,7 +392,7 @@ public class PortalGunPortalEntity extends Entity implements GeoEntity { this.moonLiftedBlocks.clear(); } - private BlockPos firstBlockAlong(ServerLevel level, PortalGunWorldPortalShape shape, Vec3 start, Vec3 end) { + private BlockPos firstBlockAlong(ServerLevel level, PortalShape shape, Vec3 start, Vec3 end) { Vec3 delta = end.subtract(start); int steps = Math.max(1, (int) Math.ceil(delta.length() / MOON_RAY_STEP)); BlockPos previous = null; @@ -834,7 +412,7 @@ public class PortalGunPortalEntity extends Entity implements GeoEntity { if (state.isAir() || this.containsPortalSpot(pos)) { continue; } - PortalGunWorldPortalShape.PortalLocalCoords local = shape.localCoords(Vec3.atCenterOf(pos)); + PortalShape.PortalLocalCoords local = shape.localCoords(Vec3.atCenterOf(pos)); if (local.depth() < -1.0D) { return null; } @@ -855,7 +433,7 @@ public class PortalGunPortalEntity extends Entity implements GeoEntity { } private void spawnMoonParticles() { - PortalGunWorldPortalShape shape = this.getWorldPortalShape(); + PortalShape shape = this.getWorldPortalShape(); Vec3 center = shape.center(); for (int i = 0; i < 6; i++) { Vec3 direction = new Vec3(this.random.nextGaussian(), this.random.nextGaussian(), this.random.nextGaussian()); @@ -894,7 +472,7 @@ public class PortalGunPortalEntity extends Entity implements GeoEntity { } PortalGunPortalFaceRecord record = cell.portalGun$getFaceRecord(facing, this.getUUID()); if (record != null) { - if (!this.ownerId.equals(record.ownerId()) || record.side() != this.getPortalSide() || record.master() != (i == 0)) { + if ((this.ownerId == null || !this.ownerId.equals(record.ownerId())) || record.side() != this.getPortalSide() || record.master() != (i == 0)) { return false; } } else if (i == 0) { @@ -908,205 +486,14 @@ public class PortalGunPortalEntity extends Entity implements GeoEntity { return true; } - private void tickTeleport(PortalGunPortalEntity linked) { - List entities = this.level().getEntities(this, this.getScanRange(), entity -> !(entity instanceof Player) && this.canTeleportEntity(entity)); - for (Entity entity : entities) { - AABB currentBox = entity.getBoundingBox(); - AABB previousBox = currentBox.move(entity.xo - entity.getX(), entity.yo - entity.getY(), entity.zo - entity.getZ()); - PortalCrossing crossing = this.resolveCrossing(entity, previousBox, currentBox, entity.getDeltaMovement()); - if (crossing == null) { - continue; - } - this.teleportEntity(entity, linked, currentBox, entity.getDeltaMovement(), false); - } - } - - private boolean canTeleportEntity(Entity entity) { - if (!entity.isAlive() || entity instanceof PortalGunPortalEntity || entity.isPassenger()) { - return false; - } - return !this.isTeleportCoolingDown(entity); - } - - public boolean isTeleportCoolingDown(Entity entity) { - return this.teleportCooldowns.containsKey(entity.getUUID()) || entity.getPortalCooldown() > 0; - } - - private void teleportEntity(Entity entity, PortalGunPortalEntity destination, AABB crossingBox, Vec3 velocity, boolean clientAuthoritative) { - List group = new java.util.ArrayList<>(); - collectTeleportGroup(entity, null, group); - Vec3 rootOriginalPosition = entity.position(); - PortalTransit transit = this.computeTransit(entity, destination, crossingBox, velocity, entity.getLookAngle()); - Vec3 exitPos = transit.position(); - this.level().playSound(null, this.getX(), this.getY(), this.getZ(), sound("portal_enter"), SoundSource.PLAYERS, 0.7F, 0.96F + this.random.nextFloat() * 0.08F); - for (EntityTeleportState state : group) { - state.entity().stopRiding(); - } - for (EntityTeleportState state : group) { - Entity member = state.entity(); - boolean root = member == entity; - Vec3 memberExitPos = root - ? exitPos - : exitPos.add(PortalGunTransformUtil.transformVector(this, destination, state.position().subtract(rootOriginalPosition))); - Vec3 memberLook; - if (root) { - memberLook = transit.look(); - } else if (GravityApi.isGravityInverted(member)) { - Vec3 worldLook = PortalGunTransitMath.entityVelocityToWorld(member, state.look()); - memberLook = PortalGunTransitMath.entityVelocityFromWorld(member, - PortalGunTransformUtil.transformVector(this, destination, worldLook).normalize()); - } else { - memberLook = PortalGunTransformUtil.transformVector(this, destination, state.look()).normalize(); - } - Vec3 memberMotion; - if (root) { - memberMotion = transit.velocity(); - } else if (GravityApi.isGravityInverted(member)) { - Vec3 worldMotion = PortalGunTransitMath.entityVelocityToWorld(member, state.motion()); - memberMotion = PortalGunTransitMath.entityVelocityFromWorld(member, - PortalGunTransformUtil.transformVector(this, destination, worldMotion)); - } else { - memberMotion = PortalGunTransformUtil.transformVector(this, destination, state.motion()); - } - float yaw = PortalGunTransformUtil.yawFromLook(memberLook); - float pitch = PortalGunTransformUtil.pitchFromLook(memberLook); - float fallDistance = PortalGunTransitMath.exitFallDistance(member.fallDistance, - GravityApi.isGravityInverted(member) ? PortalGunTransitMath.entityVelocityToWorld(member, memberMotion) : memberMotion, - member); - if (member instanceof ServerPlayer player && root && clientAuthoritative) { - player.moveTo(memberExitPos.x, memberExitPos.y, memberExitPos.z, yaw, pitch); - player.setYHeadRot(yaw); - player.setDeltaMovement(memberMotion); - player.connection.resetPosition(); - player.serverLevel().getChunkSource().move(player); - } else if (member instanceof ServerPlayer player && destination.level() instanceof ServerLevel destinationLevel) { - player.teleportTo(destinationLevel, memberExitPos.x, memberExitPos.y, memberExitPos.z, yaw, pitch); - player.setDeltaMovement(memberMotion); - player.hasImpulse = true; - player.connection.send(new ClientboundSetEntityMotionPacket(player)); - } else { - member.teleportTo(memberExitPos.x, memberExitPos.y, memberExitPos.z); - member.setYRot(yaw); - member.setXRot(pitch); - member.setYHeadRot(yaw); - member.setYBodyRot(yaw); - member.setDeltaMovement(memberMotion); - member.hasImpulse = true; - member.hurtMarked = true; - } - member.xo = member.getX(); - member.yo = member.getY(); - member.zo = member.getZ(); - member.yRotO = yaw; - member.xRotO = pitch; - if (member instanceof Projectile) { - orientAlongVelocity(member, memberMotion); - } - member.setOnGround(false); - member.horizontalCollision = false; - member.verticalCollision = false; - member.verticalCollisionBelow = false; - member.fallDistance = fallDistance; - this.applyTeleportCooldown(member, destination); - this.handleSpecialEntityPostTeleport(member); - } - for (EntityTeleportState state : group) { - if (state.vehicle() != null && state.entity().isAlive()) { - state.entity().startRiding(state.vehicle(), true); - } - } - if (destination.level() instanceof ServerLevel destinationLevel) { - for (EntityTeleportState state : group) { - Entity member = state.entity(); - if (!(member instanceof ServerPlayer)) { - destinationLevel.getChunkSource().broadcastAndSend(member, new ClientboundTeleportEntityPacket(member)); - destinationLevel.getChunkSource().broadcastAndSend(member, new ClientboundSetEntityMotionPacket(member)); - syncTrackedPosition(destinationLevel, member); - } - } - } - destination.level().playSound(null, exitPos.x, exitPos.y, exitPos.z, sound("portal_exit"), SoundSource.PLAYERS, 0.7F, 0.96F + this.random.nextFloat() * 0.08F); - } - - private static void syncTrackedPosition(ServerLevel level, Entity entity) { - Object tracked = ((ChunkMapAccessor) level.getChunkSource().chunkMap).antarchy$getEntityMap().get(entity.getId()); - if (tracked instanceof TrackedEntityAccessor trackedEntity) { - ServerEntityAccessor serverEntity = (ServerEntityAccessor) trackedEntity.antarchy$getServerEntity(); - serverEntity.antarchy$getPositionCodec().setBase(entity.trackingPosition()); - serverEntity.antarchy$setLastSentMovement(entity.getDeltaMovement()); - } - } - - private void collectTeleportGroup(Entity entity, Entity vehicle, List group) { - group.add(new EntityTeleportState(entity, vehicle, entity.position(), entity.getLookAngle(), entity.getDeltaMovement())); - for (Entity passenger : entity.getPassengers()) { - collectTeleportGroup(passenger, entity, group); - } - } - - private void tickTeleportCooldowns() { - Iterator> iterator = this.teleportCooldowns.entrySet().iterator(); - while (iterator.hasNext()) { - Map.Entry entry = iterator.next(); - int cooldown = entry.getValue() - 1; - if (cooldown < 0) { - iterator.remove(); - } else { - entry.setValue(cooldown); - } - } - } - - private void applyTeleportCooldown(Entity entity, PortalGunPortalEntity destination) { - UUID entityId = entity.getUUID(); - this.teleportCooldowns.put(entityId, TELEPORT_COOLDOWN_TICKS); - destination.teleportCooldowns.put(entityId, TELEPORT_COOLDOWN_TICKS); - entity.setPortalCooldown(TELEPORT_COOLDOWN_TICKS); - } - - private void handleSpecialEntityPostTeleport(Entity entity) { - if (entity instanceof FallingBlockEntity) { - ((FallingBlockEntityAccessor) entity).antarchy$setTime(2); - } - if (entity instanceof AbstractArrow arrow) { - ((AbstractArrowAccessor) arrow).antarchy$setInGround(false); - ((AbstractArrowAccessor) arrow).antarchy$setInGroundTime(0); - ((AbstractArrowAccessor) arrow).antarchy$setShakeTime(0); - arrow.setNoPhysics(false); - } - } - - private PortalGunPortalEntity findLinkedPortal(ServerLevel level) { - if (this.linkedPortalId == null) { - return null; - } - Entity entity = level.getEntity(this.linkedPortalId); - return entity instanceof PortalGunPortalEntity portal ? portal : null; - } - @Override - public AABB getBoundingBoxForCulling() { - return this.getWorldPortalShape().getBoundsForCulling(); - } - - @Override - protected AABB makeBoundingBox() { - return this.getPortalInsides(); - } - - @Override - public void addAdditionalSaveData(CompoundTag tag) { + protected void saveExtra(CompoundTag tag) { if (this.ownerId != null) { tag.putUUID("OwnerId", this.ownerId); } if (this.gunId != null) { tag.putUUID("GunId", this.gunId); } - if (this.linkedPortalId != null) { - tag.putUUID("LinkedPortalId", this.linkedPortalId); - } - tag.putInt("AgeTicks", this.ageTicks); - tag.putInt("PairTime", this.pairTime); if (this.isMoonPortal()) { tag.putBoolean("Moon", true); tag.putInt("MoonTicks", this.moonTicks); @@ -1118,11 +505,7 @@ public class PortalGunPortalEntity extends Entity implements GeoEntity { tag.put("MoonLiftedBlocks", lifted); } tag.putInt("Side", this.getPortalSide().ordinal()); - tag.putInt("Facing", this.getFacingDirection().get3DDataValue()); - tag.putInt("UpAxis", this.getUpAxis().get3DDataValue()); tag.putInt("Variant", this.getVariant().id()); - tag.putInt("PortalWidth", this.getPortalWidth()); - tag.putInt("PortalHeight", this.getPortalHeight()); tag.putInt("SupportX", this.supportOrigin.getX()); tag.putInt("SupportY", this.supportOrigin.getY()); tag.putInt("SupportZ", this.supportOrigin.getZ()); @@ -1132,40 +515,18 @@ public class PortalGunPortalEntity extends Entity implements GeoEntity { tag.putInt("BaseX", this.basePos.getX()); tag.putInt("BaseY", this.basePos.getY()); tag.putInt("BaseZ", this.basePos.getZ()); - ListTag spots = new ListTag(); - for (BlockPos portalSpot : this.portalSpots) { - CompoundTag spot = new CompoundTag(); - spot.putInt("X", portalSpot.getX()); - spot.putInt("Y", portalSpot.getY()); - spot.putInt("Z", portalSpot.getZ()); - spots.add(spot); - } - tag.put("PortalSpots", spots); - ListTag compensated = new ListTag(); - for (BlockPos compensatedSpot : this.compensatedSpots) { - CompoundTag spot = new CompoundTag(); - spot.putInt("X", compensatedSpot.getX()); - spot.putInt("Y", compensatedSpot.getY()); - spot.putInt("Z", compensatedSpot.getZ()); - compensated.add(spot); - } - tag.put("CompensatedSpots", compensated); + tag.put("PortalSpots", writeSpots(java.util.Arrays.asList(this.portalSpots))); + tag.put("CompensatedSpots", writeSpots(this.compensatedSpots)); } @Override - public void readAdditionalSaveData(CompoundTag tag) { + protected void loadExtra(CompoundTag tag) { if (tag.hasUUID("OwnerId")) { this.ownerId = tag.getUUID("OwnerId"); } this.gunId = tag.hasUUID("GunId") ? tag.getUUID("GunId") : null; this.entityData.set(OWNER_ID, Optional.ofNullable(this.ownerId)); this.entityData.set(GUN_ID, Optional.ofNullable(this.gunId)); - if (tag.hasUUID("LinkedPortalId")) { - this.linkedPortalId = tag.getUUID("LinkedPortalId"); - this.entityData.set(LINKED_PORTAL, Optional.of(this.linkedPortalId)); - } - this.ageTicks = tag.getInt("AgeTicks"); - this.pairTime = tag.getInt("PairTime"); this.entityData.set(MOON, tag.getBoolean("Moon")); this.moonTicks = tag.getInt("MoonTicks"); this.moonSuckedBlocks = tag.getInt("MoonSuckedBlocks"); @@ -1174,29 +535,36 @@ public class PortalGunPortalEntity extends Entity implements GeoEntity { this.moonLiftedBlocks.put(NbtUtils.loadUUID(lifted), this.moonTicks); } this.entityData.set(SIDE, tag.getInt("Side")); - this.entityData.set(FACING, tag.getInt("Facing")); - this.entityData.set(UP_AXIS, tag.getInt("UpAxis")); this.entityData.set(VARIANT, PortalGunVariant.byId(tag.getInt("Variant")).id()); this.supportOrigin = new BlockPos(tag.getInt("SupportX"), tag.getInt("SupportY"), tag.getInt("SupportZ")); this.masterPos = new BlockPos(tag.getInt("MasterX"), tag.getInt("MasterY"), tag.getInt("MasterZ")); this.basePos = new BlockPos(tag.getInt("BaseX"), tag.getInt("BaseY"), tag.getInt("BaseZ")); - ListTag spots = tag.getList("PortalSpots", Tag.TAG_COMPOUND); - if (!spots.isEmpty()) { - this.portalSpots = new BlockPos[spots.size()]; + BlockPos[] spots = readSpotList(tag.getList("PortalSpots", Tag.TAG_COMPOUND)); + if (spots.length > 0) { + this.portalSpots = spots; } - for (int i = 0; i < spots.size(); i++) { - CompoundTag spot = spots.getCompound(i); - this.portalSpots[i] = new BlockPos(spot.getInt("X"), spot.getInt("Y"), spot.getInt("Z")); + this.compensatedSpots = new HashSet<>(java.util.Arrays.asList(readSpotList(tag.getList("CompensatedSpots", Tag.TAG_COMPOUND)))); + } + + private static ListTag writeSpots(Iterable positions) { + ListTag list = new ListTag(); + for (BlockPos position : positions) { + CompoundTag spot = new CompoundTag(); + spot.putInt("X", position.getX()); + spot.putInt("Y", position.getY()); + spot.putInt("Z", position.getZ()); + list.add(spot); } - this.entityData.set(PORTAL_WIDTH, Mth.clamp(tag.getInt("PortalWidth"), 1, 16)); - this.entityData.set(PORTAL_HEIGHT, Mth.clamp(tag.getInt("PortalHeight"), 2, 16)); - ListTag compensated = tag.getList("CompensatedSpots", Tag.TAG_COMPOUND); - Set compensatedSpots = new HashSet<>(); - for (int i = 0; i < compensated.size(); i++) { - CompoundTag spot = compensated.getCompound(i); - compensatedSpots.add(new BlockPos(spot.getInt("X"), spot.getInt("Y"), spot.getInt("Z"))); + return list; + } + + private static BlockPos[] readSpotList(ListTag list) { + BlockPos[] positions = new BlockPos[list.size()]; + for (int i = 0; i < list.size(); i++) { + CompoundTag spot = list.getCompound(i); + positions[i] = new BlockPos(spot.getInt("X"), spot.getInt("Y"), spot.getInt("Z")); } - this.compensatedSpots = compensatedSpots; + return positions; } @Override @@ -1234,65 +602,28 @@ public class PortalGunPortalEntity extends Entity implements GeoEntity { } } - @Override - public boolean isInvulnerableTo(DamageSource damageSource) { - return true; - } - - @Override - public boolean fireImmune() { - return true; - } - - @Override - public void lavaHurt() { - } - - @Override - public boolean isPushable() { - return false; - } - - @Override - public boolean canBeCollidedWith() { - return false; - } - - @Override - public boolean isPickable() { - return false; - } - - @Override - public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "portal_controller", 0, this::portalController)); - } - - private PlayState portalController(AnimationState state) { - state.getController().setAnimationSpeed(this.ageTicks < OPEN_TICKS ? 4.0D : 1.0D); - if (this.ageTicks < OPEN_TICKS) { - return state.setAndContinue(OPEN_ANIM); - } - return state.setAndContinue(IDLE_ANIM); - } - - @Override - public AnimatableInstanceCache getAnimatableInstanceCache() { - return this.geoCache; - } - public static SoundEvent sound(String path) { ResourceLocation soundId = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, path); return BuiltInRegistries.SOUND_EVENT.getOptional(soundId) .orElseThrow(() -> new IllegalStateException("Missing portal gun sound event: " + soundId)); } - public record PortalCrossing(Vec3 probe) { - } + private final class GunAppearance implements PortalAppearance { + @Override + public int color() { + return PortalGunPortalEntity.this.getPortalColor(); + } - public record PortalTransit(AABB exitBox, Vec3 position, Vec3 velocity, Vec3 look) { - } + @Override + public ResourceLocation rimTexture() { + return PortalGunPortalEntity.this.getRimTexture(); + } - private record EntityTeleportState(Entity entity, Entity vehicle, Vec3 position, Vec3 look, Vec3 motion) { + @Override + public ResourceLocation surfaceTexture(boolean fancy) { + return fancy + ? PortalGunPortalEntity.this.getVariant().vortexTexture(PortalGunPortalEntity.this.getPortalSide()) + : PortalGunPortalEntity.this.getRimTexture(); + } } } diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunPortalRegistry.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunPortalRegistry.java deleted file mode 100644 index ba56313b..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunPortalRegistry.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.craisinlord.antarchy.content.portalgun; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.UUID; -import java.util.WeakHashMap; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicInteger; -import net.minecraft.world.level.Level; -import net.minecraft.world.phys.AABB; - -public final class PortalGunPortalRegistry { - private static final Map> LEVELS = Collections.synchronizedMap(new WeakHashMap<>()); - private static final AtomicInteger TRACKED = new AtomicInteger(); - - private PortalGunPortalRegistry() { - } - - static void track(PortalGunPortalEntity portal) { - Level level = portal.level(); - if (level == null) { - return; - } - Map portals; - synchronized (LEVELS) { - portals = LEVELS.computeIfAbsent(level, ignored -> new ConcurrentHashMap<>()); - } - if (portals.put(portal.getUUID(), portal) == null) { - TRACKED.incrementAndGet(); - } - } - - static void untrack(PortalGunPortalEntity portal) { - Map portals = portalsIn(portal.level()); - if (portals != null && portals.remove(portal.getUUID(), portal)) { - TRACKED.decrementAndGet(); - } - } - - public static boolean hasAny(Level level) { - if (TRACKED.get() <= 0) { - return false; - } - Map portals = portalsIn(level); - return portals != null && !portals.isEmpty(); - } - - public static Collection all(Level level) { - if (TRACKED.get() <= 0) { - return List.of(); - } - Map portals = portalsIn(level); - return portals == null ? List.of() : portals.values(); - } - - public static PortalGunPortalEntity find(Level level, UUID portalId) { - if (portalId == null) { - return null; - } - Map portals = portalsIn(level); - if (portals == null) { - return null; - } - PortalGunPortalEntity portal = portals.get(portalId); - return portal != null && portal.isAlive() ? portal : null; - } - - public static List near(Level level, AABB bounds) { - if (TRACKED.get() <= 0) { - return List.of(); - } - Map portals = portalsIn(level); - if (portals == null || portals.isEmpty()) { - return List.of(); - } - List nearby = null; - for (PortalGunPortalEntity portal : portals.values()) { - if (portal.isAlive() && portal.getPortalInsides().intersects(bounds)) { - if (nearby == null) { - nearby = new ArrayList<>(2); - } - nearby.add(portal); - } - } - return nearby == null ? List.of() : nearby; - } - - private static Map portalsIn(Level level) { - if (level == null) { - return null; - } - synchronized (LEVELS) { - return LEVELS.get(level); - } - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunProjectionUtil.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunProjectionUtil.java deleted file mode 100644 index b5a4e198..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunProjectionUtil.java +++ /dev/null @@ -1,60 +0,0 @@ -package com.craisinlord.antarchy.content.portalgun; - -import net.minecraft.world.phys.Vec3; -import org.joml.Matrix4f; -import org.joml.Vector4f; - -/** Applies the destination portal plane as the near plane of a camera projection. */ -public final class PortalGunProjectionUtil { - public static final double MIN_EYE_PLANE_DISTANCE = 0.01D; - - private PortalGunProjectionUtil() { - } - - public static Matrix4f clipAtExit(Matrix4f projection, Vec3 eye, Vec3 look, Vec3 up, - Vec3 planePoint, Vec3 planeNormal) { - Vector4f clipPlane = planeInCameraSpace(eye, look, up, planePoint, planeNormal); - if (clipPlane.w() > -MIN_EYE_PLANE_DISTANCE) { - return projection; - } - Vector4f q = new Vector4f(signNonZero(clipPlane.x()), signNonZero(clipPlane.y()), 1.0F, 1.0F) - .mul(new Matrix4f(projection).invert()); - float planeCornerDot = clipPlane.dot(q); - if (!Float.isFinite(planeCornerDot) || Math.abs(planeCornerDot) <= 1.0E-6F) { - return projection; - } - float scale = 2.0F / planeCornerDot; - Vector4f c = clipPlane.mul(scale, new Vector4f()); - Matrix4f clipped = new Matrix4f(projection); - clipped.m02(c.x()); - clipped.m12(c.y()); - clipped.m22(c.z() + 1.0F); - clipped.m32(c.w()); - return clipped; - } - - private static Vector4f planeInCameraSpace(Vec3 eye, Vec3 look, Vec3 up, Vec3 planePoint, Vec3 planeNormal) { - Vec3 forward = look.normalize(); - Vec3 correctedUp = up.subtract(forward.scale(up.dot(forward))).normalize(); - Vec3 right = forward.cross(correctedUp).normalize(); - Vec3 relativePoint = planePoint.subtract(eye); - Vector4f point = new Vector4f( - (float) relativePoint.dot(right), - (float) relativePoint.dot(correctedUp), - (float) -relativePoint.dot(forward), - 1.0F - ); - Vec3 unitNormal = planeNormal.normalize(); - Vector4f normal = new Vector4f( - (float) unitNormal.dot(right), - (float) unitNormal.dot(correctedUp), - (float) -unitNormal.dot(forward), - 0.0F - ); - return new Vector4f(normal.x(), normal.y(), normal.z(), -normal.dot(point)); - } - - private static float signNonZero(float value) { - return value >= 0.0F ? 1.0F : -1.0F; - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunTransformUtil.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunTransformUtil.java deleted file mode 100644 index 67cfe2d7..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunTransformUtil.java +++ /dev/null @@ -1,127 +0,0 @@ -package com.craisinlord.antarchy.content.portalgun; - -import net.minecraft.util.Mth; -import net.minecraft.world.phys.Vec3; -import org.joml.Matrix3f; -import org.joml.Quaternionf; -import org.joml.Vector3f; - -public final class PortalGunTransformUtil { - private static final Vec3 WORLD_UP = new Vec3(0.0D, 1.0D, 0.0D); - private static final Vec3 WORLD_FORWARD_FALLBACK = new Vec3(0.0D, 0.0D, 1.0D); - - private PortalGunTransformUtil() { - } - - public static Quaternionf createTransform(PortalGunPortalEntity sourcePortal, PortalGunPortalEntity destinationPortal) { - return createTransform(sourcePortal.getWidthVec(), sourcePortal.getUpVec(), sourcePortal.getNormalVec().scale(-1.0D), destinationPortal.getWidthVec().scale(-1.0D), destinationPortal.getUpVec(), destinationPortal.getNormalVec()); - } - - public static Quaternionf createTransform(Vec3 sourceWidth, Vec3 sourceUp, Vec3 sourceForward, Vec3 destinationWidth, Vec3 destinationUp, Vec3 destinationForward) { - Matrix3f sourceBasis = new Matrix3f( - (float) sourceWidth.x, (float) sourceWidth.y, (float) sourceWidth.z, - (float) sourceUp.x, (float) sourceUp.y, (float) sourceUp.z, - (float) sourceForward.x, (float) sourceForward.y, (float) sourceForward.z - ); - Matrix3f destinationBasis = new Matrix3f( - (float) destinationWidth.x, (float) destinationWidth.y, (float) destinationWidth.z, - (float) destinationUp.x, (float) destinationUp.y, (float) destinationUp.z, - (float) destinationForward.x, (float) destinationForward.y, (float) destinationForward.z - ); - Matrix3f transform = destinationBasis.mul(sourceBasis.transpose(new Matrix3f()), new Matrix3f()); - return transform.getNormalizedRotation(new Quaternionf()); - } - - public static Vec3 transform(Vec3 vector, Quaternionf quaternion) { - Vector3f rotated = new Vector3f((float) vector.x, (float) vector.y, (float) vector.z).rotate(quaternion); - return new Vec3(rotated.x(), rotated.y(), rotated.z()); - } - - public static Vec3 transformRelativePosition(PortalGunPortalEntity sourcePortal, PortalGunPortalEntity destinationPortal, Vec3 relativePosition) { - return transformPosition(sourcePortal, destinationPortal, relativePosition); - } - - public static Vec3 transformPosition(PortalGunPortalEntity sourcePortal, PortalGunPortalEntity destinationPortal, Vec3 relativePosition) { - Vec3 sourceWidth = sourcePortal.getWidthVec().normalize(); - Vec3 sourceUp = sourcePortal.getUpVec().normalize(); - Vec3 sourceNormal = sourcePortal.getNormalVec().normalize(); - Vec3 destinationWidth = destinationPortal.getWidthVec().normalize(); - Vec3 destinationUp = destinationPortal.getUpVec().normalize(); - Vec3 destinationNormal = destinationPortal.getNormalVec().normalize(); - return destinationWidth.scale(-relativePosition.dot(sourceWidth)) - .add(destinationUp.scale(relativePosition.dot(sourceUp))) - .add(destinationNormal.scale(-relativePosition.dot(sourceNormal))); - } - - public static Vec3 transformVector(PortalGunPortalEntity sourcePortal, PortalGunPortalEntity destinationPortal, Vec3 vector) { - Vec3 sourceWidth = sourcePortal.getWidthVec().normalize(); - Vec3 sourceUp = sourcePortal.getUpVec().normalize(); - Vec3 sourceInto = sourcePortal.getNormalVec().normalize().scale(-1.0D); - Vec3 destinationWidth = destinationPortal.getWidthVec().normalize(); - Vec3 destinationUp = destinationPortal.getUpVec().normalize(); - Vec3 destinationOut = destinationPortal.getNormalVec().normalize(); - return destinationWidth.scale(-vector.dot(sourceWidth)) - .add(destinationUp.scale(vector.dot(sourceUp))) - .add(destinationOut.scale(vector.dot(sourceInto))); - } - - public static Vec3 transformPosition(PortalGunWorldPortalShape source, PortalGunWorldPortalShape destination, Vec3 relativePosition) { - return transformVector(source, destination, relativePosition); - } - - public static Vec3 transformVector(PortalGunWorldPortalShape source, PortalGunWorldPortalShape destination, Vec3 vector) { - return destination.right().scale(-vector.dot(source.right())) - .add(destination.up().scale(vector.dot(source.up()))) - .add(destination.normal().scale(-vector.dot(source.normal()))); - } - - public static float yawFromLook(Vec3 look) { - return (float) Math.toDegrees(Math.atan2(-look.x, look.z)); - } - - public static float pitchFromLook(Vec3 look) { - return (float) Math.toDegrees(-Math.asin(Mth.clamp(look.y, -1.0D, 1.0D))); - } - - public static Vec3 upVectorFromLookAndRoll(Vec3 look, float rollDegrees) { - Vec3 normalizedLook = look.normalize(); - Vec3 referenceUp = Math.abs(normalizedLook.dot(WORLD_UP)) > 0.999D ? WORLD_FORWARD_FALLBACK : WORLD_UP; - Vec3 right = referenceUp.cross(normalizedLook).normalize(); - Vec3 up = normalizedLook.cross(right).normalize(); - if (Math.abs(rollDegrees) <= 1.0E-4F) { - return up; - } - Quaternionf roll = new Quaternionf().fromAxisAngleDeg((float) normalizedLook.x, (float) normalizedLook.y, (float) normalizedLook.z, rollDegrees); - return transform(up, roll).normalize(); - } - - public static float rollFromOrientation(Vec3 look, Vec3 up) { - Vec3 normalizedLook = look.normalize(); - Vec3 normalizedUp = up.normalize(); - Vec3 baseUp = upVectorFromLookAndRoll(normalizedLook, 0.0F); - Vec3 projectedUp = normalizedUp.subtract(normalizedLook.scale(normalizedUp.dot(normalizedLook))); - if (projectedUp.lengthSqr() < 1.0E-8D) { - return 0.0F; - } - projectedUp = projectedUp.normalize(); - double sin = normalizedLook.dot(baseUp.cross(projectedUp)); - double cos = Mth.clamp(baseUp.dot(projectedUp), -1.0D, 1.0D); - return normalizeDegrees((float) Math.toDegrees(Math.atan2(sin, cos))); - } - - public static Quaternionf orientationQuaternion(Vec3 look, Vec3 up) { - Vec3 forward = look.normalize(); - Vec3 correctedUp = up.subtract(forward.scale(up.dot(forward))).normalize(); - Vec3 right = forward.cross(correctedUp).normalize(); - Matrix3f basis = new Matrix3f( - (float) right.x, (float) right.y, (float) right.z, - (float) correctedUp.x, (float) correctedUp.y, (float) correctedUp.z, - (float) -forward.x, (float) -forward.y, (float) -forward.z - ); - return basis.getNormalizedRotation(new Quaternionf()); - } - - public static float normalizeDegrees(float degrees) { - return Mth.wrapDegrees(degrees); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunTransitHandler.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunTransitHandler.java deleted file mode 100644 index 24914ab3..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunTransitHandler.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.craisinlord.antarchy.content.portalgun; - -import com.craisinlord.antarchy.content.network.PortalGunTransitPayload; -import net.minecraft.server.level.ServerPlayer; - -public final class PortalGunTransitHandler { - private PortalGunTransitHandler() { - } - - public static void handle(ServerPlayer player, PortalGunTransitPayload payload) { - if (player == null) { - return; - } - if (!PortalGunPortalEntity.handleClientTransit(player, payload.portalId(), payload.start(), payload.end(), payload.velocity())) { - player.connection.teleport(player.getX(), player.getY(), player.getZ(), player.getYRot(), player.getXRot()); - } - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunTransitMath.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunTransitMath.java deleted file mode 100644 index 67616a63..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunTransitMath.java +++ /dev/null @@ -1,138 +0,0 @@ -package com.craisinlord.antarchy.content.portalgun; - -import com.craisinlord.anthology.gravity.GravityApi; -import com.craisinlord.anthology.gravity.GravityDirection; -import com.craisinlord.anthology.gravity.GravityRotationUtil; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.Vec3; - -public final class PortalGunTransitMath { - public static final double EXIT_CLEARANCE = 0.02D; - public static final double LEADING_FACE_TOLERANCE = 0.05D; - private static final double UPWARD_EXIT_NORMAL_Y = 0.5D; - - private PortalGunTransitMath() { - } - - public static double extentAlong(AABB box, Vec3 axis) { - return (box.maxX - box.minX) * 0.5D * Math.abs(axis.x) - + (box.maxY - box.minY) * 0.5D * Math.abs(axis.y) - + (box.maxZ - box.minZ) * 0.5D * Math.abs(axis.z); - } - - public static boolean fitsOpening(PortalGunWorldPortalShape shape, AABB box, double tolerance) { - PortalGunWorldPortalShape.PortalLocalCoords center = shape.localCoords(box.getCenter()); - return Math.abs(center.horizontal()) + extentAlong(box, shape.right()) <= shape.halfWidth() + tolerance - && Math.abs(center.vertical()) + extentAlong(box, shape.up()) <= shape.halfHeight() + tolerance; - } - - public static boolean centredOverOpening(PortalGunWorldPortalShape shape, AABB box) { - PortalGunWorldPortalShape.PortalLocalCoords center = shape.localCoords(box.getCenter()); - return Math.abs(center.horizontal()) <= shape.halfWidth() && Math.abs(center.vertical()) <= shape.halfHeight(); - } - - public static boolean crossesWithBody(PortalGunWorldPortalShape shape, AABB previousBox, AABB currentBox, Vec3 attemptedMovement) { - double previousDepth = shape.localCoords(previousBox.getCenter()).depth(); - double currentDepth = shape.localCoords(currentBox.getCenter()).depth(); - if (previousDepth <= 0.0D) { - return false; - } - boolean movingInward = attemptedMovement.dot(shape.normal()) < -1.0E-6D || currentDepth < previousDepth - 1.0E-6D; - if (!movingInward) { - return false; - } - if (currentDepth - extentAlong(currentBox, shape.normal()) > LEADING_FACE_TOLERANCE) { - return false; - } - return centredOverOpening(shape, currentBox); - } - - public static Vec3 transformVector(PortalGunWorldPortalShape source, PortalGunWorldPortalShape destination, Vec3 vector) { - return PortalGunTransformUtil.transformVector(source, destination, vector); - } - - public static AABB exitBox(PortalGunWorldPortalShape source, PortalGunWorldPortalShape destination, AABB box) { - PortalGunWorldPortalShape.PortalLocalCoords local = source.localCoords(box.getCenter()); - double horizontal = clampLateral(-local.horizontal(), destination.halfWidth(), extentAlong(box, destination.right())); - double vertical = clampLateral(local.vertical(), destination.halfHeight(), extentAlong(box, destination.up())); - double depth = extentAlong(box, destination.normal()) + EXIT_CLEARANCE; - Vec3 center = destination.center() - .add(destination.right().scale(horizontal)) - .add(destination.up().scale(vertical)) - .add(destination.normal().scale(depth)); - Vec3 offset = center.subtract(box.getCenter()); - return box.move(offset); - } - - public static Vec3 feetPosition(AABB box) { - return new Vec3((box.minX + box.maxX) * 0.5D, box.minY, (box.minZ + box.maxZ) * 0.5D); - } - - public static Vec3 entityPosition(AABB box, Entity entity) { - return entityPosition(box, GravityApi.isGravityInverted(entity)); - } - - public static Vec3 entityPosition(AABB box, boolean inverted) { - if (!inverted) { - return feetPosition(box); - } - return new Vec3((box.minX + box.maxX) * 0.5D, box.maxY, (box.minZ + box.maxZ) * 0.5D); - } - - public static Vec3 entityVelocityToWorld(Entity entity, Vec3 velocity) { - return entityVelocityToWorld(velocity, GravityApi.isGravityInverted(entity)); - } - - public static Vec3 entityVelocityToWorld(Vec3 velocity, boolean inverted) { - if (!inverted) { - return velocity; - } - return GravityRotationUtil.vecPlayerToWorld(velocity, GravityDirection.UP); - } - - public static Vec3 entityVelocityFromWorld(Entity entity, Vec3 velocity) { - return entityVelocityFromWorld(velocity, GravityApi.isGravityInverted(entity)); - } - - public static Vec3 entityVelocityFromWorld(Vec3 velocity, boolean inverted) { - if (!inverted) { - return velocity; - } - return GravityRotationUtil.vecWorldToPlayer(velocity, GravityDirection.UP); - } - - public static Vec3 exitVelocity(PortalGunWorldPortalShape source, PortalGunWorldPortalShape destination, Vec3 velocity, double minUpwardExitSpeed, double maxExitSpeed) { - Vec3 exit = transformVector(source, destination, velocity); - Vec3 normal = destination.normal(); - if (minUpwardExitSpeed > 0.0D && normal.y > UPWARD_EXIT_NORMAL_Y) { - double outward = exit.dot(normal); - if (outward < minUpwardExitSpeed) { - exit = exit.add(normal.scale(minUpwardExitSpeed - outward)); - } - } - if (maxExitSpeed > 0.0D && exit.lengthSqr() > maxExitSpeed * maxExitSpeed) { - exit = exit.normalize().scale(maxExitSpeed); - } - return exit; - } - - public static float exitFallDistance(float fallDistance, Vec3 exitVelocity) { - return exitVelocity.y < 0.0D ? fallDistance : 0.0F; - } - - public static float exitFallDistance(float fallDistance, Vec3 exitVelocity, Entity entity) { - if (!GravityApi.isGravityInverted(entity)) { - return exitFallDistance(fallDistance, exitVelocity); - } - return exitVelocity.y > 0.0D ? fallDistance : 0.0F; - } - - private static double clampLateral(double coordinate, double halfSize, double extent) { - double limit = halfSize - extent; - if (limit <= 0.0D) { - return 0.0D; - } - return Math.max(-limit, Math.min(limit, coordinate)); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunWorldPortalShape.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunWorldPortalShape.java deleted file mode 100644 index 9d83dbb3..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/portalgun/PortalGunWorldPortalShape.java +++ /dev/null @@ -1,201 +0,0 @@ -package com.craisinlord.antarchy.content.portalgun; - -import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.Vec3; -import java.util.List; - -public record PortalGunWorldPortalShape( - Vec3 center, - Vec3 normal, - Vec3 up, - Vec3 right, - double halfWidth, - double halfHeight, - double halfDepth -) { - public static final double DEFAULT_SCAN_DISTANCE = 3.0D; - - public AABB getPlane() { - return this.createPlaneAround(0.0D, 0.0125D); - } - - public AABB getFlatPlane() { - return this.createPlaneAround(0.0D, 0.0D); - } - - public AABB getScanRange() { - return this.getFlatPlane().expandTowards(this.normal.scale(DEFAULT_SCAN_DISTANCE)); - } - - public AABB getPortalInsides() { - return this.createPlaneAround(0.0D, this.halfDepth); - } - - public AABB getTeleportPlane(double offset) { - return this.createPlaneAround(offset, this.halfDepth); - } - - public PortalGunWorldPortalShape scaleAperture(double scale) { - double safeScale = Math.max(0.0D, scale); - return new PortalGunWorldPortalShape(this.center, this.normal, this.up, this.right, this.halfWidth * safeScale, this.halfHeight * safeScale, this.halfDepth); - } - - public Vec3[] getCorners(double normalOffset) { - Vec3 center = this.center.add(this.normal.scale(normalOffset)); - Vec3 width = this.right.scale(this.halfWidth); - Vec3 height = this.up.scale(this.halfHeight); - return new Vec3[] { - center.subtract(width).subtract(height), - center.subtract(width).add(height), - center.add(width).add(height), - center.add(width).subtract(height) - }; - } - - public Vec3[] getOutline(double normalOffset, int segments, double radiusHorizontal, double radiusVertical) { - int count = Math.max(3, segments); - Vec3 center = this.center.add(this.normal.scale(normalOffset)); - Vec3[] outline = new Vec3[count]; - for (int index = 0; index < count; index++) { - double angle = Math.PI * 2.0D * index / count; - outline[index] = center - .add(this.right.scale(Math.cos(angle) * radiusHorizontal)) - .add(this.up.scale(Math.sin(angle) * radiusVertical)); - } - return outline; - } - - public PortalLocalCoords localCoords(Vec3 position) { - Vec3 relative = position.subtract(this.center); - return new PortalLocalCoords(relative.dot(this.right), relative.dot(this.up), relative.dot(this.normal)); - } - - public boolean contains(Vec3 position, double depthPadding) { - PortalLocalCoords coords = this.localCoords(position); - return Math.abs(coords.horizontal()) <= this.halfWidth - && Math.abs(coords.vertical()) <= this.halfHeight - && Math.abs(coords.depth()) <= this.halfDepth + depthPadding; - } - - public boolean crosses(Vec3 previousPosition, Vec3 currentPosition) { - PortalLocalCoords previous = this.localCoords(previousPosition); - PortalLocalCoords current = this.localCoords(currentPosition); - double depthDelta = current.depth() - previous.depth(); - if (depthDelta > -1.0E-6D || previous.depth() <= 0.0D || current.depth() > 0.0D) { - return false; - } - double t = -previous.depth() / depthDelta; - if (t < 0.0D || t > 1.0D) { - return false; - } - double horizontal = previous.horizontal() + (current.horizontal() - previous.horizontal()) * t; - double vertical = previous.vertical() + (current.vertical() - previous.vertical()) * t; - return Math.abs(horizontal) <= this.halfWidth && Math.abs(vertical) <= this.halfHeight; - } - - public boolean shouldRenderFront(Vec3 cameraPos) { - return this.localCoords(cameraPos).depth() > 0.0D; - } - - public boolean intersectsFront(AABB box, double tolerance) { - double maxDepth = Double.NEGATIVE_INFINITY; - for (Vec3 corner : corners(box)) { - maxDepth = Math.max(maxDepth, this.localCoords(corner).depth()); - if (maxDepth >= -tolerance) { - return true; - } - } - return false; - } - - public boolean intersectsPortalColumn(AABB box, double horizontalPadding, double verticalPadding, double depthPadding) { - double minHorizontal = Double.POSITIVE_INFINITY; - double maxHorizontal = Double.NEGATIVE_INFINITY; - double minVertical = Double.POSITIVE_INFINITY; - double maxVertical = Double.NEGATIVE_INFINITY; - double minDepth = Double.POSITIVE_INFINITY; - double maxDepth = Double.NEGATIVE_INFINITY; - for (Vec3 corner : corners(box)) { - PortalLocalCoords coords = this.localCoords(corner); - minHorizontal = Math.min(minHorizontal, coords.horizontal()); - maxHorizontal = Math.max(maxHorizontal, coords.horizontal()); - minVertical = Math.min(minVertical, coords.vertical()); - maxVertical = Math.max(maxVertical, coords.vertical()); - minDepth = Math.min(minDepth, coords.depth()); - maxDepth = Math.max(maxDepth, coords.depth()); - } - return maxHorizontal >= -this.halfWidth - horizontalPadding - && minHorizontal <= this.halfWidth + horizontalPadding - && maxVertical >= -this.halfHeight - verticalPadding - && minVertical <= this.halfHeight + verticalPadding - && maxDepth >= -this.halfDepth - depthPadding - && minDepth <= this.halfDepth + depthPadding; - } - - public AABB getBoundsForCulling() { - return this.createPlaneAround(0.0D, this.halfDepth).inflate(1.5D); - } - - public List getCollisionBoundaries(double borderThickness) { - double horizontalOuter = this.halfWidth + borderThickness; - double verticalOuter = this.halfHeight + borderThickness; - return List.of( - this.createLocalBox(-horizontalOuter, -this.halfWidth, -verticalOuter, verticalOuter, -this.halfDepth, this.halfDepth), - this.createLocalBox(this.halfWidth, horizontalOuter, -verticalOuter, verticalOuter, -this.halfDepth, this.halfDepth), - this.createLocalBox(-this.halfWidth, this.halfWidth, -verticalOuter, -this.halfHeight, -this.halfDepth, this.halfDepth), - this.createLocalBox(-this.halfWidth, this.halfWidth, this.halfHeight, verticalOuter, -this.halfDepth, this.halfDepth) - ); - } - - private AABB createPlaneAround(double planeOffset, double thickness) { - Vec3 boxCenter = this.center.add(this.normal.scale(planeOffset)); - double halfX = this.halfWidth * Math.abs(this.right.x) + this.halfHeight * Math.abs(this.up.x) + thickness * Math.abs(this.normal.x); - double halfY = this.halfWidth * Math.abs(this.right.y) + this.halfHeight * Math.abs(this.up.y) + thickness * Math.abs(this.normal.y); - double halfZ = this.halfWidth * Math.abs(this.right.z) + this.halfHeight * Math.abs(this.up.z) + thickness * Math.abs(this.normal.z); - return new AABB(boxCenter.x - halfX, boxCenter.y - halfY, boxCenter.z - halfZ, boxCenter.x + halfX, boxCenter.y + halfY, boxCenter.z + halfZ); - } - - private AABB createLocalBox(double minHorizontal, double maxHorizontal, double minVertical, double maxVertical, double minDepth, double maxDepth) { - Vec3[] corners = new Vec3[] { - this.center.add(this.right.scale(minHorizontal)).add(this.up.scale(minVertical)).add(this.normal.scale(minDepth)), - this.center.add(this.right.scale(minHorizontal)).add(this.up.scale(minVertical)).add(this.normal.scale(maxDepth)), - this.center.add(this.right.scale(minHorizontal)).add(this.up.scale(maxVertical)).add(this.normal.scale(minDepth)), - this.center.add(this.right.scale(minHorizontal)).add(this.up.scale(maxVertical)).add(this.normal.scale(maxDepth)), - this.center.add(this.right.scale(maxHorizontal)).add(this.up.scale(minVertical)).add(this.normal.scale(minDepth)), - this.center.add(this.right.scale(maxHorizontal)).add(this.up.scale(minVertical)).add(this.normal.scale(maxDepth)), - this.center.add(this.right.scale(maxHorizontal)).add(this.up.scale(maxVertical)).add(this.normal.scale(minDepth)), - this.center.add(this.right.scale(maxHorizontal)).add(this.up.scale(maxVertical)).add(this.normal.scale(maxDepth)) - }; - double minX = Double.POSITIVE_INFINITY; - double minY = Double.POSITIVE_INFINITY; - double minZ = Double.POSITIVE_INFINITY; - double maxX = Double.NEGATIVE_INFINITY; - double maxY = Double.NEGATIVE_INFINITY; - double maxZ = Double.NEGATIVE_INFINITY; - for (Vec3 corner : corners) { - minX = Math.min(minX, corner.x); - minY = Math.min(minY, corner.y); - minZ = Math.min(minZ, corner.z); - maxX = Math.max(maxX, corner.x); - maxY = Math.max(maxY, corner.y); - maxZ = Math.max(maxZ, corner.z); - } - return new AABB(minX, minY, minZ, maxX, maxY, maxZ); - } - - private static Vec3[] corners(AABB box) { - return new Vec3[] { - new Vec3(box.minX, box.minY, box.minZ), - new Vec3(box.minX, box.minY, box.maxZ), - new Vec3(box.minX, box.maxY, box.minZ), - new Vec3(box.minX, box.maxY, box.maxZ), - new Vec3(box.maxX, box.minY, box.minZ), - new Vec3(box.maxX, box.minY, box.maxZ), - new Vec3(box.maxX, box.maxY, box.minZ), - new Vec3(box.maxX, box.maxY, box.maxZ) - }; - } - - public record PortalLocalCoords(double horizontal, double vertical, double depth) { - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/time/ChronosphereManager.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/time/ChronosphereManager.java deleted file mode 100644 index 73a9cbd3..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/time/ChronosphereManager.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.craisinlord.antarchy.content.time; - -import com.craisinlord.antarchy.content.enchantment.AntarchyEnchantments; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.UUID; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.ServerPlayer; - -public final class ChronosphereManager { - public static final double RATE = 0.35D; - private static final Map ACTIVE_FIELDS = new HashMap<>(); - - private ChronosphereManager() { - } - - public static void refresh(ServerPlayer player) { - if (!(player.level() instanceof ServerLevel level)) { - return; - } - int enchantmentLevel = AntarchyEnchantments.chronosphereLevel(player); - UUID playerId = player.getUUID(); - UUID fieldId = ACTIVE_FIELDS.get(playerId); - TimeDilationFieldEntity field = fieldId != null && level.getEntity(fieldId) instanceof TimeDilationFieldEntity existing - ? existing - : null; - if (enchantmentLevel <= 0 || !player.isAlive()) { - ACTIVE_FIELDS.remove(playerId); - if (field != null) { - field.discard(); - } - return; - } - List fields = new ArrayList<>(); - if (field == null) { - for (var entity : level.getAllEntities()) { - if (entity instanceof TimeDilationFieldEntity candidate && candidate.isChronosphere() && candidate.isOwnedBy(player)) { - fields.add(candidate); - } - } - } - if (field == null && fields.isEmpty()) { - field = TimeDilationApi.createField(level, player.position(), radius(enchantmentLevel), RATE, -1, player.getUUID(), false); - field.configureChronosphere(player); - } else if (field == null) { - field = fields.getFirst(); - field.configureChronosphere(player); - for (int index = 1; index < fields.size(); index++) { - fields.get(index).discard(); - } - } - field.setFieldRadius(radius(enchantmentLevel)); - ACTIVE_FIELDS.put(playerId, field.getUUID()); - } - - public static double radius(int level) { - return switch (level) { - case 1 -> 1.5D; - case 2 -> 2.5D; - default -> 3.5D; - }; - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationApi.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationApi.java deleted file mode 100644 index 2d835329..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationApi.java +++ /dev/null @@ -1,222 +0,0 @@ -package com.craisinlord.antarchy.content.time; - -import java.util.function.BiConsumer; -import java.util.Map; -import java.util.UUID; -import java.util.concurrent.ConcurrentHashMap; -import java.util.List; -import java.util.concurrent.CopyOnWriteArrayList; -import java.util.function.Predicate; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.phys.Vec3; - -public final class TimeDilationApi { - private static BiConsumer syncDispatcher = (entity, rate) -> { - }; - private static BiConsumer> fieldSyncDispatcher = (player, fields) -> { - }; - private static final Map SYNCED_CLIENT_RATES = new ConcurrentHashMap<>(); - private static final ThreadLocal ROTATION_BYPASS_DEPTH = ThreadLocal.withInitial(() -> 0); - private static final List> HORIZONTAL_ONLY_MOVEMENT = new CopyOnWriteArrayList<>(); - - private TimeDilationApi() { - } - - public static void setSyncDispatcher(BiConsumer dispatcher) { - syncDispatcher = dispatcher != null ? dispatcher : (entity, rate) -> { - }; - } - - public static void setFieldSyncDispatcher(BiConsumer> dispatcher) { - fieldSyncDispatcher = dispatcher != null ? dispatcher : (player, fields) -> { - }; - } - - public static TimeDilationFieldEntity createField(ServerLevel level, Vec3 center, double radius, double rate, int durationTicks) { - return createField(level, center, radius, rate, durationTicks, null); - } - - public static TimeDilationFieldEntity createField(ServerLevel level, Vec3 center, double radius, double rate, int durationTicks, UUID ownerId) { - return createField(level, center, radius, rate, durationTicks, ownerId, true); - } - - public static TimeDilationFieldEntity createField(ServerLevel level, Vec3 center, double radius, double rate, int durationTicks, UUID ownerId, boolean visual) { - TimeDilationFieldEntity field = TimeDilationFieldEntity.create(level, center, radius, rate, durationTicks, ownerId, visual); - level.addFreshEntity(field); - return field; - } - - public static double getRate(Entity entity) { - if (entity instanceof TimeDilationEntityAccess access) { - if (entity.level().isClientSide) { - Double syncedRate = SYNCED_CLIENT_RATES.get(entity.getUUID()); - if (syncedRate != null) { - return syncedRate; - } - } - return access.antarchy$getTimeDilationRate(); - } - return TimeDilationMath.NORMAL_RATE; - } - - public static boolean isDilated(Entity entity) { - return getRate(entity) < TimeDilationMath.NORMAL_RATE; - } - - public static double getVehicleRate(Entity entity) { - Entity vehicle = entity.getVehicle(); - return vehicle == null ? TimeDilationMath.NORMAL_RATE : getRate(vehicle); - } - - public static void enterRotationBypass() { - ROTATION_BYPASS_DEPTH.set(ROTATION_BYPASS_DEPTH.get() + 1); - } - - public static void exitRotationBypass() { - int depth = ROTATION_BYPASS_DEPTH.get() - 1; - if (depth <= 0) { - ROTATION_BYPASS_DEPTH.remove(); - } else { - ROTATION_BYPASS_DEPTH.set(depth); - } - } - - public static boolean isRotationBypassed() { - return ROTATION_BYPASS_DEPTH.get() > 0; - } - - public static void setInheritedRate(Entity entity, double rate) { - if (entity instanceof TimeDilationEntityAccess access) { - access.antarchy$setInheritedTimeDilationRate(rate); - } - } - - public static void applySyncedRate(Entity entity, double rate) { - applySyncedRate(entity.getUUID(), rate); - if (entity instanceof TimeDilationEntityAccess access) { - access.antarchy$setTimeDilationRate(rate); - } - } - - public static void applySyncedRate(UUID entityUuid, double rate) { - double clampedRate = TimeDilationMath.clampRate(rate, TimeDilationMath.ABSOLUTE_MAX_RATE); - SYNCED_CLIENT_RATES.put(entityUuid, clampedRate); - } - - public static void clearRate(Entity entity) { - if (entity instanceof TimeDilationEntityAccess access) { - boolean wasDilated = Math.abs(access.antarchy$getTimeDilationRate() - TimeDilationMath.NORMAL_RATE) > 0.001D; - access.antarchy$setTimeDilationRate(TimeDilationMath.NORMAL_RATE); - if (wasDilated) { - syncEntityRate(entity, TimeDilationMath.NORMAL_RATE); - } - } - SYNCED_CLIENT_RATES.remove(entity.getUUID()); - } - - public static void clearSyncedClientRates() { - SYNCED_CLIENT_RATES.clear(); - } - - public static boolean hasSyncedClientRates() { - return !SYNCED_CLIENT_RATES.isEmpty(); - } - - public static void syncEntityRate(Entity entity, double rate) { - syncDispatcher.accept(entity, TimeDilationMath.clampRate(rate, TimeDilationMath.ABSOLUTE_MAX_RATE)); - } - - public static void addHorizontalOnlyMovement(Predicate predicate) { - HORIZONTAL_ONLY_MOVEMENT.add(predicate); - } - - public static boolean isHorizontalOnlyMovement(Entity entity) { - for (Predicate predicate : HORIZONTAL_ONLY_MOVEMENT) { - if (predicate.test(entity)) { - return true; - } - } - return false; - } - - public static double getRateCeiling(Entity entity) { - if (entity instanceof TimeDilationEntityAccess access) { - return access.antarchy$getTimeDilationCeiling(); - } - return TimeDilationMath.MAX_RATE; - } - - public static void setRateCeiling(Entity entity, double ceiling) { - if (entity instanceof TimeDilationEntityAccess access) { - access.antarchy$setTimeDilationCeiling(ceiling); - TimeDilationManager.trackPotentiallyAffected(entity); - } - } - - public static void clearRateCeiling(Entity entity) { - setRateCeiling(entity, TimeDilationMath.MAX_RATE); - } - - public static void setPersonalRate(Entity entity, String sourceId, double rate) { - if (entity instanceof TimeDilationEntityAccess access) { - double clampedRate = TimeDilationMath.clampRate(rate, TimeDilationMath.ABSOLUTE_MAX_RATE); - if (Math.abs(clampedRate - TimeDilationMath.NORMAL_RATE) < 0.001D) { - access.antarchy$getPersonalTimeDilationRates().remove(sourceId); - } else { - access.antarchy$getPersonalTimeDilationRates().put(sourceId, clampedRate); - } - TimeDilationManager.trackPotentiallyAffected(entity); - } - } - - public static void clearPersonalRate(Entity entity, String sourceId) { - if (entity instanceof TimeDilationEntityAccess access - && access.antarchy$getPersonalTimeDilationRates().remove(sourceId) != null) { - TimeDilationManager.trackPotentiallyAffected(entity); - } - } - - public static double getPersonalRate(Entity entity, String sourceId) { - if (entity instanceof TimeDilationEntityAccess access) { - return access.antarchy$getPersonalTimeDilationRates().getOrDefault(sourceId, TimeDilationMath.NORMAL_RATE); - } - return TimeDilationMath.NORMAL_RATE; - } - - public static boolean hasPersonalRates(Entity entity) { - return entity instanceof TimeDilationEntityAccess access && !access.antarchy$getPersonalTimeDilationRates().isEmpty(); - } - - public static TimeDilationFieldEntity createAttachedField(ServerLevel level, Entity owner, double radius, double rate, int durationTicks) { - TimeDilationFieldEntity field = TimeDilationFieldEntity.create(level, owner.position(), radius, rate, durationTicks, owner.getUUID(), true); - field.attachTo(owner); - level.addFreshEntity(field); - return field; - } - - public static void syncFields(ServerPlayer player, List fields) { - fieldSyncDispatcher.accept(player, fields); - } - - public static boolean consumeTick(Entity entity, String timerKey) { - return consumeTicks(entity, timerKey) > 0; - } - - public static int consumeTicks(Entity entity, String timerKey) { - double rate = getRate(entity); - if (entity instanceof TimeDilationEntityAccess access) { - return access.antarchy$consumeTimeDilationTicks(timerKey, rate); - } - return 1; - } - - public static int scaleCooldownTicks(Entity entity, int ticks) { - double rate = getRate(entity); - if (ticks <= 0 || Math.abs(rate - TimeDilationMath.NORMAL_RATE) < 0.001D) { - return ticks; - } - return (int) Math.ceil(ticks / Math.max(TimeDilationMath.MIN_RATE, rate)); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationCommand.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationCommand.java deleted file mode 100644 index 891c5258..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationCommand.java +++ /dev/null @@ -1,101 +0,0 @@ -package com.craisinlord.antarchy.content.time; - -import com.mojang.brigadier.CommandDispatcher; -import com.mojang.brigadier.arguments.DoubleArgumentType; -import com.mojang.brigadier.arguments.IntegerArgumentType; -import com.mojang.brigadier.context.CommandContext; -import java.util.ArrayList; -import java.util.List; -import net.minecraft.commands.CommandSourceStack; -import net.minecraft.commands.Commands; -import net.minecraft.commands.arguments.coordinates.Vec3Argument; -import net.minecraft.network.chat.Component; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.phys.Vec3; - -public final class TimeDilationCommand { - private TimeDilationCommand() { - } - - public static void register(CommandDispatcher dispatcher) { - dispatcher.register( - Commands.literal("timedilation") - .requires(source -> source.hasPermission(2)) - .then(Commands.literal("create") - .then(Commands.argument("center", Vec3Argument.vec3()) - .then(Commands.argument("radius", DoubleArgumentType.doubleArg(0.5D, 128.0D)) - .then(Commands.argument("rate", DoubleArgumentType.doubleArg(TimeDilationMath.MIN_RATE, 1.0D)) - .then(Commands.argument("durationTicks", IntegerArgumentType.integer(-1)) - .executes(TimeDilationCommand::create)))))) - .then(Commands.literal("create_here") - .then(Commands.argument("radius", DoubleArgumentType.doubleArg(0.5D, 128.0D)) - .then(Commands.argument("rate", DoubleArgumentType.doubleArg(TimeDilationMath.MIN_RATE, 1.0D)) - .then(Commands.argument("durationTicks", IntegerArgumentType.integer(-1)) - .executes(TimeDilationCommand::createHere))))) - .then(Commands.literal("list").executes(TimeDilationCommand::list)) - .then(Commands.literal("clear").executes(TimeDilationCommand::clear)) - ); - } - - private static int create(CommandContext context) { - return createField(context, Vec3Argument.getVec3(context, "center")); - } - - private static int createHere(CommandContext context) { - return createField(context, context.getSource().getPosition()); - } - - private static int createField(CommandContext context, Vec3 center) { - ServerLevel level = context.getSource().getLevel(); - double radius = DoubleArgumentType.getDouble(context, "radius"); - double rate = DoubleArgumentType.getDouble(context, "rate"); - int durationTicks = IntegerArgumentType.getInteger(context, "durationTicks"); - TimeDilationFieldEntity field = TimeDilationApi.createField(level, center, radius, rate, durationTicks); - context.getSource().sendSuccess( - () -> Component.literal("Created time dilation field " + field.getUUID() + " radius=" + radius - + " rate=" + rate + " durationTicks=" + durationTicks), - true - ); - return 1; - } - - private static int list(CommandContext context) { - int count = 0; - for (ServerLevel level : context.getSource().getServer().getAllLevels()) { - for (Entity entity : level.getAllEntities()) { - if (!(entity instanceof TimeDilationFieldEntity field)) { - continue; - } - count++; - context.getSource().sendSuccess( - () -> Component.literal(field.getUUID() + " " + level.dimension().location() + " @ " - + format(field.position()) + " radius=" + field.fieldRadius() + " rate=" + field.fieldRate() - + " age=" + field.fieldAge() - + (field.isInfinite() ? " duration=infinite" : " duration=" + field.fieldDurationTicks())), - false - ); - } - } - return count; - } - - private static int clear(CommandContext context) { - List fields = new ArrayList<>(); - for (ServerLevel level : context.getSource().getServer().getAllLevels()) { - for (Entity entity : level.getAllEntities()) { - if (entity instanceof TimeDilationFieldEntity field) { - fields.add(field); - } - } - } - fields.forEach(Entity::discard); - int count = fields.size(); - context.getSource().sendSuccess(() -> Component.literal("Cleared " + count + " time dilation field(s)"), true); - return count; - } - - private static String format(Vec3 vec) { - return String.format(java.util.Locale.ROOT, "%.2f %.2f %.2f", vec.x, vec.y, vec.z); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationEntityAccess.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationEntityAccess.java deleted file mode 100644 index c571ead1..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationEntityAccess.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.craisinlord.antarchy.content.time; - -import java.util.Map; - -public interface TimeDilationEntityAccess { - double antarchy$getTimeDilationCeiling(); - - void antarchy$setTimeDilationCeiling(double ceiling); - - Map antarchy$getPersonalTimeDilationRates(); - - double antarchy$getTimeDilationRate(); - - void antarchy$setTimeDilationRate(double rate); - - double antarchy$getInheritedTimeDilationRate(); - - void antarchy$setInheritedTimeDilationRate(double rate); - - boolean antarchy$consumeTimeDilationTick(String timerKey, double rate); - - int antarchy$consumeTimeDilationTicks(String timerKey, double rate); - - boolean antarchy$isInTimeDilationMove(); - - void antarchy$setInTimeDilationMove(boolean inMove); - - boolean antarchy$isApplyingExternalImpulse(); - - void antarchy$setApplyingExternalImpulse(boolean applying); -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationFieldEntity.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationFieldEntity.java deleted file mode 100644 index da939800..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationFieldEntity.java +++ /dev/null @@ -1,237 +0,0 @@ -package com.craisinlord.antarchy.content.time; - -import com.craisinlord.antarchy.content.AntarchyObjects; -import com.craisinlord.antarchy.content.AntarchyTags; -import com.craisinlord.antarchy.content.entity.royal.QueenEntity; -import com.craisinlord.antarchy.content.entity.royal.RoyalBlackHoleEntity; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.network.syncher.EntityDataAccessor; -import net.minecraft.network.syncher.EntityDataSerializers; -import net.minecraft.network.syncher.SynchedEntityData; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.item.ItemEntity; -import net.minecraft.world.entity.projectile.Projectile; -import net.minecraft.world.level.Level; -import net.minecraft.world.phys.Vec3; -import java.util.UUID; - -public class TimeDilationFieldEntity extends Entity { - private static final EntityDataAccessor RADIUS = - SynchedEntityData.defineId(TimeDilationFieldEntity.class, EntityDataSerializers.FLOAT); - private static final EntityDataAccessor RATE = - SynchedEntityData.defineId(TimeDilationFieldEntity.class, EntityDataSerializers.FLOAT); - - private static final String RADIUS_KEY = "Radius"; - private static final String RATE_KEY = "Rate"; - private static final String DURATION_KEY = "DurationTicks"; - private static final String AGE_KEY = "Age"; - - private int durationTicks = -1; - private int age; - private UUID ownerId; - private UUID anchorId; - private int missingAnchorTicks; - private boolean visual = true; - private boolean chronosphere; - private boolean queenChronosphere; - - public TimeDilationFieldEntity(EntityType entityType, Level level) { - super(entityType, level); - this.noPhysics = true; - this.noCulling = true; - } - - public static TimeDilationFieldEntity create(Level level, Vec3 center, double radius, double rate, int durationTicks) { - return create(level, center, radius, rate, durationTicks, null); - } - - public static TimeDilationFieldEntity create(Level level, Vec3 center, double radius, double rate, int durationTicks, UUID ownerId) { - return create(level, center, radius, rate, durationTicks, ownerId, true); - } - - public static TimeDilationFieldEntity create(Level level, Vec3 center, double radius, double rate, int durationTicks, UUID ownerId, boolean visual) { - TimeDilationFieldEntity field = new TimeDilationFieldEntity(AntarchyObjects.TIME_DILATION_FIELD.get(), level); - field.setPos(center.x, center.y, center.z); - field.setFieldRadius(radius); - field.setFieldRate(rate); - field.durationTicks = durationTicks; - field.ownerId = ownerId; - field.visual = visual; - return field; - } - - public boolean isOwnedBy(Entity entity) { - return this.ownerId != null && entity != null && this.ownerId.equals(entity.getUUID()); - } - - public void attachTo(Entity anchor) { - this.anchorId = anchor == null ? null : anchor.getUUID(); - this.missingAnchorTicks = 0; - } - - public void configureChronosphere(Entity owner) { - this.ownerId = owner.getUUID(); - this.attachTo(owner); - this.durationTicks = -1; - this.visual = false; - this.chronosphere = true; - } - - public void configureQueenChronosphere(QueenEntity owner) { - this.ownerId = owner.getUUID(); - this.attachTo(owner); - this.queenChronosphere = true; - } - - public boolean isChronosphere() { - return this.chronosphere; - } - - public boolean affects(Entity entity) { - if (!this.queenChronosphere && entity instanceof RoyalBlackHoleEntity || this.isOwnedBy(entity) - || this.anchorId != null && this.anchorId.equals(entity.getUUID())) { - return false; - } - if (this.ownerId != null && this.level() instanceof ServerLevel level - && level.getEntity(this.ownerId) instanceof QueenEntity - && entity instanceof LivingEntity living - && !com.craisinlord.antarchy.content.effect.RoyalEffectEligibility.canApplyDilated(living)) { - return false; - } - if (this.chronosphere && !(entity instanceof LivingEntity || entity instanceof Projectile || entity instanceof ItemEntity)) { - return false; - } - if (!this.queenChronosphere && this.ownerId != null && this.level() instanceof ServerLevel level - && level.getEntity(this.ownerId) instanceof QueenEntity) { - return !entity.getType().is(AntarchyTags.Entities.QUEEN_DOES_NOT_ATTACK); - } - return true; - } - - public boolean isVisual() { - return this.visual; - } - - @Override - protected void defineSynchedData(SynchedEntityData.Builder builder) { - builder.define(RADIUS, 8.0F); - builder.define(RATE, (float) TimeDilationMath.NORMAL_RATE); - } - - @Override - public void tick() { - super.tick(); - if (this.level().isClientSide) { - return; - } - TimeDilationManager.registerActiveField(this); - if (this.anchorId != null && this.level() instanceof ServerLevel level) { - Entity anchor = level.getEntity(this.anchorId); - if (anchor != null && anchor.isAlive()) { - Vec3 center = anchor instanceof RoyalBlackHoleEntity blackHole - ? blackHole.effectCenter() - : anchor.position(); - this.setPos(center.x, center.y, center.z); - this.missingAnchorTicks = 0; - if (this.chronosphere && this.age % 20 == 0) { - if (!(anchor instanceof net.minecraft.server.level.ServerPlayer player)) { - this.discard(); - return; - } - int levelValue = com.craisinlord.antarchy.content.enchantment.AntarchyEnchantments.chronosphereLevel(player); - if (levelValue <= 0) { - this.discard(); - return; - } - this.setFieldRadius(ChronosphereManager.radius(levelValue)); - } - } else if (++this.missingAnchorTicks > 20) { - this.discard(); - return; - } - } - this.age++; - if (this.durationTicks >= 0 && this.age >= this.durationTicks) { - this.discard(); - } - } - - public void setFieldRadius(double radius) { - this.entityData.set(RADIUS, (float) Math.max(0.5D, radius)); - } - - public double fieldRadius() { - return this.entityData.get(RADIUS); - } - - public double influenceRadius() { - return this.chronosphere ? this.fieldRadius() * 2.0D : this.fieldRadius(); - } - - public double fieldRadiusSqr() { - double radius = this.fieldRadius(); - return radius * radius; - } - - public void setFieldRate(double rate) { - this.entityData.set(RATE, (float) TimeDilationMath.clampRate(rate)); - } - - public double fieldRate() { - return TimeDilationMath.clampRate(this.entityData.get(RATE)); - } - - public double effectiveFieldRate() { - return TimeDilationMath.effectiveFieldRate(this.fieldRate(), this.age, this.durationTicks); - } - - public int fieldDurationTicks() { - return this.durationTicks; - } - - public int fieldAge() { - return this.age; - } - - public boolean isInfinite() { - return this.durationTicks < 0; - } - - @Override - public boolean isIgnoringBlockTriggers() { - return true; - } - - @Override - protected void readAdditionalSaveData(CompoundTag tag) { - this.setFieldRadius(tag.getDouble(RADIUS_KEY)); - this.setFieldRate(tag.getDouble(RATE_KEY)); - this.durationTicks = tag.contains(DURATION_KEY) ? tag.getInt(DURATION_KEY) : -1; - this.age = tag.getInt(AGE_KEY); - this.ownerId = tag.hasUUID("OwnerUuid") ? tag.getUUID("OwnerUuid") : null; - this.anchorId = tag.hasUUID("AnchorUuid") ? tag.getUUID("AnchorUuid") : null; - this.visual = !tag.contains("Visual") || tag.getBoolean("Visual"); - this.chronosphere = tag.getBoolean("Chronosphere"); - this.queenChronosphere = tag.getBoolean("QueenChronosphere"); - } - - @Override - protected void addAdditionalSaveData(CompoundTag tag) { - tag.putDouble(RADIUS_KEY, this.fieldRadius()); - tag.putDouble(RATE_KEY, this.fieldRate()); - tag.putInt(DURATION_KEY, this.durationTicks); - tag.putInt(AGE_KEY, this.age); - if (this.ownerId != null) { - tag.putUUID("OwnerUuid", this.ownerId); - } - if (this.anchorId != null) { - tag.putUUID("AnchorUuid", this.anchorId); - } - tag.putBoolean("Visual", this.visual); - tag.putBoolean("Chronosphere", this.chronosphere); - tag.putBoolean("QueenChronosphere", this.queenChronosphere); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationFieldSampler.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationFieldSampler.java deleted file mode 100644 index c4900f6a..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationFieldSampler.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.craisinlord.antarchy.content.time; - -import java.util.List; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.phys.Vec3; - -public final class TimeDilationFieldSampler { - private TimeDilationFieldSampler() { - } - - public static double sample(List fields, Vec3 position) { - return sample(fields, position.x, position.y, position.z); - } - - public static double sample(List fields, double x, double y, double z) { - double combinedRate = TimeDilationMath.NORMAL_RATE; - for (TimeDilationFieldEntity field : fields) { - Vec3 center = field.position(); - double dx = center.x - x; - double dy = center.y - y; - double dz = center.z - z; - double distanceSqr = dx * dx + dy * dy + dz * dz; - if (distanceSqr >= field.fieldRadiusSqr()) { - continue; - } - double falloff = TimeDilationMath.gaussianFalloff(Math.sqrt(distanceSqr), field.fieldRadius()); - combinedRate *= TimeDilationMath.localFieldRate(field.effectiveFieldRate(), falloff); - } - return TimeDilationMath.clampRate(combinedRate); - } - - public static double sample(List fields, Entity entity) { - double combinedRate = TimeDilationMath.NORMAL_RATE; - for (TimeDilationFieldEntity field : fields) { - if (!field.affects(entity)) { - continue; - } - Vec3 center = field.position(); - double dx = center.x - entity.getX(); - double dy = center.y - entity.getY(); - double dz = center.z - entity.getZ(); - double distanceSqr = dx * dx + dy * dy + dz * dz; - double distance = Math.sqrt(distanceSqr); - double radius = field.fieldRadius(); - double falloff; - if (field.isChronosphere()) { - if (distance >= radius * 2.0D) { - continue; - } - falloff = distance <= radius - ? 1.0D - : TimeDilationMath.gaussianFalloff(distance - radius, radius); - } else { - if (distanceSqr >= field.fieldRadiusSqr()) { - continue; - } - falloff = TimeDilationMath.gaussianFalloff(distance, radius); - } - if (falloff > 0.0D) { - combinedRate *= TimeDilationMath.localFieldRate(field.effectiveFieldRate(), falloff); - } - } - return TimeDilationMath.clampRate(combinedRate); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationFieldSnapshot.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationFieldSnapshot.java deleted file mode 100644 index 3a888752..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationFieldSnapshot.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.craisinlord.antarchy.content.time; - -public record TimeDilationFieldSnapshot( - double x, - double y, - double z, - double radius, - double rate, - int age, - int durationTicks -) { - public double radiusSquared() { - return this.radius * this.radius; - } - - public double effectiveRate() { - return TimeDilationMath.effectiveFieldRate(this.rate, this.age, this.durationTicks); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationFieldSnapshotSampler.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationFieldSnapshotSampler.java deleted file mode 100644 index 96a27f27..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationFieldSnapshotSampler.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.craisinlord.antarchy.content.time; - -public final class TimeDilationFieldSnapshotSampler { - private TimeDilationFieldSnapshotSampler() { - } - - public static double sample(Iterable fields, double x, double y, double z) { - double combinedRate = TimeDilationMath.NORMAL_RATE; - for (TimeDilationFieldSnapshot field : fields) { - double dx = field.x() - x; - double dy = field.y() - y; - double dz = field.z() - z; - double distanceSqr = dx * dx + dy * dy + dz * dz; - if (distanceSqr >= field.radiusSquared()) { - continue; - } - double falloff = TimeDilationMath.gaussianFalloff(Math.sqrt(distanceSqr), field.radius()); - combinedRate *= TimeDilationMath.localFieldRate(field.effectiveRate(), falloff); - } - return TimeDilationMath.clampRate(combinedRate); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationManager.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationManager.java deleted file mode 100644 index 6233b24b..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationManager.java +++ /dev/null @@ -1,257 +0,0 @@ -package com.craisinlord.antarchy.content.time; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.IdentityHashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.WeakHashMap; -import net.minecraft.server.MinecraftServer; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.projectile.Projectile; -import net.minecraft.world.entity.player.Player; -import com.craisinlord.antarchy.content.item.TemporalTunerItem; -import com.craisinlord.antarchy.content.effect.DilatedMobEffect; -import com.craisinlord.antarchy.content.effect.ContractedMobEffect; -import com.craisinlord.antarchy.content.effect.RoyalEffectEligibility; -import com.craisinlord.antarchy.content.effect.RoyalEffectHooks; - -public final class TimeDilationManager { - private static final Map TRACKING = new WeakHashMap<>(); - private static final Map> ACTIVE_FIELDS = new WeakHashMap<>(); - - private TimeDilationManager() { - } - - public static void tickServer(MinecraftServer server) { - for (ServerLevel level : server.getAllLevels()) { - Set activeFields = ACTIVE_FIELDS.get(level); - if (activeFields != null) { - activeFields.removeIf(field -> !field.isAlive() || field.isRemoved()); - if (activeFields.isEmpty()) { - ACTIVE_FIELDS.remove(level); - activeFields = null; - } - } - TrackingState tracking = TRACKING.get(level); - for (ServerPlayer player : level.players()) { - trackPotentiallyAffected(player); - } - if (activeFields == null && (tracking == null || tracking.entities.isEmpty())) { - continue; - } - List fields = activeFields == null ? List.of() : List.copyOf(activeFields); - if (tracking == null) { - tracking = TRACKING.computeIfAbsent(level, ignored -> new TrackingState()); - } - discoverFieldEntities(level, fields, tracking); - syncFieldSnapshots(level, fields, tracking); - updateEntities(level, fields, tracking); - if (fields.isEmpty() && tracking.entities.isEmpty()) { - TRACKING.remove(level); - } - if (!fields.isEmpty()) { - TimeDilationParticles.spawnFieldBorders(level, fields.stream().filter(TimeDilationFieldEntity::isVisual).toList()); - } - } - } - - public static void registerActiveField(TimeDilationFieldEntity field) { - if (field.level() instanceof ServerLevel level) { - ACTIVE_FIELDS.computeIfAbsent(level, ignored -> Collections.newSetFromMap(new IdentityHashMap<>())).add(field); - } - } - - public static void trackPotentiallyAffected(Entity entity) { - if (!(entity.level() instanceof ServerLevel level) || entity instanceof TimeDilationFieldEntity) { - return; - } - boolean hasTuner = entity instanceof Player player && TemporalTunerItem.isAvailable(player); - boolean hasEffect = entity instanceof net.minecraft.world.entity.LivingEntity living - && ((RoyalEffectHooks.dilatedHolder() != null && living.hasEffect(RoyalEffectHooks.dilatedHolder())) - || (RoyalEffectHooks.contractedHolder() != null && living.hasEffect(RoyalEffectHooks.contractedHolder()))); - if (entity instanceof TimeDilationEntityAccess access - && Math.abs(access.antarchy$getTimeDilationRate() - TimeDilationMath.NORMAL_RATE) < 0.001D - && Math.abs(access.antarchy$getInheritedTimeDilationRate() - TimeDilationMath.NORMAL_RATE) < 0.001D - && Math.abs(TimeDilationApi.getVehicleRate(entity) - TimeDilationMath.NORMAL_RATE) < 0.001D - && !TimeDilationApi.hasPersonalRates(entity) - && !hasTuner && !hasEffect) { - return; - } - TRACKING.computeIfAbsent(level, ignored -> new TrackingState()).entities.add(entity); - } - - public static void resyncPersistentEffects(ServerPlayer player) { - if (!(player instanceof TimeDilationEntityAccess access)) { - return; - } - - double targetRate = TimeDilationMath.NORMAL_RATE; - if (RoyalEffectHooks.dilatedHolder() != null) { - var effect = player.getEffect(RoyalEffectHooks.dilatedHolder()); - if (effect != null) { - targetRate = Math.min(targetRate, DilatedMobEffect.rateForAmplifier(effect.getAmplifier())); - } - } - if (RoyalEffectHooks.contractedHolder() != null) { - var effect = player.getEffect(RoyalEffectHooks.contractedHolder()); - if (effect != null && targetRate >= TimeDilationMath.NORMAL_RATE) { - targetRate = Math.max(targetRate, ContractedMobEffect.rateForAmplifier(effect.getAmplifier())); - } - } - - if (Math.abs(targetRate - TimeDilationMath.NORMAL_RATE) >= 0.001D) { - access.antarchy$setTimeDilationRate(targetRate); - TimeDilationApi.syncEntityRate(player, targetRate); - } - trackPotentiallyAffected(player); - } - - private static void syncFieldSnapshots(ServerLevel level, List fields, TrackingState tracking) { - List snapshots = fields.stream() - .filter(field -> !field.isChronosphere()) - .map(field -> new TimeDilationFieldSnapshot( - field.getX(), field.getY(), field.getZ(), field.fieldRadius(), field.fieldRate(), - field.fieldAge(), field.fieldDurationTicks())) - .limit(128) - .toList(); - if (level.getGameTime() % 4L != 0L && snapshots.size() == tracking.lastSnapshots.size()) { - return; - } - tracking.lastSnapshots = snapshots; - for (ServerPlayer player : level.players()) { - TimeDilationApi.syncFields(player, snapshots); - } - } - - private static void discoverFieldEntities(ServerLevel level, List fields, TrackingState tracking) { - for (TimeDilationFieldEntity field : fields) { - double radius = field.influenceRadius(); - var center = field.position(); - var area = new net.minecraft.world.phys.AABB( - center.x - radius, center.y - radius, center.z - radius, - center.x + radius, center.y + radius, center.z + radius); - tracking.entities.addAll(level.getEntities(field, area, - entity -> entity.isAlive() && !(entity instanceof TimeDilationFieldEntity) - && entity instanceof TimeDilationEntityAccess)); - } - } - - private static void updateEntities(ServerLevel level, List fields, TrackingState tracking) { - var iterator = tracking.entities.iterator(); - while (iterator.hasNext()) { - Entity entity = iterator.next(); - if (!(entity instanceof TimeDilationEntityAccess access) || entity instanceof TimeDilationFieldEntity) { - continue; - } - if (entity.getType().is(com.craisinlord.antarchy.content.AntarchyTags.Entities.TIME_DILATION_IMMUNE)) { - if (RoyalEffectHooks.dilatedHolder() != null && entity instanceof net.minecraft.world.entity.LivingEntity living) { - living.removeEffect(RoyalEffectHooks.dilatedHolder()); - } - TimeDilationApi.clearRate(entity); - iterator.remove(); - continue; - } - double previousRate = access.antarchy$getTimeDilationRate(); - double fieldRate = TimeDilationFieldSampler.sample(fields, entity); - double effectRate = TimeDilationMath.NORMAL_RATE; - if (RoyalEffectHooks.dilatedHolder() != null - && entity instanceof net.minecraft.world.entity.LivingEntity living) { - var effect = living.getEffect(RoyalEffectHooks.dilatedHolder()); - if (effect != null) { - effectRate = DilatedMobEffect.rateForAmplifier(effect.getAmplifier()); - } - } - if (RoyalEffectHooks.contractedHolder() != null - && entity instanceof net.minecraft.world.entity.LivingEntity living) { - var effect = living.getEffect(RoyalEffectHooks.contractedHolder()); - if (effect != null) { - effectRate = Math.max(effectRate, ContractedMobEffect.rateForAmplifier(effect.getAmplifier())); - } - } - double tunerRate = TimeDilationMath.NORMAL_RATE; - if (entity instanceof Player player && player instanceof TemporalTunerAccess tunerAccess) { - if (TemporalTunerItem.isAvailable(player)) { - tunerRate = TemporalTunerItem.getRate(player); - } else { - tunerAccess.antarchy$setTemporalTunerRate(TimeDilationMath.NORMAL_RATE); - TemporalTunerItem.syncTooltipRate(player, TimeDilationMath.NORMAL_RATE); - } - } - double inheritedRate = access.antarchy$getInheritedTimeDilationRate(); - double vehicleRate = TimeDilationApi.getVehicleRate(entity); - if (vehicleRate < TimeDilationMath.NORMAL_RATE) { - inheritedRate = Math.min(inheritedRate, vehicleRate); - } else { - inheritedRate = Math.max(inheritedRate, vehicleRate); - } - if (entity instanceof Projectile projectile && projectile.getOwner() != null) { - double ownerRate = TimeDilationApi.getRate(projectile.getOwner()); - inheritedRate = ownerRate < TimeDilationMath.NORMAL_RATE - ? Math.min(inheritedRate, ownerRate) - : Math.max(inheritedRate, ownerRate); - } - double slowRate = TimeDilationMath.NORMAL_RATE; - double fastRate = TimeDilationMath.NORMAL_RATE; - if (fieldRate < TimeDilationMath.NORMAL_RATE) { - slowRate = Math.min(slowRate, fieldRate); - } else { - fastRate = Math.max(fastRate, fieldRate); - } - if (effectRate < TimeDilationMath.NORMAL_RATE) { - slowRate = Math.min(slowRate, effectRate); - } else { - fastRate = Math.max(fastRate, effectRate); - } - if (tunerRate < TimeDilationMath.NORMAL_RATE) { - slowRate = Math.min(slowRate, tunerRate); - } else { - fastRate = Math.max(fastRate, tunerRate); - } - if (inheritedRate < TimeDilationMath.NORMAL_RATE) { - slowRate = Math.min(slowRate, inheritedRate); - } else { - fastRate = Math.max(fastRate, inheritedRate); - } - for (double personalRate : access.antarchy$getPersonalTimeDilationRates().values()) { - if (personalRate < TimeDilationMath.NORMAL_RATE) { - slowRate = Math.min(slowRate, personalRate); - } else { - fastRate = Math.max(fastRate, personalRate); - } - } - double ceiling = access.antarchy$getTimeDilationCeiling(); - double targetRate = TimeDilationMath.clampRate(slowRate < TimeDilationMath.NORMAL_RATE ? slowRate : fastRate, ceiling); - double rate = TimeDilationMath.transitionRate(previousRate, targetRate, ceiling); - if (Math.abs(targetRate - TimeDilationMath.NORMAL_RATE) < 0.001D - && Math.abs(rate - TimeDilationMath.NORMAL_RATE) < 0.001D) { - TimeDilationApi.clearRate(entity); - } else { - access.antarchy$setTimeDilationRate(rate); - } - if (Math.abs(previousRate - rate) > 0.001D) { - TimeDilationApi.syncEntityRate(entity, rate); - } - - boolean hasDilationEffect = entity instanceof net.minecraft.world.entity.LivingEntity living - && ((RoyalEffectHooks.dilatedHolder() != null && living.hasEffect(RoyalEffectHooks.dilatedHolder())) - || (RoyalEffectHooks.contractedHolder() != null && living.hasEffect(RoyalEffectHooks.contractedHolder()))); - boolean hasInheritedRate = Math.abs(access.antarchy$getInheritedTimeDilationRate() - TimeDilationMath.NORMAL_RATE) >= 0.001D; - boolean hasActiveRate = Math.abs(access.antarchy$getTimeDilationRate() - TimeDilationMath.NORMAL_RATE) >= 0.001D; - if (!hasDilationEffect && !hasInheritedRate && !hasActiveRate - && Math.abs(targetRate - TimeDilationMath.NORMAL_RATE) < 0.001D) { - iterator.remove(); - } - } - tracking.entities.removeIf(entity -> !entity.isAlive() || entity.isRemoved()); - } - - private static final class TrackingState { - private final Set entities = Collections.newSetFromMap(new IdentityHashMap<>()); - private List lastSnapshots = List.of(); - } - -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationMath.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationMath.java deleted file mode 100644 index 19f5f554..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationMath.java +++ /dev/null @@ -1,86 +0,0 @@ -package com.craisinlord.antarchy.content.time; - -public final class TimeDilationMath { - public static final double MIN_RATE = 0.05D; - public static final double NORMAL_RATE = 1.0D; - public static final double MAX_RATE = 3.0D; - public static final double ABSOLUTE_MAX_RATE = 20.0D; - public static final int FIELD_TRANSITION_TICKS = 20; - public static final int EFFECT_TRANSITION_TICKS = 20; - private static final double GAUSSIAN_EDGE_EXPONENT = -4.5D; - - private TimeDilationMath() { - } - - public static double clampRate(double rate) { - if (Double.isNaN(rate) || Double.isInfinite(rate)) { - return NORMAL_RATE; - } - return Math.max(MIN_RATE, Math.min(MAX_RATE, rate)); - } - - public static double clampCeiling(double ceiling) { - if (Double.isNaN(ceiling) || Double.isInfinite(ceiling)) { - return MAX_RATE; - } - return Math.max(NORMAL_RATE, Math.min(ABSOLUTE_MAX_RATE, ceiling)); - } - - public static double clampRate(double rate, double ceiling) { - if (Double.isNaN(rate) || Double.isInfinite(rate)) { - return NORMAL_RATE; - } - return Math.max(MIN_RATE, Math.min(clampCeiling(ceiling), rate)); - } - - public static double transitionRate(double currentRate, double targetRate) { - return transitionRate(currentRate, targetRate, MAX_RATE); - } - - public static double transitionRate(double currentRate, double targetRate, double ceiling) { - double maximum = clampCeiling(ceiling); - double current = clampRate(currentRate, maximum); - double target = clampRate(targetRate, maximum); - double maximumStep = (maximum - MIN_RATE) / EFFECT_TRANSITION_TICKS; - double delta = Math.max(-maximumStep, Math.min(maximumStep, target - current)); - return clampRate(current + delta, maximum); - } - - public static double gaussianFalloff(double distance, double radius) { - if (distance < 0.0D || distance >= radius || radius <= 0.0D) { - return 0.0D; - } - double normalized = distance / radius; - return Math.exp(GAUSSIAN_EDGE_EXPONENT * normalized * normalized); - } - - public static double localFieldRate(double fieldRate, double falloff) { - double clampedRate = clampRate(fieldRate); - double clampedFalloff = Math.max(0.0D, Math.min(1.0D, falloff)); - if (clampedRate <= 0.0D) { - return 0.0D; - } - return Math.pow(clampedRate, clampedFalloff); - } - - public static double smoothStep(double value) { - double clamped = Math.max(0.0D, Math.min(1.0D, value)); - return clamped * clamped * (3.0D - 2.0D * clamped); - } - - public static double fieldStrength(int age, int durationTicks) { - double fadeIn = smoothStep((double) age / FIELD_TRANSITION_TICKS); - if (durationTicks < 0) { - return fadeIn; - } - - double remaining = durationTicks - age; - double fadeOut = smoothStep(remaining / FIELD_TRANSITION_TICKS); - return Math.min(fadeIn, fadeOut); - } - - public static double effectiveFieldRate(double fieldRate, int age, int durationTicks) { - double strength = fieldStrength(age, durationTicks); - return NORMAL_RATE + (clampRate(fieldRate) - NORMAL_RATE) * strength; - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationParticles.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationParticles.java deleted file mode 100644 index 7bbee5c5..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/content/time/TimeDilationParticles.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.craisinlord.antarchy.content.time; - -import java.util.List; -import net.minecraft.core.particles.ParticleTypes; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.util.Mth; -import net.minecraft.world.phys.Vec3; - -public final class TimeDilationParticles { - private static final int PARTICLE_INTERVAL_TICKS = 4; - private static final int MAX_RING_POINTS = 96; - - private TimeDilationParticles() { - } - - public static void spawnFieldBorders(ServerLevel level, List fields) { - if (level.getGameTime() % PARTICLE_INTERVAL_TICKS != 0L) { - return; - } - for (TimeDilationFieldEntity field : fields) { - spawnBorder(level, field.position(), field.fieldRadius()); - } - } - - private static void spawnBorder(ServerLevel level, Vec3 center, double radius) { - int points = Mth.clamp((int) Math.ceil(radius * 10.0D), 24, MAX_RING_POINTS); - double phase = (level.getGameTime() % 80L) * 0.07853981633974483D; - - for (int i = 0; i < points; i++) { - double angle = phase + (Math.PI * 2.0D * i / points); - double x = center.x + Math.cos(angle) * radius; - double z = center.z + Math.sin(angle) * radius; - spawnParticle(level, x, center.y, z); - - if (i % 4 == 0) { - spawnParticle(level, x, center.y + radius * 0.5D, z); - spawnParticle(level, x, center.y - radius * 0.5D, z); - } - if (i % 8 == 0) { - spawnParticle(level, center.x + Math.cos(angle) * radius * 0.7D, center.y + Math.sin(angle) * radius, center.z); - spawnParticle(level, center.x, center.y + Math.sin(angle) * radius, center.z + Math.cos(angle) * radius * 0.7D); - } - } - } - - private static void spawnParticle(ServerLevel level, double x, double y, double z) { - level.sendParticles(ParticleTypes.REVERSE_PORTAL, x, y, z, 1, 0.02D, 0.02D, 0.02D, 0.0D); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/AbstractArrowAccessor.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/AbstractArrowAccessor.java deleted file mode 100644 index e5afd28f..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/AbstractArrowAccessor.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.craisinlord.antarchy.mixins; - -import net.minecraft.world.entity.projectile.AbstractArrow; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Mixin(AbstractArrow.class) -public interface AbstractArrowAccessor { - @Accessor("inGround") - void antarchy$setInGround(boolean inGround); - - @Accessor("inGroundTime") - void antarchy$setInGroundTime(int inGroundTime); - - @Accessor("shakeTime") - void antarchy$setShakeTime(int shakeTime); -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/DreamSandLowGravityMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/DreamSandLowGravityMixin.java deleted file mode 100644 index 43dfbd6a..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/DreamSandLowGravityMixin.java +++ /dev/null @@ -1,126 +0,0 @@ -package com.craisinlord.antarchy.mixins; - -import com.craisinlord.antarchy.config.AntarchySettings; -import com.craisinlord.antarchy.content.block.DreamSandBlock; -import com.craisinlord.anthology.gravity.GravityApi; -import com.craisinlord.anthology.gravity.GravityDirection; -import com.craisinlord.antarchy.content.movement.DreamSandLowGravityAccess; -import net.minecraft.core.BlockPos; -import net.minecraft.util.Mth; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.Vec3; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(LivingEntity.class) -public abstract class DreamSandLowGravityMixin implements DreamSandLowGravityAccess { - @Unique - private boolean antarchy$dreamSandLowGravityActive; - @Unique - private int antarchy$dreamSandLowGravityTicksRemaining; - @Unique - private int antarchy$dreamSandLandingGraceTicks; - - @Override - public boolean antarchy$isDreamSandLowGravityActive() { - return this.antarchy$dreamSandLowGravityActive; - } - - @Override - public void antarchy$setDreamSandLowGravityActive(boolean active) { - this.antarchy$dreamSandLowGravityActive = active; - } - - @Override - public int antarchy$getDreamSandLowGravityTicksRemaining() { - return this.antarchy$dreamSandLowGravityTicksRemaining; - } - - @Override - public void antarchy$setDreamSandLowGravityTicksRemaining(int ticks) { - this.antarchy$dreamSandLowGravityTicksRemaining = Math.max(0, ticks); - } - - @Override - public int antarchy$getDreamSandLandingGraceTicks() { - return this.antarchy$dreamSandLandingGraceTicks; - } - - @Override - public void antarchy$setDreamSandLandingGraceTicks(int ticks) { - this.antarchy$dreamSandLandingGraceTicks = Math.max(0, ticks); - } - - @Inject(method = "tick", at = @At("TAIL")) - private void antarchy$updateDreamSandLowGravity(CallbackInfo ci) { - LivingEntity self = (LivingEntity) (Object) this; - if (!AntarchySettings.dreamSandEnabled()) { - this.antarchy$clearDreamSandLowGravity(); - return; - } - - boolean supportedByDreamSand = this.antarchy$isSupportedByDreamSand(self); - int durationTicks = Math.max(1, Mth.ceil(AntarchySettings.dreamSandEffectDurationSeconds() * 20.0D)); - if (supportedByDreamSand) { - this.antarchy$dreamSandLowGravityActive = true; - this.antarchy$dreamSandLowGravityTicksRemaining = durationTicks; - this.antarchy$dreamSandLandingGraceTicks = 5; - } else if (this.antarchy$dreamSandLowGravityTicksRemaining > 0) { - this.antarchy$dreamSandLowGravityTicksRemaining--; - this.antarchy$dreamSandLowGravityActive = true; - } else { - this.antarchy$dreamSandLowGravityActive = false; - } - - if (this.antarchy$dreamSandLandingGraceTicks > 0 && !supportedByDreamSand) { - this.antarchy$dreamSandLandingGraceTicks--; - } - - if (!this.antarchy$dreamSandLowGravityActive || self.onGround() || self.onClimbable() || self.isInWaterOrBubble() || self.isInLava()) { - return; - } - - Vec3 motion = self.getDeltaMovement(); - boolean movingWithGravity = motion.y < 0.0D; - if (!movingWithGravity) { - return; - } - - double gravityMultiplier = Math.max(0.0D, Math.min(1.0D, AntarchySettings.dreamSandGravityMultiplier())); - self.setDeltaMovement(motion.x, motion.y * gravityMultiplier, motion.z); - self.fallDistance = 0.0F; - this.antarchy$dreamSandLandingGraceTicks = 5; - } - - @Inject(method = "jumpFromGround", at = @At("TAIL")) - private void antarchy$boostDreamSandJump(CallbackInfo ci) { - if (!this.antarchy$dreamSandLowGravityActive) { - return; - } - - LivingEntity self = (LivingEntity) (Object) this; - Vec3 motion = self.getDeltaMovement(); - boolean movingAwayFromGravity = motion.y > 0.0D; - if (!movingAwayFromGravity) { - return; - } - - self.setDeltaMovement(motion.x, motion.y * AntarchySettings.dreamSandJumpVelocityMultiplier(), motion.z); - self.fallDistance = 0.0F; - this.antarchy$dreamSandLandingGraceTicks = 5; - } - - @Unique - private boolean antarchy$isSupportedByDreamSand(LivingEntity entity) { - GravityDirection gravityDirection = GravityApi.getGravityDirection(entity); - AABB box = entity.getBoundingBox(); - BlockPos supportPos = gravityDirection.isInverted() - ? BlockPos.containing(entity.getX(), box.maxY + 0.05D, entity.getZ()) - : BlockPos.containing(entity.getX(), box.minY - 0.05D, entity.getZ()); - return entity.level().getBlockState(supportPos).getBlock() instanceof DreamSandBlock; - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/FallingBlockEntityAccessor.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/FallingBlockEntityAccessor.java deleted file mode 100644 index 06836788..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/FallingBlockEntityAccessor.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.craisinlord.antarchy.mixins; - -import net.minecraft.world.entity.item.FallingBlockEntity; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Mixin(FallingBlockEntity.class) -public interface FallingBlockEntityAccessor { - @Accessor("time") - void antarchy$setTime(int time); -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/PortalGunEntityCollisionMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/PortalGunEntityCollisionMixin.java deleted file mode 100644 index 0b5d9770..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/PortalGunEntityCollisionMixin.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.craisinlord.antarchy.mixins; - -import com.craisinlord.antarchy.content.portalgun.PortalGunCollisionHelper; -import com.craisinlord.antarchy.content.portalgun.PortalGunPortalEntity; -import com.craisinlord.antarchy.content.portalgun.PortalGunPortalRegistry; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.MoverType; -import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.Vec3; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(value = Entity.class, priority = 1100) -public abstract class PortalGunEntityCollisionMixin { - @Unique - private AABB antarchy$portalGunStartBox; - @Unique - private AABB antarchy$portalGunMoveStartBox; - @Unique - private Vec3 antarchy$portalGunMoveStartVelocity; - - @Inject(method = "move", at = @At("HEAD")) - private void antarchy$capturePortalGunMovementStart(MoverType type, Vec3 movement, CallbackInfo ci) { - Entity entity = (Entity) (Object) this; - if (!PortalGunPortalRegistry.hasAny(entity.level())) { - this.antarchy$portalGunMoveStartBox = null; - this.antarchy$portalGunMoveStartVelocity = null; - return; - } - this.antarchy$portalGunMoveStartBox = entity.getBoundingBox(); - this.antarchy$portalGunMoveStartVelocity = entity.getDeltaMovement(); - } - - @Inject(method = "move", at = @At("RETURN")) - private void antarchy$teleportMobOnPortalCrossing(MoverType type, Vec3 movement, CallbackInfo ci) { - if (this.antarchy$portalGunMoveStartBox == null) { - return; - } - AABB startBox = this.antarchy$portalGunMoveStartBox; - Vec3 startVelocity = this.antarchy$portalGunMoveStartVelocity; - this.antarchy$portalGunMoveStartBox = null; - this.antarchy$portalGunMoveStartVelocity = null; - if (startBox != null && startVelocity != null) { - PortalGunPortalEntity.teleportEntityAfterMovement((Entity) (Object) this, startBox, startVelocity); - } - } - - @Inject(method = "collide", at = @At("HEAD")) - private void antarchy$capturePortalGunStartBox(Vec3 movement, CallbackInfoReturnable cir) { - Entity entity = (Entity) (Object) this; - this.antarchy$portalGunStartBox = PortalGunPortalRegistry.hasAny(entity.level()) ? entity.getBoundingBox() : null; - } - - @Inject(method = "collide", at = @At("RETURN"), cancellable = true) - private void antarchy$restorePortalCrossingMotion(Vec3 movement, CallbackInfoReturnable cir) { - if (this.antarchy$portalGunStartBox == null) { - return; - } - Entity entity = (Entity) (Object) this; - Vec3 collided = cir.getReturnValue(); - Vec3 adjusted = PortalGunCollisionHelper.resolveCollision(entity, this.antarchy$portalGunStartBox, movement, collided); - if (adjusted != collided) { - cir.setReturnValue(adjusted); - } - } - -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/PortalGunEntityInWallMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/PortalGunEntityInWallMixin.java deleted file mode 100644 index ef3c22e9..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/PortalGunEntityInWallMixin.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.craisinlord.antarchy.mixins; - -import com.craisinlord.antarchy.content.portalgun.PortalGunPortalEntity; -import com.craisinlord.antarchy.content.portalgun.PortalGunPortalRegistry; -import net.minecraft.world.entity.Entity; -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(Entity.class) -public abstract class PortalGunEntityInWallMixin { - @Inject(method = "isInWall", at = @At("HEAD"), cancellable = true) - private void antarchy$ignorePortalInWall(CallbackInfoReturnable cir) { - Entity entity = (Entity) (Object) this; - if (entity.level() == null || !PortalGunPortalRegistry.hasAny(entity.level())) { - return; - } - for (PortalGunPortalEntity portal : PortalGunPortalRegistry.near(entity.level(), entity.getBoundingBox().inflate(2.0D))) { - if (portal.intersectsEntityBounds(entity) || portal.getCollisionRemovalAabbForEntity(entity).intersects(entity.getBoundingBox())) { - cir.setReturnValue(false); - return; - } - } - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/PortalGunPlayerMovePacketMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/PortalGunPlayerMovePacketMixin.java deleted file mode 100644 index 1f5d9a7f..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/PortalGunPlayerMovePacketMixin.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.craisinlord.antarchy.mixins; - -import com.craisinlord.antarchy.content.portalgun.PortalGunPortalEntity; -import com.craisinlord.antarchy.content.portalgun.PortalGunPortalRegistry; -import net.minecraft.network.protocol.game.ServerboundMovePlayerPacket; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.server.network.ServerGamePacketListenerImpl; -import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.Vec3; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(ServerGamePacketListenerImpl.class) -public abstract class PortalGunPlayerMovePacketMixin { - @Unique - private static final double MAX_CLAIMED_MOVEMENT_SQR = 100.0D; - @Unique - private AABB antarchy$portalGunMoveStartBox; - @Unique - private Vec3 antarchy$portalGunMoveStartPosition; - - @Inject(method = "handleMovePlayer", at = @At("HEAD")) - private void antarchy$capturePortalGunMoveStart(ServerboundMovePlayerPacket packet, CallbackInfo ci) { - ServerPlayer player = ((ServerGamePacketListenerImpl) (Object) this).player; - if (player.getServer() == null || !player.getServer().isSameThread()) { - return; - } - this.antarchy$portalGunMoveStartBox = null; - this.antarchy$portalGunMoveStartPosition = null; - if (!packet.hasPosition() || !PortalGunPortalRegistry.hasAny(player.level()) || ((ServerGamePacketListenerTeleportAccessor) this).antarchy$getAwaitingPositionFromClient() != null) { - return; - } - this.antarchy$portalGunMoveStartBox = player.getBoundingBox(); - this.antarchy$portalGunMoveStartPosition = player.position(); - } - - @Inject(method = "handleMovePlayer", at = @At("RETURN")) - private void antarchy$teleportPlayerOnPortalCrossing(ServerboundMovePlayerPacket packet, CallbackInfo ci) { - AABB startBox = this.antarchy$portalGunMoveStartBox; - Vec3 startPosition = this.antarchy$portalGunMoveStartPosition; - this.antarchy$portalGunMoveStartBox = null; - this.antarchy$portalGunMoveStartPosition = null; - if (startBox == null || startPosition == null) { - return; - } - ServerPlayer player = ((ServerGamePacketListenerImpl) (Object) this).player; - Vec3 claimedMovement = new Vec3(packet.getX(startPosition.x), packet.getY(startPosition.y), packet.getZ(startPosition.z)) - .subtract(startPosition); - double lengthSqr = claimedMovement.lengthSqr(); - if (lengthSqr > 1.0E-10D && lengthSqr < MAX_CLAIMED_MOVEMENT_SQR) { - PortalGunPortalEntity.teleportPlayerAfterMovementPacket(player, startBox, claimedMovement); - } - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/PortalGunProjectileHitMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/PortalGunProjectileHitMixin.java deleted file mode 100644 index 85b1d297..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/PortalGunProjectileHitMixin.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.craisinlord.antarchy.mixins; - -import com.craisinlord.antarchy.content.portalgun.PortalGunPortalEntity; -import net.minecraft.world.entity.projectile.Projectile; -import net.minecraft.world.entity.projectile.ProjectileDeflection; -import net.minecraft.world.phys.BlockHitResult; -import net.minecraft.world.phys.HitResult; -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(Projectile.class) -public abstract class PortalGunProjectileHitMixin { - @Inject(method = "hitTargetOrDeflectSelf", at = @At("HEAD"), cancellable = true) - private void antarchy$passThroughPortal(HitResult hit, CallbackInfoReturnable cir) { - if (hit.getType() == HitResult.Type.BLOCK && hit instanceof BlockHitResult blockHit - && PortalGunPortalEntity.passProjectileThroughPortal((Projectile) (Object) this, blockHit)) { - cir.setReturnValue(ProjectileDeflection.NONE); - } - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/ServerGamePacketListenerTeleportAccessor.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/ServerGamePacketListenerTeleportAccessor.java deleted file mode 100644 index 499845ce..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/ServerGamePacketListenerTeleportAccessor.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.craisinlord.antarchy.mixins; - -import net.minecraft.server.network.ServerGamePacketListenerImpl; -import net.minecraft.world.phys.Vec3; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Mixin(ServerGamePacketListenerImpl.class) -public interface ServerGamePacketListenerTeleportAccessor { - @Accessor("awaitingPositionFromClient") - Vec3 antarchy$getAwaitingPositionFromClient(); -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/StinkyLivingEntityMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/StinkyLivingEntityMixin.java deleted file mode 100644 index 8cd675a7..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/StinkyLivingEntityMixin.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.craisinlord.antarchy.mixins; - -import com.craisinlord.antarchy.content.AntarchyObjects; -import com.craisinlord.antarchy.content.effect.StinkyBehavior; -import net.minecraft.world.entity.LivingEntity; -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(LivingEntity.class) -public abstract class StinkyLivingEntityMixin { - @Inject(method = "tick", at = @At("TAIL")) - private void antarchy$tickStinkyTrail(CallbackInfo ci) { - LivingEntity livingEntity = (LivingEntity) (Object) this; - if (livingEntity.hasEffect(AntarchyObjects.STINKY_EFFECT.get())) { - StinkyBehavior.tickStinkyTrail(livingEntity); - } - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/BlockEntityRenderDispatcherPortalMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/BlockEntityRenderDispatcherPortalMixin.java deleted file mode 100644 index 80c29e75..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/BlockEntityRenderDispatcherPortalMixin.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.craisinlord.antarchy.mixins.client; - -import com.craisinlord.antarchy.content.client.PortalGunPortalRenderState; -import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.client.renderer.blockentity.BlockEntityRenderDispatcher; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.core.BlockPos; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.phys.AABB; -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; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(BlockEntityRenderDispatcher.class) -public abstract class BlockEntityRenderDispatcherPortalMixin { - @Inject(method = "render(Lnet/minecraft/world/level/block/entity/BlockEntity;FLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;)V", at = @At("HEAD"), cancellable = true) - private void antarchy$clipPortalViewBlockEntities(E blockEntity, float partialTick, PoseStack poseStack, MultiBufferSource bufferSource, CallbackInfo ci) { - if (PortalGunPortalRenderState.renderAll() || blockEntity == null || blockEntity.isRemoved()) { - return; - } - BlockPos pos = blockEntity.getBlockPos(); - AABB bounds = new AABB(pos); - if (!PortalGunPortalRenderState.shouldRenderBounds(bounds)) { - ci.cancel(); - } - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/CameraBasisAccessor.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/CameraBasisAccessor.java deleted file mode 100644 index abfce3eb..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/CameraBasisAccessor.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.craisinlord.antarchy.mixins.client; - -import net.minecraft.client.Camera; -import org.joml.Vector3f; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Mixin(Camera.class) -public interface CameraBasisAccessor { - @Accessor("forwards") - Vector3f antarchy$getForwards(); - - @Accessor("up") - Vector3f antarchy$getUp(); - - @Accessor("left") - Vector3f antarchy$getLeft(); -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/EntityBoundSoundInstanceAccessor.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/EntityBoundSoundInstanceAccessor.java deleted file mode 100644 index cad45d2e..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/EntityBoundSoundInstanceAccessor.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.craisinlord.antarchy.mixins.client; - -import net.minecraft.client.resources.sounds.EntityBoundSoundInstance; -import net.minecraft.world.entity.Entity; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Mixin(EntityBoundSoundInstance.class) -public interface EntityBoundSoundInstanceAccessor { - @Accessor("entity") - Entity antarchy$getEntity(); -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/EntityRenderDispatcherPortalMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/EntityRenderDispatcherPortalMixin.java deleted file mode 100644 index 0d173694..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/EntityRenderDispatcherPortalMixin.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.craisinlord.antarchy.mixins.client; - -import com.craisinlord.antarchy.content.client.PortalGunPortalRenderState; -import com.craisinlord.antarchy.content.portalgun.PortalGunPortalEntity; -import net.minecraft.client.renderer.culling.Frustum; -import net.minecraft.client.renderer.entity.EntityRenderDispatcher; -import net.minecraft.world.entity.Entity; -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(EntityRenderDispatcher.class) -public abstract class EntityRenderDispatcherPortalMixin { - @Inject(method = "shouldRender", at = @At("HEAD"), cancellable = true) - private void antarchy$clipPortalViewEntities(E entity, Frustum frustum, double x, double y, double z, CallbackInfoReturnable cir) { - if (PortalGunPortalRenderState.renderAll() || entity instanceof PortalGunPortalEntity) { - return; - } - if (!PortalGunPortalRenderState.shouldRenderBounds(entity.getBoundingBox())) { - cir.setReturnValue(false); - } - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/InventoryScreenRotationBypassMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/InventoryScreenRotationBypassMixin.java index 26e94c31..209960b7 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/InventoryScreenRotationBypassMixin.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/InventoryScreenRotationBypassMixin.java @@ -1,6 +1,6 @@ package com.craisinlord.antarchy.mixins.client; -import com.craisinlord.antarchy.content.time.TimeDilationApi; +import com.craisinlord.anthology.time.TimeDilationApi; import net.minecraft.client.gui.screens.inventory.InventoryScreen; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/LevelRendererPortalLifecycleMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/LevelRendererPortalLifecycleMixin.java deleted file mode 100644 index 07754f4d..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/LevelRendererPortalLifecycleMixin.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.craisinlord.antarchy.mixins.client; - -import com.craisinlord.antarchy.content.client.renderer.PortalGunPortalViewRenderer; -import com.craisinlord.antarchy.content.client.renderer.PortalStencilTarget; -import net.minecraft.client.Minecraft; -import net.minecraft.client.multiplayer.ClientLevel; -import net.minecraft.client.renderer.LevelRenderer; -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(LevelRenderer.class) -public abstract class LevelRendererPortalLifecycleMixin { - @Inject(method = "renderLevel", at = @At("HEAD")) - private void antarchy$preparePortalStencil(CallbackInfo ci) { - if (PortalGunPortalViewRenderer.isEnabled()) { - PortalStencilTarget.prepareMainTarget(Minecraft.getInstance().getMainRenderTarget()); - } - } - - @Inject(method = "setLevel", at = @At("HEAD")) - private void antarchy$clearPortalViewsOnLevelChange(ClientLevel level, CallbackInfo ci) { - PortalGunPortalViewRenderer.releaseTargets(); - } - - @Inject(method = "close", at = @At("HEAD")) - private void antarchy$clearPortalViewsOnClose(CallbackInfo ci) { - PortalGunPortalViewRenderer.releaseTargets(); - PortalStencilTarget.clear(); - } - - @Inject(method = "allChanged", at = @At("TAIL")) - private void antarchy$clearPortalViewsOnRendererRebuild(CallbackInfo ci) { - PortalGunPortalViewRenderer.releaseTargets(); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/LevelRendererPortalSceneInvoker.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/LevelRendererPortalSceneInvoker.java deleted file mode 100644 index da9df656..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/LevelRendererPortalSceneInvoker.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.craisinlord.antarchy.mixins.client; - -import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.client.Camera; -import net.minecraft.client.renderer.LevelRenderer; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.LightTexture; -import net.minecraft.world.entity.Entity; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Invoker; - -@Mixin(LevelRenderer.class) -public interface LevelRendererPortalSceneInvoker { - @Invoker("renderEntity") - void antarchy$renderPortalEntity(Entity entity, double cameraX, double cameraY, double cameraZ, float partialTick, PoseStack poseStack, MultiBufferSource bufferSource); - - @Invoker("renderSnowAndRain") - void antarchy$renderPortalWeather(LightTexture lightTexture, float partialTick, double cameraX, double cameraY, double cameraZ); - - @Invoker("renderWorldBorder") - void antarchy$renderPortalWorldBorder(Camera camera); -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/LevelRendererPortalViewAreaAccessor.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/LevelRendererPortalViewAreaAccessor.java deleted file mode 100644 index 1337ede0..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/LevelRendererPortalViewAreaAccessor.java +++ /dev/null @@ -1,163 +0,0 @@ -package com.craisinlord.antarchy.mixins.client; - -import it.unimi.dsi.fastutil.objects.ObjectArrayList; -import com.mojang.blaze3d.vertex.VertexBuffer; -import net.minecraft.client.CloudStatus; -import net.minecraft.client.renderer.LevelRenderer; -import net.minecraft.client.renderer.SectionOcclusionGraph; -import net.minecraft.client.renderer.ViewArea; -import net.minecraft.client.renderer.chunk.SectionRenderDispatcher; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.phys.Vec3; -import java.util.Set; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Mutable; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Mixin(LevelRenderer.class) -public interface LevelRendererPortalViewAreaAccessor { - @Accessor("sectionRenderDispatcher") - SectionRenderDispatcher antarchy$getSectionRenderDispatcher(); - - @Accessor("viewArea") - ViewArea antarchy$getViewArea(); - - @Accessor("viewArea") - void antarchy$setViewArea(ViewArea viewArea); - - @Accessor("sectionOcclusionGraph") - SectionOcclusionGraph antarchy$getSectionOcclusionGraph(); - - @Mutable - @Accessor("sectionOcclusionGraph") - void antarchy$setSectionOcclusionGraph(SectionOcclusionGraph graph); - - @Accessor("visibleSections") - ObjectArrayList antarchy$getVisibleSections(); - - @Mutable - @Accessor("visibleSections") - void antarchy$setVisibleSections(ObjectArrayList sections); - - @Accessor("globalBlockEntities") - Set antarchy$getGlobalBlockEntities(); - - @Mutable - @Accessor("globalBlockEntities") - void antarchy$setGlobalBlockEntities(Set blockEntities); - - @Accessor("lastCameraSectionX") - int antarchy$getLastCameraSectionX(); - - @Accessor("lastCameraSectionX") - void antarchy$setLastCameraSectionX(int value); - - @Accessor("lastCameraSectionY") - int antarchy$getLastCameraSectionY(); - - @Accessor("lastCameraSectionY") - void antarchy$setLastCameraSectionY(int value); - - @Accessor("lastCameraSectionZ") - int antarchy$getLastCameraSectionZ(); - - @Accessor("lastCameraSectionZ") - void antarchy$setLastCameraSectionZ(int value); - - @Accessor("prevCamX") - double antarchy$getPrevCamX(); - - @Accessor("prevCamX") - void antarchy$setPrevCamX(double value); - - @Accessor("prevCamY") - double antarchy$getPrevCamY(); - - @Accessor("prevCamY") - void antarchy$setPrevCamY(double value); - - @Accessor("prevCamZ") - double antarchy$getPrevCamZ(); - - @Accessor("prevCamZ") - void antarchy$setPrevCamZ(double value); - - @Accessor("prevCamRotX") - double antarchy$getPrevCamRotX(); - - @Accessor("prevCamRotX") - void antarchy$setPrevCamRotX(double value); - - @Accessor("prevCamRotY") - double antarchy$getPrevCamRotY(); - - @Accessor("prevCamRotY") - void antarchy$setPrevCamRotY(double value); - - @Accessor("xTransparentOld") - double antarchy$getTransparentSortX(); - - @Accessor("xTransparentOld") - void antarchy$setTransparentSortX(double value); - - @Accessor("yTransparentOld") - double antarchy$getTransparentSortY(); - - @Accessor("yTransparentOld") - void antarchy$setTransparentSortY(double value); - - @Accessor("zTransparentOld") - double antarchy$getTransparentSortZ(); - - @Accessor("zTransparentOld") - void antarchy$setTransparentSortZ(double value); - - @Accessor("cloudBuffer") - VertexBuffer antarchy$getCloudBuffer(); - - @Accessor("cloudBuffer") - void antarchy$setCloudBuffer(VertexBuffer cloudBuffer); - - @Accessor("generateClouds") - boolean antarchy$getGenerateClouds(); - - @Accessor("generateClouds") - void antarchy$setGenerateClouds(boolean generateClouds); - - @Accessor("prevCloudX") - int antarchy$getPrevCloudX(); - - @Accessor("prevCloudX") - void antarchy$setPrevCloudX(int value); - - @Accessor("prevCloudY") - int antarchy$getPrevCloudY(); - - @Accessor("prevCloudY") - void antarchy$setPrevCloudY(int value); - - @Accessor("prevCloudZ") - int antarchy$getPrevCloudZ(); - - @Accessor("prevCloudZ") - void antarchy$setPrevCloudZ(int value); - - @Accessor("prevCloudColor") - Vec3 antarchy$getPrevCloudColor(); - - @Accessor("prevCloudColor") - void antarchy$setPrevCloudColor(Vec3 value); - - @Accessor("prevCloudsType") - CloudStatus antarchy$getPrevCloudsType(); - - @Accessor("prevCloudsType") - void antarchy$setPrevCloudsType(CloudStatus value); - - @Accessor("rainSoundTime") - int antarchy$getRainSoundTime(); - - @Accessor("rainSoundTime") - void antarchy$setRainSoundTime(int value); - -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/LevelRendererPortalViewAreaMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/LevelRendererPortalViewAreaMixin.java deleted file mode 100644 index f5190727..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/LevelRendererPortalViewAreaMixin.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.craisinlord.antarchy.mixins.client; - -import com.craisinlord.antarchy.content.client.PortalGunPortalRenderState; -import com.craisinlord.antarchy.content.client.renderer.PortalGunPortalSectionViews; -import net.minecraft.client.multiplayer.ClientLevel; -import net.minecraft.client.renderer.LevelRenderer; -import net.minecraft.client.renderer.chunk.SectionRenderDispatcher; -import net.minecraft.core.BlockPos; -import net.minecraft.sounds.SoundEvent; -import net.minecraft.sounds.SoundSource; -import net.minecraft.world.level.ChunkPos; -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.Redirect; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(LevelRenderer.class) -public abstract class LevelRendererPortalViewAreaMixin { - @Redirect(method = "renderSnowAndRain", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/ClientLevel;playLocalSound(Lnet/minecraft/core/BlockPos;Lnet/minecraft/sounds/SoundEvent;Lnet/minecraft/sounds/SoundSource;FFZ)V"), require = 0) - private void antarchy$suppressPortalWeatherSound(ClientLevel level, BlockPos pos, SoundEvent sound, SoundSource source, float volume, float pitch, boolean distanceDelay) { - if (PortalGunPortalRenderState.getContext() == null) { - level.playLocalSound(pos, sound, source, volume, pitch, distanceDelay); - } - } - - @Inject(method = "addRecentlyCompiledSection", at = @At("TAIL")) - private void antarchy$notifyPortalGraphs(SectionRenderDispatcher.RenderSection section, CallbackInfo ci) { - PortalGunPortalSectionViews.onSectionCompiled(section); - } - - @Inject(method = "onChunkLoaded", at = @At("TAIL")) - private void antarchy$updatePortalChunkGraph(ChunkPos pos, CallbackInfo ci) { - PortalGunPortalSectionViews.onChunkLoaded(pos); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/LivingEntityPortalLerpAccessor.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/LivingEntityPortalLerpAccessor.java deleted file mode 100644 index 433c9cf5..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/LivingEntityPortalLerpAccessor.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.craisinlord.antarchy.mixins.client; - -import net.minecraft.world.entity.LivingEntity; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Mutable; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Mixin(LivingEntity.class) -public interface LivingEntityPortalLerpAccessor { - @Mutable - @Accessor("lerpSteps") - void antarchy$setLerpSteps(int steps); - - @Mutable - @Accessor("lerpHeadSteps") - void antarchy$setLerpHeadSteps(int steps); -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/LocalPlayerPortalMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/LocalPlayerPortalMixin.java deleted file mode 100644 index ec680db5..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/LocalPlayerPortalMixin.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.craisinlord.antarchy.mixins.client; - -import com.craisinlord.antarchy.content.client.PortalGunRollClientState; -import net.minecraft.client.Minecraft; -import net.minecraft.client.player.LocalPlayer; -import net.minecraft.core.BlockPos; -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; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(LocalPlayer.class) -public abstract class LocalPlayerPortalMixin { - @Inject(method = "suffocatesAt", at = @At("HEAD"), cancellable = true) - private void antarchy$ignorePortalSuffocation(BlockPos pos, CallbackInfoReturnable cir) { - Minecraft minecraft = Minecraft.getInstance(); - if (minecraft.player != null && PortalGunRollClientState.isEntityInsidePortal(minecraft, minecraft.player)) { - cir.setReturnValue(false); - } - } - - @Inject(method = "moveTowardsClosestSpace", at = @At("HEAD"), cancellable = true) - private void antarchy$cancelPortalPushOut(double x, double z, CallbackInfo ci) { - Minecraft minecraft = Minecraft.getInstance(); - if (minecraft.player != null && PortalGunRollClientState.isEntityInsidePortal(minecraft, minecraft.player)) { - ci.cancel(); - } - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/LocalPlayerPortalTransitMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/LocalPlayerPortalTransitMixin.java deleted file mode 100644 index f0161b1c..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/LocalPlayerPortalTransitMixin.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.craisinlord.antarchy.mixins.client; - -import com.craisinlord.antarchy.content.client.PortalGunClientTransit; -import net.minecraft.client.player.LocalPlayer; -import net.minecraft.world.entity.MoverType; -import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.Vec3; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(LocalPlayer.class) -public abstract class LocalPlayerPortalTransitMixin { - @Unique - private AABB antarchy$portalTransitStartBox; - @Unique - private Vec3 antarchy$portalTransitStartVelocity; - - @Inject(method = "move", at = @At("HEAD")) - private void antarchy$capturePortalTransitStart(MoverType type, Vec3 movement, CallbackInfo ci) { - this.antarchy$portalTransitStartBox = ((LocalPlayer) (Object) this).getBoundingBox(); - this.antarchy$portalTransitStartVelocity = ((LocalPlayer) (Object) this).getDeltaMovement(); - } - - @Inject(method = "move", at = @At("RETURN")) - private void antarchy$applyPortalTransit(MoverType type, Vec3 movement, CallbackInfo ci) { - AABB startBox = this.antarchy$portalTransitStartBox; - Vec3 startVelocity = this.antarchy$portalTransitStartVelocity; - this.antarchy$portalTransitStartBox = null; - this.antarchy$portalTransitStartVelocity = null; - if (startBox != null && startVelocity != null && type == MoverType.SELF) { - PortalGunClientTransit.afterLocalMove((LocalPlayer) (Object) this, startBox, startVelocity); - } - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/MinecraftMainRenderTargetAccessor.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/MinecraftMainRenderTargetAccessor.java deleted file mode 100644 index 0fd7d763..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/MinecraftMainRenderTargetAccessor.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.craisinlord.antarchy.mixins.client; - -import com.mojang.blaze3d.pipeline.RenderTarget; -import net.minecraft.client.Minecraft; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Mutable; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Mixin(Minecraft.class) -public interface MinecraftMainRenderTargetAccessor { - @Mutable - @Accessor("mainRenderTarget") - void antarchy$setMainRenderTarget(RenderTarget renderTarget); -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/MinecraftPortalTransparencyMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/MinecraftPortalTransparencyMixin.java deleted file mode 100644 index c9194bd7..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/MinecraftPortalTransparencyMixin.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.craisinlord.antarchy.mixins.client; - -import com.craisinlord.antarchy.content.client.renderer.PortalGunPortalSceneRenderer; -import net.minecraft.client.Minecraft; -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(Minecraft.class) -public abstract class MinecraftPortalTransparencyMixin { - @Inject(method = "useShaderTransparency", at = @At("HEAD"), cancellable = true) - private static void antarchy$disableShaderTransparencyInPortalScenes(CallbackInfoReturnable cir) { - if (PortalGunPortalSceneRenderer.isRenderingScene()) { - cir.setReturnValue(false); - } - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/PortalGunEntityTeleportPacketMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/PortalGunEntityTeleportPacketMixin.java deleted file mode 100644 index cb70b7bf..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/PortalGunEntityTeleportPacketMixin.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.craisinlord.antarchy.mixins.client; - -import com.craisinlord.antarchy.content.portalgun.PortalGunPortalEntity; -import com.craisinlord.antarchy.content.portalgun.PortalGunWorldPortalShape; -import net.minecraft.client.Minecraft; -import net.minecraft.client.multiplayer.ClientPacketListener; -import net.minecraft.network.protocol.game.ClientboundTeleportEntityPacket; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.phys.AABB; -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(ClientPacketListener.class) -public abstract class PortalGunEntityTeleportPacketMixin { - @Inject(method = "handleTeleportEntity", at = @At("TAIL")) - private void antarchy$snapPortalTransitEntity(ClientboundTeleportEntityPacket packet, CallbackInfo ci) { - Minecraft minecraft = Minecraft.getInstance(); - if (minecraft.level == null) { - return; - } - Entity entity = minecraft.level.getEntity(packet.getId()); - Vec3 destination = new Vec3(packet.getX(), packet.getY(), packet.getZ()); - if (entity == null) { - return; - } - antarchy$snapToPortalExit(entity, destination); - } - - private static void antarchy$snapToPortalExit(Entity entity, Vec3 destination) { - if (!isNearPortalExit(entity, destination)) { - return; - } - entity.lerpTo(destination.x, destination.y, destination.z, entity.getYRot(), entity.getXRot(), 0); - entity.setPortalCooldown(PortalGunPortalEntity.TELEPORT_COOLDOWN_TICKS); - entity.setPos(destination.x, destination.y, destination.z); - entity.xo = destination.x; - entity.yo = destination.y; - entity.zo = destination.z; - entity.yRotO = entity.getYRot(); - entity.xRotO = entity.getXRot(); - if (entity instanceof LivingEntity livingEntity) { - LivingEntityPortalLerpAccessor accessor = (LivingEntityPortalLerpAccessor) livingEntity; - accessor.antarchy$setLerpHeadSteps(0); - } - } - - private static boolean isNearPortalExit(Entity entity, Vec3 destination) { - Vec3 offset = destination.subtract(entity.position()); - double entityExtent = Math.max(entity.getBbWidth(), entity.getBbHeight()); - double edgeAllowance = entityExtent * 0.5D; - AABB search = entity.getBoundingBox().move(offset).inflate(entityExtent + PortalGunWorldPortalShape.DEFAULT_SCAN_DISTANCE); - Vec3 probe = destination.add(0.0D, entity.getEyeHeight(), 0.0D); - for (PortalGunPortalEntity portal : com.craisinlord.antarchy.content.portalgun.PortalGunPortalRegistry.near(entity.level(), search)) { - PortalGunWorldPortalShape.PortalLocalCoords coords = portal.getWorldPortalShape().localCoords(probe); - if (coords.depth() >= -entityExtent - 0.5D - && coords.depth() <= PortalGunWorldPortalShape.DEFAULT_SCAN_DISTANCE + 0.5D - && Math.abs(coords.horizontal()) <= portal.getWorldPortalShape().halfWidth() + edgeAllowance - && Math.abs(coords.vertical()) <= portal.getWorldPortalShape().halfHeight() + edgeAllowance) { - return true; - } - } - return false; - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/PortalViewChunkCacheMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/PortalViewChunkCacheMixin.java deleted file mode 100644 index 2f01d057..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/PortalViewChunkCacheMixin.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.craisinlord.antarchy.mixins.client; - -import com.craisinlord.antarchy.content.client.renderer.PortalGunPortalSectionViews; -import net.minecraft.client.multiplayer.ClientChunkCache; -import net.minecraft.world.level.ChunkPos; -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(ClientChunkCache.class) -public abstract class PortalViewChunkCacheMixin { - @Inject(method = "drop", at = @At("TAIL")) - private void antarchy$invalidatePortalChunk(ChunkPos pos, CallbackInfo ci) { - PortalGunPortalSectionViews.onChunkDropped(pos); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/ScreenEffectRendererPortalMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/ScreenEffectRendererPortalMixin.java deleted file mode 100644 index 60953279..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/ScreenEffectRendererPortalMixin.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.craisinlord.antarchy.mixins.client; - -import com.craisinlord.antarchy.content.client.PortalGunRollClientState; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.ScreenEffectRenderer; -import net.minecraft.world.entity.player.Player; -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(ScreenEffectRenderer.class) -public abstract class ScreenEffectRendererPortalMixin { - @Inject(method = "getViewBlockingState", at = @At("HEAD"), cancellable = true) - private static void antarchy$ignorePortalViewBlock(Player player, CallbackInfoReturnable cir) { - Minecraft minecraft = Minecraft.getInstance(); - if (player != null && PortalGunRollClientState.isEntityInsidePortal(minecraft, player)) { - cir.setReturnValue(null); - } - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/SectionOcclusionGraphPortalMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/SectionOcclusionGraphPortalMixin.java deleted file mode 100644 index 5656b231..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/client/SectionOcclusionGraphPortalMixin.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.craisinlord.antarchy.mixins.client; - -import com.craisinlord.antarchy.content.client.renderer.PortalSectionGraphMarker; -import net.minecraft.client.renderer.SectionOcclusionGraph; -import net.minecraft.client.renderer.chunk.SectionRenderDispatcher; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(SectionOcclusionGraph.class) -public abstract class SectionOcclusionGraphPortalMixin implements PortalSectionGraphMarker { - @Unique - private volatile boolean antarchy$portalGraph; - - @Override - public void antarchy$markPortalGraph() { - this.antarchy$portalGraph = true; - } - - @Inject(method = "getRelativeFrom", at = @At("RETURN"), cancellable = true) - private void antarchy$rejectWrappedPortalSections(BlockPos cameraSectionPos, SectionRenderDispatcher.RenderSection section, - Direction direction, CallbackInfoReturnable cir) { - if (!this.antarchy$portalGraph) { - return; - } - SectionRenderDispatcher.RenderSection relative = cir.getReturnValue(); - if (relative != null && !relative.getOrigin().equals(section.getRelativeOrigin(direction))) { - cir.setReturnValue(null); - } - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/sodium/RenderSectionManagerAccessor.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/sodium/RenderSectionManagerAccessor.java deleted file mode 100644 index 00c00e4e..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/sodium/RenderSectionManagerAccessor.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.craisinlord.antarchy.mixins.compat.sodium; - -import it.unimi.dsi.fastutil.longs.Long2ReferenceMap; -import net.caffeinemc.mods.sodium.client.render.chunk.RenderSection; -import net.caffeinemc.mods.sodium.client.render.chunk.RenderSectionManager; -import net.caffeinemc.mods.sodium.client.render.chunk.lists.SortedRenderLists; -import net.caffeinemc.mods.sodium.client.render.chunk.translucent_sorting.SortBehavior; -import net.caffeinemc.mods.sodium.client.render.chunk.tree.RemovableMultiForest; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; -import org.spongepowered.asm.mixin.gen.Invoker; - -@Mixin(value = RenderSectionManager.class, remap = false) -public interface RenderSectionManagerAccessor { - @Accessor(value = "renderLists", remap = false) - SortedRenderLists antarchy$getRenderLists(); - - @Accessor(value = "renderLists", remap = false) - void antarchy$setRenderLists(SortedRenderLists renderLists); - - @Accessor(value = "renderableSectionTree", remap = false) - RemovableMultiForest antarchy$getRenderableSectionTree(); - - @Accessor(value = "sectionByPosition", remap = false) - Long2ReferenceMap antarchy$getSectionByPosition(); - - @Accessor(value = "sortBehavior", remap = false) - SortBehavior antarchy$getSortBehavior(); - - @Invoker(value = "getSearchDistance", remap = false) - float antarchy$getSearchDistance(); -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/sodium/RenderSectionManagerPortalTasksMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/sodium/RenderSectionManagerPortalTasksMixin.java deleted file mode 100644 index 4f409876..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/sodium/RenderSectionManagerPortalTasksMixin.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.craisinlord.antarchy.mixins.compat.sodium; - -import com.craisinlord.antarchy.content.client.renderer.sodium.SodiumPortalTerrain; -import java.util.ArrayDeque; -import java.util.Map; -import net.caffeinemc.mods.sodium.client.render.chunk.RenderSection; -import net.caffeinemc.mods.sodium.client.render.chunk.RenderSectionManager; -import net.caffeinemc.mods.sodium.client.render.chunk.TaskQueueType; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(value = RenderSectionManager.class, remap = false) -public abstract class RenderSectionManagerPortalTasksMixin { - @Shadow(remap = false) - private Map> taskLists; - - @Inject(method = "update", at = @At("TAIL"), remap = false) - private void antarchy$addPortalViewTasks(CallbackInfo ci) { - SodiumPortalTerrain.drainPendingTasks(this.taskLists); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/sodium/SodiumWorldRendererAccessor.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/sodium/SodiumWorldRendererAccessor.java deleted file mode 100644 index e859bcd0..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/sodium/SodiumWorldRendererAccessor.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.craisinlord.antarchy.mixins.compat.sodium; - -import net.caffeinemc.mods.sodium.client.render.SodiumWorldRenderer; -import net.caffeinemc.mods.sodium.client.render.chunk.RenderSectionManager; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Mixin(value = SodiumWorldRenderer.class, remap = false) -public interface SodiumWorldRendererAccessor { - @Accessor(value = "renderSectionManager", remap = false) - RenderSectionManager antarchy$getRenderSectionManager(); - - @Accessor(value = "useEntityCulling", remap = false) - boolean antarchy$getUseEntityCulling(); - - @Accessor(value = "useEntityCulling", remap = false) - void antarchy$setUseEntityCulling(boolean useEntityCulling); -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/stellarview/StellarViewLunaDirectionMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/stellarview/StellarViewLunaDirectionMixin.java index fdcf843e..e13da15c 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/stellarview/StellarViewLunaDirectionMixin.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/compat/stellarview/StellarViewLunaDirectionMixin.java @@ -1,7 +1,7 @@ package com.craisinlord.antarchy.mixins.compat.stellarview; import com.craisinlord.antarchy.content.client.MoonSkyTracker; -import com.craisinlord.antarchy.content.client.renderer.PortalGunPortalSceneRenderer; +import com.craisinlord.anthology.portal.client.PortalSceneRenderer; import com.mojang.blaze3d.vertex.Tesselator; import net.minecraft.client.Camera; import net.minecraft.client.multiplayer.ClientLevel; @@ -21,7 +21,7 @@ public abstract class StellarViewLunaDirectionMixin { private void antarchy$recordMoonDirection(ViewCenter viewCenter, ClientLevel level, Camera camera, Tesselator tesselator, Matrix4f lastMatrix, SphericalCoords sphericalCoords, long ticks, double distance, float partialTicks, CallbackInfo ci) { - if (PortalGunPortalSceneRenderer.isRenderingScene() || sphericalCoords == null || camera == null || lastMatrix == null) { + if (PortalSceneRenderer.isRenderingScene() || sphericalCoords == null || camera == null || lastMatrix == null) { return; } MoonSkyTracker.recordSphericalMoon(level, camera, lastMatrix, sphericalCoords.theta, sphericalCoords.phi); diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ChunkMapAccessor.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ChunkMapAccessor.java deleted file mode 100644 index 1f4d60c9..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ChunkMapAccessor.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import net.minecraft.server.level.ChunkMap; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Mixin(ChunkMap.class) -/* - * Accessor for chunk map tracking internals used by gravity sync. - */ -public interface ChunkMapAccessor { - @Accessor("entityMap") - Int2ObjectMap antarchy$getEntityMap(); -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityMountedGravityMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityMountedGravityMixin.java deleted file mode 100644 index c32977e3..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/EntityMountedGravityMixin.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import com.craisinlord.anthology.gravity.MountedGravityHelper; -import net.minecraft.world.entity.Entity; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(Entity.class) -public abstract class EntityMountedGravityMixin { - @Unique - private Entity antarchy$previousVehicle; - - @Inject(method = "startRiding(Lnet/minecraft/world/entity/Entity;Z)Z", at = @At("RETURN")) - private void antarchy$syncMountedStack(Entity vehicle, boolean force, CallbackInfoReturnable cir) { - if (cir.getReturnValueZ()) { - MountedGravityHelper.syncConnectedStack((Entity) (Object) this); - } - } - - @Inject(method = "stopRiding", at = @At("HEAD")) - private void antarchy$capturePreviousVehicle(CallbackInfo ci) { - this.antarchy$previousVehicle = ((Entity) (Object) this).getVehicle(); - } - - @Inject(method = "stopRiding", at = @At("TAIL")) - private void antarchy$syncDismountedStacks(CallbackInfo ci) { - MountedGravityHelper.syncSeparatedStacks(this.antarchy$previousVehicle, (Entity) (Object) this); - this.antarchy$previousVehicle = null; - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ServerEntityAccessor.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ServerEntityAccessor.java deleted file mode 100644 index 8c108616..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/ServerEntityAccessor.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import net.minecraft.network.protocol.game.VecDeltaCodec; -import net.minecraft.server.level.ServerEntity; -import net.minecraft.world.phys.Vec3; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Mixin(ServerEntity.class) -/* - * Accessor for server entity tracking internals. - */ -public interface ServerEntityAccessor { - @Accessor("positionCodec") - VecDeltaCodec antarchy$getPositionCodec(); - - @Accessor("lastSentMovement") - void antarchy$setLastSentMovement(Vec3 lastSentMovement); - - @Accessor("updateInterval") - void antarchy$setUpdateInterval(int updateInterval); -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/TrackedEntityAccessor.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/TrackedEntityAccessor.java deleted file mode 100644 index b5c258e9..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/gravity/TrackedEntityAccessor.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.craisinlord.antarchy.mixins.gravity; - -import net.minecraft.server.level.ServerEntity; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Mixin(targets = "net.minecraft.server.level.ChunkMap$TrackedEntity") -/* - * Accessor for tracked entity internals used by gravity sync. - */ -public interface TrackedEntityAccessor { - @Accessor("serverEntity") - ServerEntity antarchy$getServerEntity(); -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/multipart/EntityMultipartLifecycleMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/multipart/EntityMultipartLifecycleMixin.java deleted file mode 100644 index 0b83f10c..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/multipart/EntityMultipartLifecycleMixin.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.craisinlord.antarchy.mixins.multipart; - -import com.craisinlord.antarchy.content.entity.multipart.MultipartEntityOwner; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.level.entity.EntityInLevelCallback; -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(Entity.class) -/* - * Ticks and cleans up multipart child entities with their parent. - */ -public abstract class EntityMultipartLifecycleMixin { - @Inject(method = "setLevelCallback", at = @At("TAIL")) - private void antarchy$spawnMultipartParts(EntityInLevelCallback entityInLevelCallback, CallbackInfo ci) { - if ((Object) this instanceof MultipartEntityOwner owner - && entityInLevelCallback != EntityInLevelCallback.NULL - && owner.antarchy$getMultipartParts() == null) { - owner.antarchy$spawnMultipartParts(); - } - } - - @Inject(method = "tick", at = @At("TAIL")) - private void antarchy$syncMultipartParts(CallbackInfo ci) { - if ((Object) this instanceof MultipartEntityOwner owner) { - owner.antarchy$syncMultipartParts(); - } - } - - @Inject(method = "setRemoved", at = @At("TAIL")) - private void antarchy$discardMultipartParts(Entity.RemovalReason removalReason, CallbackInfo ci) { - if ((Object) this instanceof MultipartEntityOwner owner) { - owner.antarchy$discardMultipartParts(); - } - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/AbstractArrowActionTimeDilationMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/AbstractArrowActionTimeDilationMixin.java deleted file mode 100644 index f14765a1..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/AbstractArrowActionTimeDilationMixin.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import net.minecraft.world.entity.projectile.AbstractArrow; -import org.objectweb.asm.Opcodes; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -@Mixin(AbstractArrow.class) -public abstract class AbstractArrowActionTimeDilationMixin { - @Shadow private int life; - @Shadow protected int inGroundTime; - @Shadow public int shakeTime; - - @Redirect(method = "tick", at = @At(value = "FIELD", target = "Lnet/minecraft/world/entity/projectile/AbstractArrow;shakeTime:I", opcode = Opcodes.PUTFIELD)) - private void antarchy$slowShakeTime(AbstractArrow arrow, int value) { - if (TimeDilationApi.consumeTick(arrow, "arrow_shake")) this.shakeTime = value; - } - - @Redirect(method = "tick", at = @At(value = "FIELD", target = "Lnet/minecraft/world/entity/projectile/AbstractArrow;inGroundTime:I", opcode = Opcodes.PUTFIELD, ordinal = 0)) - private void antarchy$slowInGroundTime(AbstractArrow arrow, int value) { - if (TimeDilationApi.consumeTick(arrow, "arrow_in_ground")) this.inGroundTime = value; - } - - @Redirect(method = "tick", at = @At(value = "FIELD", target = "Lnet/minecraft/world/entity/projectile/AbstractArrow;inGroundTime:I", opcode = Opcodes.PUTFIELD, ordinal = 1)) - private void antarchy$resetInGroundTime(AbstractArrow arrow, int value) { - this.inGroundTime = value; - } - - @Redirect(method = "tickDespawn", at = @At(value = "FIELD", target = "Lnet/minecraft/world/entity/projectile/AbstractArrow;life:I", opcode = Opcodes.PUTFIELD)) - private void antarchy$slowLifetime(AbstractArrow arrow, int value) { - if (TimeDilationApi.consumeTick(arrow, "arrow_lifetime")) this.life = value; - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/AbstractArrowMovementTimeDilationMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/AbstractArrowMovementTimeDilationMixin.java deleted file mode 100644 index 0e5729a3..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/AbstractArrowMovementTimeDilationMixin.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import com.craisinlord.antarchy.content.time.TimeDilationMath; -import net.minecraft.world.entity.projectile.AbstractArrow; -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.Redirect; - -@Mixin(AbstractArrow.class) -public abstract class AbstractArrowMovementTimeDilationMixin { - @Redirect(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/phys/Vec3;add(Lnet/minecraft/world/phys/Vec3;)Lnet/minecraft/world/phys/Vec3;")) - private Vec3 antarchy$slowCollisionPath(Vec3 position, Vec3 movement) { - double rate = TimeDilationApi.getRate((AbstractArrow) (Object) this); - return position.add(Math.abs(rate - TimeDilationMath.NORMAL_RATE) < 0.001D ? movement : movement.scale(rate)); - } - - @Redirect(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/projectile/AbstractArrow;setPos(DDD)V")) - private void antarchy$slowPosition(AbstractArrow arrow, double x, double y, double z) { - double rate = Math.max(TimeDilationMath.MIN_RATE, TimeDilationApi.getRate(arrow)); - if (Math.abs(rate - TimeDilationMath.NORMAL_RATE) < 0.001D) { - arrow.setPos(x, y, z); - return; - } - arrow.setPos(arrow.getX() + (x - arrow.getX()) * rate, - arrow.getY() + (y - arrow.getY()) * rate, - arrow.getZ() + (z - arrow.getZ()) * rate); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/CreeperTimeDilationMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/CreeperTimeDilationMixin.java deleted file mode 100644 index d9541586..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/CreeperTimeDilationMixin.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import net.minecraft.world.entity.monster.Creeper; -import org.spongepowered.asm.mixin.Mixin; -import com.llamalad7.mixinextras.injector.ModifyReturnValue; -import org.spongepowered.asm.mixin.injection.At; - -@Mixin(Creeper.class) -public abstract class CreeperTimeDilationMixin { - @ModifyReturnValue(method = "getSwellDir", at = @At("RETURN")) - private int antarchy$slowSwellProgress(int direction) { - Creeper creeper = (Creeper) (Object) this; - return TimeDilationApi.consumeTick(creeper, "creeper_swell") ? direction : 0; - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/EndCrystalTimeDilationMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/EndCrystalTimeDilationMixin.java deleted file mode 100644 index f6545b33..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/EndCrystalTimeDilationMixin.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import net.minecraft.world.entity.boss.enderdragon.EndCrystal; -import org.objectweb.asm.Opcodes; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; - -@Mixin(EndCrystal.class) -public abstract class EndCrystalTimeDilationMixin { - @WrapOperation(method = "tick", at = @At(value = "FIELD", target = "Lnet/minecraft/world/entity/boss/enderdragon/EndCrystal;time:I", opcode = Opcodes.PUTFIELD)) - private void antarchy$slowCrystalTime(EndCrystal crystal, int value, Operation original) { - if (TimeDilationApi.consumeTick(crystal, "end_crystal_time")) { - original.call(crystal, value); - } - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/EntityCrouchTimeDilationMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/EntityCrouchTimeDilationMixin.java deleted file mode 100644 index 62c455c2..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/EntityCrouchTimeDilationMixin.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.Pose; -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(Entity.class) -public abstract class EntityCrouchTimeDilationMixin { - @Inject(method = "setPose", at = @At("HEAD"), cancellable = true) - private void antarchy$slowCrouchTransition(Pose pose, CallbackInfo callbackInfo) { - Entity entity = (Entity) (Object) this; - if (entity instanceof LivingEntity living - && (pose == Pose.CROUCHING || living.getPose() == Pose.CROUCHING) - && !TimeDilationApi.consumeTick(entity, "living_crouch")) { - callbackInfo.cancel(); - } - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/EntityDeltaMovementTimeDilationMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/EntityDeltaMovementTimeDilationMixin.java deleted file mode 100644 index b3844f9d..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/EntityDeltaMovementTimeDilationMixin.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import com.craisinlord.antarchy.content.time.TimeDilationEntityAccess; -import com.craisinlord.antarchy.content.time.TimeDilationMath; -import net.minecraft.world.entity.Entity; -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.ModifyVariable; - -@Mixin(Entity.class) -public abstract class EntityDeltaMovementTimeDilationMixin { - @ModifyVariable(method = "setDeltaMovement(Lnet/minecraft/world/phys/Vec3;)V", at = @At("HEAD"), argsOnly = true, ordinal = 0) - private Vec3 antarchy$scaleTimeDilatedVelocityChange(Vec3 nextMovement) { - Entity entity = (Entity) (Object) this; - if (!(entity instanceof TimeDilationEntityAccess access) - || access.antarchy$isInTimeDilationMove() - || access.antarchy$isApplyingExternalImpulse()) { - return nextMovement; - } - - double rate = TimeDilationApi.getRate(entity); - if (rate >= TimeDilationMath.NORMAL_RATE - 0.001D) { - return nextMovement; - } - - Vec3 currentMovement = entity.getDeltaMovement(); - double y = currentMovement.y + (nextMovement.y - currentMovement.y) * rate; - if (nextMovement.y > currentMovement.y && nextMovement.y > 0.0D && (entity.onGround() || currentMovement.y <= 0.0D)) { - y = nextMovement.y; - } - return new Vec3( - currentMovement.x + (nextMovement.x - currentMovement.x) * rate, - y, - currentMovement.z + (nextMovement.z - currentMovement.z) * rate - ); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/EntityMoveTimeDilationMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/EntityMoveTimeDilationMixin.java deleted file mode 100644 index aca4cb53..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/EntityMoveTimeDilationMixin.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import com.craisinlord.antarchy.content.time.TimeDilationEntityAccess; -import com.craisinlord.antarchy.content.time.TimeDilationMath; -import net.minecraft.world.entity.Entity; -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.ModifyVariable; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(Entity.class) -public abstract class EntityMoveTimeDilationMixin { - @Inject(method = "move", at = @At("HEAD")) - private void antarchy$beginTimeDilationMove(MoverType moverType, Vec3 movement, CallbackInfo ci) { - if (this instanceof TimeDilationEntityAccess access) { - access.antarchy$setInTimeDilationMove(true); - } - } - - @Inject(method = "move", at = @At("RETURN")) - private void antarchy$endTimeDilationMove(MoverType moverType, Vec3 movement, CallbackInfo ci) { - if (this instanceof TimeDilationEntityAccess access) { - access.antarchy$setInTimeDilationMove(false); - } - } - - @ModifyVariable(method = "move", at = @At("HEAD"), argsOnly = true, ordinal = 0) - private Vec3 antarchy$scaleTimeDilatedMovement(Vec3 movement) { - Entity entity = (Entity) (Object) this; - if (entity instanceof Player && !entity.level().isClientSide) { - return movement; - } - double rate = TimeDilationApi.getRate(entity); - if (Math.abs(rate - TimeDilationMath.NORMAL_RATE) < 0.001D) { - return movement; - } - if (rate > TimeDilationMath.NORMAL_RATE && TimeDilationApi.isHorizontalOnlyMovement(entity)) { - return movement.multiply(rate, 1.0D, rate); - } - return movement.scale(rate); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/EntityRotationTimeDilationMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/EntityRotationTimeDilationMixin.java deleted file mode 100644 index f3895902..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/EntityRotationTimeDilationMixin.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import com.craisinlord.antarchy.content.time.TimeDilationMath; -import net.minecraft.util.Mth; -import net.minecraft.world.entity.Entity; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.ModifyVariable; - -@Mixin(Entity.class) -public abstract class EntityRotationTimeDilationMixin { - @ModifyVariable(method = "setYRot", at = @At("HEAD"), argsOnly = true) - private float antarchy$slowYaw(float nextYaw) { - Entity entity = (Entity) (Object) this; - if (TimeDilationApi.isRotationBypassed()) { - return nextYaw; - } - double rate = TimeDilationApi.getRate(entity); - if (rate >= TimeDilationMath.NORMAL_RATE) { - return nextYaw; - } - return entity.getYRot() + Mth.wrapDegrees(nextYaw - entity.getYRot()) * (float) rate; - } - - @ModifyVariable(method = "setXRot", at = @At("HEAD"), argsOnly = true) - private float antarchy$slowPitch(float nextPitch) { - Entity entity = (Entity) (Object) this; - if (TimeDilationApi.isRotationBypassed()) { - return nextPitch; - } - double rate = TimeDilationApi.getRate(entity); - if (rate >= TimeDilationMath.NORMAL_RATE) { - return nextPitch; - } - return entity.getXRot() + (nextPitch - entity.getXRot()) * (float) rate; - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/EntityTimeDilationStateMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/EntityTimeDilationStateMixin.java deleted file mode 100644 index a15419ce..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/EntityTimeDilationStateMixin.java +++ /dev/null @@ -1,110 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationEntityAccess; -import com.craisinlord.antarchy.content.time.TimeDilationMath; -import java.util.HashMap; -import java.util.Map; -import net.minecraft.world.entity.Entity; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; - -@Mixin(Entity.class) -public abstract class EntityTimeDilationStateMixin implements TimeDilationEntityAccess { - @Unique - private double antarchy$timeDilationRate = TimeDilationMath.NORMAL_RATE; - @Unique - private double antarchy$inheritedTimeDilationRate = TimeDilationMath.NORMAL_RATE; - @Unique - private final Map antarchy$timeDilationTimerProgress = new HashMap<>(); - @Unique - private boolean antarchy$inTimeDilationMove; - @Unique - private boolean antarchy$applyingExternalImpulse; - @Unique - private double antarchy$timeDilationCeiling = TimeDilationMath.MAX_RATE; - @Unique - private final Map antarchy$personalTimeDilationRates = new HashMap<>(); - - @Override - public double antarchy$getTimeDilationCeiling() { - return this.antarchy$timeDilationCeiling; - } - - @Override - public void antarchy$setTimeDilationCeiling(double ceiling) { - this.antarchy$timeDilationCeiling = TimeDilationMath.clampCeiling(ceiling); - } - - @Override - public Map antarchy$getPersonalTimeDilationRates() { - return this.antarchy$personalTimeDilationRates; - } - - @Override - public double antarchy$getTimeDilationRate() { - return this.antarchy$timeDilationRate; - } - - @Override - public void antarchy$setTimeDilationRate(double rate) { - double previousRate = this.antarchy$timeDilationRate; - this.antarchy$timeDilationRate = TimeDilationMath.clampRate(rate, TimeDilationMath.ABSOLUTE_MAX_RATE); - if (previousRate != TimeDilationMath.NORMAL_RATE - && this.antarchy$timeDilationRate == TimeDilationMath.NORMAL_RATE) { - this.antarchy$timeDilationTimerProgress.clear(); - } - } - - @Override - public double antarchy$getInheritedTimeDilationRate() { - return this.antarchy$inheritedTimeDilationRate; - } - - @Override - public void antarchy$setInheritedTimeDilationRate(double rate) { - this.antarchy$inheritedTimeDilationRate = TimeDilationMath.clampRate(rate); - } - - @Override - public boolean antarchy$consumeTimeDilationTick(String timerKey, double rate) { - return this.antarchy$consumeTimeDilationTicks(timerKey, rate) > 0; - } - - @Override - public int antarchy$consumeTimeDilationTicks(String timerKey, double rate) { - double clampedRate = TimeDilationMath.clampRate(rate, TimeDilationMath.ABSOLUTE_MAX_RATE); - if (Math.abs(clampedRate - TimeDilationMath.NORMAL_RATE) < 0.001D) { - return 1; - } - - double progress = this.antarchy$timeDilationTimerProgress.getOrDefault(timerKey, 0.0D) + clampedRate; - int wholeTicks = (int) Math.floor(progress + 1.0E-9D); - if (wholeTicks <= 0) { - this.antarchy$timeDilationTimerProgress.put(timerKey, progress); - return 0; - } - - this.antarchy$timeDilationTimerProgress.put(timerKey, progress - wholeTicks); - return wholeTicks; - } - - @Override - public boolean antarchy$isInTimeDilationMove() { - return this.antarchy$inTimeDilationMove; - } - - @Override - public void antarchy$setInTimeDilationMove(boolean inMove) { - this.antarchy$inTimeDilationMove = inMove; - } - - @Override - public boolean antarchy$isApplyingExternalImpulse() { - return this.antarchy$applyingExternalImpulse; - } - - @Override - public void antarchy$setApplyingExternalImpulse(boolean applying) { - this.antarchy$applyingExternalImpulse = applying; - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/GeckoLibAnimationControllerTimeDilationMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/GeckoLibAnimationControllerTimeDilationMixin.java deleted file mode 100644 index 99b523a8..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/GeckoLibAnimationControllerTimeDilationMixin.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import com.llamalad7.mixinextras.injector.ModifyReturnValue; -import net.minecraft.world.entity.Entity; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import software.bernie.geckolib.animatable.GeoAnimatable; -import software.bernie.geckolib.animation.AnimationController; - -@Mixin(AnimationController.class) -public abstract class GeckoLibAnimationControllerTimeDilationMixin { - @Shadow(remap = false) - protected T animatable; - - @ModifyReturnValue(method = "adjustTick", at = @At("RETURN"), remap = false) - private double antarchy$scaleAnimationTick(double tick) { - if (this.animatable instanceof Entity entity) { - return tick * TimeDilationApi.getRate(entity); - } - return tick; - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/HurtingProjectileMovementTimeDilationMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/HurtingProjectileMovementTimeDilationMixin.java deleted file mode 100644 index 2522165b..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/HurtingProjectileMovementTimeDilationMixin.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import com.craisinlord.antarchy.content.time.TimeDilationMath; -import net.minecraft.world.entity.projectile.AbstractHurtingProjectile; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -@Mixin(AbstractHurtingProjectile.class) -public abstract class HurtingProjectileMovementTimeDilationMixin { - @Redirect(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/projectile/AbstractHurtingProjectile;setPos(DDD)V")) - private void antarchy$slowPosition(AbstractHurtingProjectile projectile, double x, double y, double z) { - double rate = Math.max(TimeDilationMath.MIN_RATE, TimeDilationApi.getRate(projectile)); - if (Math.abs(rate - TimeDilationMath.NORMAL_RATE) < 0.001D) { - projectile.setPos(x, y, z); - return; - } - projectile.setPos(projectile.getX() + (x - projectile.getX()) * rate, - projectile.getY() + (y - projectile.getY()) * rate, - projectile.getZ() + (z - projectile.getZ()) * rate); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/ItemEntityRendererTimeDilationMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/ItemEntityRendererTimeDilationMixin.java deleted file mode 100644 index 514e6c30..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/ItemEntityRendererTimeDilationMixin.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.client.ClientTimeDilationTicker; -import net.minecraft.client.renderer.entity.ItemEntityRenderer; -import net.minecraft.world.entity.item.ItemEntity; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.ModifyArg; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(ItemEntityRenderer.class) -public abstract class ItemEntityRendererTimeDilationMixin { - @Unique - private static final ThreadLocal antarchy$renderingItem = new ThreadLocal<>(); - - @Inject(method = "render", at = @At("HEAD")) - private void antarchy$beginItemRender(ItemEntity item, float entityYaw, float partialTick, - com.mojang.blaze3d.vertex.PoseStack poseStack, - net.minecraft.client.renderer.MultiBufferSource buffer, - int packedLight, CallbackInfo ci) { - antarchy$renderingItem.set(item); - } - - @Inject(method = "render", at = @At("RETURN")) - private void antarchy$endItemRender(ItemEntity item, float entityYaw, float partialTick, - com.mojang.blaze3d.vertex.PoseStack poseStack, - net.minecraft.client.renderer.MultiBufferSource buffer, - int packedLight, CallbackInfo ci) { - antarchy$renderingItem.remove(); - } - - @ModifyArg(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Mth;sin(F)F"), index = 0) - private float antarchy$slowItemBob(float phase) { - ItemEntity item = antarchy$renderingItem.get(); - if (item == null) { - return phase; - } - double rate = com.craisinlord.antarchy.content.time.TimeDilationApi.getRate(item); - return rate >= 1.0D ? phase : phase * (float) rate; - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/ItemEntityRotationTimeDilationMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/ItemEntityRotationTimeDilationMixin.java deleted file mode 100644 index f9bcd369..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/ItemEntityRotationTimeDilationMixin.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.client.ClientTimeDilationTicker; -import net.minecraft.world.entity.item.ItemEntity; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import com.llamalad7.mixinextras.injector.ModifyReturnValue; - -@Mixin(ItemEntity.class) -public abstract class ItemEntityRotationTimeDilationMixin { - @ModifyReturnValue(method = "getSpin", at = @At("RETURN")) - private float antarchy$slowSpin(float spin) { - return ClientTimeDilationTicker.dilateItemSpin((ItemEntity) (Object) this, spin); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityAttackCooldownTimeDilationMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityAttackCooldownTimeDilationMixin.java deleted file mode 100644 index 0415fb3c..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityAttackCooldownTimeDilationMixin.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import net.minecraft.world.entity.LivingEntity; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(LivingEntity.class) -public abstract class LivingEntityAttackCooldownTimeDilationMixin { - @Shadow - private int attackStrengthTicker; - - @Inject(method = "tick", at = @At("RETURN")) - private void antarchy$slowAttackCooldown(CallbackInfo ci) { - LivingEntity entity = (LivingEntity) (Object) this; - if (!TimeDilationApi.consumeTick(entity, "living_attack_cooldown")) { - this.attackStrengthTicker = Math.max(0, this.attackStrengthTicker - 1); - } - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityChronosphereEquipmentMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityChronosphereEquipmentMixin.java deleted file mode 100644 index cfd398de..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityChronosphereEquipmentMixin.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.ChronosphereManager; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.entity.EquipmentSlot; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.item.ItemStack; -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(LivingEntity.class) -public abstract class LivingEntityChronosphereEquipmentMixin { - @Inject(method = "onEquipItem", at = @At("TAIL")) - private void antarchy$refreshChronosphere(EquipmentSlot slot, ItemStack oldStack, ItemStack newStack, CallbackInfo callback) { - if (slot == EquipmentSlot.CHEST && (Object) this instanceof ServerPlayer player) { - ChronosphereManager.refresh(player); - } - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityFoodUseTimeDilationMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityFoodUseTimeDilationMixin.java deleted file mode 100644 index 31dbcfb7..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityFoodUseTimeDilationMixin.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.core.component.DataComponents; -import net.minecraft.world.item.ItemStack; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -@Mixin(LivingEntity.class) -public abstract class LivingEntityFoodUseTimeDilationMixin { - @Shadow - protected abstract void updatingUsingItem(); - - @Redirect(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;updatingUsingItem()V")) - private void antarchy$advanceFoodUse(LivingEntity entity) { - ItemStack stack = entity.getUseItem(); - if (stack.isEmpty() || stack.get(DataComponents.FOOD) == null) { - this.updatingUsingItem(); - return; - } - - int ticks = TimeDilationApi.consumeTicks(entity, "living_food_use"); - for (int i = 0; i < ticks && entity.isUsingItem(); i++) { - this.updatingUsingItem(); - } - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityKnockbackTimeDilationMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityKnockbackTimeDilationMixin.java deleted file mode 100644 index 1b033a45..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityKnockbackTimeDilationMixin.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationEntityAccess; -import net.minecraft.world.entity.LivingEntity; -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(LivingEntity.class) -public abstract class LivingEntityKnockbackTimeDilationMixin { - @Inject(method = "knockback", at = @At("HEAD")) - private void antarchy$beginExternalImpulse(double strength, double x, double z, CallbackInfo ci) { - if (this instanceof TimeDilationEntityAccess access) { - access.antarchy$setApplyingExternalImpulse(true); - } - } - - @Inject(method = "knockback", at = @At("RETURN")) - private void antarchy$endExternalImpulse(double strength, double x, double z, CallbackInfo ci) { - if (this instanceof TimeDilationEntityAccess access) { - access.antarchy$setApplyingExternalImpulse(false); - } - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityRendererAnimationTimeDilationMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityRendererAnimationTimeDilationMixin.java deleted file mode 100644 index 4f303429..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityRendererAnimationTimeDilationMixin.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.client.ClientTimeDilationTicker; -import com.llamalad7.mixinextras.injector.ModifyReturnValue; -import net.minecraft.client.renderer.entity.LivingEntityRenderer; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.util.Mth; -import org.spongepowered.asm.mixin.injection.Redirect; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -@Mixin(LivingEntityRenderer.class) -public abstract class LivingEntityRendererAnimationTimeDilationMixin { - private static final ThreadLocal antarchy$renderingEntity = new ThreadLocal<>(); - - @org.spongepowered.asm.mixin.injection.Inject(method = "render", at = @At("HEAD")) - private void antarchy$beginRender(LivingEntity entity, float entityYaw, float partialTick, - com.mojang.blaze3d.vertex.PoseStack poseStack, - net.minecraft.client.renderer.MultiBufferSource buffer, - int packedLight, org.spongepowered.asm.mixin.injection.callback.CallbackInfo ci) { - antarchy$renderingEntity.set(entity); - } - - @org.spongepowered.asm.mixin.injection.Inject(method = "render", at = @At("RETURN")) - private void antarchy$endRender(LivingEntity entity, float entityYaw, float partialTick, - com.mojang.blaze3d.vertex.PoseStack poseStack, - net.minecraft.client.renderer.MultiBufferSource buffer, - int packedLight, org.spongepowered.asm.mixin.injection.callback.CallbackInfo ci) { - antarchy$renderingEntity.remove(); - } - - @Redirect(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Mth;rotLerp(FFF)F", ordinal = 0)) - private float antarchy$slowBodyYaw(float partialTick, float previous, float current) { - LivingEntity entity = antarchy$renderingEntity.get(); - return entity == null ? Mth.rotLerp(partialTick, previous, current) - : ClientTimeDilationTicker.dilateRotation(entity, previous, current, partialTick); - } - - @Redirect(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Mth;rotLerp(FFF)F", ordinal = 1)) - private float antarchy$slowHeadYaw(float partialTick, float previous, float current) { - LivingEntity entity = antarchy$renderingEntity.get(); - return entity == null ? Mth.rotLerp(partialTick, previous, current) - : ClientTimeDilationTicker.dilateRotation(entity, previous, current, partialTick); - } - - @Redirect(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Mth;lerp(FFF)F", ordinal = 0)) - private float antarchy$slowHeadPitch(float partialTick, float previous, float current) { - LivingEntity entity = antarchy$renderingEntity.get(); - return entity == null ? Mth.lerp(partialTick, previous, current) - : ClientTimeDilationTicker.dilatePitch(entity, previous, current, partialTick); - } - - @Redirect(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/WalkAnimationState;speed(F)F")) - private float antarchy$slowWalkAmount(net.minecraft.world.entity.WalkAnimationState state, float partialTick) { - LivingEntity entity = antarchy$renderingEntity.get(); - float amount = state.speed(partialTick); - return entity == null ? amount : ClientTimeDilationTicker.dilateWalkAmount(entity, amount); - } - - @Redirect(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/WalkAnimationState;position(F)F")) - private float antarchy$scaleWalkPosition(net.minecraft.world.entity.WalkAnimationState state, float partialTick) { - LivingEntity entity = antarchy$renderingEntity.get(); - float position = state.position(partialTick); - return entity == null ? position : ClientTimeDilationTicker.dilateWalkPosition(entity, position); - } - - @org.spongepowered.asm.mixin.injection.Inject(method = "getOverlayCoords", at = @At("HEAD"), cancellable = true) - private static void antarchy$slowHurtOverlay(LivingEntity entity, float partialTick, CallbackInfoReturnable cir) { - if (com.craisinlord.antarchy.content.time.TimeDilationApi.getRate(entity) < 1.0D - && (entity.hurtTime > 0 || entity.deathTime > 0)) { - cir.setReturnValue(net.minecraft.client.renderer.texture.OverlayTexture.pack(1.0F, entity.deathTime > 0)); - } - } - @ModifyReturnValue(method = "getAttackAnim", at = @At("RETURN")) - private float antarchy$slowAttackAnimation(float animation, LivingEntity entity, float partialTick) { - return ClientTimeDilationTicker.dilateAttackAnimation(entity, partialTick, animation); - } - - @ModifyReturnValue(method = "getBob", at = @At("RETURN")) - private float antarchy$slowIdleAnimation(float bob, LivingEntity entity, float partialTick) { - return ClientTimeDilationTicker.dilateAnimationTime(entity, bob); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityTimeDilationCleanupMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityTimeDilationCleanupMixin.java deleted file mode 100644 index d4dd7984..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityTimeDilationCleanupMixin.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import net.minecraft.world.damagesource.DamageSource; -import net.minecraft.world.entity.LivingEntity; -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(LivingEntity.class) -public abstract class LivingEntityTimeDilationCleanupMixin { - @Inject(method = "die", at = @At("HEAD")) - private void antarchy$clearTimeDilationOnDeath(DamageSource damageSource, CallbackInfo ci) { - TimeDilationApi.clearRate((LivingEntity) (Object) this); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityTimeDilationMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityTimeDilationMixin.java deleted file mode 100644 index f25f86c1..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/LivingEntityTimeDilationMixin.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import com.craisinlord.antarchy.content.time.TimeDilationManager; -import com.craisinlord.antarchy.content.client.ContractionAfterimages; -import com.craisinlord.antarchy.content.effect.RoyalEffectHooks; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.LivingEntity; -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(LivingEntity.class) -public abstract class LivingEntityTimeDilationMixin { - @Inject(method = "tickEffects", at = @At("HEAD")) - private void antarchy$trackTemporalEffects(CallbackInfo ci) { - Entity entity = (Entity) (Object) this; - TimeDilationManager.trackPotentiallyAffected(entity); - if (entity.level().isClientSide) { - ContractionAfterimages.observe((LivingEntity) entity); - } - } - - @Inject(method = "updateSwingTime", at = @At("HEAD"), cancellable = true) - private void antarchy$slowSwingTime(CallbackInfo ci) { - Entity entity = (Entity) (Object) this; - if (!TimeDilationApi.consumeTick(entity, "living_swing")) { - ci.cancel(); - } - } - - @Inject(method = "swing(Lnet/minecraft/world/InteractionHand;Z)V", at = @At("HEAD"), cancellable = true) - private void antarchy$slowSwingStart(InteractionHand hand, boolean updateSelf, CallbackInfo ci) { - Entity entity = (Entity) (Object) this; - if (!TimeDilationApi.consumeTick(entity, "living_swing_start")) { - ci.cancel(); - } - } - -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/LookControlTimeDilationMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/LookControlTimeDilationMixin.java deleted file mode 100644 index a45e7459..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/LookControlTimeDilationMixin.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import com.craisinlord.antarchy.content.time.TimeDilationMath; -import com.llamalad7.mixinextras.injector.ModifyReturnValue; -import net.minecraft.util.Mth; -import net.minecraft.world.entity.Mob; -import net.minecraft.world.entity.ai.control.LookControl; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; - -@Mixin(LookControl.class) -public abstract class LookControlTimeDilationMixin { - @Shadow - protected Mob mob; - - @ModifyReturnValue(method = "rotateTowards", at = @At("RETURN")) - private float antarchy$slowLookTurn(float result, float from, float to, float maxAngle) { - double rate = TimeDilationApi.getRate(this.mob); - if (rate >= TimeDilationMath.NORMAL_RATE) { - return result; - } - return from + (float) (Mth.wrapDegrees(result - from) * rate); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/MeleeAttackGoalTimeDilationMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/MeleeAttackGoalTimeDilationMixin.java deleted file mode 100644 index 91464218..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/MeleeAttackGoalTimeDilationMixin.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import net.minecraft.world.entity.PathfinderMob; -import net.minecraft.world.entity.ai.goal.MeleeAttackGoal; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(MeleeAttackGoal.class) -public abstract class MeleeAttackGoalTimeDilationMixin { - @Shadow - @Final - protected PathfinderMob mob; - - @Shadow - private int ticksUntilNextAttack; - - @Inject(method = "resetAttackCooldown", at = @At("RETURN")) - private void antarchy$scaleMeleeCooldown(CallbackInfo ci) { - this.ticksUntilNextAttack = TimeDilationApi.scaleCooldownTicks(this.mob, this.ticksUntilNextAttack); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/MobAttackTimeDilationMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/MobAttackTimeDilationMixin.java deleted file mode 100644 index 70c04436..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/MobAttackTimeDilationMixin.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import com.craisinlord.antarchy.content.time.TimeDilationMath; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.Mob; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(Mob.class) -public abstract class MobAttackTimeDilationMixin { - @Unique - private long antarchy$nextAttackTick = Long.MIN_VALUE; - - @Inject(method = "doHurtTarget", at = @At("HEAD"), cancellable = true) - private void antarchy$rateLimitAttack(Entity target, CallbackInfoReturnable cir) { - Mob mob = (Mob) (Object) this; - if (mob.level().isClientSide) { - return; - } - double rate = TimeDilationApi.getRate(mob); - if (rate >= TimeDilationMath.NORMAL_RATE) { - return; - } - long now = mob.level().getGameTime(); - if (now < this.antarchy$nextAttackTick) { - cir.setReturnValue(false); - return; - } - this.antarchy$nextAttackTick = now + TimeDilationApi.scaleCooldownTicks(mob, 20); - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/ParticlePositionAccessor.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/ParticlePositionAccessor.java deleted file mode 100644 index c38a965e..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/ParticlePositionAccessor.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import net.minecraft.client.particle.Particle; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Mixin(Particle.class) -public interface ParticlePositionAccessor { - @Accessor("x") - double antarchy$getX(); - - @Accessor("y") - double antarchy$getY(); - - @Accessor("z") - double antarchy$getZ(); -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/ParticleTimeDilationMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/ParticleTimeDilationMixin.java deleted file mode 100644 index c1630961..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/ParticleTimeDilationMixin.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.client.ClientTimeDilationTicker; -import com.craisinlord.antarchy.content.time.TimeDilationMath; -import net.minecraft.client.particle.Particle; -import org.objectweb.asm.Opcodes; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.ModifyArgs; -import org.spongepowered.asm.mixin.injection.Redirect; -import org.spongepowered.asm.mixin.injection.invoke.arg.Args; - -@Mixin(Particle.class) -public abstract class ParticleTimeDilationMixin { - @Shadow - protected int age; - @Shadow - protected double x; - @Shadow - protected double y; - @Shadow - protected double z; - - @Unique - private double antarchy$ageProgress; - - @Unique - private double antarchy$sampleRate() { - return ClientTimeDilationTicker.rateAt(this.x, this.y, this.z); - } - - @ModifyArgs( - method = "tick", - at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/Particle;move(DDD)V") - ) - private void antarchy$slowParticleMovement(Args args) { - double rate = this.antarchy$sampleRate(); - if (rate >= TimeDilationMath.NORMAL_RATE) { - return; - } - args.set(0, (Double) args.get(0) * rate); - args.set(1, (Double) args.get(1) * rate); - args.set(2, (Double) args.get(2) * rate); - } - - @Redirect( - method = "tick", - at = @At(value = "FIELD", target = "Lnet/minecraft/client/particle/Particle;age:I", opcode = Opcodes.PUTFIELD) - ) - private void antarchy$slowParticleAge(Particle self, int nextAge) { - double rate = this.antarchy$sampleRate(); - if (rate >= TimeDilationMath.NORMAL_RATE) { - this.age = nextAge; - return; - } - this.antarchy$ageProgress += rate; - if (this.antarchy$ageProgress >= 1.0D) { - this.antarchy$ageProgress -= 1.0D; - this.age = nextAge; - } - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/PlayerCooldownTimeDilationMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/PlayerCooldownTimeDilationMixin.java deleted file mode 100644 index c6d51f93..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/PlayerCooldownTimeDilationMixin.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemCooldowns; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -@Mixin(Player.class) -public abstract class PlayerCooldownTimeDilationMixin { - @Redirect(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/item/ItemCooldowns;tick()V")) - private void antarchy$advanceCooldowns(ItemCooldowns cooldowns) { - Player player = (Player) (Object) this; - int ticks = TimeDilationApi.consumeTicks(player, "player_item_cooldowns"); - for (int i = 0; i < ticks; i++) { - cooldowns.tick(); - } - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/PlayerTemporalTunerMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/PlayerTemporalTunerMixin.java index 59ee57fa..613fc67e 100644 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/PlayerTemporalTunerMixin.java +++ b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/PlayerTemporalTunerMixin.java @@ -1,7 +1,7 @@ package com.craisinlord.antarchy.mixins.time; -import com.craisinlord.antarchy.content.time.TimeDilationMath; -import com.craisinlord.antarchy.content.time.TemporalTunerAccess; +import com.craisinlord.anthology.time.TimeDilationMath; +import com.craisinlord.antarchy.content.item.TemporalTunerAccess; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.entity.player.Player; import org.spongepowered.asm.mixin.Mixin; diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/PortalParticleTimeDilationMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/PortalParticleTimeDilationMixin.java deleted file mode 100644 index ec676bb8..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/PortalParticleTimeDilationMixin.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.client.ClientTimeDilationTicker; -import net.minecraft.client.particle.PortalParticle; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(PortalParticle.class) -public abstract class PortalParticleTimeDilationMixin { - @Unique - private double antarchy$timeProgress; - - @Inject(method = "tick", at = @At("HEAD"), cancellable = true) - private void antarchy$slowPortalParticle(CallbackInfo ci) { - ParticlePositionAccessor position = (ParticlePositionAccessor) (Object) this; - double rate = ClientTimeDilationTicker.rateAt(position.antarchy$getX(), position.antarchy$getY(), position.antarchy$getZ()); - if (rate >= 1.0D) { - return; - } - this.antarchy$timeProgress += rate; - if (this.antarchy$timeProgress < 1.0D) { - ci.cancel(); - } else { - this.antarchy$timeProgress -= 1.0D; - } - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/PrimedTntTimeDilationMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/PrimedTntTimeDilationMixin.java deleted file mode 100644 index cd680d01..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/PrimedTntTimeDilationMixin.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import net.minecraft.world.entity.item.PrimedTnt; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -@Mixin(PrimedTnt.class) -public abstract class PrimedTntTimeDilationMixin { - @WrapOperation( - method = "tick", - at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/item/PrimedTnt;setFuse(I)V") - ) - private void antarchy$slowFuse(PrimedTnt tnt, int fuse, Operation original) { - if (TimeDilationApi.consumeTick(tnt, "primed_tnt_fuse")) { - original.call(tnt, fuse); - } - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/ProjectileTimeDilationMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/ProjectileTimeDilationMixin.java deleted file mode 100644 index a471ed0b..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/ProjectileTimeDilationMixin.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import com.craisinlord.antarchy.content.time.TimeDilationManager; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.projectile.Projectile; -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(Projectile.class) -public abstract class ProjectileTimeDilationMixin { - @Inject(method = "setOwner", at = @At("TAIL")) - private void antarchy$inheritTimeDilation(Entity owner, CallbackInfo callbackInfo) { - if (owner != null) { - TimeDilationApi.setInheritedRate((Entity) (Object) this, TimeDilationApi.getRate(owner)); - TimeDilationManager.trackPotentiallyAffected((Entity) (Object) this); - } - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/RangedAttackGoalTimeDilationMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/RangedAttackGoalTimeDilationMixin.java deleted file mode 100644 index 1a237829..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/RangedAttackGoalTimeDilationMixin.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import net.minecraft.world.entity.Mob; -import net.minecraft.world.entity.ai.goal.RangedAttackGoal; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(RangedAttackGoal.class) -public abstract class RangedAttackGoalTimeDilationMixin { - @Shadow - @Final - private Mob mob; - - @Inject(method = "tick", at = @At("HEAD"), cancellable = true) - private void antarchy$slowRangedGoalTick(CallbackInfo ci) { - if (!TimeDilationApi.consumeTick(this.mob, "ranged_goal_tick")) { - ci.cancel(); - } - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/RangedBowAttackGoalTimeDilationMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/RangedBowAttackGoalTimeDilationMixin.java deleted file mode 100644 index 191bacff..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/RangedBowAttackGoalTimeDilationMixin.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import net.minecraft.world.entity.Mob; -import net.minecraft.world.entity.ai.goal.RangedBowAttackGoal; -import net.minecraft.world.entity.monster.Monster; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(RangedBowAttackGoal.class) -public abstract class RangedBowAttackGoalTimeDilationMixin { - @Unique - private Mob antarchy$timeDilationMob; - - @Inject(method = "(Lnet/minecraft/world/entity/monster/Monster;DIF)V", at = @At("RETURN")) - private void antarchy$captureMob(Monster mob, double speedModifier, int attackIntervalMin, float attackRadius, CallbackInfo ci) { - this.antarchy$timeDilationMob = mob; - } - - @Inject(method = "tick", at = @At("HEAD"), cancellable = true) - private void antarchy$slowRangedBowGoalTick(CallbackInfo ci) { - if (this.antarchy$timeDilationMob != null && !TimeDilationApi.consumeTick(this.antarchy$timeDilationMob, "ranged_bow_goal_tick")) { - ci.cancel(); - } - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/ReversePortalParticleTimeDilationMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/ReversePortalParticleTimeDilationMixin.java deleted file mode 100644 index a7d5aa85..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/ReversePortalParticleTimeDilationMixin.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.client.ClientTimeDilationTicker; -import net.minecraft.client.particle.ReversePortalParticle; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(ReversePortalParticle.class) -public abstract class ReversePortalParticleTimeDilationMixin { - @Unique - private double antarchy$timeProgress; - - @Inject(method = "tick", at = @At("HEAD"), cancellable = true) - private void antarchy$slowReversePortalParticle(CallbackInfo ci) { - ParticlePositionAccessor position = (ParticlePositionAccessor) (Object) this; - double rate = ClientTimeDilationTicker.rateAt(position.antarchy$getX(), position.antarchy$getY(), position.antarchy$getZ()); - if (rate >= 1.0D) { - return; - } - this.antarchy$timeProgress += rate; - if (this.antarchy$timeProgress < 1.0D) { - ci.cancel(); - } else { - this.antarchy$timeProgress -= 1.0D; - } - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/SoundEngineTimeDilationMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/SoundEngineTimeDilationMixin.java deleted file mode 100644 index d226c288..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/SoundEngineTimeDilationMixin.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.client.ClientTimeDilationTicker; -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import com.craisinlord.antarchy.content.time.TimeDilationMath; -import com.craisinlord.antarchy.content.effect.ContractedMobEffect; -import com.craisinlord.antarchy.content.effect.DilatedMobEffect; -import com.craisinlord.antarchy.content.effect.RoyalEffectHooks; -import com.craisinlord.antarchy.mixins.client.EntityBoundSoundInstanceAccessor; -import com.llamalad7.mixinextras.injector.ModifyReturnValue; -import net.minecraft.client.resources.sounds.SoundInstance; -import net.minecraft.client.sounds.ChannelAccess; -import net.minecraft.client.sounds.SoundEngine; -import net.minecraft.client.Minecraft; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.Entity; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -import java.util.Map; - -@Mixin(SoundEngine.class) -public abstract class SoundEngineTimeDilationMixin { - @Shadow @Final private Map instanceToChannel; - - @Inject(method = "tickNonPaused", at = @At("TAIL")) - private void antarchy$refreshActiveSoundPitches(CallbackInfo ci) { - if (!ClientTimeDilationTicker.hasActiveDilation()) { - return; - } - this.instanceToChannel.forEach((sound, channel) -> - channel.execute(audioChannel -> audioChannel.setPitch(this.antarchy$dilatePitch(sound.getPitch(), sound)))); - } - - @ModifyReturnValue(method = "calculatePitch", at = @At("RETURN")) - private float antarchy$dilatePitch(float pitch, SoundInstance sound) { - double rate = ClientTimeDilationTicker.rateAt(sound.getX(), sound.getY(), sound.getZ()); - if (sound instanceof EntityBoundSoundInstanceAccessor accessor) { - double entityRate = rateForEntity(accessor.antarchy$getEntity()); - rate = combineRates(rate, entityRate); - } - Minecraft minecraft = Minecraft.getInstance(); - if (minecraft.player != null) { - double listenerRate = rateForEntity(minecraft.player); - rate = combineRates(rate, listenerRate); - } - if (Math.abs(rate - TimeDilationMath.NORMAL_RATE) < 0.001D) { - return pitch; - } - return (float) (pitch * Math.max(TimeDilationMath.MIN_RATE, rate)); - } - - private static double combineRates(double first, double second) { - if (first < TimeDilationMath.NORMAL_RATE || second < TimeDilationMath.NORMAL_RATE) { - return Math.min(first, second); - } - return Math.max(first, second); - } - - private static double rateForEntity(Entity entity) { - double rate = TimeDilationApi.getRate(entity); - if (entity instanceof LivingEntity living) { - if (RoyalEffectHooks.dilatedHolder() != null && living.hasEffect(RoyalEffectHooks.dilatedHolder())) { - rate = Math.min(rate, DilatedMobEffect.rateForAmplifier( - living.getEffect(RoyalEffectHooks.dilatedHolder()).getAmplifier())); - } - if (RoyalEffectHooks.contractedHolder() != null && living.hasEffect(RoyalEffectHooks.contractedHolder())) { - rate = combineRates(rate, ContractedMobEffect.rateForAmplifier( - living.getEffect(RoyalEffectHooks.contractedHolder()).getAmplifier())); - } - } - return rate; - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/TemporalMiningSpeedMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/TemporalMiningSpeedMixin.java deleted file mode 100644 index c8dcd20d..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/TemporalMiningSpeedMixin.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.effect.ContractedMobEffect; -import com.craisinlord.antarchy.content.effect.DilatedMobEffect; -import com.craisinlord.antarchy.content.effect.RoyalEffectHooks; -import net.minecraft.world.effect.MobEffectInstance; -import net.minecraft.world.entity.player.Player; -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(Player.class) -public abstract class TemporalMiningSpeedMixin { - @Inject(method = "getDestroySpeed", at = @At("RETURN"), cancellable = true) - private void antarchy$applyTemporalMiningSpeed( - net.minecraft.world.level.block.state.BlockState state, - CallbackInfoReturnable cir) { - Player player = (Player) (Object) this; - double rate = 1.0D; - - if (RoyalEffectHooks.dilatedHolder() != null) { - MobEffectInstance dilation = player.getEffect(RoyalEffectHooks.dilatedHolder()); - if (dilation != null) { - rate = Math.min(rate, DilatedMobEffect.rateForAmplifier(dilation.getAmplifier())); - } - } - if (RoyalEffectHooks.contractedHolder() != null) { - MobEffectInstance contraction = player.getEffect(RoyalEffectHooks.contractedHolder()); - if (contraction != null) { - rate = Math.max(rate, ContractedMobEffect.rateForAmplifier(contraction.getAmplifier())); - } - } - - if (rate != 1.0D) { - cir.setReturnValue((float) (cir.getReturnValue() * rate)); - } - } -} diff --git a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/ThrowableProjectileMovementTimeDilationMixin.java b/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/ThrowableProjectileMovementTimeDilationMixin.java deleted file mode 100644 index a8e52233..00000000 --- a/common-1.21.1/src/main/java/com/craisinlord/antarchy/mixins/time/ThrowableProjectileMovementTimeDilationMixin.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.craisinlord.antarchy.mixins.time; - -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import com.craisinlord.antarchy.content.time.TimeDilationMath; -import net.minecraft.world.entity.projectile.ThrowableProjectile; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -@Mixin(ThrowableProjectile.class) -public abstract class ThrowableProjectileMovementTimeDilationMixin { - @Redirect(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/projectile/ThrowableProjectile;setPos(DDD)V")) - private void antarchy$slowPosition(ThrowableProjectile projectile, double x, double y, double z) { - double rate = Math.max(TimeDilationMath.MIN_RATE, TimeDilationApi.getRate(projectile)); - if (Math.abs(rate - TimeDilationMath.NORMAL_RATE) < 0.001D) { - projectile.setPos(x, y, z); - return; - } - projectile.setPos(projectile.getX() + (x - projectile.getX()) * rate, - projectile.getY() + (y - projectile.getY()) * rate, - projectile.getZ() + (z - projectile.getZ()) * rate); - } -} diff --git a/common-1.21.1/src/main/resources/antarchy-common.mixins.json b/common-1.21.1/src/main/resources/antarchy-common.mixins.json index b3b9de57..bb98239a 100644 --- a/common-1.21.1/src/main/resources/antarchy-common.mixins.json +++ b/common-1.21.1/src/main/resources/antarchy-common.mixins.json @@ -5,16 +5,9 @@ "compatibilityLevel": "JAVA_21", "mixins": [ "AbstractMinecartMixin", - "AbstractArrowAccessor", - "PortalGunEntityCollisionMixin", - "PortalGunEntityInWallMixin", - "PortalGunPlayerMovePacketMixin", - "PortalGunProjectileHitMixin", "PortalGunItemEntityRemovalMixin", "RoyalBossMoveScanMixin", - "ServerGamePacketListenerTeleportAccessor", "PortalGunZombieMixin", - "FallingBlockEntityAccessor", "AccessorFireBlock", "AccessorRangedAttribute", "AmericanFoodConsumeMixin", @@ -72,56 +65,14 @@ "SquidzookaMultishotMixin", "TigerEyeCamouflageMixin", "TigerEyeVisibilityMixin", - "gravity.ChunkMapAccessor", "gravity.FallingBlockEntityBlockDataMixin", "gravity.PlayerAttackMixin", "gravity.ServerChunkCacheAccessor", - "gravity.ServerEntityAccessor", - "gravity.TrackedEntityAccessor", "compat.biolith.MultiNoiseBiomeSourceNullGuardMixin", - "multipart.EntityMultipartLifecycleMixin", - "time.EntityDeltaMovementTimeDilationMixin", - "time.EntityMoveTimeDilationMixin", - "time.EntityTimeDilationStateMixin", - "time.PlayerTemporalTunerMixin", - "time.EntityRotationTimeDilationMixin", - "time.EntityCrouchTimeDilationMixin", - "time.LivingEntityKnockbackTimeDilationMixin", - "time.CreeperTimeDilationMixin", - "time.EndCrystalTimeDilationMixin", - "time.LivingEntityTimeDilationMixin", - "time.LivingEntityTimeDilationCleanupMixin", - "time.LivingEntityAttackCooldownTimeDilationMixin", - "time.PlayerCooldownTimeDilationMixin", - "time.LivingEntityFoodUseTimeDilationMixin", - "time.TemporalMiningSpeedMixin", - "time.LivingEntityChronosphereEquipmentMixin", - "time.LookControlTimeDilationMixin", - "time.MeleeAttackGoalTimeDilationMixin", - "time.MobAttackTimeDilationMixin", - "time.PrimedTntTimeDilationMixin", - "time.AbstractArrowMovementTimeDilationMixin", - "time.ThrowableProjectileMovementTimeDilationMixin", - "time.HurtingProjectileMovementTimeDilationMixin", - "time.ProjectileTimeDilationMixin", - "time.AbstractArrowActionTimeDilationMixin", - "time.RangedAttackGoalTimeDilationMixin", - "time.RangedBowAttackGoalTimeDilationMixin", - "time.GeckoLibAnimationControllerTimeDilationMixin" + "time.PlayerTemporalTunerMixin" ], "client": [ - "client.CameraBasisAccessor", "compat.stellarview.StellarViewLunaDirectionMixin", - "client.LevelRendererPortalViewAreaAccessor", - "client.LevelRendererPortalViewAreaMixin", - "client.LevelRendererPortalLifecycleMixin", - "client.PortalViewChunkCacheMixin", - "client.LevelRendererPortalSceneInvoker", - "client.SectionOcclusionGraphPortalMixin", - "client.MinecraftPortalTransparencyMixin", - "client.EntityRenderDispatcherPortalMixin", - "client.BlockEntityRenderDispatcherPortalMixin", - "client.MinecraftMainRenderTargetAccessor", "client.AbstractMinecartRendererMixin", "client.EntityLightProbeMixin", "client.CustomBossBarMixin", @@ -134,18 +85,12 @@ "client.ElytraModelAccessor", "client.FrogRendererElythiaMixin", "client.GameRendererSwingThroughGrassMixin", - "client.EntityBoundSoundInstanceAccessor", "client.InventoryScreenRotationBypassMixin", "client.ExperimentalSettingsPopupMixin", "client.KrakensGraspChargePoseMixin", "client.MountedVehicleCameraMixin", "client.ParalyzedMouseTurnMixin", - "client.LocalPlayerPortalMixin", - "client.LocalPlayerPortalTransitMixin", - "client.PortalGunEntityTeleportPacketMixin", "client.PortalGunZoomFovMixin", - "client.LivingEntityPortalLerpAccessor", - "client.ScreenEffectRendererPortalMixin", "client.ScreenEffectRendererFireVisualMixin", "client.GlimmeringTranslucencyMixin", "client.HoverboardRiderPoseMixin", @@ -155,15 +100,7 @@ "client.TigerEyeNameTagHideMixin", "client.TemporalContractionLivingRendererMixin", "client.WolfRendererGrimMixin", - "gravity.client.FallingBlockRendererBlockEntityMixin", - "time.LivingEntityRendererAnimationTimeDilationMixin", - "time.ParticleTimeDilationMixin", - "time.PortalParticleTimeDilationMixin", - "time.ReversePortalParticleTimeDilationMixin", - "time.SoundEngineTimeDilationMixin", - "time.ItemEntityRotationTimeDilationMixin", - "time.ItemEntityRendererTimeDilationMixin", - "time.ParticlePositionAccessor" + "gravity.client.FallingBlockRendererBlockEntityMixin" ], "injectors": { "defaultRequire": 1 diff --git a/common-1.21.1/src/main/resources/antarchy-sodium.mixins.json b/common-1.21.1/src/main/resources/antarchy-sodium.mixins.json deleted file mode 100644 index 9f091496..00000000 --- a/common-1.21.1/src/main/resources/antarchy-sodium.mixins.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "required": false, - "package": "com.craisinlord.antarchy.mixins", - "plugin": "com.craisinlord.antarchy.mixins.AntarchyMixinPlugin", - "compatibilityLevel": "JAVA_21", - "client": [ - "compat.sodium.SodiumWorldRendererAccessor", - "compat.sodium.RenderSectionManagerAccessor", - "compat.sodium.RenderSectionManagerPortalTasksMixin" - ], - "injectors": { - "defaultRequire": 1 - }, - "minVersion": "0.8" -} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/animations/portal_gun_portal.animation.json b/common-1.21.1/src/main/resources/assets/antarchy/animations/portal_gun_portal.animation.json deleted file mode 100644 index 02c2cc9f..00000000 --- a/common-1.21.1/src/main/resources/assets/antarchy/animations/portal_gun_portal.animation.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "format_version": "1.8.0", - "animations": { - "idle": { - "loop": true, - "animation_length": 4.0, - "bones": {} - }, - "open": { - "loop": false, - "animation_length": 0.5, - "bones": { - "Root": { - "scale": { - "0.0": {"vector": [0, 0, 0]}, - "0.35": {"vector": [1.15, 1.15, 1.15]}, - "0.5": {"vector": [1, 1, 1]} - } - } - } - }, - "close": { - "loop": false, - "animation_length": 0.4, - "bones": { - "Root": { - "scale": { - "0.0": {"vector": [1, 1, 1]}, - "0.4": {"vector": [0, 0, 0]} - } - } - } - } - } -} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/geo/portal_gun_portal.geo.json b/common-1.21.1/src/main/resources/assets/antarchy/geo/portal_gun_portal.geo.json deleted file mode 100644 index 386019dc..00000000 --- a/common-1.21.1/src/main/resources/assets/antarchy/geo/portal_gun_portal.geo.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "format_version": "1.12.0", - "minecraft:geometry": [ - { - "description": { - "identifier": "geometry.portal_gun_portal", - "texture_width": 64, - "texture_height": 64, - "visible_bounds_width": 4, - "visible_bounds_height": 4, - "visible_bounds_offset": [0, 0, 0] - }, - "bones": [ - { - "name": "Root", - "pivot": [0, 0, 0] - }, - { - "name": "Portal_Layer", - "parent": "Root", - "pivot": [0, 0, -0.4], - "cubes": [ - { - "origin": [-8, -16, -0.4], - "size": [16, 32, 0], - "uv": { - "north": {"uv": [0, 0], "uv_size": [64, 64]}, - "south": {"uv": [0, 0], "uv_size": [64, 64]} - } - } - ] - }, - { - "name": "Portal_Layer2", - "parent": "Root", - "pivot": [0, 0, 0.4], - "cubes": [ - { - "origin": [-8, -16, 0.4], - "size": [16, 32, 0], - "uv": { - "north": {"uv": [0, 0], "uv_size": [64, 64]}, - "south": {"uv": [0, 0], "uv_size": [64, 64]} - } - } - ] - } - ] - } - ] -} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/lang/de_de.json b/common-1.21.1/src/main/resources/assets/antarchy/lang/de_de.json index 2f1e98df..58b80592 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/lang/de_de.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/lang/de_de.json @@ -527,7 +527,6 @@ "effect.antarchy.paralyzed": "Gelähmt", "effect.antarchy.paralyzed.description": "Verhindert, dass sich Ziele bewegen.", "effect.antarchy.commanded.description": "Kämpft für den Spieler, der das Ziel kommandiert hat.", - "effect.antarchy.dilated.description": "Verlangsamt den Zeitablauf für das betroffene Wesen.", "effect.antarchy.stinky": "Stinkend", "effect.antarchy.stinky.description": "Vertreibt passive und neutrale Kreaturen und zieht Gliederfüßer an.", "effect.antarchy.gooped.description": "Verlangsamt Bewegung und Angriffsgeschwindigkeit.", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/lang/en_us.json b/common-1.21.1/src/main/resources/assets/antarchy/lang/en_us.json index 2f5affd4..4a366793 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/lang/en_us.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/lang/en_us.json @@ -802,10 +802,6 @@ "effect.antarchy.paralyzed.description": "Prevents targets from moving.", "effect.antarchy.commanded": "Commanded", "effect.antarchy.commanded.description": "Fights for the player who commanded it.", - "effect.antarchy.dilated": "Temporal Dilation", - "effect.antarchy.dilated.description": "Slows the passage of time for the affected entity.", - "effect.antarchy.contracted": "Temporal Contraction", - "effect.antarchy.contracted.description": "Speeds the passage of time for the affected entity.", "effect.antarchy.stinky": "Stinky", "effect.antarchy.stinky.description": "Repels passive and neutral mobs, attracts arthropods.", "effect.antarchy.gooped": "Gooped", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/lang/es_es.json b/common-1.21.1/src/main/resources/assets/antarchy/lang/es_es.json index d546ce78..1951fd9c 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/lang/es_es.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/lang/es_es.json @@ -527,7 +527,6 @@ "effect.antarchy.paralyzed": "Paralizado", "effect.antarchy.paralyzed.description": "Impide que los objetivos se muevan.", "effect.antarchy.commanded.description": "Lucha por el jugador que lo comandó.", - "effect.antarchy.dilated.description": "Ralentiza el paso del tiempo para la criatura afectada.", "effect.antarchy.stinky": "Apestoso", "effect.antarchy.stinky.description": "Ahuyenta a las criaturas pasivas y neutrales, y atrae a los artrópodos.", "effect.antarchy.gooped.description": "Reduce la velocidad de movimiento y de ataque.", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/lang/fr_fr.json b/common-1.21.1/src/main/resources/assets/antarchy/lang/fr_fr.json index 1608afe0..a37b67e2 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/lang/fr_fr.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/lang/fr_fr.json @@ -527,7 +527,6 @@ "effect.antarchy.paralyzed": "Paralysé", "effect.antarchy.paralyzed.description": "Empêche les cibles de se déplacer.", "effect.antarchy.commanded.description": "Combat pour le joueur qui l’a commandé.", - "effect.antarchy.dilated.description": "Ralentit le passage du temps pour l’entité affectée.", "effect.antarchy.stinky": "Puant", "effect.antarchy.stinky.description": "Repousse les créatures passives et neutres, et attire les arthropodes.", "effect.antarchy.gooped.description": "Ralentit la vitesse de déplacement et d'attaque.", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/lang/it_it.json b/common-1.21.1/src/main/resources/assets/antarchy/lang/it_it.json index f1529967..64146477 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/lang/it_it.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/lang/it_it.json @@ -527,7 +527,6 @@ "effect.antarchy.paralyzed": "Paralizzato", "effect.antarchy.paralyzed.description": "Impedisce ai bersagli di muoversi.", "effect.antarchy.commanded.description": "Combatte per il giocatore che lo ha comandato.", - "effect.antarchy.dilated.description": "Rallenta il passare del tempo per l’entità colpita.", "effect.antarchy.stinky": "Puzzolente", "effect.antarchy.stinky.description": "Respinge le creature passive e neutrali e attira gli artropodi.", "effect.antarchy.gooped.description": "Riduce la velocità di movimento e di attacco.", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/lang/ja_jp.json b/common-1.21.1/src/main/resources/assets/antarchy/lang/ja_jp.json index 9e08d8a0..59161e75 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/lang/ja_jp.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/lang/ja_jp.json @@ -527,7 +527,6 @@ "effect.antarchy.paralyzed": "麻痺", "effect.antarchy.paralyzed.description": "対象が動けなくなります。", "effect.antarchy.commanded.description": "命令したプレイヤーのために戦います。", - "effect.antarchy.dilated.description": "影響を受けたエンティティの時間の流れを遅くします。", "effect.antarchy.stinky": "悪臭", "effect.antarchy.stinky.description": "友好的および中立のMobを遠ざけ、節足動物を引き寄せます。", "effect.antarchy.gooped.description": "移動速度と攻撃速度を低下させます。", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/lang/ko_kr.json b/common-1.21.1/src/main/resources/assets/antarchy/lang/ko_kr.json index d015ff0f..0bc0c270 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/lang/ko_kr.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/lang/ko_kr.json @@ -527,7 +527,6 @@ "effect.antarchy.paralyzed": "마비", "effect.antarchy.paralyzed.description": "대상이 움직이지 못하게 합니다.", "effect.antarchy.commanded.description": "명령한 플레이어를 위해 싸웁니다.", - "effect.antarchy.dilated.description": "영향받은 개체의 시간 흐름을 늦춥니다.", "effect.antarchy.stinky": "악취", "effect.antarchy.stinky.description": "수동적 및 중립적 몹을 쫓아내고 절지동물을 끌어들입니다.", "effect.antarchy.gooped.description": "이동 속도와 공격 속도를 늦춥니다.", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/lang/pt_br.json b/common-1.21.1/src/main/resources/assets/antarchy/lang/pt_br.json index dbbdf048..487f343b 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/lang/pt_br.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/lang/pt_br.json @@ -527,7 +527,6 @@ "effect.antarchy.paralyzed": "Paralisado", "effect.antarchy.paralyzed.description": "Impede que os alvos se movam.", "effect.antarchy.commanded.description": "Luta pelo jogador que o comandou.", - "effect.antarchy.dilated.description": "Diminui a passagem do tempo para a entidade afetada.", "effect.antarchy.stinky": "Fedido", "effect.antarchy.stinky.description": "Afasta mobs passivos e neutros e atrai artrópodes.", "effect.antarchy.gooped.description": "Reduz a velocidade de movimento e de ataque.", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/lang/ru_ru.json b/common-1.21.1/src/main/resources/assets/antarchy/lang/ru_ru.json index 0d158572..23ae1ec1 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/lang/ru_ru.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/lang/ru_ru.json @@ -498,7 +498,6 @@ "effect.antarchy.paralyzed": "Паралич", "effect.antarchy.paralyzed.description": "Не дает целям двигаться.", "effect.antarchy.commanded.description": "Сражается за игрока, который им командует.", - "effect.antarchy.dilated.description": "Замедляет течение времени для существа под действием эффекта.", "effect.antarchy.stinky": "Вонючесть", "effect.antarchy.stinky.description": "Отпугивает мирных и нейтральных мобов, но притягивает членистоногих.", "effect.antarchy.gooped.description": "Замедляет движение и скорость атаки.", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/lang/zh_cn.json b/common-1.21.1/src/main/resources/assets/antarchy/lang/zh_cn.json index 773b1a7a..1fca91fa 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/lang/zh_cn.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/lang/zh_cn.json @@ -527,7 +527,6 @@ "effect.antarchy.paralyzed": "麻痹", "effect.antarchy.paralyzed.description": "阻止目标移动。", "effect.antarchy.commanded.description": "为命令它的玩家而战。", - "effect.antarchy.dilated.description": "减缓受影响生物的时间流逝。", "effect.antarchy.stinky": "臭气", "effect.antarchy.stinky.description": "驱赶被动和中立生物,吸引节肢生物。", "effect.antarchy.gooped.description": "减缓移动速度和攻击速度。", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/lang/zh_tw.json b/common-1.21.1/src/main/resources/assets/antarchy/lang/zh_tw.json index d3f6d342..fb427e91 100644 --- a/common-1.21.1/src/main/resources/assets/antarchy/lang/zh_tw.json +++ b/common-1.21.1/src/main/resources/assets/antarchy/lang/zh_tw.json @@ -527,7 +527,6 @@ "effect.antarchy.paralyzed": "麻痺", "effect.antarchy.paralyzed.description": "阻止目標移動。", "effect.antarchy.commanded.description": "為命令它的玩家而戰。", - "effect.antarchy.dilated.description": "減緩受影響生物的時間流逝。", "effect.antarchy.stinky": "臭氣", "effect.antarchy.stinky.description": "驅趕被動與中立生物,吸引節肢生物。", "effect.antarchy.gooped.description": "降低移動速度與攻擊速度。", diff --git a/common-1.21.1/src/main/resources/assets/antarchy/shaders/core/portal_view.fsh b/common-1.21.1/src/main/resources/assets/antarchy/shaders/core/portal_view.fsh deleted file mode 100644 index 79b13029..00000000 --- a/common-1.21.1/src/main/resources/assets/antarchy/shaders/core/portal_view.fsh +++ /dev/null @@ -1,12 +0,0 @@ -#version 150 - -uniform sampler2D Sampler0; -uniform vec4 ColorModulator; - -noperspective in vec2 portalUv; -out vec4 fragColor; - -void main() { - vec4 color = texture(Sampler0, portalUv); - fragColor = vec4(color.rgb, 1.0) * ColorModulator; -} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/shaders/core/portal_view.json b/common-1.21.1/src/main/resources/assets/antarchy/shaders/core/portal_view.json deleted file mode 100644 index 8ff4de2b..00000000 --- a/common-1.21.1/src/main/resources/assets/antarchy/shaders/core/portal_view.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "vertex": "antarchy:portal_view", - "fragment": "antarchy:portal_view", - "samplers": [ - { "name": "Sampler0" } - ], - "attributes": [ - "Position", - "UV0" - ], - "uniforms": [ - { "name": "ColorModulator", "type": "float", "count": 4, "values": [ 1.0, 1.0, 1.0, 1.0 ] } - ] -} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/shaders/core/portal_view.vsh b/common-1.21.1/src/main/resources/assets/antarchy/shaders/core/portal_view.vsh deleted file mode 100644 index b6de02e7..00000000 --- a/common-1.21.1/src/main/resources/assets/antarchy/shaders/core/portal_view.vsh +++ /dev/null @@ -1,11 +0,0 @@ -#version 150 - -in vec3 Position; -in vec2 UV0; - -noperspective out vec2 portalUv; - -void main() { - gl_Position = vec4(Position, 1.0); - portalUv = UV0; -} diff --git a/common-1.21.1/src/main/resources/assets/antarchy/textures/mob_effect/contracted.png b/common-1.21.1/src/main/resources/assets/antarchy/textures/mob_effect/contracted.png deleted file mode 100644 index 3a0775cc75b4028887bb52a309a487d2a9984f84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 440 zcmV;p0Z0CcP)Px$a!Eu%R5*>zlf6y?K@^3*F+2bXvK2AG1VUnGYhyF>3agEUg_>B?(14ANwTV*N z5DH&l*I20~oe6;i5`qmskvABNWrkT8sVuzBX70{@bM85_@JA)Ky^O+=1~}YXZQH%; zdA~_DXVtRKRq}Q{?@n>orso5C=}}nHt_rsdc;20+V3~C#J{25auM|Br=!`T{1w^6N zs@)eGii{_w}u5TL^0b*wI*; z7lm2_NEIaG7&Q*S^m13pm{J8qpoK4~WMd;>(lec_vSq^$yrsdSH`cGCh_Z+9ZR+Q zLa^l?#nFV}c)`Wlf#o!xJ}DNm7BUEW`@} iQVFt5#Vr@`f9nS;%Cs!Vz_k$o0000Px$c}YY;R5*>5lA&wEKorKmj=IT)R@IEapwL28XC_KTGgDZoshTU5F;koDOlRT} z`VY(u1~X%#YGyGDY!C>9nW%(KMrWdX*LS&_*k_Wvd*AQg`x2lg*Y>ObtVsv;jb3Lc z8EF02xdPf;yj1{Tw!4yn)?|$HP&!vYWZ)*(_N%nW;M#sg#%X`1)GMRa+a(h{`FUDo z5~x|vC@nH!tV;)!I--22<;RbEq(z3&+JG~+Fc=%sMO4RqP5cIEw!0$0Yj-K#)|vng ztR3hs6Ll24k`XtOR$idp*N(=;#~^(_@86xdr3Hzw(;`EhhhhW*^g6?RSKe;TN0LBE z8KH-va@d*x=C&*T8R|CncA%t;^rKDtGpxKo8f7pxFj^Y|vho7$?;${O9*R%^UN#K{L@-{=Z{>SQ8A%WY pL@)r-?Hm9=foMT>AeRn6`T^HyuGZe_%AEiJ002ovPDHLkV1lSz#vcFx diff --git a/common-1.21.1/src/main/resources/data/antarchy/advancement/enter_the_speed_force.json b/common-1.21.1/src/main/resources/data/antarchy/advancement/enter_the_speed_force.json index 34f3141d..42d2f4f1 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/advancement/enter_the_speed_force.json +++ b/common-1.21.1/src/main/resources/data/antarchy/advancement/enter_the_speed_force.json @@ -4,7 +4,7 @@ "become_contracted": { "conditions": { "effects": { - "antarchy:contracted": {} + "anthology:contracted": {} } }, "trigger": "minecraft:effects_changed" diff --git a/common-1.21.1/src/main/resources/data/antarchy/advancement/probably_wondering_how_i_got_here.json b/common-1.21.1/src/main/resources/data/antarchy/advancement/probably_wondering_how_i_got_here.json index a9e78b70..d30aca49 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/advancement/probably_wondering_how_i_got_here.json +++ b/common-1.21.1/src/main/resources/data/antarchy/advancement/probably_wondering_how_i_got_here.json @@ -4,7 +4,7 @@ "become_dilated": { "conditions": { "effects": { - "antarchy:dilated": {} + "anthology:dilated": {} } }, "trigger": "minecraft:effects_changed" diff --git a/common-1.21.1/src/main/resources/data/antarchy/advancement/temporal_contradiction.json b/common-1.21.1/src/main/resources/data/antarchy/advancement/temporal_contradiction.json index f75d40bc..060d559e 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/advancement/temporal_contradiction.json +++ b/common-1.21.1/src/main/resources/data/antarchy/advancement/temporal_contradiction.json @@ -4,8 +4,8 @@ "become_contradictory": { "conditions": { "effects": { - "antarchy:contracted": {}, - "antarchy:dilated": {} + "anthology:contracted": {}, + "anthology:dilated": {} } }, "trigger": "minecraft:effects_changed" diff --git a/common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/dilated_blacklist.json b/common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/dilated_blacklist.json index 40b41861..c3d9a718 100644 --- a/common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/dilated_blacklist.json +++ b/common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/dilated_blacklist.json @@ -1,6 +1,6 @@ { "replace": false, "values": [ - "#antarchy:time_dilation_immune" + "#anthology:time_dilation_immune" ] } diff --git a/common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/time_dilation_immune.json b/common-1.21.1/src/main/resources/data/anthology/tags/entity_type/time_dilation_immune.json similarity index 100% rename from common-1.21.1/src/main/resources/data/antarchy/tags/entity_type/time_dilation_immune.json rename to common-1.21.1/src/main/resources/data/anthology/tags/entity_type/time_dilation_immune.json diff --git a/fabric-1.21.1/build.gradle b/fabric-1.21.1/build.gradle index 9edffc2a..c156da1b 100644 --- a/fabric-1.21.1/build.gradle +++ b/fabric-1.21.1/build.gradle @@ -122,7 +122,7 @@ tasks.named('processResources', ProcessResources).configure { // does — inject the refmap key into fabric's own copy of the shared file after copying. tasks.named('processResources', ProcessResources).configure { doLast { - ['antarchy-common.mixins.json', 'antarchy-sodium.mixins.json'].each { configName -> + ['antarchy-common.mixins.json'].each { configName -> var mixinConfig = new File(destinationDir, configName) var json = new groovy.json.JsonSlurper().parse(mixinConfig) json.put('refmap', 'antarchy.mixins.refmap.json') diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabric.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabric.java index fdb93e57..a49e6275 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabric.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabric.java @@ -153,7 +153,6 @@ public final class AntarchyFabric implements ModInitializer { GameRuleRegistry.register(name, category, GameRuleFactory.createBooleanRule(defaultValue)) ); AntarchyFabricNetworking.register(); - AntarchyFabricNetworking.bootstrapMultipartCommon(); AntarchyConfigModuleFabric.init(); AntarchyFabricContent.register(); registerWorldgenFeatures(); diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java index 5a4021eb..bcba4aa0 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java @@ -18,7 +18,6 @@ import com.craisinlord.antarchy.content.entity.vortex.VortexChargeProjectileEnti import com.craisinlord.antarchy.content.entity.vortex.VortexEntity; import com.craisinlord.antarchy.content.item.ScorpionWhipTetherSync; import com.craisinlord.antarchy.content.item.WormHookTetherSync; -import com.craisinlord.antarchy.content.network.ImpactShakeSync; import com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakeSync; import com.craisinlord.antarchy.content.network.HordeIntensitySync; import com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageSync; @@ -370,7 +369,6 @@ public final class AntarchyFabricContent { AntarchyObjects.setLucid(AntarchyFabricEntities.LUCID); AntarchyObjects.setVortex(AntarchyFabricEntities.VORTEX); AntarchyObjects.setWindVortex(() -> AntarchyFabricEntities.WIND_VORTEX.get()); - AntarchyObjects.setTimeDilationField(() -> AntarchyFabricEntities.TIME_DILATION_FIELD.get()); AntarchyObjects.setRoyalBlackHole(() -> AntarchyFabricEntities.ROYAL_BLACK_HOLE.get()); AntarchyObjects.setRoyalAssailantBlackHole(() -> AntarchyFabricEntities.ROYAL_ASSAILANT_BLACK_HOLE.get()); AntarchyObjects.setVortexChargeProjectile(() -> AntarchyFabricEntities.VORTEX_CHARGE_PROJECTILE.get()); @@ -556,17 +554,10 @@ public final class AntarchyFabricContent { WormHookTetherSync.setSink(AntarchyFabricNetworking::syncWormHookTether); HerculesBeetleImpactShakeSync.setSink((player, ticks) -> net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking.send(player, new com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakePayload(ticks))); com.craisinlord.antarchy.content.network.KingJudgmentFlashSync.setSink((player, ticks) -> net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking.send(player, new com.craisinlord.antarchy.content.network.KingJudgmentFlashPayload(ticks))); - ImpactShakeSync.setSink((player, payload) -> net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking.send(player, payload)); HordeIntensitySync.setSink((player, payload) -> net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking.send(player, payload)); 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.time.TimeDilationApi.setSyncDispatcher( - com.craisinlord.antarchy.fabric.network.AntarchyFabricTimeDilationNetworking::syncRate - ); - com.craisinlord.antarchy.content.time.TimeDilationApi.setFieldSyncDispatcher( - com.craisinlord.antarchy.fabric.network.AntarchyFabricTimeDilationNetworking::syncFields - ); AntarchyFabricMisc.POI_TYPES.register(); AntarchyFabricMisc.VILLAGER_PROFESSIONS.register(); AntarchyFabricEvents.register(); diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java index b71e62b7..df13e7e4 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java @@ -24,16 +24,11 @@ import com.craisinlord.antarchy.content.command.CaterpillarCommand; import com.craisinlord.antarchy.content.command.DimensionalTearCommand; import com.craisinlord.antarchy.content.command.QueenLocateCommand; import com.craisinlord.antarchy.content.command.RoyalCommand; -import com.craisinlord.antarchy.content.time.TimeDilationCommand; -import com.craisinlord.antarchy.content.time.TimeDilationManager; -import com.craisinlord.antarchy.content.time.ChronosphereManager; import com.craisinlord.antarchy.content.item.WormHookTetherManager; import com.craisinlord.antarchy.content.entity.trades.ComputerScientistTradeManager; import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisUndersideManager; import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; import net.fabricmc.fabric.api.entity.event.v1.ServerLivingEntityEvents; -import net.fabricmc.fabric.api.entity.event.v1.ServerEntityWorldChangeEvents; -import net.fabricmc.fabric.api.entity.event.v1.ServerPlayerEvents; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; @@ -80,29 +75,13 @@ public final class AntarchyFabricEvents { ServerLifecycleEvents.SERVER_STOPPING.register(server -> com.craisinlord.antarchy.content.entity.ant.AntArrivalScheduler.clear()); ServerLifecycleEvents.SERVER_STOPPING.register(server -> com.craisinlord.antarchy.content.portalgun.PortalGunMoonAimSync.clear()); ServerPlayConnectionEvents.JOIN.register((handler, sender, server) -> { - ChronosphereManager.refresh(handler.player); - TimeDilationManager.resyncPersistentEffects(handler.player); PortalGunSavedData.clearMissingGuns(handler.player); }); - ServerPlayerEvents.AFTER_RESPAWN.register((oldPlayer, newPlayer, alive) -> { - ChronosphereManager.refresh(newPlayer); - TimeDilationManager.resyncPersistentEffects(newPlayer); - }); - ServerEntityWorldChangeEvents.AFTER_PLAYER_CHANGE_WORLD.register((player, origin, destination) -> ChronosphereManager.refresh(player)); - net.fabricmc.fabric.api.networking.v1.EntityTrackingEvents.START_TRACKING.register((trackedEntity, player) -> { - if (trackedEntity instanceof com.craisinlord.antarchy.content.time.TimeDilationEntityAccess access - && player instanceof ServerPlayer serverPlayer) { - com.craisinlord.antarchy.fabric.network.AntarchyFabricTimeDilationNetworking.syncRateToPlayer( - serverPlayer, trackedEntity, access.antarchy$getTimeDilationRate() - ); - } - }); CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> { CavarynCommand.register(dispatcher); CaterpillarCommand.register(dispatcher); DimensionalTearCommand.register(dispatcher); QueenLocateCommand.register(dispatcher); - TimeDilationCommand.register(dispatcher); RoyalCommand.register(dispatcher); com.craisinlord.antarchy.content.command.PortalGunCommand.register(dispatcher); }); @@ -224,7 +203,6 @@ public final class AntarchyFabricEvents { WormHookTetherManager.tick(player); } } - TimeDilationManager.tickServer(server); com.craisinlord.antarchy.content.entity.ant.AntArrivalScheduler.tick(server); invertedPlayers.retainAll(activeThisTick); }); diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClient.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClient.java index afe2ba83..625b3584 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClient.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClient.java @@ -24,11 +24,10 @@ public final class AntarchyFabricClient implements ClientModInitializer { @Override public void onInitializeClient() { com.craisinlord.antarchy.Antarchy.physicalClient = true; - com.craisinlord.antarchy.content.movement.AntarchyGravityHooks.registerClient(); + com.craisinlord.antarchy.content.AntarchyAnthologyHooks.registerClient(); ModelLoadingPlugin.register(plugin -> plugin.addModels(SeparateLargeItemModels.all())); ClientTickEvents.END_CLIENT_TICK.register(client -> QueenMusicHandler.tick(client, AntarchyFabricSounds.THE_QUEEN.get())); AntarchyFabricClientNetworking.register(); - AntarchyFabricClientNetworking.bootstrapMultipartClient(); AntarchyFabricClientBootstrap.register(); AntarchyComputerGames.register(); ResourceManagerHelper.get(PackType.CLIENT_RESOURCES).registerReloadListener(new IdentifiableResourceReloadListener() { diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java index 801772d8..def93168 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java @@ -5,19 +5,16 @@ import com.craisinlord.antarchy.fabric.registry.AntarchyFabricItems; import com.craisinlord.antarchy.fabric.registry.AntarchyFabricMisc; import com.craisinlord.antarchy.Antarchy; -import com.craisinlord.antarchy.content.client.CameraShakeClientState; import com.craisinlord.antarchy.content.client.AntarchyArchivePreviews; import com.craisinlord.antarchy.content.client.HerculesBeetleImpactShakeClientState; import com.craisinlord.antarchy.content.client.HordeClientState; import com.craisinlord.antarchy.content.client.KingJudgmentFlashClientState; -import com.craisinlord.antarchy.content.client.PortalGunRollClientState; import com.craisinlord.antarchy.content.client.SizeRaySoundHandler; import com.craisinlord.antarchy.content.client.TigerEyeClientHooks; import com.craisinlord.antarchy.content.client.renderer.*; import com.craisinlord.antarchy.content.client.particle.*; import com.craisinlord.antarchy.content.client.renderer.AntiwaterFluidRenderer; import com.craisinlord.antarchy.fabric.AntarchyFabricContent; -import com.craisinlord.antarchy.fabric.client.renderer.MultipartPartRenderer; import net.fabricmc.fabric.api.client.rendering.v1.LivingEntityFeatureRendererRegistrationCallback; import net.minecraft.world.entity.EntityType; import net.minecraft.client.renderer.blockentity.VaultRenderer; @@ -28,7 +25,6 @@ import net.fabricmc.fabric.api.client.render.fluid.v1.FluidRenderHandlerRegistry import net.fabricmc.fabric.api.client.particle.v1.ParticleFactoryRegistry; import net.fabricmc.fabric.api.client.rendering.v1.BlockEntityRendererRegistry; import net.fabricmc.fabric.api.client.rendering.v1.ColorProviderRegistry; -import net.fabricmc.fabric.api.client.rendering.v1.CoreShaderRegistrationCallback; import net.fabricmc.fabric.api.client.rendering.v1.EntityModelLayerRegistry; import net.fabricmc.fabric.api.client.rendering.v1.EntityRendererRegistry; import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback; @@ -38,7 +34,6 @@ import net.minecraft.client.model.ChestBoatModel; import net.minecraft.client.gui.screens.MenuScreens; import net.minecraft.client.renderer.BiomeColors; import net.minecraft.client.renderer.RenderType; -import com.mojang.blaze3d.vertex.DefaultVertexFormat; import net.minecraft.client.renderer.texture.TextureAtlas; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; import net.minecraft.client.renderer.blockentity.CampfireRenderer; @@ -68,18 +63,6 @@ public final class AntarchyFabricClientBootstrap { } public static void register() { - CoreShaderRegistrationCallback.EVENT.register(context -> { - PortalGunPortalViewRenderer.clearPortalViewShader(); - try { - context.register( - ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "portal_view"), - DefaultVertexFormat.POSITION_TEX, - PortalGunPortalViewRenderer::setPortalViewShader - ); - } catch (java.io.IOException | RuntimeException exception) { - Antarchy.LOGGER.error("Failed to register portal view shader", exception); - } - }); AntarchyArchivePreviews.register(); AntarchyKeyBindings.register(); MenuScreens.register(AntarchyFabricMisc.DORRIE_INVENTORY_MENU.get(), com.craisinlord.antarchy.content.client.screen.DorrieInventoryScreen::new); @@ -153,7 +136,6 @@ public final class AntarchyFabricClientBootstrap { EntityRendererRegistry.register(AntarchyFabricEntities.DR_TRAYAURUS.get(), context -> new DrTrayaurusRenderer(context, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/dr_trayaurus.png"))); EntityRendererRegistry.register(AntarchyFabricEntities.STRATOSHARK.get(), context -> withTemporalGeoLayer(new StratosharkRenderer(context))); EntityRendererRegistry.register(AntarchyFabricEntities.KRAKEN.get(), context -> withTemporalGeoLayer(new KrakenRenderer(context))); - EntityRendererRegistry.register(AntarchyFabricEntities.KRAKEN_PART.get(), MultipartPartRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.TENTACLE.get(), com.craisinlord.antarchy.content.client.renderer.TentacleRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.KRAKENS_GRASP_TRIDENT.get(), com.craisinlord.antarchy.content.client.renderer.KrakensGraspThrownTridentRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.MISSILE_SQUID.get(), context -> withTemporalGeoLayer(new MissileSquidRenderer(context))); @@ -177,7 +159,6 @@ public final class AntarchyFabricClientBootstrap { EntityRendererRegistry.register(AntarchyFabricEntities.LUCID_PEARL_PROJECTILE.get(), ThrownItemRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.VORTEX_CHARGE_PROJECTILE.get(), ThrownItemRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.WIND_VORTEX.get(), WindVortexRenderer::new); - EntityRendererRegistry.register(AntarchyFabricEntities.TIME_DILATION_FIELD.get(), TimeDilationFieldRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.ROYAL_BLACK_HOLE.get(), com.craisinlord.antarchy.content.client.renderer.RoyalBlackHoleRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.ROYAL_ASSAILANT_BLACK_HOLE.get(), com.craisinlord.antarchy.content.client.renderer.RoyalAssailantBlackHoleRenderer::new); EntityRendererRegistry.register(AntarchyFabricEntities.CRITTER_CAGE_PROJECTILE.get(), ThrownItemRenderer::new); @@ -571,11 +552,9 @@ public final class AntarchyFabricClientBootstrap { private static void registerClientCallbacks() { TigerEyeClientHooks.setCamouflageKeyTextSupplier(() -> AntarchyKeyBindings.TIGERS_EYE_CAMOUFLAGE.getTranslatedKeyMessage()); ClientTickEvents.END_CLIENT_TICK.register(client -> { - CameraShakeClientState.tick(); HerculesBeetleImpactShakeClientState.tick(); KingJudgmentFlashClientState.tick(); HordeClientState.tick(); - PortalGunRollClientState.tick(client); if (client.player != null) { ParalyzedClientHandler.clampPlayerInput(client.player); } @@ -595,9 +574,6 @@ public final class AntarchyFabricClientBootstrap { RoyalMountClientHandler.tick(); GiantFryingPanClientHandler.tick(); SizeRaySoundHandler.tick(client); - if (client.level != null) { - com.craisinlord.antarchy.content.client.ClientTimeDilationTicker.tick(client.level); - } }); BigBerthaClientHandler.register(); @@ -631,7 +607,6 @@ public final class AntarchyFabricClientBootstrap { BloodCrystalKatanaTrailHandler.render(context); ScorpionWhipTetherRenderHandler.render(context); WormHookTetherRenderHandler.render(context); - com.craisinlord.antarchy.content.client.renderer.PortalGunPortalViewRenderer.render(context.camera(), context.positionMatrix(), context.projectionMatrix(), context.tickCounter()); }); } diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/multipart/MultipartClientPartLevelRegistry.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/multipart/MultipartClientPartLevelRegistry.java deleted file mode 100644 index 3d4d0be6..00000000 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/multipart/MultipartClientPartLevelRegistry.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.craisinlord.antarchy.fabric.client.multipart; - -import com.craisinlord.antarchy.content.entity.multipart.MultipartEntityOwner; -import net.minecraft.client.multiplayer.ClientLevel; -import net.minecraft.world.entity.Entity; - -public final class MultipartClientPartLevelRegistry { - private MultipartClientPartLevelRegistry() { - } - - public static void register(MultipartEntityOwner owner) { - Entity[] parts = owner.antarchy$getMultipartParts(); - if (parts == null) { - return; - } - - ClientLevel clientLevel = (ClientLevel) ((Entity) owner).level(); - for (Entity part : parts) { - if (part != null && clientLevel.getEntity(part.getId()) != part) { - clientLevel.addEntity(part); - } - } - } - - public static void unregister(MultipartEntityOwner owner) { - Entity[] parts = owner.antarchy$getMultipartParts(); - if (parts == null) { - return; - } - - for (Entity part : parts) { - if (part != null && !part.isRemoved()) { - part.discard(); - } - } - } -} diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/renderer/MultipartPartRenderer.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/renderer/MultipartPartRenderer.java deleted file mode 100644 index 9ac04fbc..00000000 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/client/renderer/MultipartPartRenderer.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.craisinlord.antarchy.fabric.client.renderer; - -import com.craisinlord.antarchy.fabric.entity.multipart.MultipartPartEntity; -import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.entity.EntityRenderer; -import net.minecraft.client.renderer.entity.EntityRendererProvider; -import net.minecraft.resources.ResourceLocation; - -public class MultipartPartRenderer extends EntityRenderer { - private static final ResourceLocation TEXTURE = ResourceLocation.withDefaultNamespace("textures/misc/white.png"); - - public MultipartPartRenderer(EntityRendererProvider.Context context) { - super(context); - this.shadowRadius = 0.0F; - } - - @Override - public void render(MultipartPartEntity entity, float entityYaw, float partialTick, PoseStack poseStack, MultiBufferSource buffer, int packedLight) { - } - - @Override - public ResourceLocation getTextureLocation(MultipartPartEntity entity) { - return TEXTURE; - } -} diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/entity/multipart/FabricKrakenMultipartLayout.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/entity/multipart/FabricKrakenMultipartLayout.java deleted file mode 100644 index de51b887..00000000 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/entity/multipart/FabricKrakenMultipartLayout.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.craisinlord.antarchy.fabric.entity.multipart; - -import com.craisinlord.antarchy.content.entity.multipart.MultipartPartDefinition; - -public final class FabricKrakenMultipartLayout { - private static final MultipartPartDefinition[] PARTS = { - new MultipartPartDefinition( - "tentacle_mass", - 14.0F, - 18.0F, - 0.90F, - 12.0D, - 13.5D, - 0.00D, - true - ), - new MultipartPartDefinition( - "head", - 15.0F, - 11.5F, - 1.00F, - 26.0D, - 19.0D, - 0.00D, - true - ), - new MultipartPartDefinition( - "back_head", - 13.0F, - 11.0F, - 1.10F, - 38.0D, - 20.5D, - 0.00D, - true - ), - new MultipartPartDefinition( - "mantle", - 16.0F, - 14.0F, - 1.00F, - 51.0D, - 23.0D, - 0.00D, - true - ), - new MultipartPartDefinition( - "crest", - 12.0F, - 10.0F, - 1.10F, - 63.0D, - 28.0D, - 0.00D, - true - ) - }; - - private FabricKrakenMultipartLayout() { - } - - public static MultipartPartDefinition part(int partIndex) { - return PARTS[partIndex]; - } -} diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/entity/multipart/MultipartPartEntity.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/entity/multipart/MultipartPartEntity.java deleted file mode 100644 index 6eaa3363..00000000 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/entity/multipart/MultipartPartEntity.java +++ /dev/null @@ -1,211 +0,0 @@ -package com.craisinlord.antarchy.fabric.entity.multipart; - -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.anthology.gravity.GravityApi; -import com.craisinlord.anthology.gravity.GravityRotationUtil; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.InteractionResult; -import net.minecraft.world.damagesource.DamageSource; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.EntityDimensions; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.Pose; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.Level; -import net.minecraft.world.phys.Vec3; -import org.jetbrains.annotations.Nullable; - -public class MultipartPartEntity extends Entity implements MultipartPartAccess { - @Nullable - private MultipartEntityOwner owner; - private int partIndex; - @Nullable - private MultipartPartDefinition definition; - - public MultipartPartEntity(EntityType entityType, Level level) { - super(entityType, level); - this.setNoGravity(true); - } - - public MultipartPartEntity antarchy$configure(MultipartEntityOwner owner, int partIndex, MultipartPartDefinition definition) { - this.owner = owner; - this.partIndex = partIndex; - this.definition = definition; - this.refreshDimensions(); - this.antarchy$syncFromParent(); - return this; - } - - @Nullable - public Entity antarchy$getMultipartParent() { - return this.owner == null ? null : (Entity) this.owner; - } - - public int getPartIndex() { - return this.partIndex; - } - - public String getPartName() { - return this.definition == null ? "" : this.definition.name(); - } - - public float getDamageMultiplier() { - return this.definition == null ? 1.0F : this.definition.damageMultiplier(); - } - - @Override - public void antarchy$syncFromParent() { - Entity parent = this.antarchy$getMultipartParent(); - MultipartPartDefinition definition = this.definition; - if (parent == null || definition == null || parent.isRemoved()) { - return; - } - - GravityApi.applySyncedState( - this, - GravityApi.getGravityDirection(parent), - GravityApi.getPrevGravityDirection(parent), - GravityApi.isGravityForced(parent), - GravityApi.getTransitionDuration(parent), - GravityApi.getTransitionRemaining(parent) - ); - - double oldX = this.getX(); - double oldY = this.getY(); - double oldZ = this.getZ(); - double yawRadians = Math.toRadians(parent.getYRot()); - Vec3 forward = new Vec3(-Math.sin(yawRadians), 0.0D, Math.cos(yawRadians)); - Vec3 right = new Vec3(forward.z, 0.0D, -forward.x); - Vec3 localOffset = new Vec3( - forward.x * definition.forwardOffset() + right.x * definition.lateralOffset(), - definition.yOffset(), - forward.z * definition.forwardOffset() + right.z * definition.lateralOffset()); - 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()); - this.setXRot(parent.getXRot()); - this.xo = oldX; - this.yo = oldY; - this.zo = oldZ; - this.xOld = oldX; - this.yOld = oldY; - this.zOld = oldZ; - } - - @Override - public boolean is(Entity entity) { - return entity == this || entity == this.antarchy$getMultipartParent(); - } - - @Override - public boolean isPickable() { - return true; - } - - @Override - public boolean isAttackable() { - return true; - } - - @Override - public boolean isPushable() { - return false; - } - - @Override - public boolean canBeCollidedWith() { - return !this.isRemoved(); - } - - @Override - public boolean canCollideWith(Entity entity) { - MultipartPartDefinition definition = this.definition; - if (definition == null || !definition.collisionEnabled()) { - return false; - } - - Entity parent = this.antarchy$getMultipartParent(); - if (entity == parent) { - return false; - } - - if (entity instanceof MultipartPartEntity otherPart && otherPart.antarchy$getMultipartParent() == parent) { - return false; - } - - return entity.canBeCollidedWith() && !this.isPassengerOfSameVehicle(entity); - } - - @Override - public boolean shouldBeSaved() { - return false; - } - - @Override - public ItemStack getPickResult() { - Entity parent = this.antarchy$getMultipartParent(); - return parent == null ? ItemStack.EMPTY : parent.getPickResult(); - } - - @Override - public boolean hurt(DamageSource source, float amount) { - Entity parent = this.antarchy$getMultipartParent(); - MultipartPartDefinition definition = this.definition; - if (parent == null || definition == null || parent.isRemoved()) { - return false; - } - - if (this.level().isClientSide()) { - if (source.getEntity() instanceof Player) { - MultipartFramework.sendMultipartAttack(parent.getUUID(), this.partIndex, amount * definition.damageMultiplier()); - } - return true; - } - - return this.owner != null && this.owner.antarchy$hurtMultipartPart(this, source, amount * definition.damageMultiplier()); - } - - @Override - public boolean isInvulnerableTo(DamageSource source) { - return false; - } - - @Override - public InteractionResult interactAt(Player player, Vec3 vec, InteractionHand hand) { - Entity parent = this.antarchy$getMultipartParent(); - if (parent == null || parent.isRemoved()) { - return InteractionResult.PASS; - } - - if (this.level().isClientSide()) { - MultipartFramework.sendMultipartInteract(parent.getUUID(), this.partIndex, hand.ordinal()); - return InteractionResult.SUCCESS; - } - - return this.owner == null ? InteractionResult.PASS : this.owner.antarchy$interactMultipartPart(this, player, vec, hand); - } - - @Override - public EntityDimensions getDimensions(Pose pose) { - MultipartPartDefinition definition = this.definition; - return definition == null ? super.getDimensions(pose) : EntityDimensions.scalable(definition.width(), definition.height()); - } - - @Override - protected void defineSynchedData(net.minecraft.network.syncher.SynchedEntityData.Builder builder) { - } - - @Override - protected void readAdditionalSaveData(CompoundTag tag) { - } - - @Override - protected void addAdditionalSaveData(CompoundTag tag) { - } -} diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/entity/multipart/MultipartServerPartLevelRegistry.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/entity/multipart/MultipartServerPartLevelRegistry.java deleted file mode 100644 index b2b711ba..00000000 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/entity/multipart/MultipartServerPartLevelRegistry.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.craisinlord.antarchy.fabric.entity.multipart; - -import com.craisinlord.antarchy.content.entity.multipart.MultipartEntityOwner; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.entity.Entity; - -public final class MultipartServerPartLevelRegistry { - private MultipartServerPartLevelRegistry() { - } - - public static void register(MultipartEntityOwner owner) { - Entity[] parts = owner.antarchy$getMultipartParts(); - if (parts == null) { - return; - } - - ServerLevel serverLevel = (ServerLevel) ((Entity) owner).level(); - for (Entity part : parts) { - if (part != null && serverLevel.getEntity(part.getId()) != part) { - serverLevel.addFreshEntity(part); - } - } - } - - public static void unregister(MultipartEntityOwner owner) { - Entity[] parts = owner.antarchy$getMultipartParts(); - if (parts == null) { - return; - } - - for (Entity part : parts) { - if (part != null && !part.isRemoved()) { - part.discard(); - } - } - } -} diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/CameraShakeMixin.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/CameraShakeMixin.java deleted file mode 100644 index 212cc276..00000000 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/CameraShakeMixin.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.craisinlord.antarchy.fabric.mixin.client; - -import com.craisinlord.antarchy.content.client.CameraShakeClientState; -import com.craisinlord.antarchy.content.client.HerculesBeetleImpactShakeClientState; -import com.craisinlord.antarchy.content.item.BigBerthaItem; -import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.math.Axis; -import net.minecraft.client.Minecraft; -import net.minecraft.util.Mth; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import net.minecraft.client.renderer.GameRenderer; - -@Mixin(GameRenderer.class) -public abstract class CameraShakeMixin { - private static final int TORETERROR_SHAKE_TICKS = 25; - - @Shadow @Final private Minecraft minecraft; - - @Inject(method = "bobView", at = @At("TAIL")) - private void applyCameraShake(PoseStack poseStack, float partialTick, CallbackInfo ci) { - if (minecraft.level == null || minecraft.player == null) { - CameraShakeClientState.clear(); - return; - } - - float shakeStrength = CameraShakeClientState.getStrength(minecraft.gameRenderer.getMainCamera().getPosition()); - - int beetleShakeTicks = HerculesBeetleImpactShakeClientState.getTicks(); - if (beetleShakeTicks > 0) { - shakeStrength += (float) beetleShakeTicks / TORETERROR_SHAKE_TICKS * 2.0F; - } - - int bigBerthaShakeTicks = BigBerthaItem.clientShakeTicks; - if (bigBerthaShakeTicks > 0) { - shakeStrength += (float) bigBerthaShakeTicks / TORETERROR_SHAKE_TICKS * 2.0F; - } - - if (shakeStrength <= 0.0F) return; - - float time = (float) (minecraft.player.tickCount + partialTick); - poseStack.mulPose(Axis.YP.rotationDegrees(Mth.sin(time * 1.5F) * shakeStrength * 2.5F)); - poseStack.mulPose(Axis.XP.rotationDegrees(Mth.cos(time * 1.8F) * shakeStrength * 2.0F)); - poseStack.mulPose(Axis.ZP.rotationDegrees(Mth.sin(time * 2.2F) * shakeStrength * 1.5F)); - } -} diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/MultipartClientSpawnMixin.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/MultipartClientSpawnMixin.java deleted file mode 100644 index e39b6ea7..00000000 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/MultipartClientSpawnMixin.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.craisinlord.antarchy.fabric.mixin.client; -import com.craisinlord.antarchy.fabric.registry.AntarchyFabricEntities; - -import com.craisinlord.antarchy.fabric.AntarchyFabricContent; -import net.minecraft.client.multiplayer.ClientPacketListener; -import net.minecraft.network.protocol.game.ClientboundAddEntityPacket; -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(ClientPacketListener.class) -public abstract class MultipartClientSpawnMixin { - @Inject(method = "handleAddEntity", at = @At("HEAD"), cancellable = true) - private void antarchy$skipTrackedMultipartPlaceholders(ClientboundAddEntityPacket packet, CallbackInfo ci) { - if (packet.getType() == AntarchyFabricEntities.KRAKEN_PART.get()) { - ci.cancel(); - } - } -} diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/MultipartEntityLevelRegistryMixin.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/MultipartEntityLevelRegistryMixin.java deleted file mode 100644 index 1dc6ceaa..00000000 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/MultipartEntityLevelRegistryMixin.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.craisinlord.antarchy.fabric.mixin.client; - -import com.craisinlord.antarchy.content.entity.multipart.MultipartEntityOwner; -import com.craisinlord.antarchy.fabric.client.multipart.MultipartClientPartLevelRegistry; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.level.entity.EntityInLevelCallback; -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(Entity.class) -public abstract class MultipartEntityLevelRegistryMixin { - @Inject(method = "setLevelCallback", at = @At("TAIL")) - private void antarchy$registerMultipartParts(EntityInLevelCallback entityInLevelCallback, CallbackInfo ci) { - Entity self = (Entity) (Object) this; - if (self instanceof MultipartEntityOwner owner - && entityInLevelCallback != EntityInLevelCallback.NULL - && self.level().isClientSide()) { - if (owner.antarchy$getMultipartParts() == null) { - owner.antarchy$spawnMultipartParts(); - } - MultipartClientPartLevelRegistry.register(owner); - } - } - - @Inject(method = "setRemoved", at = @At("HEAD")) - private void antarchy$unregisterMultipartParts(Entity.RemovalReason removalReason, CallbackInfo ci) { - Entity self = (Entity) (Object) this; - if (self instanceof MultipartEntityOwner owner && self.level().isClientSide()) { - MultipartClientPartLevelRegistry.unregister(owner); - } - } -} diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/RenderTargetDepthStencilMixin.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/RenderTargetDepthStencilMixin.java deleted file mode 100644 index a37f1034..00000000 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/RenderTargetDepthStencilMixin.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.craisinlord.antarchy.fabric.mixin.client; - -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import com.mojang.blaze3d.pipeline.RenderTarget; -import java.nio.IntBuffer; -import org.lwjgl.opengl.GL11; -import org.lwjgl.opengl.GL30; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -@Mixin(RenderTarget.class) -public abstract class RenderTargetDepthStencilMixin { - @WrapOperation(method = "createBuffers", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/platform/GlStateManager;_texImage2D(IIIIIIIILjava/nio/IntBuffer;)V")) - private void antarchy$allocateDepthStencil(int target, int level, int internalFormat, int width, int height, int border, int format, int type, - IntBuffer pixels, Operation original) { - if (internalFormat == GL11.GL_DEPTH_COMPONENT) { - original.call(target, level, GL30.GL_DEPTH24_STENCIL8, width, height, border, GL30.GL_DEPTH_STENCIL, GL30.GL_UNSIGNED_INT_24_8, pixels); - return; - } - original.call(target, level, internalFormat, width, height, border, format, type, pixels); - } - - @WrapOperation(method = "createBuffers", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/platform/GlStateManager;_glFramebufferTexture2D(IIIII)V")) - private void antarchy$attachDepthStencil(int target, int attachment, int textureTarget, int texture, int level, Operation original) { - original.call(target, attachment == GL30.GL_DEPTH_ATTACHMENT ? GL30.GL_DEPTH_STENCIL_ATTACHMENT : attachment, textureTarget, texture, level); - } -} diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/entity/MultipartEntityLevelRegistryMixin.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/entity/MultipartEntityLevelRegistryMixin.java deleted file mode 100644 index a2f3c9dc..00000000 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/mixin/entity/MultipartEntityLevelRegistryMixin.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.craisinlord.antarchy.fabric.mixin.entity; - -import com.craisinlord.antarchy.content.entity.multipart.MultipartEntityOwner; -import com.craisinlord.antarchy.fabric.entity.multipart.MultipartServerPartLevelRegistry; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.level.entity.EntityInLevelCallback; -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(Entity.class) -/* - * Keeps multipart child entities registered in Fabric levels. - */ -public abstract class MultipartEntityLevelRegistryMixin { - @Inject(method = "setLevelCallback", at = @At("TAIL")) - private void antarchy$registerMultipartParts(EntityInLevelCallback entityInLevelCallback, CallbackInfo ci) { - Entity self = (Entity) (Object) this; - if (self instanceof MultipartEntityOwner owner - && entityInLevelCallback != EntityInLevelCallback.NULL - && !self.level().isClientSide()) { - if (owner.antarchy$getMultipartParts() == null) { - owner.antarchy$spawnMultipartParts(); - } - MultipartServerPartLevelRegistry.register(owner); - } - } - - @Inject(method = "setRemoved", at = @At("HEAD")) - private void antarchy$unregisterMultipartParts(Entity.RemovalReason removalReason, CallbackInfo ci) { - Entity self = (Entity) (Object) this; - if (self instanceof MultipartEntityOwner owner && !self.level().isClientSide()) { - MultipartServerPartLevelRegistry.unregister(owner); - } - } -} diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricClientNetworking.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricClientNetworking.java index 02b9cc1c..85b37713 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricClientNetworking.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricClientNetworking.java @@ -2,42 +2,20 @@ package com.craisinlord.antarchy.fabric.network; import com.craisinlord.antarchy.content.client.BloodglassClientState; import com.craisinlord.antarchy.content.client.BrutalflyElytraClientState; -import com.craisinlord.antarchy.content.client.CameraShakeClientState; import com.craisinlord.antarchy.content.client.HerculesBeetleImpactShakeClientState; import com.craisinlord.antarchy.content.client.HordeClientState; import com.craisinlord.antarchy.content.client.ScorpionWhipTetherClientState; import com.craisinlord.antarchy.content.client.WormHookTetherClientState; import com.craisinlord.antarchy.content.client.TigerEyeCamouflageClientState; -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.network.*; import com.craisinlord.antarchy.fabric.client.BloodCrystalKatanaTrailClientState; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.phys.Vec3; public final class AntarchyFabricClientNetworking { private AntarchyFabricClientNetworking() { } - public static void bootstrapMultipartClient() { - MultipartFramework.bootstrap( - AntarchyFabricNetworking::createMultipartPart, - new MultipartFramework.NetworkBridge() { - @Override - public void sendAttack(java.util.UUID parentId, int partIndex, float damage) { - ClientPlayNetworking.send(new MultipartAttackPayload(parentId, partIndex, damage)); - } - - @Override - public void sendInteract(java.util.UUID parentId, int partIndex, int handId) { - ClientPlayNetworking.send(new MultipartInteractPayload(parentId, partIndex, handId)); - } - } - ); - } - public static void register() { ClientPlayNetworking.registerGlobalReceiver(AntarchyGameResultPayload.TYPE, (payload, context) -> context.client().execute(() -> com.craisinlord.antarchy.content.client.AntarchyGameClientState.update(payload))); @@ -63,17 +41,7 @@ public final class AntarchyFabricClientNetworking { context.client().execute(() -> HerculesBeetleImpactShakeClientState.trigger(payload.durationTicks()))); ClientPlayNetworking.registerGlobalReceiver(KingJudgmentFlashPayload.TYPE, (payload, context) -> context.client().execute(() -> com.craisinlord.antarchy.content.client.KingJudgmentFlashClientState.trigger(payload.durationTicks()))); - ClientPlayNetworking.registerGlobalReceiver(ImpactShakePayload.TYPE, (payload, context) -> - context.client().execute(() -> CameraShakeClientState.triggerImpact( - new Vec3(payload.x(), payload.y(), payload.z()), - payload.intensity(), - payload.durationTicks(), - payload.radius()))); ClientPlayNetworking.registerGlobalReceiver(HordeIntensityPayload.TYPE, (payload, context) -> context.client().execute(() -> HordeClientState.update(payload.intensity()))); - ClientPlayNetworking.registerGlobalReceiver(TimeDilationRatePayload.TYPE, (payload, context) -> - context.client().execute(() -> com.craisinlord.antarchy.content.time.TimeDilationApi.applySyncedRate(payload.entityUuid(), payload.rate()))); - ClientPlayNetworking.registerGlobalReceiver(TimeDilationFieldsPayload.TYPE, (payload, context) -> - context.client().execute(() -> com.craisinlord.antarchy.content.client.ClientTimeDilationTicker.applyFields(payload.fields()))); } } diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricNetworking.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricNetworking.java index 18f11e72..da1fa06d 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricNetworking.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricNetworking.java @@ -2,10 +2,6 @@ package com.craisinlord.antarchy.fabric.network; import com.craisinlord.antarchy.fabric.registry.AntarchyFabricEntities; import com.craisinlord.antarchy.content.entity.DiamondMinecartEntity; -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.entity.HerculesBeetleEntity; import com.craisinlord.antarchy.content.item.BrutalflyElytraFlightHelper; import com.craisinlord.antarchy.content.item.BrutalflyElytraItem; @@ -25,7 +21,6 @@ import com.craisinlord.antarchy.content.entity.DorrieEntity; import com.craisinlord.antarchy.content.network.DorrieJumpInputPayload; import com.craisinlord.antarchy.content.network.SpringyBootsLaunchPayload; import com.craisinlord.antarchy.fabric.AntarchyFabricContent; -import com.craisinlord.antarchy.fabric.entity.multipart.MultipartPartEntity; import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry; import net.fabricmc.fabric.api.networking.v1.PlayerLookup; import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; @@ -34,7 +29,6 @@ import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; -import net.minecraft.world.InteractionHand; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.item.ItemStack; @@ -51,26 +45,6 @@ public final class AntarchyFabricNetworking { com.craisinlord.antarchy.content.portalgun.PortalGunIndicatorSync.setSender(ServerPlayNetworking::send); } - public static void bootstrapMultipartCommon() { - MultipartFramework.bootstrap( - AntarchyFabricNetworking::createMultipartPart, - new MultipartFramework.NetworkBridge() { - @Override - public void sendAttack(java.util.UUID parentId, int partIndex, float damage) { - } - - @Override - public void sendInteract(java.util.UUID parentId, int partIndex, int handId) { - } - } - ); - } - - public static MultipartPartEntity createMultipartPart(MultipartEntityOwner owner, int partIndex, com.craisinlord.antarchy.content.entity.multipart.MultipartPartDefinition spec) { - return new MultipartPartEntity(AntarchyFabricEntities.KRAKEN_PART.get(), ((Entity) owner).level()) - .antarchy$configure(owner, partIndex, spec); - } - private static void registerPayloadTypes() { PayloadTypeRegistry.playS2C().register(AntarchyGameResultPayload.TYPE, AntarchyGameResultPayload.STREAM_CODEC); PayloadTypeRegistry.playS2C().register(PortalGunIndicatorPayload.TYPE, PortalGunIndicatorPayload.STREAM_CODEC); @@ -82,13 +56,10 @@ public final class AntarchyFabricNetworking { PayloadTypeRegistry.playS2C().register(BrutalflyElytraAnimationPayload.TYPE, BrutalflyElytraAnimationPayload.STREAM_CODEC); PayloadTypeRegistry.playS2C().register(HerculesBeetleImpactShakePayload.TYPE, HerculesBeetleImpactShakePayload.STREAM_CODEC); PayloadTypeRegistry.playS2C().register(KingJudgmentFlashPayload.TYPE, KingJudgmentFlashPayload.STREAM_CODEC); - PayloadTypeRegistry.playS2C().register(ImpactShakePayload.TYPE, ImpactShakePayload.STREAM_CODEC); PayloadTypeRegistry.playS2C().register(HordeIntensityPayload.TYPE, HordeIntensityPayload.STREAM_CODEC); - AntarchyFabricTimeDilationNetworking.registerPayloadTypes(); PayloadTypeRegistry.playC2S().register(GravityGunPrimaryPayload.TYPE, GravityGunPrimaryPayload.STREAM_CODEC); PayloadTypeRegistry.playC2S().register(PortalGunPrimaryPayload.TYPE, PortalGunPrimaryPayload.STREAM_CODEC); - PayloadTypeRegistry.playC2S().register(com.craisinlord.antarchy.content.network.PortalGunTransitPayload.TYPE, com.craisinlord.antarchy.content.network.PortalGunTransitPayload.STREAM_CODEC); PayloadTypeRegistry.playC2S().register(PortalGunIndicatorRequestPayload.TYPE, PortalGunIndicatorRequestPayload.STREAM_CODEC); PayloadTypeRegistry.playC2S().register(PortalGunResetPayload.TYPE, PortalGunResetPayload.STREAM_CODEC); PayloadTypeRegistry.playC2S().register(com.craisinlord.antarchy.content.network.PortalGunMoonAimPayload.TYPE, com.craisinlord.antarchy.content.network.PortalGunMoonAimPayload.STREAM_CODEC); @@ -113,8 +84,6 @@ public final class AntarchyFabricNetworking { PayloadTypeRegistry.playC2S().register(HerculesBeetleFlightTogglePayload.TYPE, HerculesBeetleFlightTogglePayload.STREAM_CODEC); PayloadTypeRegistry.playC2S().register(HerculesBeetleMountedAttackPayload.TYPE, HerculesBeetleMountedAttackPayload.STREAM_CODEC); PayloadTypeRegistry.playC2S().register(HerculesBeetleMountedChargePayload.TYPE, HerculesBeetleMountedChargePayload.STREAM_CODEC); - PayloadTypeRegistry.playC2S().register(MultipartAttackPayload.TYPE, MultipartAttackPayload.STREAM_CODEC); - PayloadTypeRegistry.playC2S().register(MultipartInteractPayload.TYPE, MultipartInteractPayload.STREAM_CODEC); PayloadTypeRegistry.playC2S().register(AntarchyGamePayload.TYPE, AntarchyGamePayload.STREAM_CODEC); } @@ -125,13 +94,6 @@ public final class AntarchyFabricNetworking { context.server().execute(() -> handleGravityGunPrimary(context.player(), payload))); ServerPlayNetworking.registerGlobalReceiver(PortalGunPrimaryPayload.TYPE, (payload, context) -> context.server().execute(() -> handlePortalGunPrimary(context.player(), payload))); - ServerPlayNetworking.registerGlobalReceiver(com.craisinlord.antarchy.content.network.PortalGunTransitPayload.TYPE, (payload, context) -> { - if (context.server().isSameThread()) { - com.craisinlord.antarchy.content.portalgun.PortalGunTransitHandler.handle(context.player(), payload); - } else { - context.server().execute(() -> com.craisinlord.antarchy.content.portalgun.PortalGunTransitHandler.handle(context.player(), payload)); - } - }); ServerPlayNetworking.registerGlobalReceiver(PortalGunIndicatorRequestPayload.TYPE, (payload, context) -> context.server().execute(() -> com.craisinlord.antarchy.content.portalgun.PortalGunIndicatorSync.handleRequest(context.player(), payload))); ServerPlayNetworking.registerGlobalReceiver(com.craisinlord.antarchy.content.network.PortalGunMoonAimPayload.TYPE, (payload, context) -> @@ -178,10 +140,6 @@ public final class AntarchyFabricNetworking { context.server().execute(() -> handleHerculesBeetleMountedAttack(context.player(), payload))); ServerPlayNetworking.registerGlobalReceiver(HerculesBeetleMountedChargePayload.TYPE, (payload, context) -> context.server().execute(() -> handleHerculesBeetleMountedCharge(context.player(), payload))); - ServerPlayNetworking.registerGlobalReceiver(MultipartAttackPayload.TYPE, (payload, context) -> - context.server().execute(() -> handleMultipartAttack(context.player(), payload))); - ServerPlayNetworking.registerGlobalReceiver(MultipartInteractPayload.TYPE, (payload, context) -> - context.server().execute(() -> handleMultipartInteract(context.player(), payload))); } public static void syncBloodglass(ServerPlayer player, int shieldsActive, int shieldsMax) { @@ -343,58 +301,6 @@ public final class AntarchyFabricNetworking { ServerPlayNetworking.send(player, animationPayload); } - private static void handleMultipartAttack(ServerPlayer serverPlayer, MultipartAttackPayload payload) { - Entity entity = serverPlayer.serverLevel().getEntity(payload.parentId()); - if (!(entity instanceof MultipartEntityOwner owner)) { - return; - } - - Entity[] parts = owner.antarchy$getMultipartParts(); - if (parts == null) { - parts = owner.antarchy$createMultipartParts(); - owner.antarchy$setMultipartParts(parts); - owner.antarchy$syncMultipartParts(); - } - if (payload.partIndex() < 0 || payload.partIndex() >= parts.length) { - return; - } - - Entity part = parts[payload.partIndex()]; - if (part == null || part.isRemoved()) { - return; - } - if (serverPlayer.distanceToSqr(part) > 10000.0D) { - return; - } - - serverPlayer.attack(part); - } - - private static void handleMultipartInteract(ServerPlayer serverPlayer, MultipartInteractPayload payload) { - Entity entity = serverPlayer.serverLevel().getEntity(payload.parentId()); - if (!(entity instanceof MultipartEntityOwner owner)) { - return; - } - - Entity[] parts = owner.antarchy$getMultipartParts(); - if (parts == null) { - parts = owner.antarchy$createMultipartParts(); - owner.antarchy$setMultipartParts(parts); - owner.antarchy$syncMultipartParts(); - } - if (payload.partIndex() < 0 || payload.partIndex() >= parts.length) { - return; - } - - Entity part = parts[payload.partIndex()]; - if (part == null || part.isRemoved()) { - return; - } - - InteractionHand hand = payload.handId() == 0 ? InteractionHand.MAIN_HAND : InteractionHand.OFF_HAND; - owner.antarchy$interactMultipartPart(part, serverPlayer, part.position(), hand); - } - private static void handleSpringyBootsLaunch(ServerPlayer player, SpringyBootsLaunchPayload payload) { if (!SpringyBootsItem.isWearingSpringyBoots(player)) return; if (player.isSpectator() || player.isPassenger()) return; diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricTimeDilationNetworking.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricTimeDilationNetworking.java deleted file mode 100644 index cc13f844..00000000 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricTimeDilationNetworking.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.craisinlord.antarchy.fabric.network; - -import com.craisinlord.antarchy.content.network.TimeDilationRatePayload; -import com.craisinlord.antarchy.content.network.TimeDilationFieldsPayload; -import com.craisinlord.antarchy.content.time.TimeDilationFieldSnapshot; -import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry; -import net.fabricmc.fabric.api.networking.v1.PlayerLookup; -import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.entity.Entity; -import java.util.List; - -public final class AntarchyFabricTimeDilationNetworking { - private AntarchyFabricTimeDilationNetworking() { - } - - public static void registerPayloadTypes() { - PayloadTypeRegistry.playS2C().register(TimeDilationRatePayload.TYPE, TimeDilationRatePayload.STREAM_CODEC); - PayloadTypeRegistry.playS2C().register(TimeDilationFieldsPayload.TYPE, TimeDilationFieldsPayload.STREAM_CODEC); - } - - public static void syncRate(Entity entity, double rate) { - TimeDilationRatePayload payload = new TimeDilationRatePayload(entity.getUUID(), rate); - for (ServerPlayer player : PlayerLookup.tracking(entity)) { - ServerPlayNetworking.send(player, payload); - } - if (entity instanceof ServerPlayer player) { - ServerPlayNetworking.send(player, payload); - } - } - - public static void syncRateToPlayer(ServerPlayer player, Entity entity, double rate) { - ServerPlayNetworking.send(player, new TimeDilationRatePayload(entity.getUUID(), rate)); - } - - public static void syncFields(ServerPlayer player, List fields) { - ServerPlayNetworking.send(player, new TimeDilationFieldsPayload(fields)); - } -} diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntities.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntities.java index 7dcc02e4..9d7157ac 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntities.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricEntities.java @@ -22,7 +22,6 @@ import com.craisinlord.antarchy.content.entity.lucid.LucidEyeProjectileEntity; import com.craisinlord.antarchy.content.entity.vortex.VortexChargeProjectileEntity; import com.craisinlord.antarchy.content.entity.vortex.VortexEntity; import com.craisinlord.antarchy.content.entity.vortex.WindVortexEntity; -import com.craisinlord.antarchy.content.time.TimeDilationFieldEntity; import com.craisinlord.antarchy.content.entity.HushProjectileEntity; import com.craisinlord.antarchy.content.entity.CritterCageProjectileEntity; import com.craisinlord.antarchy.content.entity.WormHookProjectileEntity; @@ -375,16 +374,6 @@ public final class AntarchyFabricEntities { .build("kraken")); - public static final DeferredHolder, EntityType> KRAKEN_PART = ENTITY_TYPES.register("kraken_part", - () -> EntityType.Builder.of( - com.craisinlord.antarchy.fabric.entity.multipart.MultipartPartEntity::new, - MobCategory.MISC - ) - .sized(1.0F, 1.0F) - .clientTrackingRange(12) - .updateInterval(1) - .build("kraken_part")); - public static final DeferredHolder, EntityType> MISSILE_SQUID = ENTITY_TYPES.register("missile_squid", () -> EntityType.Builder.of(MissileSquidEntity::new, MobCategory.MONSTER) @@ -463,13 +452,6 @@ public final class AntarchyFabricEntities { .fireImmune() .build("wind_vortex")); - public static final DeferredHolder, EntityType> TIME_DILATION_FIELD = ENTITY_TYPES.register("time_dilation_field", - () -> EntityType.Builder.of(TimeDilationFieldEntity::new, MobCategory.MISC) - .sized(0.5F, 0.5F) - .clientTrackingRange(16) - .updateInterval(20) - .fireImmune() - .build("time_dilation_field")); public static final DeferredHolder, EntityType> ROYAL_BLACK_HOLE = ENTITY_TYPES.register("royal_black_hole", () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.royal.RoyalBlackHoleEntity::new, MobCategory.MISC) diff --git a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java index da5d098a..fdaf8c25 100644 --- a/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java +++ b/fabric-1.21.1/src/main/java/com/craisinlord/antarchy/fabric/registry/AntarchyFabricMisc.java @@ -33,8 +33,6 @@ 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.CommandedMobEffect; -import com.craisinlord.antarchy.content.effect.DilatedMobEffect; -import com.craisinlord.antarchy.content.effect.ContractedMobEffect; import com.craisinlord.antarchy.content.effect.ParalyzedMobEffect; import com.craisinlord.antarchy.content.effect.ShrinkMobEffect; import com.craisinlord.antarchy.content.effect.StinkyMobEffect; @@ -458,7 +456,6 @@ public final class AntarchyFabricMisc { public static final DeferredHolder COMMANDED = MOB_EFFECTS.register("commanded", CommandedMobEffect::new); - public static final DeferredHolder DILATED = MOB_EFFECTS.register("dilated", DilatedMobEffect::new); public static final DeferredHolder STINKY = MOB_EFFECTS.register("stinky", StinkyMobEffect::new); @@ -499,14 +496,13 @@ public final class AntarchyFabricMisc { public static final DeferredHolder LONG_COMMAND = POTIONS.register("long_command", () -> new Potion("command", new MobEffectInstance(mobEffectHolder(COMMANDED), 1200))); public static final DeferredHolder TIME_DILATION = POTIONS.register("time_dilation", - () -> new Potion(new MobEffectInstance(mobEffectHolder(DILATED), 1200))); + () -> new Potion(new MobEffectInstance(AnthologyEffects.dilated(), 1200))); public static final DeferredHolder LONG_TIME_DILATION = POTIONS.register("long_time_dilation", - () -> new Potion("time_dilation", new MobEffectInstance(mobEffectHolder(DILATED), 1200, 1))); - public static final DeferredHolder CONTRACTED = MOB_EFFECTS.register("contracted", ContractedMobEffect::new); + () -> new Potion("time_dilation", new MobEffectInstance(AnthologyEffects.dilated(), 1200, 1))); public static final DeferredHolder TIME_CONTRACTION = POTIONS.register("time_contraction", - () -> new Potion(new MobEffectInstance(mobEffectHolder(CONTRACTED), 1200))); + () -> new Potion(new MobEffectInstance(AnthologyEffects.contracted(), 1200))); public static final DeferredHolder LONG_TIME_CONTRACTION = POTIONS.register("long_time_contraction", - () -> new Potion("time_contraction", new MobEffectInstance(mobEffectHolder(CONTRACTED), 1200, 1))); + () -> new Potion("time_contraction", new MobEffectInstance(AnthologyEffects.contracted(), 1200, 1))); public static final DeferredHolder STINKY_POTION = POTIONS.register("stinky", diff --git a/fabric-1.21.1/src/main/resources/antarchy-fabric.mixins.json b/fabric-1.21.1/src/main/resources/antarchy-fabric.mixins.json index adad33c4..b8a0127a 100644 --- a/fabric-1.21.1/src/main/resources/antarchy-fabric.mixins.json +++ b/fabric-1.21.1/src/main/resources/antarchy-fabric.mixins.json @@ -19,7 +19,6 @@ "DreamCampfireBlockEntityMixin", "SpringyBootsFallDamageMixin", "ThoraxisWaterBucketMixin", - "entity.MultipartEntityLevelRegistryMixin", "entity.ParalyzedMobFreezeMixin", "WoodTypeInvoker", "infinity.PortalCreatorMixin", @@ -27,18 +26,14 @@ "infinity.AmendmentRareOresMixin" ], "client": [ - "client.RenderTargetDepthStencilMixin", "client.SeparateLargeItemModelsMixin", "client.SeparateLargeItemGuiLightingMixin", - "client.CameraShakeMixin", "client.BrutalflyElytraExperienceBarMixin", "client.BloodglassChatOrderMixin", "client.LiquidFogMixin", "client.GravityGunMouseScrollMixin", "client.KeybindingConflictFixMixin", - "client.CrossbowArmPoseMixin", - "client.MultipartClientSpawnMixin", - "client.MultipartEntityLevelRegistryMixin" + "client.CrossbowArmPoseMixin" ], "injectors": { "defaultRequire": 1 diff --git a/fabric-1.21.1/src/main/resources/fabric.mod.json b/fabric-1.21.1/src/main/resources/fabric.mod.json index a96dc70c..ef8e2181 100644 --- a/fabric-1.21.1/src/main/resources/fabric.mod.json +++ b/fabric-1.21.1/src/main/resources/fabric.mod.json @@ -28,7 +28,6 @@ }, "mixins": [ "antarchy-common.mixins.json", - "antarchy-sodium.mixins.json", "antarchy-fabric.mixins.json" ], "depends": { diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyConfigModuleNeoforge.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyConfigModuleNeoforge.java index 13a9b34b..962822bd 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyConfigModuleNeoforge.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyConfigModuleNeoforge.java @@ -1,7 +1,6 @@ package com.craisinlord.antarchy.neoforge; import com.craisinlord.antarchy.config.AntarchySettings; -import com.craisinlord.antarchy.content.network.ImpactShakeSync; import com.craisinlord.antarchy.config.ConfigResetGuard; import com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakePayload; import com.craisinlord.antarchy.content.network.HerculesBeetleImpactShakeSync; @@ -31,7 +30,6 @@ public final class AntarchyConfigModuleNeoforge { modContainer.registerConfig(ModConfig.Type.COMMON, AntarchyMiscConfig.SPEC, "antarchy/antarchy_misc.toml"); HerculesBeetleImpactShakeSync.setSink((player, ticks) -> PacketDistributor.sendToPlayer(player, new HerculesBeetleImpactShakePayload(ticks))); KingJudgmentFlashSync.setSink((player, ticks) -> PacketDistributor.sendToPlayer(player, new KingJudgmentFlashPayload(ticks))); - ImpactShakeSync.setSink(PacketDistributor::sendToPlayer); HordeIntensitySync.setSink(PacketDistributor::sendToPlayer); AntarchyNeoforge.modEventBusTempHolder.addListener(AntarchyConfigModuleNeoforge::onConfigChange); } @@ -683,11 +681,7 @@ public final class AntarchyConfigModuleNeoforge { AntarchySettings.setElythiaFireflyParticlesEnabled(AntarchyMiscConfig.elythiaFireflyParticlesEnabled()); - AntarchySettings.setDreamSandEnabled(AntarchyMiscConfig.dreamSandEnabled()); - AntarchySettings.setDreamSandJumpVelocityMultiplier(AntarchyMiscConfig.dreamSandJumpVelocityMultiplier()); - AntarchySettings.setDreamSandGravityMultiplier(AntarchyMiscConfig.dreamSandGravityMultiplier()); AntarchySettings.setDreamSandFallingBlockGravityMultiplier(AntarchyMiscConfig.dreamSandFallingBlockGravityMultiplier()); - AntarchySettings.setDreamSandEffectDurationSeconds(AntarchyMiscConfig.dreamSandEffectDurationSeconds()); AntarchySettings.setIchorWitherEnabled(AntarchyMiscConfig.ichorWitherEnabled()); diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMiscConfig.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMiscConfig.java index db6811c4..92f04c40 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMiscConfig.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMiscConfig.java @@ -9,10 +9,6 @@ public final class AntarchyMiscConfig { private static final ModConfigSpec.BooleanValue ELYTHIA_FIREFLY_PARTICLES_ENABLED; // Dream Sand - private static final ModConfigSpec.BooleanValue DREAM_SAND_ENABLED; - private static final ModConfigSpec.DoubleValue DREAM_SAND_JUMP_VELOCITY_MULTIPLIER; - private static final ModConfigSpec.DoubleValue DREAM_SAND_GRAVITY_MULTIPLIER; - private static final ModConfigSpec.DoubleValue DREAM_SAND_EFFECT_DURATION_SECONDS; private static final ModConfigSpec.DoubleValue DREAM_SAND_FALLING_BLOCK_GRAVITY_MULTIPLIER; // Ichor @@ -85,11 +81,7 @@ public final class AntarchyMiscConfig { // Dream Sand b.push("dreamSand"); - DREAM_SAND_ENABLED = b.comment("If true, jumping from dream sand applies temporary low gravity until solid ground is touched.").define("enabled", true); - DREAM_SAND_JUMP_VELOCITY_MULTIPLIER = b.comment("Multiplier applied to upward jump velocity when leaving dream sand.") .defineInRange("jumpVelocityMultiplier", 1.3D, 0.0D, 16.0D); - DREAM_SAND_GRAVITY_MULTIPLIER = b.comment("Multiplier applied to downward velocity while low gravity is active.") .defineInRange("gravityMultiplier", 0.45D, 0.0D, 1.0D); - DREAM_SAND_EFFECT_DURATION_SECONDS = b.comment("Seconds the low-gravity effect remains active after leaving dream sand.") .defineInRange("effectDurationSeconds", 7.0D, 0.0D, 60.0D); - DREAM_SAND_FALLING_BLOCK_GRAVITY_MULTIPLIER = b.comment("Multiplier applied to dream sand's own falling-block gravity (how slowly it falls as a block, distinct from the player low-gravity effect).").defineInRange("fallingBlockGravityMultiplier", 0.4D, 0.0D, 16.0D); + DREAM_SAND_FALLING_BLOCK_GRAVITY_MULTIPLIER = b.comment("Multiplier applied to dream sand's falling-block gravity, i.e. how slowly it falls as a block.").defineInRange("fallingBlockGravityMultiplier", 0.4D, 0.0D, 16.0D); b.pop(); @@ -200,10 +192,6 @@ public final class AntarchyMiscConfig { static boolean elythiaFireflyParticlesEnabled() { return ELYTHIA_FIREFLY_PARTICLES_ENABLED.get(); } - static boolean dreamSandEnabled() { return DREAM_SAND_ENABLED.get(); } - static double dreamSandJumpVelocityMultiplier() { return DREAM_SAND_JUMP_VELOCITY_MULTIPLIER.get(); } - static double dreamSandGravityMultiplier() { return DREAM_SAND_GRAVITY_MULTIPLIER.get(); } - static double dreamSandEffectDurationSeconds() { return DREAM_SAND_EFFECT_DURATION_SECONDS.get(); } static double dreamSandFallingBlockGravityMultiplier() { return DREAM_SAND_FALLING_BLOCK_GRAVITY_MULTIPLIER.get(); } static boolean ichorWitherEnabled() { return ICHOR_WITHER_ENABLED.get(); } diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java index 6f416773..939daf35 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java @@ -272,12 +272,6 @@ public class AntarchyNeoforge { player, TigerEyeCamouflageSync.payload(player) )); - com.craisinlord.antarchy.content.time.TimeDilationApi.setSyncDispatcher( - com.craisinlord.antarchy.neoforge.network.AntarchyTimeDilationNetworking::syncRate - ); - com.craisinlord.antarchy.content.time.TimeDilationApi.setFieldSyncDispatcher( - com.craisinlord.antarchy.neoforge.network.AntarchyTimeDilationNetworking::syncFields - ); if (isSupportedInfinityLoaded()) { InfinityCompat.bind(new NeoForgeInfinityCompat()); } @@ -451,7 +445,6 @@ public class AntarchyNeoforge { AntarchyObjects.setLucid(AntarchyNeoforgeEntites.LUCID); AntarchyObjects.setVortex(AntarchyNeoforgeEntites.VORTEX); AntarchyObjects.setWindVortex(() -> AntarchyNeoforgeEntites.WIND_VORTEX.get()); - AntarchyObjects.setTimeDilationField(() -> AntarchyNeoforgeEntites.TIME_DILATION_FIELD.get()); AntarchyObjects.setRoyalBlackHole(() -> AntarchyNeoforgeEntites.ROYAL_BLACK_HOLE.get()); AntarchyObjects.setRoyalAssailantBlackHole(() -> AntarchyNeoforgeEntites.ROYAL_ASSAILANT_BLACK_HOLE.get()); AntarchyObjects.setVortexChargeProjectile(() -> AntarchyNeoforgeEntites.VORTEX_CHARGE_PROJECTILE.get()); diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforgeEvents.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforgeEvents.java index 85193023..a1f88119 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforgeEvents.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforgeEvents.java @@ -6,7 +6,6 @@ import com.craisinlord.antarchy.content.command.CaterpillarCommand; import com.craisinlord.antarchy.content.command.DimensionalTearCommand; import com.craisinlord.antarchy.content.command.QueenLocateCommand; import com.craisinlord.antarchy.content.command.RoyalCommand; -import com.craisinlord.antarchy.content.time.TimeDilationCommand; import net.neoforged.bus.api.SubscribeEvent; import net.neoforged.fml.common.EventBusSubscriber; import net.neoforged.neoforge.event.RegisterCommandsEvent; @@ -25,7 +24,6 @@ public final class AntarchyNeoforgeEvents { CaterpillarCommand.register(event.getDispatcher()); DimensionalTearCommand.register(event.getDispatcher()); QueenLocateCommand.register(event.getDispatcher()); - TimeDilationCommand.register(event.getDispatcher()); RoyalCommand.register(event.getDispatcher()); com.craisinlord.antarchy.content.command.PortalGunCommand.register(event.getDispatcher()); } diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java index 7025eefd..d2450464 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java @@ -16,7 +16,6 @@ import com.craisinlord.antarchy.neoforge.registry.AntarchyNeoforgeItems; import com.craisinlord.antarchy.neoforge.registry.AntarchyNeoforgeMisc; import com.mojang.blaze3d.shaders.FogShape; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.DefaultVertexFormat; import com.mojang.blaze3d.vertex.VertexConsumer; import net.minecraft.client.model.BoatModel; import net.minecraft.client.model.ArmorStandModel; @@ -39,7 +38,6 @@ import net.minecraft.client.renderer.BiomeColors; import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; import net.minecraft.client.renderer.ItemBlockRenderTypes; import net.minecraft.client.renderer.RenderType; -import net.minecraft.client.renderer.ShaderInstance; import net.minecraft.client.renderer.blockentity.CampfireRenderer; import net.minecraft.client.renderer.entity.LivingEntityRenderer; import net.minecraft.client.renderer.item.ItemProperties; @@ -58,7 +56,6 @@ import net.neoforged.bus.api.SubscribeEvent; import net.neoforged.fml.common.EventBusSubscriber; import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; import net.neoforged.neoforge.client.event.RegisterParticleProvidersEvent; -import net.neoforged.neoforge.client.event.RegisterShadersEvent; import net.neoforged.neoforge.client.event.RegisterColorHandlersEvent; import net.neoforged.neoforge.client.event.RegisterMenuScreensEvent; import net.neoforged.neoforge.client.event.EntityRenderersEvent; @@ -101,23 +98,10 @@ public final class AntarchyNeoForgeClient { private AntarchyNeoForgeClient() { } - @SubscribeEvent - public static void registerPortalViewShader(RegisterShadersEvent event) { - PortalGunPortalViewRenderer.clearPortalViewShader(); - try { - event.registerShader( - new ShaderInstance(event.getResourceProvider(), ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "portal_view"), DefaultVertexFormat.POSITION_TEX), - PortalGunPortalViewRenderer::setPortalViewShader - ); - } catch (java.io.IOException | RuntimeException exception) { - Antarchy.LOGGER.error("Failed to register portal view shader", exception); - } - } - @SubscribeEvent public static void clientSetup(FMLClientSetupEvent event) { Antarchy.physicalClient = true; - com.craisinlord.antarchy.content.movement.AntarchyGravityHooks.registerClient(); + com.craisinlord.antarchy.content.AntarchyAnthologyHooks.registerClient(); event.enqueueWork(() -> { AntarchyArchivePreviews.register(); AntarchyComputerGames.register(); @@ -187,7 +171,6 @@ public final class AntarchyNeoForgeClient { event.registerEntityRenderer(AntarchyNeoforgeEntites.LUCID_PEARL_PROJECTILE.get(), ThrownItemRenderer::new); event.registerEntityRenderer(AntarchyNeoforgeEntites.VORTEX_CHARGE_PROJECTILE.get(), ThrownItemRenderer::new); event.registerEntityRenderer(AntarchyNeoforgeEntites.WIND_VORTEX.get(), WindVortexRenderer::new); - event.registerEntityRenderer(AntarchyNeoforgeEntites.TIME_DILATION_FIELD.get(), TimeDilationFieldRenderer::new); event.registerEntityRenderer(AntarchyNeoforgeEntites.ROYAL_BLACK_HOLE.get(), com.craisinlord.antarchy.content.client.renderer.RoyalBlackHoleRenderer::new); event.registerEntityRenderer(AntarchyNeoforgeEntites.ROYAL_ASSAILANT_BLACK_HOLE.get(), com.craisinlord.antarchy.content.client.renderer.RoyalAssailantBlackHoleRenderer::new); event.registerEntityRenderer(AntarchyNeoforgeEntites.CRITTER_CAGE_PROJECTILE.get(), ThrownItemRenderer::new); diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/CameraShakeHandler.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/CameraShakeHandler.java deleted file mode 100644 index 12daca96..00000000 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/CameraShakeHandler.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.craisinlord.antarchy.neoforge.client; - -import com.craisinlord.antarchy.Antarchy; -import com.craisinlord.antarchy.content.client.CameraShakeClientState; -import com.craisinlord.antarchy.content.client.HerculesBeetleImpactShakeClientState; -import com.craisinlord.antarchy.content.item.BigBerthaItem; -import net.minecraft.client.Minecraft; -import net.minecraft.util.Mth; -import net.neoforged.api.distmarker.Dist; -import net.neoforged.bus.api.SubscribeEvent; -import net.neoforged.fml.common.EventBusSubscriber; -import net.neoforged.neoforge.client.event.ViewportEvent; - -@EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT) -public final class CameraShakeHandler { - private static final int TORETERROR_SHAKE_TICKS = 25; - - private CameraShakeHandler() { - } - - @SubscribeEvent - public static void onComputeCameraAngles(ViewportEvent.ComputeCameraAngles event) { - Minecraft mc = Minecraft.getInstance(); - if (mc.level == null || mc.player == null) { - CameraShakeClientState.clear(); - return; - } - - float shakeStrength = CameraShakeClientState.getStrength(event.getCamera().getPosition()); - - int beetleShakeTicks = HerculesBeetleImpactShakeClientState.getTicks(); - if (beetleShakeTicks > 0) { - shakeStrength += (float) beetleShakeTicks / TORETERROR_SHAKE_TICKS * 2.0F; - } - - int bigBerthaShakeTicks = BigBerthaItem.clientShakeTicks; - if (bigBerthaShakeTicks > 0) { - shakeStrength += (float) bigBerthaShakeTicks / TORETERROR_SHAKE_TICKS * 2.0F; - } - - if (shakeStrength <= 0.0F) return; - - float time = (float) (mc.player.tickCount + event.getPartialTick()); - event.setYaw(event.getYaw() + Mth.sin(time * 1.5F) * shakeStrength * 2.5F); - event.setPitch(event.getPitch() + Mth.cos(time * 1.8F) * shakeStrength * 2.0F); - event.setRoll(event.getRoll() + Mth.sin(time * 2.2F) * shakeStrength * 1.5F); - } -} diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/ClientPartEntityRegistry.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/ClientPartEntityRegistry.java deleted file mode 100644 index bb7d2fcb..00000000 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/ClientPartEntityRegistry.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.craisinlord.antarchy.neoforge.client; - -import com.craisinlord.antarchy.neoforge.mixins.level.ClientLevelPartEntitiesAccessor; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import net.minecraft.client.multiplayer.ClientLevel; -import net.minecraft.world.level.Level; -import net.neoforged.neoforge.entity.PartEntity; - -public final class ClientPartEntityRegistry { - private ClientPartEntityRegistry() { - } - - public static Int2ObjectMap> get(Level level) { - if (level instanceof ClientLevel clientLevel) { - return ((ClientLevelPartEntitiesAccessor) clientLevel).antarchy$getPartEntities(); - } - return null; - } -} diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/ClientTimeDilationHandler.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/ClientTimeDilationHandler.java deleted file mode 100644 index 7d3aef8a..00000000 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/ClientTimeDilationHandler.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.craisinlord.antarchy.neoforge.client; - -import com.craisinlord.antarchy.Antarchy; -import com.craisinlord.antarchy.content.client.ClientTimeDilationTicker; -import net.minecraft.client.Minecraft; -import net.neoforged.api.distmarker.Dist; -import net.neoforged.bus.api.SubscribeEvent; -import net.neoforged.fml.common.EventBusSubscriber; -import net.neoforged.neoforge.client.event.ClientTickEvent; - -@EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT) -public final class ClientTimeDilationHandler { - private ClientTimeDilationHandler() { - } - - @SubscribeEvent - public static void onClientTick(ClientTickEvent.Post event) { - Minecraft mc = Minecraft.getInstance(); - if (mc.level != null) { - ClientTimeDilationTicker.tick(mc.level); - } - } -} diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/HerculesBeetleClientHandler.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/HerculesBeetleClientHandler.java index 71e2f07a..8a741a3a 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/HerculesBeetleClientHandler.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/HerculesBeetleClientHandler.java @@ -1,7 +1,6 @@ package com.craisinlord.antarchy.neoforge.client; import com.craisinlord.antarchy.Antarchy; -import com.craisinlord.antarchy.content.client.CameraShakeClientState; import com.craisinlord.antarchy.content.client.HerculesBeetleImpactShakeClientState; import com.craisinlord.antarchy.content.client.HordeClientState; import com.craisinlord.antarchy.content.client.KingJudgmentFlashClientState; @@ -30,7 +29,6 @@ public final class HerculesBeetleClientHandler { @SubscribeEvent public static void onClientTick(ClientTickEvent.Post event) { - CameraShakeClientState.tick(); HerculesBeetleImpactShakeClientState.tick(); KingJudgmentFlashClientState.tick(); HordeClientState.tick(); diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/PortalGunPortalViewRenderHandler.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/PortalGunPortalViewRenderHandler.java deleted file mode 100644 index 6403e189..00000000 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/PortalGunPortalViewRenderHandler.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.craisinlord.antarchy.neoforge.client; - -import com.craisinlord.antarchy.Antarchy; -import com.craisinlord.antarchy.content.client.renderer.PortalGunPortalViewRenderer; -import net.neoforged.api.distmarker.Dist; -import net.neoforged.bus.api.SubscribeEvent; -import net.neoforged.fml.common.EventBusSubscriber; -import net.neoforged.neoforge.client.event.RenderLevelStageEvent; - -@EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT) -public final class PortalGunPortalViewRenderHandler { - private PortalGunPortalViewRenderHandler() { - } - - @SubscribeEvent - public static void onRenderLevelStage(RenderLevelStageEvent event) { - if (event.getStage() != RenderLevelStageEvent.Stage.AFTER_LEVEL) { - return; - } - PortalGunPortalViewRenderer.render(event.getCamera(), event.getModelViewMatrix(), event.getProjectionMatrix(), event.getPartialTick()); - } -} diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/PortalGunRollClientHandler.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/PortalGunRollClientHandler.java deleted file mode 100644 index 38e916b0..00000000 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/client/PortalGunRollClientHandler.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.craisinlord.antarchy.neoforge.client; - -import com.craisinlord.antarchy.Antarchy; -import com.craisinlord.antarchy.content.client.PortalGunRollClientState; -import net.minecraft.client.Minecraft; -import net.neoforged.api.distmarker.Dist; -import net.neoforged.bus.api.SubscribeEvent; -import net.neoforged.fml.common.EventBusSubscriber; -import net.neoforged.neoforge.client.event.ClientTickEvent; - -@EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT) -public final class PortalGunRollClientHandler { - private PortalGunRollClientHandler() { - } - - @SubscribeEvent - public static void onClientTick(ClientTickEvent.Post event) { - PortalGunRollClientState.tick(Minecraft.getInstance()); - } -} diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/entity/multipart/MultipartPartEntity.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/entity/multipart/MultipartPartEntity.java deleted file mode 100644 index 737a6ce5..00000000 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/entity/multipart/MultipartPartEntity.java +++ /dev/null @@ -1,207 +0,0 @@ -package com.craisinlord.antarchy.neoforge.entity.multipart; - -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.anthology.gravity.GravityApi; -import com.craisinlord.anthology.gravity.GravityRotationUtil; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.InteractionResult; -import net.minecraft.world.damagesource.DamageSource; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.EntityDimensions; -import net.minecraft.world.entity.OwnableEntity; -import net.minecraft.world.entity.Pose; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.phys.Vec3; -import net.neoforged.neoforge.entity.PartEntity; -import org.jetbrains.annotations.Nullable; - -public class MultipartPartEntity extends PartEntity implements OwnableEntity, MultipartPartAccess { - private final MultipartEntityOwner owner; - private final int partIndex; - private final MultipartPartDefinition definition; - - public MultipartPartEntity(Entity parent, MultipartEntityOwner owner, int partIndex, MultipartPartDefinition definition) { - super(parent); - this.owner = owner; - this.partIndex = partIndex; - this.definition = definition; - this.setNoGravity(true); - this.refreshDimensions(); - this.antarchy$syncFromParent(); - } - - public int getPartIndex() { - return this.partIndex; - } - - public String getPartName() { - return this.definition.name(); - } - - public float getDamageMultiplier() { - return this.definition.damageMultiplier(); - } - - public MultipartPartDefinition getPartDefinition() { - return this.definition; - } - - @Override - public @Nullable java.util.UUID getOwnerUUID() { - Entity parent = this.getParent(); - return parent instanceof OwnableEntity ownable ? ownable.getOwnerUUID() : null; - } - - @Override - public EntityDimensions getDimensions(Pose pose) { - return EntityDimensions.scalable(this.definition.width(), this.definition.height()); - } - - @Override - public void antarchy$syncFromParent() { - Entity parent = this.getParent(); - if (parent == null || parent.isRemoved()) { - return; - } - - GravityApi.applySyncedState( - this, - GravityApi.getGravityDirection(parent), - GravityApi.getPrevGravityDirection(parent), - GravityApi.isGravityForced(parent), - GravityApi.getTransitionDuration(parent), - GravityApi.getTransitionRemaining(parent) - ); - - double oldX = this.getX(); - double oldY = this.getY(); - double oldZ = this.getZ(); - double yawRadians = Math.toRadians(parent.getYRot()); - Vec3 forward = new Vec3(-Math.sin(yawRadians), 0.0D, Math.cos(yawRadians)); - Vec3 right = new Vec3(forward.z, 0.0D, -forward.x); - Vec3 localOffset = new Vec3( - forward.x * this.definition.forwardOffset() + right.x * this.definition.lateralOffset(), - this.definition.yOffset(), - forward.z * this.definition.forwardOffset() + right.z * this.definition.lateralOffset()); - Vec3 offset = GravityRotationUtil.vecPlayerToWorld(localOffset, GravityApi.getGravityDirection(parent)); - Vec3 position = parent.position().add(offset); - this.setPos(position.x, position.y, position.z); - this.setRot(parent.getYRot(), parent.getXRot()); - this.xo = oldX; - this.yo = oldY; - this.zo = oldZ; - this.xOld = oldX; - this.yOld = oldY; - this.zOld = oldZ; - } - - @Override - public boolean is(Entity entity) { - return entity == this || entity == this.getParent(); - } - - @Override - public boolean isPickable() { - return true; - } - - @Override - public boolean isAttackable() { - return true; - } - - @Override - public boolean isPushable() { - return false; - } - - @Override - public boolean canBeCollidedWith() { - // Always true so player melee raycasts (ProjectileUtil.getEntityHitResult) can find this part. - // Physical push is prevented separately via isPushable()=false and canCollideWith()=false. - return !this.isRemoved(); - } - - @Override - public boolean canCollideWith(Entity entity) { - if (!this.definition.collisionEnabled()) { - return false; - } - - Entity parent = this.getParent(); - if (entity == parent) { - return false; - } - - if (entity instanceof PartEntity otherPart && otherPart.getParent() == parent) { - return false; - } - - return entity.canBeCollidedWith() && !this.isPassengerOfSameVehicle(entity); - } - - @Override - public boolean shouldBeSaved() { - return false; - } - - @Override - public ItemStack getPickResult() { - Entity parent = this.getParent(); - return parent == null ? ItemStack.EMPTY : parent.getPickResult(); - } - - @Override - public boolean hurt(DamageSource source, float amount) { - Entity parent = this.getParent(); - if (parent == null || parent.isRemoved()) { - return false; - } - - if (this.level().isClientSide()) { - if (source.getEntity() instanceof Player) { - MultipartFramework.sendMultipartAttack(parent.getUUID(), this.partIndex, amount * this.definition.damageMultiplier()); - } - return true; - } - - return this.owner.antarchy$hurtMultipartPart(this, source, amount * this.definition.damageMultiplier()); - } - - @Override - public boolean isInvulnerableTo(DamageSource source) { - return false; - } - - @Override - public InteractionResult interactAt(Player player, Vec3 vec, InteractionHand hand) { - Entity parent = this.getParent(); - if (parent == null || parent.isRemoved()) { - return InteractionResult.PASS; - } - - if (this.level().isClientSide()) { - MultipartFramework.sendMultipartInteract(parent.getUUID(), this.partIndex, hand.ordinal()); - return InteractionResult.SUCCESS; - } - - return this.owner.antarchy$interactMultipartPart(this, player, vec, hand); - } - - @Override - protected void defineSynchedData(net.minecraft.network.syncher.SynchedEntityData.Builder builder) { - } - - @Override - protected void readAdditionalSaveData(CompoundTag tag) { - } - - @Override - protected void addAdditionalSaveData(CompoundTag tag) { - } -} diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/entity/multipart/MultipartPartLevelRegistry.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/entity/multipart/MultipartPartLevelRegistry.java deleted file mode 100644 index e986bb07..00000000 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/entity/multipart/MultipartPartLevelRegistry.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.craisinlord.antarchy.neoforge.entity.multipart; - -import com.craisinlord.antarchy.content.entity.multipart.MultipartEntityOwner; -import com.craisinlord.antarchy.neoforge.mixins.level.ServerLevelPartEntitiesAccessor; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.level.Level; -import net.neoforged.neoforge.entity.PartEntity; - -public final class MultipartPartLevelRegistry { - private MultipartPartLevelRegistry() { - } - - public static void register(MultipartEntityOwner owner) { - Entity[] parts = owner.antarchy$getMultipartParts(); - if (parts == null) { - return; - } - - Int2ObjectMap> registry = getRegistry(((Entity) owner).level()); - if (registry == null) { - return; - } - - for (Entity part : parts) { - if (part instanceof PartEntity partEntity) { - registry.put(partEntity.getId(), partEntity); - } - } - } - - public static void unregister(MultipartEntityOwner owner) { - Entity[] parts = owner.antarchy$getMultipartParts(); - if (parts == null) { - return; - } - - Int2ObjectMap> registry = getRegistry(((Entity) owner).level()); - if (registry == null) { - return; - } - - for (Entity part : parts) { - if (part instanceof PartEntity partEntity) { - registry.remove(partEntity.getId()); - } - } - } - - private static Int2ObjectMap> getRegistry(Level level) { - if (level instanceof ServerLevel serverLevel) { - return ((ServerLevelPartEntitiesAccessor) serverLevel).antarchy$getPartEntities(); - } - - if (level.isClientSide()) { - return com.craisinlord.antarchy.neoforge.client.ClientPartEntityRegistry.get(level); - } - - return null; - } -} diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/mixins/entity/MultipartEntityBridgeMixin.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/mixins/entity/MultipartEntityBridgeMixin.java deleted file mode 100644 index 09806c09..00000000 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/mixins/entity/MultipartEntityBridgeMixin.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.craisinlord.antarchy.neoforge.mixins.entity; - -import com.craisinlord.antarchy.content.entity.multipart.MultipartEntityOwner; -import net.minecraft.world.entity.Entity; -import net.neoforged.neoforge.entity.PartEntity; -import org.jetbrains.annotations.Nullable; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; - -@Mixin(Entity.class) -/* - * Exposes multipart child lookup from base entities. - */ -public abstract class MultipartEntityBridgeMixin { - @Unique - private Entity[] antarchy$multipartSourceParts; - - @Unique - private PartEntity[] antarchy$multipartBridgeParts; - - public boolean isMultipartEntity() { - return (Object) this instanceof MultipartEntityOwner; - } - - @Nullable - public PartEntity[] getParts() { - if (!((Object) this instanceof MultipartEntityOwner owner)) { - return null; - } - - Entity[] parts = owner.antarchy$getMultipartParts(); - if (parts == null) { - parts = owner.antarchy$createMultipartParts(); - owner.antarchy$setMultipartParts(parts); - owner.antarchy$syncMultipartParts(); - } - - if (parts.length == 0) { - return new PartEntity[0]; - } - - if (this.antarchy$multipartSourceParts != parts || this.antarchy$multipartBridgeParts == null || this.antarchy$multipartBridgeParts.length != parts.length) { - PartEntity[] bridgedParts = new PartEntity[parts.length]; - for (int i = 0; i < parts.length; i++) { - if (!(parts[i] instanceof PartEntity part)) { - throw new IllegalStateException("Multipart owner returned a non-PartEntity child: " + parts[i]); - } - bridgedParts[i] = part; - } - this.antarchy$multipartSourceParts = parts; - this.antarchy$multipartBridgeParts = bridgedParts; - } - - return this.antarchy$multipartBridgeParts; - } -} diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/mixins/entity/MultipartEntityLevelRegistryMixin.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/mixins/entity/MultipartEntityLevelRegistryMixin.java deleted file mode 100644 index 326992ca..00000000 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/mixins/entity/MultipartEntityLevelRegistryMixin.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.craisinlord.antarchy.neoforge.mixins.entity; - -import com.craisinlord.antarchy.content.entity.multipart.MultipartEntityOwner; -import com.craisinlord.antarchy.neoforge.entity.multipart.MultipartPartLevelRegistry; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.level.entity.EntityInLevelCallback; -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(Entity.class) -/* - * Keeps multipart child entities registered in NeoForge levels. - */ -public abstract class MultipartEntityLevelRegistryMixin { - @Inject(method = "setLevelCallback", at = @At("TAIL")) - private void antarchy$registerMultipartParts(EntityInLevelCallback entityInLevelCallback, CallbackInfo ci) { - if ((Object) this instanceof MultipartEntityOwner owner - && entityInLevelCallback != EntityInLevelCallback.NULL) { - if (owner.antarchy$getMultipartParts() == null) { - owner.antarchy$spawnMultipartParts(); - } - MultipartPartLevelRegistry.register(owner); - } - } - - @Inject(method = "setRemoved", at = @At("HEAD")) - private void antarchy$unregisterMultipartParts(Entity.RemovalReason removalReason, CallbackInfo ci) { - if ((Object) this instanceof MultipartEntityOwner owner) { - MultipartPartLevelRegistry.unregister(owner); - } - } -} diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/mixins/level/ClientLevelPartEntitiesAccessor.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/mixins/level/ClientLevelPartEntitiesAccessor.java deleted file mode 100644 index bfdce95b..00000000 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/mixins/level/ClientLevelPartEntitiesAccessor.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.craisinlord.antarchy.neoforge.mixins.level; - -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import net.minecraft.client.multiplayer.ClientLevel; -import net.neoforged.neoforge.entity.PartEntity; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Mixin(ClientLevel.class) -/* - * Accessor for client part-entity storage. - */ -public interface ClientLevelPartEntitiesAccessor { - @Accessor("partEntities") - Int2ObjectMap> antarchy$getPartEntities(); -} diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/mixins/level/ServerLevelPartEntitiesAccessor.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/mixins/level/ServerLevelPartEntitiesAccessor.java deleted file mode 100644 index c744af6c..00000000 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/mixins/level/ServerLevelPartEntitiesAccessor.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.craisinlord.antarchy.neoforge.mixins.level; - -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import net.minecraft.server.level.ServerLevel; -import net.neoforged.neoforge.entity.PartEntity; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Mixin(ServerLevel.class) -/* - * Accessor for server part-entity storage. - */ -public interface ServerLevelPartEntitiesAccessor { - @Accessor("dragonParts") - Int2ObjectMap> antarchy$getPartEntities(); -} diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/network/AntarchyGravityNetworking.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/network/AntarchyGravityNetworking.java index 756672e9..890afa97 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/network/AntarchyGravityNetworking.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/network/AntarchyGravityNetworking.java @@ -12,12 +12,9 @@ import com.craisinlord.antarchy.content.network.GravityGunPrimaryPayload; import com.craisinlord.antarchy.content.network.GravityGunScrollPayload; import com.craisinlord.antarchy.content.network.TemporalTunerScrollPayload; import com.craisinlord.antarchy.content.item.TemporalTunerItem; -import com.craisinlord.antarchy.content.network.ImpactShakePayload; import com.craisinlord.antarchy.content.network.PortalGunPrimaryPayload; -import com.craisinlord.antarchy.content.client.CameraShakeClientState; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.phys.Vec3; import net.neoforged.neoforge.network.PacketDistributor; import net.neoforged.neoforge.network.handling.IPayloadContext; import net.neoforged.neoforge.network.registration.PayloadRegistrar; @@ -36,10 +33,6 @@ public final class AntarchyGravityNetworking { com.craisinlord.antarchy.content.network.PortalGunIndicatorRequestPayload.TYPE, com.craisinlord.antarchy.content.network.PortalGunIndicatorRequestPayload.STREAM_CODEC, AntarchyGravityNetworking::handlePortalGunIndicatorRequest - ).playToClient( - ImpactShakePayload.TYPE, - ImpactShakePayload.STREAM_CODEC, - AntarchyGravityNetworking::handleImpactShake ).playToServer( GravityGunPrimaryPayload.TYPE, GravityGunPrimaryPayload.STREAM_CODEC, @@ -48,20 +41,6 @@ public final class AntarchyGravityNetworking { PortalGunPrimaryPayload.TYPE, PortalGunPrimaryPayload.STREAM_CODEC, AntarchyGravityNetworking::handlePortalGunPrimary - ).playToServer( - com.craisinlord.antarchy.content.network.PortalGunTransitPayload.TYPE, - com.craisinlord.antarchy.content.network.PortalGunTransitPayload.STREAM_CODEC, - (payload, context) -> { - if (context.player() instanceof ServerPlayer serverPlayer && serverPlayer.getServer() != null && serverPlayer.getServer().isSameThread()) { - com.craisinlord.antarchy.content.portalgun.PortalGunTransitHandler.handle(serverPlayer, payload); - return; - } - context.enqueueWork(() -> { - if (context.player() instanceof ServerPlayer serverPlayer) { - com.craisinlord.antarchy.content.portalgun.PortalGunTransitHandler.handle(serverPlayer, payload); - } - }); - } ).playToServer( com.craisinlord.antarchy.content.network.PortalGunMoonAimPayload.TYPE, com.craisinlord.antarchy.content.network.PortalGunMoonAimPayload.STREAM_CODEC, @@ -105,15 +84,6 @@ public final class AntarchyGravityNetworking { ); } - private static void handleImpactShake(ImpactShakePayload payload, IPayloadContext context) { - context.enqueueWork(() -> CameraShakeClientState.triggerImpact( - new Vec3(payload.x(), payload.y(), payload.z()), - payload.intensity(), - payload.durationTicks(), - payload.radius() - )); - } - private static void handleGravityGunScroll(GravityGunScrollPayload payload, IPayloadContext context) { context.enqueueWork(() -> { if (!(context.player() instanceof ServerPlayer serverPlayer)) { diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/network/AntarchyTimeDilationNetworking.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/network/AntarchyTimeDilationNetworking.java deleted file mode 100644 index 9cfcee7a..00000000 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/network/AntarchyTimeDilationNetworking.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.craisinlord.antarchy.neoforge.network; - -import com.craisinlord.antarchy.content.network.TimeDilationRatePayload; -import com.craisinlord.antarchy.content.network.TimeDilationFieldsPayload; -import com.craisinlord.antarchy.content.time.TimeDilationFieldSnapshot; -import java.util.List; -import com.craisinlord.antarchy.content.time.TimeDilationApi; -import net.minecraft.world.entity.Entity; -import net.minecraft.server.level.ServerPlayer; -import net.neoforged.neoforge.network.PacketDistributor; -import net.neoforged.neoforge.network.handling.IPayloadContext; -import net.neoforged.neoforge.network.registration.PayloadRegistrar; - -public final class AntarchyTimeDilationNetworking { - private AntarchyTimeDilationNetworking() { - } - - public static void register(PayloadRegistrar registrar) { - registrar.playToClient( - TimeDilationRatePayload.TYPE, - TimeDilationRatePayload.STREAM_CODEC, - AntarchyTimeDilationNetworking::handleTimeDilationRate - ); - registrar.playToClient( - TimeDilationFieldsPayload.TYPE, - TimeDilationFieldsPayload.STREAM_CODEC, - AntarchyTimeDilationNetworking::handleTimeDilationFields - ); - } - - public static void syncRate(Entity entity, double rate) { - PacketDistributor.sendToPlayersTrackingEntityAndSelf(entity, new TimeDilationRatePayload(entity.getUUID(), rate)); - } - - public static void syncRateToPlayer(ServerPlayer player, Entity entity, double rate) { - PacketDistributor.sendToPlayer(player, new TimeDilationRatePayload(entity.getUUID(), rate)); - } - - public static void syncFields(ServerPlayer player, List fields) { - PacketDistributor.sendToPlayer(player, new TimeDilationFieldsPayload(fields)); - } - - private static void handleTimeDilationRate(TimeDilationRatePayload payload, IPayloadContext context) { - context.enqueueWork(() -> { - TimeDilationApi.applySyncedRate(payload.entityUuid(), payload.rate()); - }); - } - - private static void handleTimeDilationFields(TimeDilationFieldsPayload payload, IPayloadContext context) { - context.enqueueWork(() -> com.craisinlord.antarchy.content.client.ClientTimeDilationTicker.applyFields(payload.fields())); - } -} diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/network/MultipartNetworking.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/network/MultipartNetworking.java deleted file mode 100644 index 212df5e6..00000000 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/network/MultipartNetworking.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.craisinlord.antarchy.neoforge.network; - -import com.craisinlord.antarchy.content.entity.multipart.MultipartEntityOwner; -import com.craisinlord.antarchy.content.entity.multipart.network.MultipartAttackPayload; -import com.craisinlord.antarchy.content.entity.multipart.network.MultipartInteractPayload; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.damagesource.DamageSource; -import net.minecraft.world.entity.Entity; -import net.neoforged.neoforge.network.handling.IPayloadContext; -import net.neoforged.neoforge.network.registration.PayloadRegistrar; - -public final class MultipartNetworking { - private MultipartNetworking() { - } - - public static void register(PayloadRegistrar registrar) { - registrar.playToServer( - MultipartAttackPayload.TYPE, - MultipartAttackPayload.STREAM_CODEC, - MultipartNetworking::handleAttack - ).playToServer( - MultipartInteractPayload.TYPE, - MultipartInteractPayload.STREAM_CODEC, - MultipartNetworking::handleInteract - ); - } - - private static void handleAttack(MultipartAttackPayload payload, IPayloadContext context) { - context.enqueueWork(() -> { - if (!(context.player() instanceof ServerPlayer serverPlayer)) { - return; - } - - Entity entity = serverPlayer.serverLevel().getEntity(payload.parentId()); - if (!(entity instanceof MultipartEntityOwner owner)) { - return; - } - - Entity[] parts = owner.antarchy$getMultipartParts(); - if (parts == null) { - parts = owner.antarchy$createMultipartParts(); - owner.antarchy$setMultipartParts(parts); - owner.antarchy$syncMultipartParts(); - } - - if (payload.partIndex() < 0 || payload.partIndex() >= parts.length) { - return; - } - - Entity part = parts[payload.partIndex()]; - if (part == null || part.isRemoved()) { - return; - } - - if (serverPlayer.distanceToSqr(part) > 10000.0D) { - return; - } - - serverPlayer.attack(part); - }); - } - - private static void handleInteract(MultipartInteractPayload payload, IPayloadContext context) { - context.enqueueWork(() -> { - if (!(context.player() instanceof ServerPlayer serverPlayer)) { - return; - } - - Entity entity = serverPlayer.serverLevel().getEntity(payload.parentId()); - if (!(entity instanceof MultipartEntityOwner owner)) { - return; - } - - Entity[] parts = owner.antarchy$getMultipartParts(); - if (parts == null) { - parts = owner.antarchy$createMultipartParts(); - owner.antarchy$setMultipartParts(parts); - owner.antarchy$syncMultipartParts(); - } - - if (payload.partIndex() < 0 || payload.partIndex() >= parts.length) { - return; - } - - Entity part = parts[payload.partIndex()]; - if (part == null || part.isRemoved()) { - return; - } - - InteractionHand hand = payload.handId() == 0 ? InteractionHand.MAIN_HAND : InteractionHand.OFF_HAND; - owner.antarchy$interactMultipartPart(part, serverPlayer, part.position(), hand); - }); - } -} diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java index 743077a7..21b80546 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java @@ -20,7 +20,6 @@ import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity; import com.craisinlord.antarchy.content.entity.lucid.LucidBoltEntity; import com.craisinlord.antarchy.content.entity.lucid.LucidEntity; import com.craisinlord.antarchy.content.entity.lucid.LucidEyeProjectileEntity; -import com.craisinlord.antarchy.content.entity.multipart.MultipartFramework; import com.craisinlord.antarchy.content.entity.vortex.VortexChargeProjectileEntity; import com.craisinlord.antarchy.content.entity.vortex.VortexEntity; import com.craisinlord.antarchy.content.entity.trades.DrTrayaurusTradeManager; @@ -32,11 +31,9 @@ import com.craisinlord.antarchy.content.item.ultimate.UltimateGearHelper; import com.craisinlord.antarchy.content.AntarchyTags; import com.craisinlord.antarchy.mixins.PoiTypesAccessor; import com.craisinlord.antarchy.content.portal.PermanentPortalManager; -import com.craisinlord.antarchy.content.time.TimeDilationManager; import com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageController; import com.craisinlord.antarchy.content.tigereye.TigerEyeCamouflageSync; import com.craisinlord.antarchy.neoforge.AntarchyNeoForgeFluidTypes; -import com.craisinlord.antarchy.neoforge.entity.multipart.MultipartPartEntity; import net.minecraft.core.BlockPos; import net.minecraft.core.Holder; import net.minecraft.core.registries.BuiltInRegistries; @@ -139,13 +136,10 @@ public final class AntarchyNeoForgeEvents { NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleBloodglassWardRemoved); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleBloodglassWardExpired); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::tickBloodglassRecharge); - NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::tickTimeDilation); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::tickAntArrivals); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleBloodglassPlayerDeath); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleBloodglassRespawn); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleBloodglassLogin); - NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleTimeDilationLogin); - NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleTimeDilationRespawn); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleCavarynHordeKill); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleCavarynHordeBlockBreak); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::tickCavarynHordes); @@ -258,10 +252,6 @@ public final class AntarchyNeoForgeEvents { } } - static void tickTimeDilation(ServerTickEvent.Post event) { - TimeDilationManager.tickServer(event.getServer()); - } - static void tickAntArrivals(ServerTickEvent.Post event) { com.craisinlord.antarchy.content.entity.ant.AntArrivalScheduler.tick(event.getServer()); } @@ -326,29 +316,11 @@ public final class AntarchyNeoForgeEvents { return; } - if (event.getTarget() instanceof com.craisinlord.antarchy.content.time.TimeDilationEntityAccess access - && event.getEntity() instanceof ServerPlayer trackingPlayer) { - com.craisinlord.antarchy.neoforge.network.AntarchyTimeDilationNetworking.syncRateToPlayer( - trackingPlayer, event.getTarget(), access.antarchy$getTimeDilationRate() - ); - } if (event.getTarget() instanceof ServerPlayer trackedPlayer && event.getEntity() instanceof ServerPlayer trackingPlayer) { TigerEyeCamouflageSync.syncTo(trackingPlayer, trackedPlayer); } } - static void handleTimeDilationLogin(PlayerEvent.PlayerLoggedInEvent event) { - if (event.getEntity() instanceof ServerPlayer player) { - TimeDilationManager.resyncPersistentEffects(player); - } - } - - static void handleTimeDilationRespawn(PlayerEvent.PlayerRespawnEvent event) { - if (event.getEntity() instanceof ServerPlayer player) { - TimeDilationManager.resyncPersistentEffects(player); - } - } - static void handleTigerEyeLogout(PlayerEvent.PlayerLoggedOutEvent event) { if (event.getEntity() instanceof ServerPlayer player) { TigerEyeCamouflageController.deactivate(player, false); @@ -364,7 +336,6 @@ public final class AntarchyNeoForgeEvents { static void handleTigerEyeRespawn(PlayerEvent.PlayerRespawnEvent event) { if (event.getEntity() instanceof ServerPlayer player) { - com.craisinlord.antarchy.content.time.ChronosphereManager.refresh(player); TigerEyeCamouflageController.deactivate(player, false); TigerEyeCamouflageSync.sync(player); } @@ -372,14 +343,12 @@ public final class AntarchyNeoForgeEvents { static void handleTigerEyeLogin(PlayerEvent.PlayerLoggedInEvent event) { if (event.getEntity() instanceof ServerPlayer player) { - com.craisinlord.antarchy.content.time.ChronosphereManager.refresh(player); TigerEyeCamouflageSync.sync(player); } } static void handleTigerEyeDimensionChange(PlayerEvent.PlayerChangedDimensionEvent event) { if (event.getEntity() instanceof ServerPlayer player) { - com.craisinlord.antarchy.content.time.ChronosphereManager.refresh(player); TigerEyeCamouflageController.deactivate(player, false); TigerEyeCamouflageSync.sync(player); } @@ -1403,24 +1372,6 @@ public final class AntarchyNeoForgeEvents { VortexChargeProjectileEntity.defaultItemSupplier = () -> AntarchyNeoforgeItems.VORTEX_CHARGE.get(); VortexChargeProjectileEntity.projectileTypeSupplier = () -> AntarchyNeoforgeEntites.VORTEX_CHARGE_PROJECTILE.get(); VortexChargeProjectileEntity.windVortexTypeSupplier = () -> AntarchyNeoforgeEntites.WIND_VORTEX.get(); - MultipartFramework.bootstrap( - (owner, partIndex, spec) -> new MultipartPartEntity((Entity) owner, owner, partIndex, spec), - new MultipartFramework.NetworkBridge() { - @Override - public void sendAttack(java.util.UUID parentId, int partIndex, float damage) { - net.neoforged.neoforge.network.PacketDistributor.sendToServer( - new com.craisinlord.antarchy.content.entity.multipart.network.MultipartAttackPayload(parentId, partIndex, damage) - ); - } - - @Override - public void sendInteract(java.util.UUID parentId, int partIndex, int handId) { - net.neoforged.neoforge.network.PacketDistributor.sendToServer( - new com.craisinlord.antarchy.content.entity.multipart.network.MultipartInteractPayload(parentId, partIndex, handId) - ); - } - } - ); ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeBlocks.UMBRAL_MOSS_BLOCK.get().asItem(), 0.65f); ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeBlocks.UMBRAL_MOSS_CARPET.get().asItem(), 0.3f); ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeBlocks.BLUSH_MOSS_BLOCK.get().asItem(), 0.65f); diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java index 0590a476..c16008ea 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java @@ -68,7 +68,6 @@ import com.craisinlord.antarchy.content.entity.lucid.LucidEyeProjectileEntity; import com.craisinlord.antarchy.content.entity.vortex.VortexChargeProjectileEntity; import com.craisinlord.antarchy.content.entity.vortex.VortexEntity; import com.craisinlord.antarchy.content.entity.vortex.WindVortexEntity; -import com.craisinlord.antarchy.content.time.TimeDilationFieldEntity; import com.craisinlord.antarchy.content.entity.nightmare.NightmareEntity; import com.craisinlord.antarchy.content.entity.nightmare.NightmarePortalEntity; import com.craisinlord.antarchy.content.entity.nightmare.NightmareBiteEntity; @@ -394,13 +393,6 @@ public final class AntarchyNeoforgeEntites { .updateInterval(2) .fireImmune() .build("royal_assailant_black_hole")); - public static final DeferredHolder, EntityType> TIME_DILATION_FIELD = ENTITY_TYPES.register("time_dilation_field", - () -> EntityType.Builder.of(TimeDilationFieldEntity::new, MobCategory.MISC) - .sized(0.5F, 0.5F) - .clientTrackingRange(16) - .updateInterval(20) - .fireImmune() - .build("time_dilation_field")); public static final DeferredHolder, EntityType> LUCID_BOLT = ENTITY_TYPES.register("lucid_bolt", () -> EntityType.Builder.of(LucidBoltEntity::new, MobCategory.MISC) .sized(0.3F, 0.3F) diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java index 21eb8ac3..bc171f62 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java @@ -10,8 +10,6 @@ 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.CommandedMobEffect; -import com.craisinlord.antarchy.content.effect.DilatedMobEffect; -import com.craisinlord.antarchy.content.effect.ContractedMobEffect; import com.craisinlord.antarchy.content.effect.ParalyzedMobEffect; import com.craisinlord.antarchy.content.effect.ShrinkMobEffect; import com.craisinlord.antarchy.content.effect.StinkyMobEffect; @@ -179,8 +177,6 @@ public final class AntarchyNeoforgeMisc { public static final DeferredHolder BLOOD_MOON = MOB_EFFECTS.register("blood_moon", BloodMoonMobEffect::new); public static final DeferredHolder PARALYZED = MOB_EFFECTS.register("paralyzed", ParalyzedMobEffect::new); public static final DeferredHolder COMMANDED = MOB_EFFECTS.register("commanded", CommandedMobEffect::new); - public static final DeferredHolder DILATED = MOB_EFFECTS.register("dilated", DilatedMobEffect::new); - public static final DeferredHolder CONTRACTED = MOB_EFFECTS.register("contracted", ContractedMobEffect::new); public static final DeferredHolder STINKY = MOB_EFFECTS.register("stinky", StinkyMobEffect::new); public static final DeferredHolder GOOPED = MOB_EFFECTS.register("gooped", GoopedMobEffect::new); public static final DeferredHolder BLOODGLASS_WARD = MOB_EFFECTS.register("bloodglass_ward", com.craisinlord.antarchy.content.effect.BloodglassWardEffect::new); @@ -200,13 +196,13 @@ public final class AntarchyNeoforgeMisc { public static final DeferredHolder LONG_COMMAND = POTIONS.register("long_command", () -> new Potion("command", new MobEffectInstance(COMMANDED, 1200))); public static final DeferredHolder TIME_DILATION = POTIONS.register("time_dilation", - () -> new Potion(new MobEffectInstance(DILATED, 1200))); + () -> new Potion(new MobEffectInstance(AnthologyEffects.dilated(), 1200))); public static final DeferredHolder LONG_TIME_DILATION = POTIONS.register("long_time_dilation", - () -> new Potion("time_dilation", new MobEffectInstance(DILATED, 1200, 1))); + () -> new Potion("time_dilation", new MobEffectInstance(AnthologyEffects.dilated(), 1200, 1))); public static final DeferredHolder TIME_CONTRACTION = POTIONS.register("time_contraction", - () -> new Potion(new MobEffectInstance(CONTRACTED, 1200))); + () -> new Potion(new MobEffectInstance(AnthologyEffects.contracted(), 1200))); public static final DeferredHolder LONG_TIME_CONTRACTION = POTIONS.register("long_time_contraction", - () -> new Potion("time_contraction", new MobEffectInstance(CONTRACTED, 1200, 1))); + () -> new Potion("time_contraction", new MobEffectInstance(AnthologyEffects.contracted(), 1200, 1))); public static final DeferredHolder STINKY_POTION = POTIONS.register("stinky", () -> new Potion(new MobEffectInstance(STINKY, 1200))); public static final DeferredHolder LONG_STINKY = POTIONS.register("long_stinky", diff --git a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgePayloadHandlers.java b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgePayloadHandlers.java index 6cb71f16..3c1728ad 100644 --- a/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgePayloadHandlers.java +++ b/neoforge-1.21.1/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgePayloadHandlers.java @@ -12,8 +12,6 @@ import com.craisinlord.antarchy.neoforge.network.BrutalflyElytraNetworking; import com.craisinlord.antarchy.neoforge.network.DorrieJumpNetworking; import com.craisinlord.antarchy.neoforge.network.HerculesBeetleNetworking; import com.craisinlord.antarchy.neoforge.network.SpringyBootsNetworking; -import com.craisinlord.antarchy.neoforge.network.MultipartNetworking; -import com.craisinlord.antarchy.neoforge.network.AntarchyTimeDilationNetworking; import net.neoforged.bus.api.IEventBus; import net.neoforged.neoforge.network.event.RegisterPayloadHandlersEvent; @@ -41,7 +39,6 @@ public class AntarchyNeoforgePayloadHandlers { (payload, ctx) -> ctx.enqueueWork(() -> com.craisinlord.antarchy.content.client.AntarchyGameClientState.update(payload)) ); AntarchyGravityNetworking.register(registrar); - AntarchyTimeDilationNetworking.register(registrar); BrutalflyElytraNetworking.register(registrar); SpringyBootsNetworking.register(registrar); DorrieJumpNetworking.register(registrar); @@ -182,6 +179,5 @@ public class AntarchyNeoforgePayloadHandlers { com.craisinlord.antarchy.content.client.HordeClientState.update(payload.intensity()) ) ); - MultipartNetworking.register(registrar); } } diff --git a/neoforge-1.21.1/src/main/resources/META-INF/neoforge.mods.toml b/neoforge-1.21.1/src/main/resources/META-INF/neoforge.mods.toml index 92703040..de05c7f9 100644 --- a/neoforge-1.21.1/src/main/resources/META-INF/neoforge.mods.toml +++ b/neoforge-1.21.1/src/main/resources/META-INF/neoforge.mods.toml @@ -17,9 +17,6 @@ displayURL="https://www.curseforge.com/minecraft/mc-mods/antarchy" [[mixins]] config = "antarchy-common.mixins.json" -[[mixins]] - config = "antarchy-sodium.mixins.json" - [[mixins]] config = "antarchy-neoforge.mixins.json" diff --git a/neoforge-1.21.1/src/main/resources/antarchy-neoforge.mixins.json b/neoforge-1.21.1/src/main/resources/antarchy-neoforge.mixins.json index 40cb54c9..8a32de93 100644 --- a/neoforge-1.21.1/src/main/resources/antarchy-neoforge.mixins.json +++ b/neoforge-1.21.1/src/main/resources/antarchy-neoforge.mixins.json @@ -6,18 +6,14 @@ "mixins": [ "compat.SablePhysicsColliderBlockGetterMixin", "item.BucketItemThoraxisWaterMixin", - "entity.MultipartEntityBridgeMixin", - "entity.MultipartEntityLevelRegistryMixin", "entity.ParalyzedMobFreezeMixin", "infinity.AmendmentRareOresMixin", "infinity.ConfigGenInvocationMixin", "infinity.PortalCreatorMixin", "infinity.PortalCreatorInvoker", - "infinity.WarpLogicMixin", - "level.ServerLevelPartEntitiesAccessor" + "infinity.WarpLogicMixin" ], "client": [ - "level.ClientLevelPartEntitiesAccessor" ], "injectors": { "defaultRequire": 1