From f7e7bebac3f9599908183d45d21095a1fbf4c833 Mon Sep 17 00:00:00 2001 From: craisinlord Date: Mon, 12 Oct 2026 19:55:08 -0500 Subject: [PATCH] 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