From e3ba177b74672a5d109068dbf921badf282f7bdb Mon Sep 17 00:00:00 2001 From: StewStrong Date: Mon, 28 Oct 2024 03:01:37 -0700 Subject: [PATCH 01/45] Fixed ValkyrienSkiesModForge.loadComplete() --- .../mod/forge/common/ValkyrienSkiesModForge.kt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/forge/src/main/kotlin/org/valkyrienskies/mod/forge/common/ValkyrienSkiesModForge.kt b/forge/src/main/kotlin/org/valkyrienskies/mod/forge/common/ValkyrienSkiesModForge.kt index 438bfec9..742159f5 100644 --- a/forge/src/main/kotlin/org/valkyrienskies/mod/forge/common/ValkyrienSkiesModForge.kt +++ b/forge/src/main/kotlin/org/valkyrienskies/mod/forge/common/ValkyrienSkiesModForge.kt @@ -218,13 +218,14 @@ class ValkyrienSkiesModForge { ValkyrienSkiesMod.TEST_FLAP = TEST_FLAP_REGISTRY.get() ValkyrienSkiesMod.TEST_WING = TEST_WING_REGISTRY.get() ValkyrienSkiesMod.TEST_SPHERE = TEST_SPHERE_REGISTRY.get() + ValkyrienSkiesMod.CONNECTION_CHECKER_ITEM = CONNECTION_CHECKER_ITEM_REGISTRY.get() ValkyrienSkiesMod.SHIP_CREATOR_ITEM = SHIP_CREATOR_ITEM_REGISTRY.get() + ValkyrienSkiesMod.SHIP_ASSEMBLER_ITEM = SHIP_ASSEMBLER_ITEM_REGISTRY.get() ValkyrienSkiesMod.SHIP_CREATOR_ITEM_SMALLER = SHIP_CREATOR_SMALLER_ITEM_REGISTRY.get() + ValkyrienSkiesMod.AREA_ASSEMBLER_ITEM = AREA_ASSEMBLER_ITEM_REGISTRY.get() + ValkyrienSkiesMod.PHYSICS_ENTITY_CREATOR_ITEM = PHYSICS_ENTITY_CREATOR_ITEM_REGISTRY.get() ValkyrienSkiesMod.SHIP_MOUNTING_ENTITY_TYPE = SHIP_MOUNTING_ENTITY_REGISTRY.get() ValkyrienSkiesMod.PHYSICS_ENTITY_TYPE = PHYSICS_ENTITY_TYPE_REGISTRY.get() - ValkyrienSkiesMod.SHIP_ASSEMBLER_ITEM = SHIP_ASSEMBLER_ITEM_REGISTRY.get() ValkyrienSkiesMod.TEST_HINGE_BLOCK_ENTITY_TYPE = TEST_HINGE_BLOCK_ENTITY_TYPE_REGISTRY.get() - ValkyrienSkiesMod.CONNECTION_CHECKER_ITEM = CONNECTION_CHECKER_ITEM_REGISTRY.get() - ValkyrienSkiesMod.AREA_ASSEMBLER_ITEM = AREA_ASSEMBLER_ITEM_REGISTRY.get() } } From e25ee155950169984bb03c96ce96ad87ca5599c1 Mon Sep 17 00:00:00 2001 From: ThePlasticPotato Date: Tue, 26 Nov 2024 14:16:12 -0500 Subject: [PATCH 02/45] Update VSCore --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 868595b1..00a2c93d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,7 +11,7 @@ forge_version=1.18.2-40.2.4 create_fabric_version=0.5.1-f-build.1333+mc1.18.2 flywheel_version_fabric=0.6.9-38 createbigcannons_version= 0.5.2-nightly-e815ca4 -vs_core_version=1.1.0+2a62e6a823 +vs_core_version=1.1.0+60056106b0 # Prevent kotlin from autoincluding stdlib as a dependency, which breaks # gradle's composite builds (includeBuild) for some reason. We'll add it manually kotlin.stdlib.default.dependency=false From 635678ad929246415f804b0a1b452eb8fb04ead2 Mon Sep 17 00:00:00 2001 From: ThePlasticPotato Date: Thu, 28 Nov 2024 14:22:10 -0500 Subject: [PATCH 03/45] Update VSCore... again. --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 00a2c93d..3ac9a464 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,7 +11,7 @@ forge_version=1.18.2-40.2.4 create_fabric_version=0.5.1-f-build.1333+mc1.18.2 flywheel_version_fabric=0.6.9-38 createbigcannons_version= 0.5.2-nightly-e815ca4 -vs_core_version=1.1.0+60056106b0 +vs_core_version=1.1.0+e213cc9916 # Prevent kotlin from autoincluding stdlib as a dependency, which breaks # gradle's composite builds (includeBuild) for some reason. We'll add it manually kotlin.stdlib.default.dependency=false From 9535492191832f971a414e4cda2d96890d65178e Mon Sep 17 00:00:00 2001 From: ThePlasticPotato Date: Sun, 1 Dec 2024 15:08:39 -0500 Subject: [PATCH 04/45] Fixed assembly issue --- .../mod/common/assembly/ShipAssembler.kt | 41 +++++++++---------- .../mod/common/item/AreaAssemblerItem.kt | 2 +- 2 files changed, 21 insertions(+), 22 deletions(-) diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/assembly/ShipAssembler.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/assembly/ShipAssembler.kt index 6ee1d657..6a7ff35d 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/assembly/ShipAssembler.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/assembly/ShipAssembler.kt @@ -59,44 +59,40 @@ object ShipAssembler { } } if (!hasSolids) throw IllegalArgumentException("No solid blocks found in the structure") - val contraptionOGPos: Vector3ic = AssemblyUtil.getMiddle(structureCornerMin!!, structureCornerMax!!) - // Create new contraption at center of bounds - val contraptionWorldPos: Vector3i = if (existingShip != null) { - val doubleVer = existingShip.shipToWorld.transformPosition(Vector3d(contraptionOGPos)).floor() + val shipOGPos: Vector3ic = AssemblyUtil.getMiddle(structureCornerMin!!, structureCornerMax!!) + // Create new ship at center of bounds + val shipWorldPos: Vector3i = if (existingShip != null) { + val doubleVer = existingShip.shipToWorld.transformPosition(Vector3d(shipOGPos)).floor() Vector3i(doubleVer.x.toInt(), doubleVer.y.toInt(), doubleVer.z.toInt()) } else { - Vector3i(contraptionOGPos) + Vector3i(shipOGPos) } - //val contraptionPosition = ContraptionPosition(Quaterniond(Vec3d(0.0, 1.0, 1.0), 0.0), contraptionWorldPos, null) val newShip: Ship = (level as ServerLevel).server.shipObjectWorld - .createNewShipAtBlock(contraptionWorldPos, false, scale, level.dimensionId) + .createNewShipAtBlock(shipWorldPos, false, scale, level.dimensionId) if (shouldDisableSplitting) { level.shipObjectWorld.loadedShips.getById(newShip.id)?.getAttachment()?.disableSplitting() - + if (existingShip != null) { + level.shipObjectWorld.loadedShips.getById(existingShip.id)?.getAttachment()?.disableSplitting() + } } - val contraptionShipPos = newShip.worldToShip.transformPosition(Vector3d(contraptionWorldPos.x.toDouble(),contraptionWorldPos.y.toDouble(),contraptionWorldPos.z.toDouble())) - val contraptionBlockPos = BlockPos(contraptionShipPos.x.toInt(),contraptionShipPos.y.toInt(),contraptionShipPos.z.toInt()) + val shipspacePos = newShip.worldToShip.transformPosition(Vector3d(shipWorldPos.x.toDouble(),shipWorldPos.y.toDouble(),shipWorldPos.z.toDouble())) + val shipBlockPos = BlockPos(shipspacePos.x.toInt(),shipspacePos.y.toInt(),shipspacePos.z.toInt()) // Copy blocks and check if the center block got replaced (is default a stone block) var centerBlockReplaced = false for (itPos in blocks) { if (isValidShipBlock(level.getBlockState(itPos))) { - val relative: BlockPos = itPos.subtract( BlockPos(contraptionOGPos.x(),contraptionOGPos.y(),contraptionOGPos.z())) - val shipPos: BlockPos = contraptionBlockPos.offset(relative) + val relative: BlockPos = itPos.subtract( BlockPos(shipOGPos.x(),shipOGPos.y(),shipOGPos.z())) + val shipPos: BlockPos = shipBlockPos.offset(relative) AssemblyUtil.copyBlock(level, itPos, shipPos) if (relative.equals(BlockPos.ZERO)) centerBlockReplaced = true } } - // If center block got not replaced, remove the stone block - // if (!centerBlockReplaced) { - // level.setBlock(contraptionBlockPos, Blocks.AIR.defaultBlockState(), 3) - // } - // Remove original blocks if (removeOriginal) { for (itPos in blocks) { @@ -106,16 +102,16 @@ object ShipAssembler { } } - // Trigger updates on both contraptions + // Trigger updates on both ships for (itPos in blocks) { - val relative: BlockPos = itPos.subtract(BlockPos(contraptionOGPos.x(),contraptionOGPos.y(),contraptionOGPos.z())) - val shipPos: BlockPos = contraptionBlockPos.offset(relative) + val relative: BlockPos = itPos.subtract(BlockPos(shipOGPos.x(),shipOGPos.y(),shipOGPos.z())) + val shipPos: BlockPos = shipBlockPos.offset(relative) AssemblyUtil.updateBlock(level,itPos,shipPos,level.getBlockState(shipPos)) } val shipCenterPos = ((newShip as ServerShip).inertiaData.centerOfMassInShip).add(0.5, 0.5, 0.5, Vector3d()) // This is giga sus, but whatever - val shipPos = Vector3d(contraptionOGPos).add(0.5, 0.5, 0.5) + val shipPos = Vector3d(shipOGPos).add(0.5, 0.5, 0.5) if (existingShip != null) { sLevel.server.shipObjectWorld .teleportShip(newShip as ServerShip, ShipTeleportDataImpl(existingShip.shipToWorld.transformPosition(shipPos, Vector3d()), existingShip.transform.shipToWorldRotation, existingShip.velocity, existingShip.omega, existingShip.chunkClaimDimension, newScale = existingShip.transform.shipToWorldScaling.x(), newPosInShip = shipCenterPos)) @@ -126,6 +122,9 @@ object ShipAssembler { } if (shouldDisableSplitting) { level.shipObjectWorld.loadedShips.getById(newShip.id)?.getAttachment()?.enableSplitting() + if (existingShip != null) { + level.shipObjectWorld.loadedShips.getById(existingShip.id)?.getAttachment()?.enableSplitting() + } } return newShip as ServerShip diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/item/AreaAssemblerItem.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/item/AreaAssemblerItem.kt index 51c64bdc..cad9346d 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/item/AreaAssemblerItem.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/item/AreaAssemblerItem.kt @@ -66,7 +66,7 @@ class AreaAssemblerItem( } } ctx.player?.sendMessage(TextComponent("Assembling (${blockPos.x}, ${blockPos.y}, ${blockPos.z}) to ($firstPosX, $firstPosY, $firstPosZ)!"), Util.NIL_UUID) - ShipAssembler.assembleToShip(level, blocks, true, scale.asDouble) + ShipAssembler.assembleToShip(level, blocks, true, scale.asDouble, true) } item.tag!!.remove("firstPosX") item.tag!!.remove("firstPosY") From 2521e605328d48eaa874905e7d009a6d39d501ad Mon Sep 17 00:00:00 2001 From: ThePlasticPotato Date: Sun, 1 Dec 2024 15:11:02 -0500 Subject: [PATCH 05/45] return to pre-existing value --- .../org/valkyrienskies/mod/common/assembly/ShipAssembler.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/assembly/ShipAssembler.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/assembly/ShipAssembler.kt index 6a7ff35d..dade67e1 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/assembly/ShipAssembler.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/assembly/ShipAssembler.kt @@ -41,6 +41,7 @@ object ShipAssembler { val existingShip = sLevel.getShipObjectManagingPos(blocks.find { !sLevel.getBlockState(it).isAir } ?: throw IllegalArgumentException()) + var existingShipCouldSplit = true var structureCornerMin: BlockPos? = null var structureCornerMax: BlockPos? = null var hasSolids = false @@ -74,6 +75,7 @@ object ShipAssembler { if (shouldDisableSplitting) { level.shipObjectWorld.loadedShips.getById(newShip.id)?.getAttachment()?.disableSplitting() if (existingShip != null) { + existingShipCouldSplit = level.shipObjectWorld.loadedShips.getById(existingShip.id)?.getAttachment()?.canSplit() ?: true level.shipObjectWorld.loadedShips.getById(existingShip.id)?.getAttachment()?.disableSplitting() } } @@ -123,7 +125,9 @@ object ShipAssembler { if (shouldDisableSplitting) { level.shipObjectWorld.loadedShips.getById(newShip.id)?.getAttachment()?.enableSplitting() if (existingShip != null) { - level.shipObjectWorld.loadedShips.getById(existingShip.id)?.getAttachment()?.enableSplitting() + if (existingShipCouldSplit){ + level.shipObjectWorld.loadedShips.getById(existingShip.id)?.getAttachment()?.enableSplitting() + } else {level.shipObjectWorld.loadedShips.getById(existingShip.id)?.getAttachment()?.disableSplitting()} } } From 5ba3fe5c8c3b06cb3aef04e2f299d886a2ebfd83 Mon Sep 17 00:00:00 2001 From: ThePlasticPotato Date: Mon, 2 Dec 2024 13:10:37 -0500 Subject: [PATCH 06/45] Update to latest create and update mixinextras on fabric --- fabric/build.gradle | 2 +- forge/gradle.properties | 4 ++-- gradle.properties | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/fabric/build.gradle b/fabric/build.gradle index 1a08cab7..a4b92ad2 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -25,7 +25,7 @@ loom { } dependencies { - include(annotationProcessor(implementation("com.github.LlamaLad7:MixinExtras:0.1.1"))) + include(annotationProcessor(implementation("io.github.llamalad7:mixinextras-fabric:0.3.5"))) modImplementation("net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}") diff --git a/forge/gradle.properties b/forge/gradle.properties index 897fc446..a594599e 100644 --- a/forge/gradle.properties +++ b/forge/gradle.properties @@ -2,6 +2,6 @@ loader_platform=Forge loom.platform=forge kotlin.stdlib.default.dependency=false #Compat -create_version=0.5.1.f-345 -flywheel_version=0.6.10-105 +create_version=0.5.1.i-435 +flywheel_version=0.6.11-107 registrate_version=MC1.18.2-1.1.3 diff --git a/gradle.properties b/gradle.properties index 3ac9a464..df6bc0a7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,7 +8,7 @@ architectury_version=4.10.86 fabric_loader_version=0.14.11 fabric_api_version=0.67.0+1.18.2 forge_version=1.18.2-40.2.4 -create_fabric_version=0.5.1-f-build.1333+mc1.18.2 +create_fabric_version=0.5.1-i-build.1598+mc1.18.2 flywheel_version_fabric=0.6.9-38 createbigcannons_version= 0.5.2-nightly-e815ca4 vs_core_version=1.1.0+e213cc9916 From 11206d9d273cd5f413e56c60939ed4b0570e8a9e Mon Sep 17 00:00:00 2001 From: ThePlasticPotato Date: Mon, 2 Dec 2024 13:16:05 -0500 Subject: [PATCH 07/45] Also update porting lib so that vs2 maven actually takes it --- fabric/gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fabric/gradle.properties b/fabric/gradle.properties index 625cddbd..e9bca362 100644 --- a/fabric/gradle.properties +++ b/fabric/gradle.properties @@ -9,7 +9,7 @@ reach_entity_attributes_version=2.1.1 registrate_version=MC1.18.2-1.1.6 forge_tags_version=2.1 milk_lib_version=0.3.2 -port_lib_version=1.2.677-beta +port_lib_version=1.2.1451-beta port_lib_hash=cca931b night_config_core_version=3.6.3 night_config_toml_version=3.6.3 From e2495ca712dae3c150f76d16507826eb8db63a83 Mon Sep 17 00:00:00 2001 From: ThePlasticPotato Date: Mon, 2 Dec 2024 13:16:32 -0500 Subject: [PATCH 08/45] ...and on common --- common/gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/gradle.properties b/common/gradle.properties index 574b0f2a..e4857b0e 100644 --- a/common/gradle.properties +++ b/common/gradle.properties @@ -1,2 +1,2 @@ -port_lib_version=1.2.677-beta +port_lib_version=1.2.1451-beta port_lib_hash=cca931b From f590481bb74e3fc51204c1c39f2c701a73c1bab7 Mon Sep 17 00:00:00 2001 From: ThePlasticPotato Date: Mon, 2 Dec 2024 14:05:35 -0500 Subject: [PATCH 09/45] porting lib please --- common/build.gradle | 4 ++-- common/gradle.properties | 1 - fabric/build.gradle | 2 +- fabric/gradle.properties | 3 +-- 4 files changed, 4 insertions(+), 6 deletions(-) diff --git a/common/build.gradle b/common/build.gradle index 5978178a..b62489b4 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -32,10 +32,10 @@ dependencies { //Common create compat, //We just use a version from a platform and hope the classes exist on both versions and mixins apply correctly modCompileOnly("com.simibubi.create:create-fabric-${minecraft_version}:${create_fabric_version}") - { exclude group: 'com.github.AlphaMode', module: 'fakeconfigtoml' } + { exclude group: 'com.github.AlphaMode', module: 'fakeconfigtoml'} modCompileOnly("net.fabricmc.fabric-api:fabric-api:${fabric_api_version}") modCompileOnly("com.jozufozu.flywheel:flywheel-fabric-${minecraft_version}:${flywheel_version_fabric}") - modCompileOnly("io.github.fabricators_of_create:Porting-Lib:${port_lib_version}+${minecraft_version}") + modCompileOnly("io.github.fabricators_of_create:Porting-Lib:1.2.1451-beta+1.18.2") modCompileOnly("com.rbasamoyai:createbigcannons-fabric-${minecraft_version}:${createbigcannons_version}") //Bluemap fabric 1.18 diff --git a/common/gradle.properties b/common/gradle.properties index e4857b0e..555c927a 100644 --- a/common/gradle.properties +++ b/common/gradle.properties @@ -1,2 +1 @@ -port_lib_version=1.2.1451-beta port_lib_hash=cca931b diff --git a/fabric/build.gradle b/fabric/build.gradle index a4b92ad2..3d3a2d70 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -77,7 +77,7 @@ dependencies { } modImplementation("com.jozufozu.flywheel:flywheel-fabric-${minecraft_version}:${flywheel_version_fabric}") modImplementation("com.tterrag.registrate_fabric:Registrate:${registrate_version}") - modImplementation("io.github.fabricators_of_create:Porting-Lib:${port_lib_version}+${minecraft_version}") + modImplementation("io.github.fabricators_of_create:Porting-Lib:1.2.1451-beta+1.18.2") modImplementation("me.alphamode:ForgeTags:${forge_tags_version}") modImplementation("net.minecraftforge:forgeconfigapiport-fabric:${forge_config_api_port_version}") modImplementation("com.jamieswhiteshirt:reach-entity-attributes:${reach_entity_attributes_version}") diff --git a/fabric/gradle.properties b/fabric/gradle.properties index e9bca362..4538df07 100644 --- a/fabric/gradle.properties +++ b/fabric/gradle.properties @@ -1,5 +1,5 @@ loader_platform=Fabric -create_version=0.5.1-c-build.1092+mc1.18.2 +create_version=0.5.1-i-build.1598+mc1.18.2 # https://github.com/Fabricators-of-Create/Create/blob/mc1.18/fabric/dev/gradle.properties config_api_id=3671141 forge_config_api_port_version=3.2.4 @@ -9,7 +9,6 @@ reach_entity_attributes_version=2.1.1 registrate_version=MC1.18.2-1.1.6 forge_tags_version=2.1 milk_lib_version=0.3.2 -port_lib_version=1.2.1451-beta port_lib_hash=cca931b night_config_core_version=3.6.3 night_config_toml_version=3.6.3 From fef8fd9c3a0224c65c2af31d591f44fe61ad3a09 Mon Sep 17 00:00:00 2001 From: ThePlasticPotato Date: Mon, 2 Dec 2024 15:51:08 -0500 Subject: [PATCH 10/45] Fixed create on fabric --- .../valkyrienskies-common.mixins.json | 1 - .../compat/create/MixinChuteBlockEntity.java | 2 +- .../client/MixinSchematicTransformation.java | 57 +++++++++++++++++++ .../valkyrienskies-fabric.mixins.json | 3 +- .../client/MixinSchematicTransformation.java | 2 +- .../valkyrienskies-forge.mixins.json | 1 + 6 files changed, 62 insertions(+), 4 deletions(-) create mode 100644 fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/compat/create/client/MixinSchematicTransformation.java rename {common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat => forge/src/main/java/org/valkyrienskies/mod/forge/mixin/compat}/create/client/MixinSchematicTransformation.java (99%) diff --git a/common/src/main/resources/valkyrienskies-common.mixins.json b/common/src/main/resources/valkyrienskies-common.mixins.json index 152af005..112e704b 100644 --- a/common/src/main/resources/valkyrienskies-common.mixins.json +++ b/common/src/main/resources/valkyrienskies-common.mixins.json @@ -168,7 +168,6 @@ "mod_compat.create.client.MixinTrainRelocator", "mod_compat.create.client.MixinDeployTool", "mod_compat.create.client.MixinSchematicToolBase", - "mod_compat.create.client.MixinSchematicTransformation", "mod_compat.create.client.trackOutlines.MixinBigOutlines", "mod_compat.create.client.MixinValueBox", "mod_compat.flywheel.InstancingEngineAccessor", diff --git a/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/compat/create/MixinChuteBlockEntity.java b/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/compat/create/MixinChuteBlockEntity.java index 75dc5f99..a6812f9d 100644 --- a/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/compat/create/MixinChuteBlockEntity.java +++ b/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/compat/create/MixinChuteBlockEntity.java @@ -18,7 +18,7 @@ import org.valkyrienskies.mod.common.VSGameUtilsKt; import org.valkyrienskies.mod.mixin.mod_compat.create.accessors.ChuteBlockEntityAccessor; -@Mixin(value = ChuteBlockEntity.class, remap = false) +@Mixin(value = ChuteBlockEntity.class) public class MixinChuteBlockEntity { @Inject(method = "findEntities", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/phys/AABB;(Lnet/minecraft/world/phys/Vec3;Lnet/minecraft/world/phys/Vec3;)V", shift = Shift.AFTER), cancellable = true) diff --git a/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/compat/create/client/MixinSchematicTransformation.java b/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/compat/create/client/MixinSchematicTransformation.java new file mode 100644 index 00000000..7d1a8d98 --- /dev/null +++ b/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/compat/create/client/MixinSchematicTransformation.java @@ -0,0 +1,57 @@ +package org.valkyrienskies.mod.fabric.mixin.compat.create.client; + +import com.jozufozu.flywheel.util.transform.TransformStack; +import com.mojang.blaze3d.vertex.PoseStack; +import com.simibubi.create.content.schematics.client.SchematicTransformation; +import com.simibubi.create.foundation.utility.AnimationTickHolder; +import com.simibubi.create.foundation.utility.VecHelper; +import net.minecraft.client.Minecraft; +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.Vec3; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; +import org.valkyrienskies.core.api.ships.Ship; +import org.valkyrienskies.mod.common.VSClientGameUtils; +import org.valkyrienskies.mod.common.VSGameUtilsKt; + +/** + * SchematicTransformation is responsible for the render transform of the schematic preview + *

+ * Create applies both the camera and schematic positions in the same operation, the latter of which does not respect ship-space. + * This mixin redirects the operation and fixes it by extracting the position components from the argument. + * I can't think of a better way to get around it. + */ +@Mixin(value = {SchematicTransformation.class}) +public abstract class MixinSchematicTransformation { + @Shadow + private BlockPos target; + @Shadow + private Vec3 chasingPos; + @Shadow + private Vec3 prevChasingPos; + + @Redirect( + method = {"applyTransformations(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/world/phys/Vec3;)V"}, + at = @At( + value = "INVOKE", + target = "Lcom/jozufozu/flywheel/util/transform/TransformStack;translate(Lnet/minecraft/world/phys/Vec3;)Ljava/lang/Object;", + ordinal = 0 + ) + ) + private Object redirectTranslate(TransformStack instance, Vec3 orig) { + PoseStack ms = (PoseStack)instance; + Ship ship = VSGameUtilsKt.getShipObjectManagingPos(Minecraft.getInstance().level, target.getX(), target.getY(), target.getZ()); + + if (ship != null) { + float pt = AnimationTickHolder.getPartialTicks(); + Vec3 pos = VecHelper.lerp(pt, prevChasingPos, chasingPos); + Vec3 camera = pos.subtract(orig); + VSClientGameUtils.transformRenderWithShip(ship.getTransform(), ms, pos.x, pos.y, pos.z, camera.x, camera.y, camera.z); + return instance; + } else { + return instance.translate(orig); + } + } +} diff --git a/fabric/src/main/resources/valkyrienskies-fabric.mixins.json b/fabric/src/main/resources/valkyrienskies-fabric.mixins.json index 19ec9ef6..55df2f12 100644 --- a/fabric/src/main/resources/valkyrienskies-fabric.mixins.json +++ b/fabric/src/main/resources/valkyrienskies-fabric.mixins.json @@ -23,7 +23,8 @@ "compat.create.client.MixinContraptionRenderInfo", "compat.create.client.MixinCullingBlockEntityIterator", "compat.create.client.MixinFlwContraption", - "compat.create.client.MixinSuperGlueSelectionHandler" + "compat.create.client.MixinSuperGlueSelectionHandler", + "compat.create.client.MixinSchematicTransformation" ], "injectors": { "defaultRequire": 1 diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/create/client/MixinSchematicTransformation.java b/forge/src/main/java/org/valkyrienskies/mod/forge/mixin/compat/create/client/MixinSchematicTransformation.java similarity index 99% rename from common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/create/client/MixinSchematicTransformation.java rename to forge/src/main/java/org/valkyrienskies/mod/forge/mixin/compat/create/client/MixinSchematicTransformation.java index 5c6d76c8..b0378564 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/create/client/MixinSchematicTransformation.java +++ b/forge/src/main/java/org/valkyrienskies/mod/forge/mixin/compat/create/client/MixinSchematicTransformation.java @@ -1,4 +1,4 @@ -package org.valkyrienskies.mod.mixin.mod_compat.create.client; +package org.valkyrienskies.mod.forge.mixin.compat.create.client; import com.jozufozu.flywheel.util.transform.TransformStack; import com.mojang.blaze3d.vertex.PoseStack; diff --git a/forge/src/main/resources/valkyrienskies-forge.mixins.json b/forge/src/main/resources/valkyrienskies-forge.mixins.json index 76bf8fb5..3b8bf699 100644 --- a/forge/src/main/resources/valkyrienskies-forge.mixins.json +++ b/forge/src/main/resources/valkyrienskies-forge.mixins.json @@ -29,6 +29,7 @@ "compat.create.client.MixinFlwContraption", "compat.create.client.MixinSuperGlueSelectionHandler", "compat.create.client.MixinTrackBlockOutline", + "compat.create.client.MixinSchematicTransformation", "compat.sodium.MixinRenderSectionManager", "compat.tis3d.MixinCasingTileEntityRender", "compat.tis3d.MixinRenderContextImpl" From 6ce173e808d59ac0ee4b665f6cf5b6da521036ba Mon Sep 17 00:00:00 2001 From: ThePlasticPotato Date: Thu, 5 Dec 2024 11:28:34 -0500 Subject: [PATCH 11/45] prefix -> this --- .../src/main/kotlin/org/valkyrienskies/mod/util/NbtUtil.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/util/NbtUtil.kt b/common/src/main/kotlin/org/valkyrienskies/mod/util/NbtUtil.kt index 7abe6e79..dffcb1de 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/util/NbtUtil.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/util/NbtUtil.kt @@ -13,9 +13,9 @@ fun CompoundTag.putVector3d(prefix: String, vector3d: Vector3dc) = fun CompoundTag.getVector3d(prefix: String): Vector3d? { return if ( - !prefix.contains(prefix + "x") || - !prefix.contains(prefix + "y") || - !prefix.contains(prefix + "z") + !this.contains(prefix + "x") || + !this.contains(prefix + "y") || + !this.contains(prefix + "z") ) { null } else { From fdd5cdc052c866dae9c423be45591cba91345119 Mon Sep 17 00:00:00 2001 From: ThePlasticPotato Date: Sat, 7 Dec 2024 11:38:08 -0500 Subject: [PATCH 12/45] Fix contraption assembly occasionally causing unwanted splitting --- .../mod_compat/create/MixinContraption.java | 36 +++++++++++++++++++ .../mod/common/util/SplitHandler.kt | 4 +++ 2 files changed, 40 insertions(+) diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/create/MixinContraption.java b/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/create/MixinContraption.java index bd612580..e0962cc3 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/create/MixinContraption.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/create/MixinContraption.java @@ -1,12 +1,20 @@ package org.valkyrienskies.mod.mixin.mod_compat.create; import com.simibubi.create.content.contraptions.Contraption; +import com.simibubi.create.content.contraptions.StructureTransform; import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.Entity; import net.minecraft.world.level.Level; 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; +import org.valkyrienskies.core.api.ships.LoadedServerShip; +import org.valkyrienskies.mod.common.VSGameUtilsKt; +import org.valkyrienskies.mod.common.util.SplitHandler; +import org.valkyrienskies.mod.common.util.SplittingDisablerAttachment; @Mixin(Contraption.class) public class MixinContraption { @@ -23,4 +31,32 @@ private boolean wrapOp(Level level, Entity entity) { } return added; } + + @Inject(method = "removeBlocksFromWorld", at = @At("HEAD")) + private void preRemoveBlocksFromWorld(Level world, BlockPos pos, CallbackInfo ci) { + if (world instanceof ServerLevel sWorld) { + LoadedServerShip ship = VSGameUtilsKt.getShipObjectManagingPos(sWorld, pos); + if (ship != null) { + SplittingDisablerAttachment attachment = ship.getAttachment(SplittingDisablerAttachment.class); + if (attachment != null) { + attachment.disableSplitting(); + SplitHandler.Companion.getSPLITLOGGER().info("@[Contraption.removedBlocksFromWorld] Disabled splitting on ship " + ship.getSlug()); + } + } + } + } + + @Inject(method = "removeBlocksFromWorld", at = @At("RETURN")) + private void postRemoveBlocksFromWorld(Level world, BlockPos pos, CallbackInfo ci) { + if (world instanceof ServerLevel sWorld) { + LoadedServerShip ship = VSGameUtilsKt.getShipObjectManagingPos(sWorld, pos); + if (ship != null) { + SplittingDisablerAttachment attachment = ship.getAttachment(SplittingDisablerAttachment.class); + if (attachment != null) { + attachment.enableSplitting(); + SplitHandler.Companion.getSPLITLOGGER().info("@[Contraption.removedBlocksFromWorld] Re-enabled splitting on ship " + ship.getSlug()); + } + } + } + } } diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/util/SplitHandler.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/SplitHandler.kt index 48f34c8e..db262006 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/util/SplitHandler.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/SplitHandler.kt @@ -14,6 +14,7 @@ import org.valkyrienskies.mod.common.assembly.ShipAssembler import org.valkyrienskies.mod.common.dimensionId import org.valkyrienskies.mod.common.getShipObjectManagingPos import org.valkyrienskies.mod.common.shipObjectWorld +import org.valkyrienskies.mod.util.logger class SplitHandler(private val doEdges: Boolean, private val doCorners: Boolean) { @@ -140,6 +141,9 @@ class SplitHandler(private val doEdges: Boolean, private val doCorners: Boolean) } companion object { + + val SPLITLOGGER = logger("kitkat factory") + val offsetsToCheck: ArrayList = arrayListOf( Vec3i(1, 0, 0), Vec3i(-1, 0, 0), From fad8c881d75c72660b6ad188648a182a766b4b79 Mon Sep 17 00:00:00 2001 From: ThePlasticPotato Date: Sat, 7 Dec 2024 11:41:55 -0500 Subject: [PATCH 13/45] okay fine no logging then have it your way --- .../mod/mixin/mod_compat/create/MixinContraption.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/create/MixinContraption.java b/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/create/MixinContraption.java index e0962cc3..6ffd95f2 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/create/MixinContraption.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/create/MixinContraption.java @@ -1,7 +1,6 @@ package org.valkyrienskies.mod.mixin.mod_compat.create; import com.simibubi.create.content.contraptions.Contraption; -import com.simibubi.create.content.contraptions.StructureTransform; import net.minecraft.core.BlockPos; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.Entity; @@ -40,7 +39,6 @@ private void preRemoveBlocksFromWorld(Level world, BlockPos pos, CallbackInfo ci SplittingDisablerAttachment attachment = ship.getAttachment(SplittingDisablerAttachment.class); if (attachment != null) { attachment.disableSplitting(); - SplitHandler.Companion.getSPLITLOGGER().info("@[Contraption.removedBlocksFromWorld] Disabled splitting on ship " + ship.getSlug()); } } } @@ -54,7 +52,6 @@ private void postRemoveBlocksFromWorld(Level world, BlockPos pos, CallbackInfo c SplittingDisablerAttachment attachment = ship.getAttachment(SplittingDisablerAttachment.class); if (attachment != null) { attachment.enableSplitting(); - SplitHandler.Companion.getSPLITLOGGER().info("@[Contraption.removedBlocksFromWorld] Re-enabled splitting on ship " + ship.getSlug()); } } } From 39ceca41599eacfaf84a249ab2110d288e70b1d7 Mon Sep 17 00:00:00 2001 From: millennIumAMbiguity <37588844+millennIumAMbiguity@users.noreply.github.com> Date: Sat, 14 Dec 2024 05:37:53 +0100 Subject: [PATCH 14/45] Update logo (#1016) --- vs_logo.png | Bin 788842 -> 6042 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/vs_logo.png b/vs_logo.png index 8615cd334e63aafff4401a5386e37e09cc47980f..add6c41b32c58c8abe55d14e5d2eaa9cdcba8bd8 100644 GIT binary patch literal 6042 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⁡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 literal 788842 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 z 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ྊ!XQw4zyRI>Pf!fFo`~oE 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 n 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

    Lt3XeV|rY&a?IcMyPhm1E$A3$6puZHu+so1~phM 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%0DV7&Jucuamc7e0jO{W|$} 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

    tnM-t{U$qF!4^$cASAUyKF5oRtr@A!l`e9zwU# z$49&O)Nv56|L*(S6zclm9g_`v+k=yD$JPpoBzo$d&kC;4uEeu>cxcB9k1tW3pD{b9 zzehdd0y~pl^bOOC&G5PBLa-H7STX2W3Ww%sVhHlz{v<=$N-F0=C94&h2Pj8%81Sjr zubIVC^=LZx%c7c*eluX9YF~Rt4xF(Tms@DB+?pElqLqm>FcEQ`Ij&#nV33n3TlMPK z{pT3D*?I9FO`2NXJoip#qxYP$dPXC>C-#4I&729EpHyjsLR%;GW>4|VtZNi#)UE^L z|7TEwo)q`X8bxdlV4;3hrRVn^DXx#2dZT@h8on{!-~=en&)MBV@SzUU^#*CruY4-Z zRtBC@pVU5rNWO4;P>L#ef4itF{|J900oD5ShjiHca+{B_6lJnQ7}~3CVTsTgI&b^c zoRftzV(N5adH)sD$-qyiuqoupp`2+pu;Ues?_Nf%f^z9%e@NQ58o_>;q&<56)0(#d z999}t4!;H+n(&#lU6IqPMlZyF039%P>C1tC%c1-o1D8eP(auUr6rWhzK_W$F$1Pq; zH=W&{_uc@XGv_h{%#L-=v%nsoF23=iL-{Q06>I?2^dL>tTl3!=RsKUpuDRc*V?1g; z-%ZpG`wwAEkXDSFxLrGM-%8Ce$gJ1wqtK1NH`No(-zpeQw&1Y9Skz9jPo?+)WA@&H zaZGb+bAnb1-KxqNW!OQxx0bX?Gxz=71c=Crsw*Z~Ui^ilAKe_LwQHEFj_=qbf47&=-Ip2MXtH)hKTyuFOYJ07MsK0PE^;^&ujZI9% zqZ4)d5&4f4GCA30?TQP0BBerkx>;;~M_ul$eKD~UhPC5SQpL{#%)c6+lch58h}Ut7m^lFAWNOF7#rj9<>}*^}l6 zp741FLc>+^d&d28M@MTH;&CUr~D3>+Vwkk(nv1WO`IT0ULr!OM-@ZFPP8GrL_q#;3X(I zADjerE0P0Vg3GQ%g^*THU8mSyoBpGTC0#eJ`W^@yCiX0}{DA%4A25fQbP*e`C^v

    mhmE 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 From d4b7bcf22181f59500ecab6ba52ce34ae6949447 Mon Sep 17 00:00:00 2001 From: millennIumAMbiguity <37588844+millennIumAMbiguity@users.noreply.github.com> Date: Sat, 14 Dec 2024 05:54:39 +0100 Subject: [PATCH 15/45] Update en_pt.json --- .../assets/valkyrienskies/lang/en_pt.json | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/common/src/main/resources/assets/valkyrienskies/lang/en_pt.json b/common/src/main/resources/assets/valkyrienskies/lang/en_pt.json index 6e1bcdd4..959e2a9f 100644 --- a/common/src/main/resources/assets/valkyrienskies/lang/en_pt.json +++ b/common/src/main/resources/assets/valkyrienskies/lang/en_pt.json @@ -1,8 +1,26 @@ { + "key.valkyrienskies.ship_cruise": "Set Sail", "key.valkyrienskies.ship_down": "Sink", "category.valkyrienskies.driving": "Sailin'", "block.valkyrienskies.test_chair": "Davy Jones' Chair", "block.valkyrienskies.test_hinge": "Spinner Mount", + "block.valkyrienskies.test_flap": "Debug Flapper", + "block.valkyrienskies.test_wing": "Debug Wing", "item.valkyrienskies.ship_creator": "Ship Maker", - "item.valkyrienskies.ship_creator_smaller": "Rowboat Maker" + "item.valkyrienskies.area_assembler": "Plank Assembler", + "item.valkyrienskies.connection_checker": "Rigging Checker", + "item.valkyrienskies.ship_creator_smaller": "Rowboat Maker", + "item.valkyrienskies.physics_entity_creator": "Ghostly Hull Maker", + "argument.valkyrienskies.ship.no_found": "No ship in sight, matey!", + "argument.valkyrienskies.ship.multiple_found": "Too many ships in the waters!", + "command.valkyrienskies.delete.success": "Scuttled %d ships!", + "command.valkyrienskies.set_static.success": "Anchored %d ships to be is-static=%s!", + "command.valkyrienskies.teleport.success": "Warped %d ships to %s!", + "command.valkyrienskies.teleport.multiple_ship_success": "Warped %d ships!", + "command.valkyrienskies.mc_teleport.can_only_teleport_to_one_ship": "Can only teleport to one ship, ya scurvy dog!", + "command.valkyrienskies.get_ship.success": "Spotted ship with slug %s", + "command.valkyrienskies.get_ship.fail": "No ship found in these seas", + "command.valkyrienskies.get_ship.only_usable_by_entities": "/vs get-ship be only fer entities!", + "tooltip.valkyrienskies.mass": "Tonnage", + "command.valkyrienskies.scale.success": "Scaled %d ships fer the high seas!" } From e3044bce9ba7d155515bcff1daae176833d637bd Mon Sep 17 00:00:00 2001 From: millennIumAMbiguity <37588844+millennIumAMbiguity@users.noreply.github.com> Date: Sat, 14 Dec 2024 06:00:23 +0100 Subject: [PATCH 16/45] Update mod icon --- .../resources/assets/valkyrienskies/icon.png | Bin 79173 -> 21579 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/common/src/main/resources/assets/valkyrienskies/icon.png b/common/src/main/resources/assets/valkyrienskies/icon.png index cad330ae0a7da6144126a734c4405d182ec14f11..bb070777367e0121750a6dc61a7408251e1e2729 100644 GIT binary patch literal 21579 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 literal 79173 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 From 1307159006092d640ae1a88ab1d134c59850ddc1 Mon Sep 17 00:00:00 2001 From: millennIumAMbiguity <37588844+millennIumAMbiguity@users.noreply.github.com> Date: Sat, 14 Dec 2024 06:02:04 +0100 Subject: [PATCH 17/45] optimized texture --- .../valkyrienskies/textures/test_wing.png | Bin 2581 -> 1958 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/common/src/main/resources/assets/valkyrienskies/textures/test_wing.png b/common/src/main/resources/assets/valkyrienskies/textures/test_wing.png index e588a295780a171090fb70145c4549e009da2f37..d4be4c9401631e8fb262f5f0eba0ac07baee0710 100644 GIT binary patch literal 1958 zcmcgsX;9OL5>Fyjqr9;15Z-DngYaT3|Q= z6paMrFc6495)zV-(?CE2q9BKWib6%?v{U7H;Y;Uz=;yaHyT9Gv%pqa|$^n zJtG}R1_(q#5|D(&V$o<+a!T?*pIj@CuIuTpUWj^YWpirnGO;0i|N-k^#Fz5S~LNo@QkdV-) z5~`J5QXWgnWh%vOav^)5Pew{2^{YexIzl0Clkk{QezQ{CF6(N2s_7B7*Q3$s9vN5G z#ZE#;s3croD+7naiMS1dRtC3)-p;IK-76j&8Puqy0Oo>9)Gp>Q#k{80`Z7Wsf>m48 zQcvTt=nf7Jsj1ZXg!tIFSdCg07aw;y=5kDIOk!eU{x1Xq0sp91!Dl!0t7H;Bo5i3Z zk;u`fgMzk3CcTJ6A_bfY7#Zr93pr9jJBdWp?gWKGmXwsFrKKe$C8ecnF_l80q^70T z)z{VDtEHw={R92+czjJw4TVDHa5!WN832INvQn{FOe?3s;c)GJZxquPw7^Xc2@c)* zM*;mK`~M{yw%a}XpPn&)`_7OAW7P@>q!aG%>wS(|HBp8;6B!15NDpnb#XDwJ(-@Z3 zgS7H)m)OX}2cKMA4DRE;6j(THiC%xUy4!7`OlMc|YEbImQ{K~NDMEo`D zeZb}`N4?pgb2p7&AO1wJHTW7_sB2$X(||0!ngFYzpHkDp9570RyzGy|VYkg5w!dZ2SA1-?#2kY(4{A_y_{j0mtEcZZ) zBzsC3!xor`_K%;qXF2J^ry?#9*+18Ut5O|1VW_|aqvbm#EyW?Q73|nRT%;1a9>-lS{2-jT0Vpzyda-XFp=NCw!mF@kwNwa%i zo5YZ7pC4EF-eSHiz_=Z)2hW{#`qK8a<>xmx z-Nd^cANE;iEkP%J5}4>8E)qVIM$9KKXCsQ=U7KV(Hl%-T8?hC!XQU4Gisv(VXi7Lgk@&`@cfWwc*1JB4Ye=q zd%ZQAg6|HFqpd%^vD(e}&s*y8gSVzYXO3d=y!YTe_Ivh1S?+ZK9-(f>bKXTaTj=GPi#=&8|VXQ8!!sNY;CP z?7~@JhVi)BtG9=CL0t-p0@un|r;abfO&UWhj@bFJy^|Bkxjq2&D+K4RX+3RaV9W%K zu|CWqpTq}o3Jry>}Iv*RwLd+=5q5r-{YVBqP~n zAgjXEy%X%>wgj~ReQO7sfkdZy_Xc?@4d7AQ0~4)m>nwOTmpvngz>{%ChTm(yB*-5g K?91|r&i*gokS*c> literal 2581 zcmV+w3hMQVP)%jp7TH7|J={&{eAzGp5xv4L4i%3>$rB=Ekt1z;Iv~?re1_GhA14Q`{NIJq2n2D zzHud@6e0$t6dlj6<))iff&zf`oqxsiJT9IPa_Cr0nx@2YjEL}+S(7+)G{*OR9(w4Z zp-+r2y61RzzO#GJegLLUy97Tdj5r3+bG(~43hD3d27y~|`##0eBqU7{V=!X4b>$rt ziY0H4xpjY}zubceAOfl3*|kp+G!*gu0Oe@XG$l<^`^U6KL{Lhh zw0+>(aTpvJ9RJ9Na5r_XWA~o@d7xkeA5Ljvk<}00&%!I`uypD5fZ(_el17Mt_7q79 zjwqCYfl8Ullc!OL2H3l2F95C0i+J~6?~eH1+0z$sVE=(J5AxGc@BIC50;hs@lt(J@ zY1@^)0RTj*4D|OChgAxt64got*Dnx-gJ=ZhIyjC;sWgc=4te_dS8yDM%PxklqY>3= z6|FT|Yvx{FWdDB#Ns@%ee)U*wG$0eaEWj+_Y}-*@el7~DAc{B+QCjibvrplAE+(ns zIU40TbaXs}VCd=o2*(RXXh52#Xr*x+2gh;pzoV#0>;UL&W74F_fPL!2NhQwD0l0nu zFr*uTAea=4QfTd<5R|~A$rlk-D*zZ{^504;lv22^3xF6QP1CW9@H5bv0A^2qcn`?P zj%C-DCQT*^tK9y*J20u8{zwwE(%g8{N(69ypD3)_b3-Vl^2W%H3xakuwL)*|Tt{2m z>d(Bet!*`%I@eKXDB3QoVC^5C!0|kU6dVmGUg%hhh~T{6xT)WI_KqiFQm><5sYSlgYhYAf7sFY6vg6p~@p+aewG))lE7?aZ1 z+fAIrL{Wsoc6+51+R+#>#BrQA2k#%D0hPW1RzG+@U-AkB%yq=oAvAe#9*aN zoTL;RCRni(n+0xoWdp9~A|ky0`s+0nzYOQd;Daj7&CSG-?fNY(Ej8`>8Kd?B08td> z$EwvT)oPVEwj$?w9>tQ?4ngQT8gbwQI~ycvf>PP!DS0|vOGf1dyrCQ*iX#4fxIz?0 z#IY4R5n=CvGR7Dxl?tuRi@0=($qkWGiXGc`ptVhawrt*#CrGu#SukhHPha}Wi!5EX zJU{3M9)94B*ni~VpV8ZMm=nD*Mg(IF+Br3)Wr+=di15}w-beHVlu|gZ4SM?Y>GlEz z^XAS)1m1Y#jZ-G12Aq`_5E1&yeH=e}gkL=VJHVQojax>VoBuyHYt}5ZWApwbNl4Qa z5y@R)t@8ijxKUWe4+?o6@JU{vyXRy2%iZ+%_Aq0{3_Q>Fj`<7b4<$XPp8o9Fvx$?K zBZrTm9nI|Nc6jYO7_xo)c9twzVlS+D=$5nc0uv|N)Hh8deBU2oZnEE*=l47>S9fC! z?;YxA@4+%CXl!b8@+yaLy8*}Qo(%`MIO8bBC^ zJpS0@b)f?1t!t?A9a9v#2#fV|+)@``X88h&4N8R_6`|=?$JTv>GJbl-j zyIB17#Z)R4k|aSXMVh22txhFGj!Roxn|fsRj|Je!M=7svc$LPcMzq$}5^K$)YaXqS zA&_mDG$o0XJhuVAfU0aF>ko8qY+0>*zKkz zO?Kf!Ym70uZ>R@OHGl|F9NCO5v8y;qk`RU=yWZOMgNrAGv^FndaBz^urbdE7fI_ij z#}2g8nAEUi`;HMWLE}*|^BpMc5V-mqS5s&x5coc= z*R=xh@=GuO=I9B<#x3t+jKR_N4Ugx0Heh9i(RJNCM=-|Z>wnv}Zo`NniXxU>w~Ru= z={CDoXc1xgx0e$Qb<4Nkew#21iQ<^oI$z5LD~eB9;Dw78;`=^HlCX8l);!SRiyToD z<*Pm|EiHM2WNU);f*u?kL}5itYYmDK8Cn*2Hn!6=W%usgL}5e}Ml?1yqLt1UIkL~r zyQ0MG83i2e+O@$ntAi)OF|I>Dyao9j9e8uL2AdS}e* z1nZr=L}qwxU}<9UwEe6^Moh|Sb%L(KsG&8&p*q2!P^3_(AK!l_#=K7On#SeztpQ_Q zCs^-{OPydnGv;-I_0E{r3D!GfUME=ZjCq}4y)))@g7wa*>jdX6`09vx{pamZpLWeJ zpXm4^?rmH+r#iv&iBT0uhzN_X`Bq(LcB5rf|1&gy?&afse`C(5>janIxbnQ}0cYg} z$|rm2J9(V`-kzG=GY|cQkc^!Hm+l-rRU_R$jpMe17};CwOz$mT|hR@nh6= rf?vD(o9CYho{JYaUpOZ(a6a)r(ObKLS=j9L00000NkvXXu0mjf6jJ~{ From 811307342f34993a94000d2d3a4fc2712b151632 Mon Sep 17 00:00:00 2001 From: millennIumAMbiguity <37588844+millennIumAMbiguity@users.noreply.github.com> Date: Sat, 14 Dec 2024 06:10:21 +0100 Subject: [PATCH 18/45] Added Russian translation --- .../assets/valkyrienskies/lang/ru_ru.json | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 common/src/main/resources/assets/valkyrienskies/lang/ru_ru.json diff --git a/common/src/main/resources/assets/valkyrienskies/lang/ru_ru.json b/common/src/main/resources/assets/valkyrienskies/lang/ru_ru.json new file mode 100644 index 00000000..abf499ac --- /dev/null +++ b/common/src/main/resources/assets/valkyrienskies/lang/ru_ru.json @@ -0,0 +1,26 @@ +{ + "key.valkyrienskies.ship_cruise": "Крейсерская скорость", + "key.valkyrienskies.ship_down": "Спуск", + "category.valkyrienskies.driving": "Управление", + "block.valkyrienskies.test_chair": "Отладочное кресло", + "block.valkyrienskies.test_hinge": "Отладочная петля", + "block.valkyrienskies.test_flap": "Отладочная створка", + "block.valkyrienskies.test_wing": "Отладочное крыло", + "item.valkyrienskies.ship_creator": "Создатель кораблей", + "item.valkyrienskies.area_assembler": "Сборщик области", + "item.valkyrienskies.connection_checker": "Проверка соединений", + "item.valkyrienskies.ship_creator_smaller": "Мини-создатель кораблей", + "item.valkyrienskies.physics_entity_creator": "Создатель физической сущности", + "argument.valkyrienskies.ship.no_found": "Корабль не найден", + "argument.valkyrienskies.ship.multiple_found": "Найдено несколько кораблей", + "command.valkyrienskies.delete.success": "Удалено %d кораблей!", + "command.valkyrienskies.set_static.success": "Установлено, что %d кораблей статичны: %s!", + "command.valkyrienskies.teleport.success": "Телепортировано %d кораблей в %s!", + "command.valkyrienskies.teleport.multiple_ship_success": "Телепортировано %d кораблей!", + "command.valkyrienskies.mc_teleport.can_only_teleport_to_one_ship": "Можно телепортироваться только к одному кораблю", + "command.valkyrienskies.get_ship.success": "Найден корабль с идентификатором %s", + "command.valkyrienskies.get_ship.fail": "Корабль не найден", + "command.valkyrienskies.get_ship.only_usable_by_entities": "/vs get-ship может использоваться только сущностями!", + "tooltip.valkyrienskies.mass": "Масса", + "command.valkyrienskies.scale.success": "Масштабировано %d кораблей!" +} From c41d894d3602c4569860dbed86cc62c9f3bb1653 Mon Sep 17 00:00:00 2001 From: ThePlasticPotato Date: Sat, 21 Dec 2024 15:08:55 -0500 Subject: [PATCH 19/45] fix splitting on contraption assembly but like for real this time --- .../mixin/mod_compat/create/MixinContraption.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/create/MixinContraption.java b/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/create/MixinContraption.java index 6ffd95f2..722c7a2b 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/create/MixinContraption.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/create/MixinContraption.java @@ -6,6 +6,7 @@ import net.minecraft.world.entity.Entity; import net.minecraft.world.level.Level; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; @@ -17,6 +18,9 @@ @Mixin(Contraption.class) public class MixinContraption { + @Shadow + public BlockPos anchor; + @Redirect(method = "onEntityCreated", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/Level;addFreshEntity(Lnet/minecraft/world/entity/Entity;)Z")) private boolean wrapOp(Level level, Entity entity) { // BlockPos anchor = blockFace.getConnectedPos(); @@ -33,8 +37,8 @@ private boolean wrapOp(Level level, Entity entity) { @Inject(method = "removeBlocksFromWorld", at = @At("HEAD")) private void preRemoveBlocksFromWorld(Level world, BlockPos pos, CallbackInfo ci) { - if (world instanceof ServerLevel sWorld) { - LoadedServerShip ship = VSGameUtilsKt.getShipObjectManagingPos(sWorld, pos); + if (world instanceof ServerLevel sWorld && this.anchor != null) { + LoadedServerShip ship = VSGameUtilsKt.getShipObjectManagingPos(sWorld, this.anchor); if (ship != null) { SplittingDisablerAttachment attachment = ship.getAttachment(SplittingDisablerAttachment.class); if (attachment != null) { @@ -44,10 +48,10 @@ private void preRemoveBlocksFromWorld(Level world, BlockPos pos, CallbackInfo ci } } - @Inject(method = "removeBlocksFromWorld", at = @At("RETURN")) + @Inject(method = "removeBlocksFromWorld", at = @At("TAIL")) private void postRemoveBlocksFromWorld(Level world, BlockPos pos, CallbackInfo ci) { - if (world instanceof ServerLevel sWorld) { - LoadedServerShip ship = VSGameUtilsKt.getShipObjectManagingPos(sWorld, pos); + if (world instanceof ServerLevel sWorld && this.anchor != null) { + LoadedServerShip ship = VSGameUtilsKt.getShipObjectManagingPos(sWorld, this.anchor); if (ship != null) { SplittingDisablerAttachment attachment = ship.getAttachment(SplittingDisablerAttachment.class); if (attachment != null) { From 9ffc23a0cef4fbf9bd311d5a90f96f645885e439 Mon Sep 17 00:00:00 2001 From: StewStrong Date: Sat, 21 Dec 2024 17:17:42 -0800 Subject: [PATCH 20/45] FAST PHYSICS --- forge/build.gradle | 4 ++-- gradle.properties | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/forge/build.gradle b/forge/build.gradle index f108a0c1..e6d657c6 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -115,11 +115,11 @@ dependencies { transitive = false } - forgeRuntimeLibrary shadowCommon("org.valkyrienskies:physics_api_krunch:1.0.0+7db6a103f1") { + forgeRuntimeLibrary shadowCommon("org.valkyrienskies:physics_api_krunch:1.0.0+1dcdf4060f") { transitive = false } - forgeRuntimeLibrary shadowCommon("org.valkyrienskies:physics_api:1.0.0+0ba0cc41e1") { + forgeRuntimeLibrary shadowCommon("org.valkyrienskies:physics_api:1.0.0+0c82dd6264") { transitive = false } diff --git a/gradle.properties b/gradle.properties index df6bc0a7..d171543a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,7 +11,7 @@ forge_version=1.18.2-40.2.4 create_fabric_version=0.5.1-i-build.1598+mc1.18.2 flywheel_version_fabric=0.6.9-38 createbigcannons_version= 0.5.2-nightly-e815ca4 -vs_core_version=1.1.0+e213cc9916 +vs_core_version=1.1.0+9a16ff656c # Prevent kotlin from autoincluding stdlib as a dependency, which breaks # gradle's composite builds (includeBuild) for some reason. We'll add it manually kotlin.stdlib.default.dependency=false From 181b1fbe6d23bd2fae0859f76f28207b99c485bd Mon Sep 17 00:00:00 2001 From: ThePlasticPotato Date: Sat, 21 Dec 2024 21:22:41 -0500 Subject: [PATCH 21/45] hotfix assembly to use dense set --- .../mod/common/assembly/ShipAssembler.kt | 30 ++++++++++--------- .../mod/common/assembly/ShipAssembly.kt | 6 +--- .../mod/common/util/SplitHandler.kt | 11 +++---- 3 files changed, 23 insertions(+), 24 deletions(-) diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/assembly/ShipAssembler.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/assembly/ShipAssembler.kt index dade67e1..6e045bd0 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/assembly/ShipAssembler.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/assembly/ShipAssembler.kt @@ -11,11 +11,13 @@ import org.valkyrienskies.core.api.ships.ServerShip import org.valkyrienskies.core.api.ships.Ship import org.valkyrienskies.core.api.ships.getAttachment import org.valkyrienskies.core.impl.game.ShipTeleportDataImpl +import org.valkyrienskies.core.util.datastructures.DenseBlockPosSet import org.valkyrienskies.mod.common.BlockStateInfo.onSetBlock import org.valkyrienskies.mod.common.dimensionId import org.valkyrienskies.mod.common.getShipObjectManagingPos import org.valkyrienskies.mod.common.shipObjectWorld import org.valkyrienskies.mod.common.util.SplittingDisablerAttachment +import org.valkyrienskies.mod.common.util.toBlockPos object ShipAssembler { @@ -32,14 +34,14 @@ object ShipAssembler { } - fun assembleToShip(level: Level, blocks: List, removeOriginal: Boolean, scale: Double = 1.0, shouldDisableSplitting: Boolean = false): ServerShip { + fun assembleToShip(level: Level, blocks: DenseBlockPosSet, removeOriginal: Boolean, scale: Double = 1.0, shouldDisableSplitting: Boolean = false): ServerShip { assert(level is ServerLevel) { "Can't create ships clientside!" } val sLevel: ServerLevel = level as ServerLevel if (blocks.isEmpty()) { throw IllegalArgumentException("No blocks to assemble.") } - val existingShip = sLevel.getShipObjectManagingPos(blocks.find { !sLevel.getBlockState(it).isAir } ?: throw IllegalArgumentException()) + val existingShip = sLevel.getShipObjectManagingPos(blocks.find { !sLevel.getBlockState(it.toBlockPos()).isAir }?.toBlockPos() ?: throw IllegalArgumentException()) var existingShipCouldSplit = true var structureCornerMin: BlockPos? = null @@ -48,13 +50,13 @@ object ShipAssembler { // Calculate bounds of the area containing all blocks adn check for solids and invalid blocks for (itPos in blocks) { - if (isValidShipBlock(level.getBlockState(itPos))) { + if (isValidShipBlock(level.getBlockState(itPos.toBlockPos()))) { if (structureCornerMin == null) { - structureCornerMin = itPos - structureCornerMax = itPos + structureCornerMin = itPos.toBlockPos() + structureCornerMax = itPos.toBlockPos() } else { - structureCornerMin = AssemblyUtil.getMinCorner(structureCornerMin!!, itPos) - structureCornerMax = AssemblyUtil.getMaxCorner(structureCornerMax!!, itPos) + structureCornerMin = AssemblyUtil.getMinCorner(structureCornerMin!!, itPos.toBlockPos()) + structureCornerMax = AssemblyUtil.getMaxCorner(structureCornerMax!!, itPos.toBlockPos()) } hasSolids = true } @@ -87,10 +89,10 @@ object ShipAssembler { // Copy blocks and check if the center block got replaced (is default a stone block) var centerBlockReplaced = false for (itPos in blocks) { - if (isValidShipBlock(level.getBlockState(itPos))) { - val relative: BlockPos = itPos.subtract( BlockPos(shipOGPos.x(),shipOGPos.y(),shipOGPos.z())) + if (isValidShipBlock(level.getBlockState(itPos.toBlockPos()))) { + val relative: BlockPos = itPos.toBlockPos().subtract( BlockPos(shipOGPos.x(),shipOGPos.y(),shipOGPos.z())) val shipPos: BlockPos = shipBlockPos.offset(relative) - AssemblyUtil.copyBlock(level, itPos, shipPos) + AssemblyUtil.copyBlock(level, itPos.toBlockPos(), shipPos) if (relative.equals(BlockPos.ZERO)) centerBlockReplaced = true } } @@ -98,17 +100,17 @@ object ShipAssembler { // Remove original blocks if (removeOriginal) { for (itPos in blocks) { - if (isValidShipBlock(level.getBlockState(itPos))) { - AssemblyUtil.removeBlock(level, itPos) + if (isValidShipBlock(level.getBlockState(itPos.toBlockPos()))) { + AssemblyUtil.removeBlock(level, itPos.toBlockPos()) } } } // Trigger updates on both ships for (itPos in blocks) { - val relative: BlockPos = itPos.subtract(BlockPos(shipOGPos.x(),shipOGPos.y(),shipOGPos.z())) + val relative: BlockPos = itPos.toBlockPos().subtract(BlockPos(shipOGPos.x(),shipOGPos.y(),shipOGPos.z())) val shipPos: BlockPos = shipBlockPos.offset(relative) - AssemblyUtil.updateBlock(level,itPos,shipPos,level.getBlockState(shipPos)) + AssemblyUtil.updateBlock(level,itPos.toBlockPos(),shipPos,level.getBlockState(shipPos)) } val shipCenterPos = ((newShip as ServerShip).inertiaData.centerOfMassInShip).add(0.5, 0.5, 0.5, Vector3d()) diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/assembly/ShipAssembly.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/assembly/ShipAssembly.kt index e297942f..5fe9b115 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/assembly/ShipAssembly.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/assembly/ShipAssembly.kt @@ -11,9 +11,5 @@ fun createNewShipWithBlocks( centerBlock: BlockPos, blocks: DenseBlockPosSet, level: ServerLevel ): ServerShip { if (blocks.isEmpty()) throw IllegalArgumentException() - - val blockList: MutableList = mutableListOf() - - blocks.toList().forEach { blockList.add(it.toBlockPos()) } - return ShipAssembler.assembleToShip(level, blockList, true, 1.0) + return ShipAssembler.assembleToShip(level, blocks, true, 1.0) } diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/util/SplitHandler.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/SplitHandler.kt index db262006..e8a251b5 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/util/SplitHandler.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/SplitHandler.kt @@ -9,6 +9,7 @@ import org.joml.primitives.AABBi import org.valkyrienskies.core.api.ships.getAttachment import org.valkyrienskies.core.api.world.connectivity.ConnectionStatus.CONNECTED import org.valkyrienskies.core.api.world.connectivity.ConnectionStatus.DISCONNECTED +import org.valkyrienskies.core.util.datastructures.DenseBlockPosSet import org.valkyrienskies.core.util.expand import org.valkyrienskies.mod.common.assembly.ShipAssembler import org.valkyrienskies.mod.common.dimensionId @@ -97,17 +98,17 @@ class SplitHandler(private val doEdges: Boolean, private val doCorners: Boolean) //begin the DFSing - val toAssemble = HashSet>() + val toAssemble = HashSet() for (starter in disconnected) { - val visited = HashSet() + val visited = DenseBlockPosSet() val queuedPositions = HashSet() queuedPositions.add(starter) while (queuedPositions.isNotEmpty()) { val current = queuedPositions.first() queuedPositions.remove(current) - visited.add(current) + visited.add(current.toJOML()) val toCheck = HashSet() for (offset in getOffsets(doEdges, doCorners)) { toCheck.add( @@ -115,13 +116,13 @@ class SplitHandler(private val doEdges: Boolean, private val doCorners: Boolean) ) } for (check in toCheck) { - if (!visited.contains(check) && !level.getBlockState(check).isAir) { + if (!visited.contains(check.toJOML()) && !level.getBlockState(check).isAir) { queuedPositions.add(check) } } } //if we have visited all blocks in the component, we can split it - toAssemble.add(visited.toList()) + toAssemble.add(visited) } if (toAssemble.isEmpty()) { From 93cc755c6325585ddf3fd90cfd414e8293474ecc Mon Sep 17 00:00:00 2001 From: ThePlasticPotato Date: Sun, 22 Dec 2024 02:06:10 -0500 Subject: [PATCH 22/45] assembly via structure block --- .../mod/common/assembly/ShipAssembler.kt | 30 ++-- .../mod/common/assembly/ShipAssembly.kt | 144 +++++++++++++++++- .../mod/common/item/AreaAssemblerItem.kt | 27 ++-- .../mod/common/util/SplitHandler.kt | 5 +- gradle.properties | 2 +- 5 files changed, 174 insertions(+), 34 deletions(-) diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/assembly/ShipAssembler.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/assembly/ShipAssembler.kt index 6e045bd0..dade67e1 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/assembly/ShipAssembler.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/assembly/ShipAssembler.kt @@ -11,13 +11,11 @@ import org.valkyrienskies.core.api.ships.ServerShip import org.valkyrienskies.core.api.ships.Ship import org.valkyrienskies.core.api.ships.getAttachment import org.valkyrienskies.core.impl.game.ShipTeleportDataImpl -import org.valkyrienskies.core.util.datastructures.DenseBlockPosSet import org.valkyrienskies.mod.common.BlockStateInfo.onSetBlock import org.valkyrienskies.mod.common.dimensionId import org.valkyrienskies.mod.common.getShipObjectManagingPos import org.valkyrienskies.mod.common.shipObjectWorld import org.valkyrienskies.mod.common.util.SplittingDisablerAttachment -import org.valkyrienskies.mod.common.util.toBlockPos object ShipAssembler { @@ -34,14 +32,14 @@ object ShipAssembler { } - fun assembleToShip(level: Level, blocks: DenseBlockPosSet, removeOriginal: Boolean, scale: Double = 1.0, shouldDisableSplitting: Boolean = false): ServerShip { + fun assembleToShip(level: Level, blocks: List, removeOriginal: Boolean, scale: Double = 1.0, shouldDisableSplitting: Boolean = false): ServerShip { assert(level is ServerLevel) { "Can't create ships clientside!" } val sLevel: ServerLevel = level as ServerLevel if (blocks.isEmpty()) { throw IllegalArgumentException("No blocks to assemble.") } - val existingShip = sLevel.getShipObjectManagingPos(blocks.find { !sLevel.getBlockState(it.toBlockPos()).isAir }?.toBlockPos() ?: throw IllegalArgumentException()) + val existingShip = sLevel.getShipObjectManagingPos(blocks.find { !sLevel.getBlockState(it).isAir } ?: throw IllegalArgumentException()) var existingShipCouldSplit = true var structureCornerMin: BlockPos? = null @@ -50,13 +48,13 @@ object ShipAssembler { // Calculate bounds of the area containing all blocks adn check for solids and invalid blocks for (itPos in blocks) { - if (isValidShipBlock(level.getBlockState(itPos.toBlockPos()))) { + if (isValidShipBlock(level.getBlockState(itPos))) { if (structureCornerMin == null) { - structureCornerMin = itPos.toBlockPos() - structureCornerMax = itPos.toBlockPos() + structureCornerMin = itPos + structureCornerMax = itPos } else { - structureCornerMin = AssemblyUtil.getMinCorner(structureCornerMin!!, itPos.toBlockPos()) - structureCornerMax = AssemblyUtil.getMaxCorner(structureCornerMax!!, itPos.toBlockPos()) + structureCornerMin = AssemblyUtil.getMinCorner(structureCornerMin!!, itPos) + structureCornerMax = AssemblyUtil.getMaxCorner(structureCornerMax!!, itPos) } hasSolids = true } @@ -89,10 +87,10 @@ object ShipAssembler { // Copy blocks and check if the center block got replaced (is default a stone block) var centerBlockReplaced = false for (itPos in blocks) { - if (isValidShipBlock(level.getBlockState(itPos.toBlockPos()))) { - val relative: BlockPos = itPos.toBlockPos().subtract( BlockPos(shipOGPos.x(),shipOGPos.y(),shipOGPos.z())) + if (isValidShipBlock(level.getBlockState(itPos))) { + val relative: BlockPos = itPos.subtract( BlockPos(shipOGPos.x(),shipOGPos.y(),shipOGPos.z())) val shipPos: BlockPos = shipBlockPos.offset(relative) - AssemblyUtil.copyBlock(level, itPos.toBlockPos(), shipPos) + AssemblyUtil.copyBlock(level, itPos, shipPos) if (relative.equals(BlockPos.ZERO)) centerBlockReplaced = true } } @@ -100,17 +98,17 @@ object ShipAssembler { // Remove original blocks if (removeOriginal) { for (itPos in blocks) { - if (isValidShipBlock(level.getBlockState(itPos.toBlockPos()))) { - AssemblyUtil.removeBlock(level, itPos.toBlockPos()) + if (isValidShipBlock(level.getBlockState(itPos))) { + AssemblyUtil.removeBlock(level, itPos) } } } // Trigger updates on both ships for (itPos in blocks) { - val relative: BlockPos = itPos.toBlockPos().subtract(BlockPos(shipOGPos.x(),shipOGPos.y(),shipOGPos.z())) + val relative: BlockPos = itPos.subtract(BlockPos(shipOGPos.x(),shipOGPos.y(),shipOGPos.z())) val shipPos: BlockPos = shipBlockPos.offset(relative) - AssemblyUtil.updateBlock(level,itPos.toBlockPos(),shipPos,level.getBlockState(shipPos)) + AssemblyUtil.updateBlock(level,itPos,shipPos,level.getBlockState(shipPos)) } val shipCenterPos = ((newShip as ServerShip).inertiaData.centerOfMassInShip).add(0.5, 0.5, 0.5, Vector3d()) diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/assembly/ShipAssembly.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/assembly/ShipAssembly.kt index 5fe9b115..ccc3d182 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/assembly/ShipAssembly.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/assembly/ShipAssembly.kt @@ -2,14 +2,154 @@ package org.valkyrienskies.mod.common.assembly import net.minecraft.core.BlockPos import net.minecraft.server.level.ServerLevel +import net.minecraft.world.Clearable +import net.minecraft.world.level.ChunkPos +import net.minecraft.world.level.block.Block +import net.minecraft.world.level.block.Blocks +import net.minecraft.world.level.block.entity.BlockEntity +import net.minecraft.world.level.levelgen.structure.templatesystem.StructurePlaceSettings +import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate +import org.joml.Vector3d import org.valkyrienskies.core.api.ships.ServerShip +import org.valkyrienskies.core.apigame.ShipTeleportData +import org.valkyrienskies.core.impl.game.ShipTeleportDataImpl +import org.valkyrienskies.core.impl.game.ships.ShipData +import org.valkyrienskies.core.impl.game.ships.ShipTransformImpl import org.valkyrienskies.core.util.datastructures.DenseBlockPosSet -import org.valkyrienskies.mod.common.util.toBlockPos +import org.valkyrienskies.mod.common.dimensionId +import org.valkyrienskies.mod.common.executeIf +import org.valkyrienskies.mod.common.isTickingChunk +import org.valkyrienskies.mod.common.shipObjectWorld +import org.valkyrienskies.mod.common.util.toJOML +import org.valkyrienskies.mod.common.util.toJOMLD +import org.valkyrienskies.mod.common.util.toMinecraft +import org.valkyrienskies.mod.util.relocateBlock +import org.valkyrienskies.mod.util.updateBlock @Deprecated("Use [ShipAssembler.assembleToShip] instead") fun createNewShipWithBlocks( centerBlock: BlockPos, blocks: DenseBlockPosSet, level: ServerLevel ): ServerShip { if (blocks.isEmpty()) throw IllegalArgumentException() - return ShipAssembler.assembleToShip(level, blocks, true, 1.0) + //return ShipAssembler.assembleToShip(level, blocks, true, 1.0) + + + val ship = level.shipObjectWorld.createNewShipAtBlock(centerBlock.toJOML(), false, 1.0, level.dimensionId) + val shipChunkX = ship.chunkClaim.xMiddle + val shipChunkZ = ship.chunkClaim.zMiddle + val worldChunkX = centerBlock.x shr 4 + val worldChunkZ = centerBlock.z shr 4 + val deltaX = worldChunkX - shipChunkX + val deltaZ = worldChunkZ - shipChunkZ + val chunksToBeUpdated = mutableMapOf>() + blocks.forEachChunk { x, _, z, _ -> + val sourcePos = ChunkPos(x, z) + val destPos = ChunkPos(x - deltaX, z - deltaZ) + chunksToBeUpdated[sourcePos] = Pair(sourcePos, destPos) + } + val chunkPairs = chunksToBeUpdated.values.toList() + val chunkPoses = chunkPairs.flatMap { it.toList() } + val chunkPosesJOML = chunkPoses.map { it.toJOML() } + // Send a list of all the chunks that we plan on updating to players, so that they + // defer all updates until assembly is finished + // with(vsCore.simplePacketNetworking) { + // PacketStopChunkUpdates(chunkPosesJOML).sendToAllClients() + // } + // Use relocateBlock to copy all the blocks into the ship + blocks.forEachChunk { chunkX, chunkY, chunkZ, chunk -> + val sourceChunk = level.getChunk(chunkX, chunkZ) + val destChunk = level.getChunk(chunkX - deltaX, chunkZ - deltaZ) + chunk.forEach { x, y, z -> + val fromPos = BlockPos((sourceChunk.pos.x shl 4) + x, (chunkY shl 4) + y, (sourceChunk.pos.z shl 4) + z) + val toPos = BlockPos((destChunk.pos.x shl 4) + x, (chunkY shl 4) + y, (destChunk.pos.z shl 4) + z) + relocateBlock(sourceChunk, fromPos, destChunk, toPos, false, ship) + } + } + // Use updateBlock to update blocks after copying + blocks.forEachChunk { chunkX, chunkY, chunkZ, chunk -> + val sourceChunk = level.getChunk(chunkX, chunkZ) + val destChunk = level.getChunk(chunkX - deltaX, chunkZ - deltaZ) + chunk.forEach { x, y, z -> + val fromPos = BlockPos((sourceChunk.pos.x shl 4) + x, (chunkY shl 4) + y, (sourceChunk.pos.z shl 4) + z) + val toPos = BlockPos((destChunk.pos.x shl 4) + x, (chunkY shl 4) + y, (destChunk.pos.z shl 4) + z) + updateBlock(destChunk.level, fromPos, toPos, destChunk.getBlockState(toPos)) + } + } + // Calculate the position of the block that the player clicked after it has been assembled + val centerInShip = Vector3d( + ((shipChunkX shl 4) + (centerBlock.x and 15)).toDouble(), + centerBlock.y.toDouble(), + ((shipChunkZ shl 4) + (centerBlock.z and 15)).toDouble() + ) + // The ship's position has shifted from the center block since we assembled the ship, compensate for that + val centerBlockPosInWorld = ship.inertiaData.centerOfMassInShip.sub(centerInShip, Vector3d()) + .add(ship.transform.positionInWorld) + // Put the ship into the compensated position, so that all the assembled blocks stay in the same place + // TODO: AAAAAAAAA THIS IS HORRIBLE how can the API support this? + (ship as ShipData).transform = (ship.transform as ShipTransformImpl).copy(positionInWorld = centerBlockPosInWorld) + level.server.executeIf( + // This condition will return true if all modified chunks have been both loaded AND + // chunk update packets were sent to players + { chunkPoses.all(level::isTickingChunk) } + ) { + // Once all the chunk updates are sent to players, we can tell them to restart chunk updates + // with(vsCore.simplePacketNetworking) { + // PacketRestartChunkUpdates(chunkPosesJOML).sendToAllClients() + // } + } + + return ship +} + +fun createNewShipWithStructure( + lowerCorner: BlockPos, higherCorner: BlockPos, blocks: StructureTemplate, level: ServerLevel +): ServerShip { + //if (blocks.size.toJOML().length() < 0.0001) throw IllegalArgumentException() + + val ship = level.shipObjectWorld.createNewShipAtBlock(lowerCorner.toJOML(), false, 1.0, level.dimensionId) + val shipChunkX = ship.chunkClaim.xMiddle + val shipChunkZ = ship.chunkClaim.zMiddle + + // Calculate the position of the block that the player clicked after it has been assembled + val lowerCornerInShip = Vector3d( + ((shipChunkX shl 4) + (lowerCorner.x and 15)).toDouble(), + lowerCorner.y.toDouble(), + ((shipChunkZ shl 4) + (lowerCorner.z and 15)).toDouble() + ) + val higherCornerInShip = Vector3d( + ((shipChunkX shl 4) + (higherCorner.x and 15)).toDouble(), + higherCorner.y.toDouble(), + ((shipChunkZ shl 4) + (higherCorner.z and 15)).toDouble() + ) + + blocks.placeInWorld(level, BlockPos(lowerCornerInShip.toMinecraft()), BlockPos(lowerCornerInShip.toMinecraft()), StructurePlaceSettings(), level.random, Block.UPDATE_ALL) + + val diff = higherCorner.subtract(lowerCorner) + val centerPos = lowerCorner.offset(diff.x / 2, diff.y / 2, diff.z / 2) + + // The ship's position has shifted from the center block since we assembled the ship, compensate for that + val centerBlockPosInWorld = ship.inertiaData.centerOfMassInShip.sub(lowerCornerInShip, Vector3d()) + .add(ship.transform.positionInWorld) + // Put the ship into the compensated position, so that all the assembled blocks stay in the same place + // TODO: AAAAAAAAA THIS IS HORRIBLE how can the API support this? + //(ship as ShipData).transform = (ship.transform as ShipTransformImpl).copy(positionInWorld = centerBlockPosInWorld) + level.shipObjectWorld + .teleportShip(ship, ShipTeleportDataImpl(newPos = centerBlockPosInWorld.add(0.0, (128.0 - lowerCorner.y.toDouble() + 0.5), 0.0, Vector3d()), newPosInShip = ship.inertiaData.centerOfMassInShip)) + + + for (x in lowerCorner.x..higherCorner.x) { + for (y in lowerCorner.y..higherCorner.y) { + for (z in lowerCorner.z..higherCorner.z) { + if (!level.getBlockState(BlockPos(x, y, z)).isAir) { + val blockEntity: BlockEntity? = level.getBlockEntity(BlockPos(x, y, z)) + Clearable.tryClear(blockEntity) + level.removeBlockEntity(BlockPos(x, y, z)) + level.setBlock(BlockPos(x, y, z), Blocks.AIR.defaultBlockState(), Block.UPDATE_CLIENTS) + + //level.getChunk(BlockPos(x, y, z)).setBlockState(BlockPos(x, y, z), Blocks.AIR.defaultBlockState(), false) + } + } + } + } + return ship } diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/item/AreaAssemblerItem.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/item/AreaAssemblerItem.kt index cad9346d..7d5ab48f 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/item/AreaAssemblerItem.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/item/AreaAssemblerItem.kt @@ -3,17 +3,23 @@ package org.valkyrienskies.mod.common.item import net.minecraft.Util import net.minecraft.core.BlockPos import net.minecraft.core.Vec3i +import net.minecraft.gametest.framework.StructureUtils import net.minecraft.network.chat.TextComponent import net.minecraft.server.level.ServerLevel import net.minecraft.world.InteractionResult import net.minecraft.world.item.Item import net.minecraft.world.item.ItemStack import net.minecraft.world.item.context.UseOnContext +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.level.levelgen.structure.templatesystem.StructureTemplate import org.joml.primitives.AABBi +import org.valkyrienskies.core.util.datastructures.DenseBlockPosSet import org.valkyrienskies.mod.common.assembly.ShipAssembler +import org.valkyrienskies.mod.common.assembly.createNewShipWithBlocks +import org.valkyrienskies.mod.common.assembly.createNewShipWithStructure import org.valkyrienskies.mod.common.dimensionId -import org.valkyrienskies.mod.common.getShipManagingPos import org.valkyrienskies.mod.common.getShipObjectManagingPos import org.valkyrienskies.mod.common.shipObjectWorld import org.valkyrienskies.mod.common.util.toJOML @@ -53,20 +59,15 @@ class AreaAssemblerItem( } else { val blockAABB = AABBi(blockPos.toJOML(), Vec3i(firstPosX, firstPosY, firstPosZ).toJOML()) blockAABB.correctBounds() - val blocks = ArrayList() + val lowerCorner = BlockPos(blockAABB.minX, blockAABB.minY, blockAABB.minZ) + val upperCorner = BlockPos(blockAABB.maxX, blockAABB.maxY, blockAABB.maxZ) + + val structure = StructureTemplate() + structure.fillFromWorld(level, lowerCorner, upperCorner.offset(1, 1, 1).subtract(lowerCorner), true, Blocks.STRUCTURE_VOID) - for (x in blockAABB.minX..blockAABB.maxX) { - for (y in blockAABB.minY..blockAABB.maxY) { - for (z in blockAABB.minZ..blockAABB.maxZ) { - if (level.getBlockState(BlockPos(x, y, z)).isAir) { - continue - } - blocks.add(BlockPos(x, y, z)) - } - } - } ctx.player?.sendMessage(TextComponent("Assembling (${blockPos.x}, ${blockPos.y}, ${blockPos.z}) to ($firstPosX, $firstPosY, $firstPosZ)!"), Util.NIL_UUID) - ShipAssembler.assembleToShip(level, blocks, true, scale.asDouble, true) + //ShipAssembler.assembleToShip(level, blocks, true, scale.asDouble, true) + createNewShipWithStructure(lowerCorner, upperCorner, structure, level) } item.tag!!.remove("firstPosX") item.tag!!.remove("firstPosY") diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/util/SplitHandler.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/SplitHandler.kt index e8a251b5..9520a16b 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/util/SplitHandler.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/SplitHandler.kt @@ -11,7 +11,7 @@ import org.valkyrienskies.core.api.world.connectivity.ConnectionStatus.CONNECTED import org.valkyrienskies.core.api.world.connectivity.ConnectionStatus.DISCONNECTED import org.valkyrienskies.core.util.datastructures.DenseBlockPosSet import org.valkyrienskies.core.util.expand -import org.valkyrienskies.mod.common.assembly.ShipAssembler +import org.valkyrienskies.mod.common.assembly.createNewShipWithBlocks import org.valkyrienskies.mod.common.dimensionId import org.valkyrienskies.mod.common.getShipObjectManagingPos import org.valkyrienskies.mod.common.shipObjectWorld @@ -131,7 +131,8 @@ class SplitHandler(private val doEdges: Boolean, private val doCorners: Boolean) } for (component in toAssemble) { - ShipAssembler.assembleToShip(level, component, true, 1.0, true) + //ShipAssembler.assembleToShip(level, component, true, 1.0, true) + createNewShipWithBlocks(component.first().toBlockPos(), component, level) } loadedShip.getAttachment(SplittingDisablerAttachment::class.java)?.enableSplitting() diff --git a/gradle.properties b/gradle.properties index d171543a..2410644f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=1G +org.gradle.jvmargs=-Xmx20G -XX:MaxMetaspaceSize=1G minecraft_version=1.18.2 enabled_platforms=quilt,fabric,forge archives_base_name=valkyrienskies-118 From 58c6bfb72d185c3f0ee886edcabf1903ce7e0acb Mon Sep 17 00:00:00 2001 From: ThePlasticPotato Date: Fri, 27 Dec 2024 00:14:00 -0500 Subject: [PATCH 23/45] Joints! --- ...oundSectionBlocksUpdatePacketAccessor.java | 1 + .../MixinDebugRenderer.java | 24 +++++++++++ .../MixinBlockUpdatePacket.java | 4 ++ .../MixinSectionBlocksUpdatePacket.java | 11 +++++ .../mixinducks/world/WithSealedPositions.java | 9 ++++ .../mod/client/SparseVoxelRenderer.kt | 41 +++++++++++++++++++ .../mod/common/assembly/ShipAssembly.kt | 6 +-- .../mod/common/block/TestHingeBlock.kt | 35 ++++++++-------- .../blockentity/TestHingeBlockEntity.kt | 4 +- .../mod/common/item/ConnectionCheckerItem.kt | 9 +++- .../common/item/PhysicsEntityCreatorItem.kt | 38 ++++++++--------- .../mod/common/util/SplitHandler.kt | 18 +++++--- .../valkyrienskies-common.mixins.json | 8 ++-- gradle.properties | 4 +- 14 files changed, 157 insertions(+), 55 deletions(-) create mode 100644 common/src/main/java/org/valkyrienskies/mod/mixin/feature/debug_sparse_voxel_rendering/MixinDebugRenderer.java create mode 100644 common/src/main/java/org/valkyrienskies/mod/mixin/feature/sealed_air_sync/MixinBlockUpdatePacket.java create mode 100644 common/src/main/java/org/valkyrienskies/mod/mixin/feature/sealed_air_sync/MixinSectionBlocksUpdatePacket.java create mode 100644 common/src/main/java/org/valkyrienskies/mod/mixinducks/world/WithSealedPositions.java create mode 100644 common/src/main/kotlin/org/valkyrienskies/mod/client/SparseVoxelRenderer.kt diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/accessors/network/protocol/game/ClientboundSectionBlocksUpdatePacketAccessor.java b/common/src/main/java/org/valkyrienskies/mod/mixin/accessors/network/protocol/game/ClientboundSectionBlocksUpdatePacketAccessor.java index 39a16b43..52a8180f 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/accessors/network/protocol/game/ClientboundSectionBlocksUpdatePacketAccessor.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/accessors/network/protocol/game/ClientboundSectionBlocksUpdatePacketAccessor.java @@ -3,6 +3,7 @@ import net.minecraft.core.SectionPos; import net.minecraft.network.protocol.game.ClientboundSectionBlocksUpdatePacket; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.gen.Accessor; @Mixin(ClientboundSectionBlocksUpdatePacket.class) diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/debug_sparse_voxel_rendering/MixinDebugRenderer.java b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/debug_sparse_voxel_rendering/MixinDebugRenderer.java new file mode 100644 index 00000000..ea5f5b0e --- /dev/null +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/debug_sparse_voxel_rendering/MixinDebugRenderer.java @@ -0,0 +1,24 @@ +package org.valkyrienskies.mod.mixin.feature.debug_sparse_voxel_rendering; + +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.debug.DebugRenderer; +import org.spongepowered.asm.mixin.Final; +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.valkyrienskies.mod.client.SparseVoxelRenderer; + +@Mixin(DebugRenderer.class) +public class MixinDebugRenderer { + @Unique + @Final + SparseVoxelRenderer sparseVoxelRenderer = new SparseVoxelRenderer(); + + @Inject(method = "render", at = @At("HEAD")) + void render(PoseStack poseStack, MultiBufferSource.BufferSource bufferSource, double d, double e, double f, final CallbackInfo ci) { + //sparseVoxelRenderer.render(poseStack, bufferSource, d, e, f); + } +} diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/sealed_air_sync/MixinBlockUpdatePacket.java b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/sealed_air_sync/MixinBlockUpdatePacket.java new file mode 100644 index 00000000..f3851502 --- /dev/null +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/sealed_air_sync/MixinBlockUpdatePacket.java @@ -0,0 +1,4 @@ +package org.valkyrienskies.mod.mixin.feature.sealed_air_sync; + +public class MixinBlockUpdatePacket { +} diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/sealed_air_sync/MixinSectionBlocksUpdatePacket.java b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/sealed_air_sync/MixinSectionBlocksUpdatePacket.java new file mode 100644 index 00000000..956fc626 --- /dev/null +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/sealed_air_sync/MixinSectionBlocksUpdatePacket.java @@ -0,0 +1,11 @@ +package org.valkyrienskies.mod.mixin.feature.sealed_air_sync; + +import net.minecraft.network.protocol.game.ClientboundSectionBlocksUpdatePacket; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; + +@Mixin(ClientboundSectionBlocksUpdatePacket.class) +public class MixinSectionBlocksUpdatePacket { + @Unique + private boolean[] sealed; +} diff --git a/common/src/main/java/org/valkyrienskies/mod/mixinducks/world/WithSealedPositions.java b/common/src/main/java/org/valkyrienskies/mod/mixinducks/world/WithSealedPositions.java new file mode 100644 index 00000000..6e835c00 --- /dev/null +++ b/common/src/main/java/org/valkyrienskies/mod/mixinducks/world/WithSealedPositions.java @@ -0,0 +1,9 @@ +package org.valkyrienskies.mod.mixinducks.world; + +import net.minecraft.core.BlockPos; + +public interface WithSealedPositions { + public void setSealed(BlockPos pos, boolean sealed); + + public boolean[] getSealed(); +} diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/client/SparseVoxelRenderer.kt b/common/src/main/kotlin/org/valkyrienskies/mod/client/SparseVoxelRenderer.kt new file mode 100644 index 00000000..f975f8d3 --- /dev/null +++ b/common/src/main/kotlin/org/valkyrienskies/mod/client/SparseVoxelRenderer.kt @@ -0,0 +1,41 @@ +package org.valkyrienskies.mod.client + +import com.mojang.blaze3d.vertex.PoseStack +import com.mojang.blaze3d.vertex.Tesselator +import net.minecraft.client.Minecraft +import net.minecraft.client.renderer.MultiBufferSource.BufferSource +import net.minecraft.client.renderer.RenderType +import net.minecraft.client.renderer.debug.DebugRenderer +import net.minecraft.world.phys.AABB +import org.valkyrienskies.core.util.datastructures.SparseVoxelPosition + +class SparseVoxelRenderer() { + val voxels = HashSet() + + init { + voxels.add(SparseVoxelPosition(0, 128, 0, 2)) + } + + fun render(ms: PoseStack, buffer: BufferSource, camX: Double, camY: Double, camZ: Double) { + for (voxel in voxels) { + drawVoxel(voxel, ms, buffer, camX, camY, camZ) + } + } + + fun drawVoxel(voxel: SparseVoxelPosition, poseStack: PoseStack, buffer: BufferSource, camX: Double, camY: Double, camZ: Double) { + poseStack.pushPose() + + // Draw the voxel + val random = Minecraft.getInstance().level?.random ?: return + DebugRenderer.renderFilledBox(voxel.toAABB(-camX, -camY, -camZ), 1.0f, 1.0f, 0.5f, 0.5f) + //Tesselator.getInstance().end() + + poseStack.popPose() + } + + private fun SparseVoxelPosition.toAABB(offsetX: Double = 0.0, offsetY: Double = 0.0, offsetZ: Double = 0.0): AABB { + return AABB(x.toDouble() + offsetX, y.toDouble() + offsetY, z.toDouble() + offsetZ, + x.toDouble() + extent.toDouble() + offsetX, y.toDouble() + extent.toDouble() + offsetY, z.toDouble() + extent.toDouble() + offsetZ) + + } +} diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/assembly/ShipAssembly.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/assembly/ShipAssembly.kt index ccc3d182..f1e985ad 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/assembly/ShipAssembly.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/assembly/ShipAssembly.kt @@ -125,16 +125,16 @@ fun createNewShipWithStructure( blocks.placeInWorld(level, BlockPos(lowerCornerInShip.toMinecraft()), BlockPos(lowerCornerInShip.toMinecraft()), StructurePlaceSettings(), level.random, Block.UPDATE_ALL) val diff = higherCorner.subtract(lowerCorner) - val centerPos = lowerCorner.offset(diff.x / 2, diff.y / 2, diff.z / 2) + val centerPos = lowerCorner.toJOMLD().add(diff.x / 2.0, diff.y / 2.0, diff.z / 2.0) // The ship's position has shifted from the center block since we assembled the ship, compensate for that - val centerBlockPosInWorld = ship.inertiaData.centerOfMassInShip.sub(lowerCornerInShip, Vector3d()) + val centerBlockPosInWorld = ship.inertiaData.centerOfMassInShip.sub(centerPos, Vector3d()) .add(ship.transform.positionInWorld) // Put the ship into the compensated position, so that all the assembled blocks stay in the same place // TODO: AAAAAAAAA THIS IS HORRIBLE how can the API support this? //(ship as ShipData).transform = (ship.transform as ShipTransformImpl).copy(positionInWorld = centerBlockPosInWorld) level.shipObjectWorld - .teleportShip(ship, ShipTeleportDataImpl(newPos = centerBlockPosInWorld.add(0.0, (128.0 - lowerCorner.y.toDouble() + 0.5), 0.0, Vector3d()), newPosInShip = ship.inertiaData.centerOfMassInShip)) + .teleportShip(ship, ShipTeleportDataImpl(newPos = centerBlockPosInWorld.add(0.0, 0.0, 0.0, Vector3d()), newPosInShip = ship.inertiaData.centerOfMassInShip)) for (x in lowerCorner.x..higherCorner.x) { diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/block/TestHingeBlock.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/block/TestHingeBlock.kt index b22a496e..6be92067 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/block/TestHingeBlock.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/block/TestHingeBlock.kt @@ -33,8 +33,9 @@ import org.joml.Quaterniond import org.joml.Quaterniondc import org.joml.Vector3d import org.joml.Vector3dc -import org.valkyrienskies.core.apigame.constraints.VSAttachmentConstraint -import org.valkyrienskies.core.apigame.constraints.VSHingeOrientationConstraint +import org.valkyrienskies.core.apigame.joints.VSJointMaxForceTorque +import org.valkyrienskies.core.apigame.joints.VSJointPose +import org.valkyrienskies.core.apigame.joints.VSRevoluteJoint import org.valkyrienskies.core.impl.game.ships.ShipDataCommon import org.valkyrienskies.core.impl.game.ships.ShipTransformImpl import org.valkyrienskies.mod.common.ValkyrienSkiesMod @@ -200,18 +201,18 @@ object TestHingeBlock : val shipId1 = ship.id // Attachment constraint - run { - // I don't recommend setting compliance lower than 1e-10 because it tends to cause instability - // TODO: Investigate why small compliance cause instability - val attachmentCompliance = 1e-10 - val attachmentMaxForce = 1e10 - val attachmentFixedDistance = 0.0 - val attachmentConstraint = VSAttachmentConstraint( - shipId0, shipId1, attachmentCompliance, attachmentLocalPos0, attachmentLocalPos1, - attachmentMaxForce, attachmentFixedDistance - ) - blockEntity.get().constraintId = level.shipObjectWorld.createNewConstraint(attachmentConstraint) - } + // run { + // // I don't recommend setting compliance lower than 1e-10 because it tends to cause instability + // // TODO: Investigate why small compliance cause instability + // val attachmentCompliance = 1e-10 + // val attachmentMaxForce = 1e10 + // val attachmentFixedDistance = 0.0 + // val attachmentConstraint = VSRevoluteJoint( + // shipId0, shipId1, attachmentCompliance, attachmentLocalPos0, attachmentLocalPos1, + // attachmentMaxForce, attachmentFixedDistance + // ) + // blockEntity.get().constraintId = level.shipObjectWorld.createNewConstraint(attachmentConstraint) + // } // Hinge constraints will attempt to align the X-axes of both bodies, so to align the Y axis we // apply this rotation to the X-axis @@ -221,9 +222,11 @@ object TestHingeBlock : run { // I don't recommend setting compliance lower than 1e-10 because it tends to cause instability val hingeOrientationCompliance = 1e-10 + val attachmentMaxForce = 1e10 val hingeMaxTorque = 1e10 - val hingeConstraint = VSHingeOrientationConstraint( - shipId0, shipId1, hingeOrientationCompliance, hingeOrientation, hingeOrientation, hingeMaxTorque + val hingeConstraint = VSRevoluteJoint( + shipId0, VSJointPose(attachmentLocalPos0, hingeOrientation), shipId1, VSJointPose(attachmentLocalPos1, hingeOrientation), + VSJointMaxForceTorque(attachmentMaxForce.toFloat(), hingeMaxTorque.toFloat()) ) blockEntity.get().constraintId = level.shipObjectWorld.createNewConstraint(hingeConstraint) } diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/blockentity/TestHingeBlockEntity.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/blockentity/TestHingeBlockEntity.kt index 19ba56f1..07bc7f6f 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/blockentity/TestHingeBlockEntity.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/blockentity/TestHingeBlockEntity.kt @@ -3,14 +3,14 @@ package org.valkyrienskies.mod.common.blockentity import net.minecraft.core.BlockPos import net.minecraft.world.level.block.entity.BlockEntity import net.minecraft.world.level.block.state.BlockState -import org.valkyrienskies.core.apigame.constraints.VSConstraintId +import org.valkyrienskies.core.apigame.joints.VSJointId import org.valkyrienskies.mod.common.ValkyrienSkiesMod class TestHingeBlockEntity(blockPos: BlockPos, blockState: BlockState) : BlockEntity( ValkyrienSkiesMod.TEST_HINGE_BLOCK_ENTITY_TYPE, blockPos, blockState ) { var otherHingePos: BlockPos? = null - var constraintId: VSConstraintId? = null + var constraintId: VSJointId? = null fun tick() { // println("Amogus") diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/item/ConnectionCheckerItem.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/item/ConnectionCheckerItem.kt index 4c141aa5..4d2adccc 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/item/ConnectionCheckerItem.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/item/ConnectionCheckerItem.kt @@ -8,6 +8,8 @@ import net.minecraft.world.item.Item import net.minecraft.world.item.ItemStack import net.minecraft.world.item.context.UseOnContext import net.minecraft.world.level.block.state.BlockState +import org.valkyrienskies.core.impl.config_impl.VSCoreConfig +import org.valkyrienskies.mod.common.ValkyrienSkiesMod import org.valkyrienskies.mod.common.dimensionId import org.valkyrienskies.mod.common.getShipManagingPos import org.valkyrienskies.mod.common.shipObjectWorld @@ -36,9 +38,11 @@ class ConnectionCheckerItem( if (!blockState.isAir) { // Make a ship val dimensionId = level.dimensionId - - if (parentShip != null) { + println("tested") + if (parentShip != null || ValkyrienSkiesMod.vsCore.hooks.enableWorldConnectivity) { + println("can we get much") if (item.tag != null && item.tag!!.contains("firstPosX")) { + println("so high") val firstPosX = item.tag!!.getInt("firstPosX") val firstPosY = item.tag!!.getInt("firstPosY") val firstPosZ = item.tag!!.getInt("firstPosZ") @@ -48,6 +52,7 @@ class ConnectionCheckerItem( item.tag!!.remove("firstPosY") item.tag!!.remove("firstPosZ") } else { + println("higher") item.tag = item.orCreateTag.apply { putInt("firstPosX", blockPos.x) putInt("firstPosY", blockPos.y) diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/item/PhysicsEntityCreatorItem.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/item/PhysicsEntityCreatorItem.kt index d6f02bcc..e7ea8cc0 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/item/PhysicsEntityCreatorItem.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/item/PhysicsEntityCreatorItem.kt @@ -8,10 +8,6 @@ import net.minecraft.world.item.context.UseOnContext import org.joml.Quaterniond import org.joml.Vector3d import org.joml.Vector3dc -import org.valkyrienskies.core.apigame.constraints.VSAttachmentConstraint -import org.valkyrienskies.core.apigame.constraints.VSPosDampingConstraint -import org.valkyrienskies.core.apigame.constraints.VSRotDampingAxes -import org.valkyrienskies.core.apigame.constraints.VSRotDampingConstraint import org.valkyrienskies.core.impl.game.ships.ShipTransformImpl.Companion import org.valkyrienskies.mod.common.ValkyrienSkiesMod import org.valkyrienskies.mod.common.dimensionId @@ -61,23 +57,23 @@ class PhysicsEntityCreatorItem( val attachCompliance = 1e-8 val attachMaxForce = 1e10 // Attach the click position of the ship to the surface of the physics entity - val attachConstraint = VSAttachmentConstraint( - shipOn.id, physicsEntityData.shipId, attachCompliance, ctx.clickLocation.toJOML(), offsetInGlobal.mul(-1.0, Vector3d()), - attachMaxForce, 0.0 - ) - val posDampingConstraint = VSPosDampingConstraint( - shipOn.id, physicsEntityData.shipId, attachCompliance, ctx.clickLocation.toJOML(), offsetInGlobal.mul(-1.0, Vector3d()), - attachMaxForce, 0.1 - ) - val rotDampingConstraint = VSRotDampingConstraint( - shipOn.id, physicsEntityData.shipId, attachCompliance, shipOn.transform.shipToWorldRotation.invert( - Quaterniond() - ), - Quaterniond(), 1e10, 0.1, VSRotDampingAxes.ALL_AXES - ) - level.shipObjectWorld.createNewConstraint(attachConstraint) - level.shipObjectWorld.createNewConstraint(posDampingConstraint) - level.shipObjectWorld.createNewConstraint(rotDampingConstraint) + // val attachConstraint = VSAttachmentConstraint( + // shipOn.id, physicsEntityData.shipId, attachCompliance, ctx.clickLocation.toJOML(), offsetInGlobal.mul(-1.0, Vector3d()), + // attachMaxForce, 0.0 + // ) + // val posDampingConstraint = VSPosDampingConstraint( + // shipOn.id, physicsEntityData.shipId, attachCompliance, ctx.clickLocation.toJOML(), offsetInGlobal.mul(-1.0, Vector3d()), + // attachMaxForce, 0.1 + // ) + // val rotDampingConstraint = VSRotDampingConstraint( + // shipOn.id, physicsEntityData.shipId, attachCompliance, shipOn.transform.shipToWorldRotation.invert( + // Quaterniond() + // ), + // Quaterniond(), 1e10, 0.1, VSRotDampingAxes.ALL_AXES + // ) + // level.shipObjectWorld.createNewConstraint(attachConstraint) + // level.shipObjectWorld.createNewConstraint(posDampingConstraint) + // level.shipObjectWorld.createNewConstraint(rotDampingConstraint) } } diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/util/SplitHandler.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/SplitHandler.kt index 9520a16b..6b4b22ea 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/util/SplitHandler.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/SplitHandler.kt @@ -11,6 +11,7 @@ import org.valkyrienskies.core.api.world.connectivity.ConnectionStatus.CONNECTED import org.valkyrienskies.core.api.world.connectivity.ConnectionStatus.DISCONNECTED import org.valkyrienskies.core.util.datastructures.DenseBlockPosSet import org.valkyrienskies.core.util.expand +import org.valkyrienskies.mod.common.ValkyrienSkiesMod import org.valkyrienskies.mod.common.assembly.createNewShipWithBlocks import org.valkyrienskies.mod.common.dimensionId import org.valkyrienskies.mod.common.getShipObjectManagingPos @@ -22,16 +23,16 @@ class SplitHandler(private val doEdges: Boolean, private val doCorners: Boolean) fun split(level: Level, x: Int, y: Int, z: Int, prevBlockState: BlockState, newBlockState: BlockState) { if (level is ServerLevel) { val loadedShip = level.getShipObjectManagingPos(x shr 4, z shr 4) - if (loadedShip != null && loadedShip.getAttachment()?.canSplit() != false) { + if ((loadedShip != null && loadedShip.getAttachment()?.canSplit() != false)) { if (!prevBlockState.isAir && newBlockState.isAir) { val blockNeighbors: HashSet = HashSet() - val shipBox = loadedShip.shipAABB?.expand(1, AABBi()) ?: return + //val shipBox = loadedShip.shipAABB?.expand(1, AABBi()) ?: return for (neighborOffset in getOffsets(doEdges, doCorners)) { val neighborPos = BlockPos(x + neighborOffset.x, y + neighborOffset.y, z + neighborOffset.z) val neighborState = level.getBlockState(neighborPos) - if (!neighborState.isAir && neighborPos != BlockPos(x, y, z) && shipBox.containsPoint(neighborPos.toJOML())) { + if (!neighborState.isAir && neighborPos != BlockPos(x, y, z)) { blockNeighbors.add(neighborPos) } } @@ -85,6 +86,11 @@ class SplitHandler(private val doEdges: Boolean, private val doCorners: Boolean) toIgnore.add(component) } } + if (level.shipObjectWorld.isIsolatedSolid(otherComponent.x, otherComponent.y, otherComponent.z, level.dimensionId) == CONNECTED) { + if (!toIgnore.contains(otherComponent) && !toIgnore.contains(component)) { + toIgnore.add(component) + } + } } } @@ -93,7 +99,7 @@ class SplitHandler(private val doEdges: Boolean, private val doCorners: Boolean) if (disconnected.isEmpty()) { return } else { - loadedShip.getAttachment(SplittingDisablerAttachment::class.java)?.disableSplitting() + loadedShip?.getAttachment(SplittingDisablerAttachment::class.java)?.disableSplitting() } //begin the DFSing @@ -126,7 +132,7 @@ class SplitHandler(private val doEdges: Boolean, private val doCorners: Boolean) } if (toAssemble.isEmpty()) { - loadedShip.getAttachment(SplittingDisablerAttachment::class.java)?.enableSplitting() + loadedShip?.getAttachment(SplittingDisablerAttachment::class.java)?.enableSplitting() return } @@ -135,7 +141,7 @@ class SplitHandler(private val doEdges: Boolean, private val doCorners: Boolean) createNewShipWithBlocks(component.first().toBlockPos(), component, level) } - loadedShip.getAttachment(SplittingDisablerAttachment::class.java)?.enableSplitting() + loadedShip?.getAttachment(SplittingDisablerAttachment::class.java)?.enableSplitting() } } } diff --git a/common/src/main/resources/valkyrienskies-common.mixins.json b/common/src/main/resources/valkyrienskies-common.mixins.json index 112e704b..4872bf2d 100644 --- a/common/src/main/resources/valkyrienskies-common.mixins.json +++ b/common/src/main/resources/valkyrienskies-common.mixins.json @@ -41,6 +41,7 @@ "feature.mob_spawning.NaturalSpawnerMixin", "feature.render_pathfinding.MixinDebugPackets", "feature.screen_distance_check.MixinScreenHandler", + "feature.sealed_air_sync.MixinSectionBlocksUpdatePacket", "feature.shipyard_entities.MixinEntity", "feature.shipyard_entities.MixinEntitySection", "feature.shipyard_entities.MixinEntitySectionStorage", @@ -132,6 +133,7 @@ "client.world.MixinClientLevel", "feature.block_tint.MixinClientLevel", "feature.commands.MixinClientSuggestionProvider", + "feature.debug_sparse_voxel_rendering.MixinDebugRenderer", "feature.fix_render_chunk_sorting.MixinRenderChunk", "feature.fluid_camera_fix.MixinCamera", "feature.render_blockentity_distance_check.MixinBlockEntityRenderDispatcher", @@ -155,6 +157,7 @@ "mod_compat.create.client.MixinCogwheelBlockItemHitOnShaft", "mod_compat.create.client.MixinContraptionRenderDispatcher", "mod_compat.create.client.MixinContraptionRenderInfo", + "mod_compat.create.client.MixinDeployTool", "mod_compat.create.client.MixinElevatorControlsHandler", "mod_compat.create.client.MixinFilteringRenderer", "mod_compat.create.client.MixinGhostBlockRenderer", @@ -163,13 +166,12 @@ "mod_compat.create.client.MixinMultiplePlacementHelpers", "mod_compat.create.client.MixinOutline", "mod_compat.create.client.MixinPlacementHelpers", + "mod_compat.create.client.MixinSchematicToolBase", "mod_compat.create.client.MixinSoundScapes", "mod_compat.create.client.MixinTileEntityRenderHelper", "mod_compat.create.client.MixinTrainRelocator", - "mod_compat.create.client.MixinDeployTool", - "mod_compat.create.client.MixinSchematicToolBase", - "mod_compat.create.client.trackOutlines.MixinBigOutlines", "mod_compat.create.client.MixinValueBox", + "mod_compat.create.client.trackOutlines.MixinBigOutlines", "mod_compat.flywheel.InstancingEngineAccessor", "mod_compat.flywheel.MixinBlockEntityInstanceManager", "mod_compat.flywheel.MixinInstanceManager", diff --git a/gradle.properties b/gradle.properties index 2410644f..b2ff69dd 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -org.gradle.jvmargs=-Xmx20G -XX:MaxMetaspaceSize=1G +org.gradle.jvmargs=-Xmx12G -XX:MaxMetaspaceSize=1G minecraft_version=1.18.2 enabled_platforms=quilt,fabric,forge archives_base_name=valkyrienskies-118 @@ -11,7 +11,7 @@ forge_version=1.18.2-40.2.4 create_fabric_version=0.5.1-i-build.1598+mc1.18.2 flywheel_version_fabric=0.6.9-38 createbigcannons_version= 0.5.2-nightly-e815ca4 -vs_core_version=1.1.0+9a16ff656c +vs_core_version=1.1.0+0ea54cda8b # Prevent kotlin from autoincluding stdlib as a dependency, which breaks # gradle's composite builds (includeBuild) for some reason. We'll add it manually kotlin.stdlib.default.dependency=false From 949a69a66af70c8221d6403986a0c899e04bd8d5 Mon Sep 17 00:00:00 2001 From: ThePlasticPotato Date: Fri, 27 Dec 2024 01:19:03 -0500 Subject: [PATCH 24/45] dont do that --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index b2ff69dd..15e3ca20 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -org.gradle.jvmargs=-Xmx12G -XX:MaxMetaspaceSize=1G +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=1G minecraft_version=1.18.2 enabled_platforms=quilt,fabric,forge archives_base_name=valkyrienskies-118 From 1a869207aeb1ecf3210ced9771206bfd380968b8 Mon Sep 17 00:00:00 2001 From: ThePlasticPotato Date: Fri, 27 Dec 2024 09:36:55 -0500 Subject: [PATCH 25/45] Make splitting use old assembly for now --- .../org/valkyrienskies/mod/common/util/SplitHandler.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/util/SplitHandler.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/SplitHandler.kt index 6b4b22ea..81b19547 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/util/SplitHandler.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/SplitHandler.kt @@ -12,6 +12,7 @@ import org.valkyrienskies.core.api.world.connectivity.ConnectionStatus.DISCONNEC import org.valkyrienskies.core.util.datastructures.DenseBlockPosSet import org.valkyrienskies.core.util.expand import org.valkyrienskies.mod.common.ValkyrienSkiesMod +import org.valkyrienskies.mod.common.assembly.ShipAssembler import org.valkyrienskies.mod.common.assembly.createNewShipWithBlocks import org.valkyrienskies.mod.common.dimensionId import org.valkyrienskies.mod.common.getShipObjectManagingPos @@ -137,8 +138,8 @@ class SplitHandler(private val doEdges: Boolean, private val doCorners: Boolean) } for (component in toAssemble) { - //ShipAssembler.assembleToShip(level, component, true, 1.0, true) - createNewShipWithBlocks(component.first().toBlockPos(), component, level) + ShipAssembler.assembleToShip(level, component.toSet().map { it.toBlockPos() }, true, 1.0, true) + //createNewShipWithBlocks(component.first().toBlockPos(), component, level) } loadedShip?.getAttachment(SplittingDisablerAttachment::class.java)?.enableSplitting() From a78816380b055c5dfe941aa62136db7e6e03d99c Mon Sep 17 00:00:00 2001 From: ThePlasticPotato Date: Fri, 27 Dec 2024 11:48:43 -0500 Subject: [PATCH 26/45] Api, split queue, config, joints fix --- ...oundSectionBlocksUpdatePacketAccessor.java | 1 - .../mod_compat/create/MixinContraption.java | 1 - .../mixin/server/MixinMinecraftServer.java | 7 ++-- .../mixin/server/world/MixinServerLevel.java | 5 +++ .../mod_compat/bluemap/WorldDuck.java | 1 - .../mod/api_impl/events/VSApiImpl.kt | 25 +++++++++++ .../mod/common/BlockStateInfoProvider.kt | 4 +- .../valkyrienskies/mod/common/VSGameUtils.kt | 5 ++- .../mod/common/ValkyrienSkiesMod.kt | 4 +- .../mod/common/assembly/ShipAssembler.kt | 4 +- .../mod/common/assembly/ShipAssembly.kt | 17 +++++--- .../mod/common/block/TestHingeBlock.kt | 14 ++++--- .../mod/common/config/VSGameConfig.kt | 10 +++++ .../mod/common/config/VSMassDataLoader.kt | 3 +- .../mod/common/entity/ShipMountingEntity.kt | 4 +- .../mod/common/entity/VSPhysicsEntity.kt | 1 + .../entity/handling/WorldEntityHandler.kt | 2 +- .../mod/common/hooks/CommonHooksImpl.kt | 4 ++ .../mod/common/item/ShipCreatorItem.kt | 5 ++- .../mod/common/networking/VSGamePackets.kt | 5 +-- .../mod/common/util/DimensionIdProvider.kt | 2 +- .../common/util/EntityShipCollisionUtils.kt | 3 +- .../mod/common/util/MinecraftPlayer.kt | 2 +- .../mod/common/util/ShipSettings.kt | 9 ++-- .../mod/common/util/SplitHandler.kt | 42 +++++++++++++++---- .../mod/common/world/RaycastUtils.kt | 11 ++--- .../mod/compat/Weather2Compat.kt | 4 +- gradle.properties | 2 +- 28 files changed, 139 insertions(+), 58 deletions(-) diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/accessors/network/protocol/game/ClientboundSectionBlocksUpdatePacketAccessor.java b/common/src/main/java/org/valkyrienskies/mod/mixin/accessors/network/protocol/game/ClientboundSectionBlocksUpdatePacketAccessor.java index 52a8180f..39a16b43 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/accessors/network/protocol/game/ClientboundSectionBlocksUpdatePacketAccessor.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/accessors/network/protocol/game/ClientboundSectionBlocksUpdatePacketAccessor.java @@ -3,7 +3,6 @@ import net.minecraft.core.SectionPos; import net.minecraft.network.protocol.game.ClientboundSectionBlocksUpdatePacket; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.gen.Accessor; @Mixin(ClientboundSectionBlocksUpdatePacket.class) diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/create/MixinContraption.java b/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/create/MixinContraption.java index 6ffd95f2..d677ae58 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/create/MixinContraption.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/create/MixinContraption.java @@ -12,7 +12,6 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.valkyrienskies.core.api.ships.LoadedServerShip; import org.valkyrienskies.mod.common.VSGameUtilsKt; -import org.valkyrienskies.mod.common.util.SplitHandler; import org.valkyrienskies.mod.common.util.SplittingDisablerAttachment; @Mixin(Contraption.class) diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/server/MixinMinecraftServer.java b/common/src/main/java/org/valkyrienskies/mod/mixin/server/MixinMinecraftServer.java index c3ff3767..e7f6c3e4 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/server/MixinMinecraftServer.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/server/MixinMinecraftServer.java @@ -46,6 +46,7 @@ import org.valkyrienskies.core.api.ships.properties.IShipActiveChunksSet; import org.valkyrienskies.core.apigame.GameServer; import org.valkyrienskies.core.apigame.ShipTeleportData; +import org.valkyrienskies.core.apigame.ships.LoadedServerShipCore; import org.valkyrienskies.core.apigame.world.IPlayer; import org.valkyrienskies.core.apigame.world.ServerShipWorldCore; import org.valkyrienskies.core.apigame.world.VSPipeline; @@ -256,7 +257,7 @@ private void handleShipPortals() { final BlockPos blockPos2 = new BlockPos(shipPos.x() + bbRadius, shipPos.y() + bbRadius, shipPos.z() + bbRadius); // Only run this code if the chunks between blockPos and blockPos2 are loaded if (level.hasChunksAt(blockPos, blockPos2)) { - shipObject.decayPortalCoolDown(); + ((LoadedServerShipCore) shipObject).decayPortalCoolDown(); final BlockPos.MutableBlockPos mutableBlockPos = new BlockPos.MutableBlockPos(); for (int i = blockPos.getX(); i <= blockPos2.getX(); ++i) { @@ -266,7 +267,7 @@ private void handleShipPortals() { final BlockState blockState = level.getBlockState(mutableBlockPos); if (blockState.getBlock() == Blocks.NETHER_PORTAL) { // Handle nether portal teleport - if (!shipObject.isOnPortalCoolDown()) { + if (!((LoadedServerShipCore) shipObject).isOnPortalCoolDown()) { // Move the ship between dimensions final ServerLevel destLevel = getLevel(level.dimension() == Level.NETHER ? Level.OVERWORLD : Level.NETHER); // TODO: Do we want portal time? @@ -276,7 +277,7 @@ private void handleShipPortals() { level.getProfiler().pop(); } } - shipObject.handleInsidePortal(); + ((LoadedServerShipCore) shipObject).handleInsidePortal(); } else if (blockState.getBlock() == Blocks.END_PORTAL) { // Handle end portal teleport final ServerLevel destLevel = level.getServer().getLevel(level.dimension() == Level.END ? Level.OVERWORLD : Level.END); diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/server/world/MixinServerLevel.java b/common/src/main/java/org/valkyrienskies/mod/mixin/server/world/MixinServerLevel.java index af9fa6e1..0f48547f 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/server/world/MixinServerLevel.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/server/world/MixinServerLevel.java @@ -51,6 +51,7 @@ import org.valkyrienskies.core.apigame.world.chunks.TerrainUpdate; import org.valkyrienskies.mod.common.IShipObjectWorldServerProvider; import org.valkyrienskies.mod.common.VSGameUtilsKt; +import org.valkyrienskies.mod.common.ValkyrienSkiesMod; import org.valkyrienskies.mod.common.block.WingBlock; import org.valkyrienskies.mod.common.util.VSServerLevel; import org.valkyrienskies.mod.common.util.VectorConversionsMCKt; @@ -248,6 +249,10 @@ private void postTick(final BooleanSupplier shouldKeepTicking, final CallbackInf voxelShapeUpdates ); + if (ValkyrienSkiesMod.getVsCore().getHooks().getEnableSplitting()) { + ValkyrienSkiesMod.splitHandler.tick(ServerLevel.class.cast(this)); + } + } @Override diff --git a/common/src/main/java/org/valkyrienskies/mod/mixinducks/mod_compat/bluemap/WorldDuck.java b/common/src/main/java/org/valkyrienskies/mod/mixinducks/mod_compat/bluemap/WorldDuck.java index 162811d5..0091c4bb 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixinducks/mod_compat/bluemap/WorldDuck.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixinducks/mod_compat/bluemap/WorldDuck.java @@ -1,6 +1,5 @@ package org.valkyrienskies.mod.mixinducks.mod_compat.bluemap; -import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.Level; public interface WorldDuck { diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/api_impl/events/VSApiImpl.kt b/common/src/main/kotlin/org/valkyrienskies/mod/api_impl/events/VSApiImpl.kt index 3749d133..b67911bf 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/api_impl/events/VSApiImpl.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/api_impl/events/VSApiImpl.kt @@ -5,12 +5,18 @@ import net.minecraft.core.BlockPos import net.minecraft.world.entity.Entity import net.minecraft.world.level.ChunkPos import net.minecraft.world.level.Level +import org.valkyrienskies.core.api.VsBeta +import org.valkyrienskies.core.api.attachment.AttachmentRegistration +import org.valkyrienskies.core.api.attachment.AttachmentRegistration.Builder +import org.valkyrienskies.core.api.bodies.properties.BodyTransform.Factory import org.valkyrienskies.core.api.ships.Ship +import org.valkyrienskies.core.impl.bodies.properties.BodyTransformFactory import org.valkyrienskies.core.util.events.EventEmitterImpl import org.valkyrienskies.mod.api.VsApi import org.valkyrienskies.mod.api.events.PostRenderShipEvent import org.valkyrienskies.mod.api.events.PreRenderShipEvent import org.valkyrienskies.mod.api.events.RegisterBlockStateEvent +import org.valkyrienskies.mod.common.ValkyrienSkiesMod import org.valkyrienskies.mod.common.entity.ShipMountingEntity import org.valkyrienskies.mod.common.getShipManagingPos import org.valkyrienskies.mod.compat.clothconfig.VSClothConfig @@ -41,4 +47,23 @@ class VsApiImpl : VsApi { override fun getShipManagingChunk(level: Level?, chunkX: Int, chunkZ: Int): Ship? { return level?.getShipManagingPos(chunkX, chunkZ) } + + @VsBeta + override val transformFactory: Factory = BodyTransformFactory + + override fun newAttachmentRegistrationBuilder(attachmentClass: Class): Builder { + return ValkyrienSkiesMod.vsCore.newAttachmentRegistrationBuilder(attachmentClass) + } + + override fun registerAttachment(attachmentClass: Class, registrationBuilder: Builder.() -> Unit) { + ValkyrienSkiesMod.vsCore.registerAttachment(attachmentClass, registrationBuilder) + } + + override fun registerAttachment(registration: AttachmentRegistration) { + ValkyrienSkiesMod.vsCore.registerAttachment(registration) + } + + override fun registerAttachmentForRemoval(attachmentKey: String) { + ValkyrienSkiesMod.vsCore.registerAttachmentForRemoval(attachmentKey) + } } diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/BlockStateInfoProvider.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/BlockStateInfoProvider.kt index 9178dfb7..5962906b 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/BlockStateInfoProvider.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/BlockStateInfoProvider.kt @@ -135,8 +135,8 @@ object BlockStateInfo { newBlockMass ) - if (ValkyrienSkiesMod.vsCore.hooks.enableConnectivity) { - ValkyrienSkiesMod.splitHandler.split(level, x, y, z, prevBlockState, newBlockState) + if (ValkyrienSkiesMod.vsCore.hooks.enableSplitting) { + ValkyrienSkiesMod.splitHandler.queueSplit(level, x, y, z) } } } diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/VSGameUtils.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/VSGameUtils.kt index 8c4160db..6c1f081e 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/VSGameUtils.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/VSGameUtils.kt @@ -24,16 +24,17 @@ import org.joml.Vector3ic import org.joml.primitives.AABBd import org.joml.primitives.AABBdc import org.valkyrienskies.core.api.ships.ClientShip +import org.valkyrienskies.core.api.ships.LoadedServerShip import org.valkyrienskies.core.api.ships.LoadedShip import org.valkyrienskies.core.api.ships.ServerShip import org.valkyrienskies.core.api.ships.Ship import org.valkyrienskies.core.api.util.functions.DoubleTernaryConsumer import org.valkyrienskies.core.api.world.LevelYRange +import org.valkyrienskies.core.api.world.properties.DimensionId import org.valkyrienskies.core.apigame.world.IPlayer import org.valkyrienskies.core.apigame.world.ServerShipWorldCore import org.valkyrienskies.core.apigame.world.ShipWorldCore import org.valkyrienskies.core.apigame.world.chunks.TerrainUpdate -import org.valkyrienskies.core.apigame.world.properties.DimensionId import org.valkyrienskies.core.game.ships.ShipObjectServer import org.valkyrienskies.core.impl.hooks.VSEvents.TickEndEvent import org.valkyrienskies.core.util.expand @@ -266,7 +267,7 @@ fun ClientLevel?.getShipObjectManagingPos(chunkPos: ChunkPos) = // ServerWorld fun ServerLevel?.getShipObjectManagingPos(chunkX: Int, chunkZ: Int) = - getShipObjectManagingPosImpl(this, chunkX, chunkZ) as ShipObjectServer? + getShipObjectManagingPosImpl(this, chunkX, chunkZ) as LoadedServerShip? fun ServerLevel?.getShipObjectManagingPos(blockPos: Vec3i) = getShipObjectManagingPos(blockPos.x shr 4, blockPos.z shr 4) diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/ValkyrienSkiesMod.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/ValkyrienSkiesMod.kt index 312af3a0..86d136e3 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/ValkyrienSkiesMod.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/ValkyrienSkiesMod.kt @@ -5,7 +5,6 @@ import net.minecraft.world.entity.EntityType import net.minecraft.world.item.Item import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.entity.BlockEntityType -import org.valkyrienskies.core.api.ships.setAttachment import org.valkyrienskies.core.apigame.VSCore import org.valkyrienskies.core.apigame.VSCoreClient import org.valkyrienskies.core.impl.hooks.VSEvents @@ -59,6 +58,9 @@ object ValkyrienSkiesMod { splitHandler = SplitHandler(this.vsCore.hooks.enableBlockEdgeConnectivity, this.vsCore.hooks.enableBlockCornerConnectivity) + vsCore.registerAttachment(GameTickForceApplier::class.java) + vsCore.registerAttachment(SplittingDisablerAttachment::class.java) + VSEvents.ShipLoadEvent.on { event -> event.ship.setAttachment(GameTickForceApplier()) event.ship.setAttachment(SplittingDisablerAttachment(true)) diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/assembly/ShipAssembler.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/assembly/ShipAssembler.kt index dade67e1..733fd920 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/assembly/ShipAssembler.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/assembly/ShipAssembler.kt @@ -7,9 +7,9 @@ import net.minecraft.world.level.block.state.BlockState import org.joml.Vector3d import org.joml.Vector3i import org.joml.Vector3ic +import org.valkyrienskies.core.api.attachment.getAttachment import org.valkyrienskies.core.api.ships.ServerShip import org.valkyrienskies.core.api.ships.Ship -import org.valkyrienskies.core.api.ships.getAttachment import org.valkyrienskies.core.impl.game.ShipTeleportDataImpl import org.valkyrienskies.mod.common.BlockStateInfo.onSetBlock import org.valkyrienskies.mod.common.dimensionId @@ -111,7 +111,7 @@ object ShipAssembler { AssemblyUtil.updateBlock(level,itPos,shipPos,level.getBlockState(shipPos)) } - val shipCenterPos = ((newShip as ServerShip).inertiaData.centerOfMassInShip).add(0.5, 0.5, 0.5, Vector3d()) + val shipCenterPos = ((newShip as ServerShip).inertiaData.centerOfMass).add(0.5, 0.5, 0.5, Vector3d()) // This is giga sus, but whatever val shipPos = Vector3d(shipOGPos).add(0.5, 0.5, 0.5) if (existingShip != null) { diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/assembly/ShipAssembly.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/assembly/ShipAssembly.kt index f1e985ad..436aea8e 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/assembly/ShipAssembly.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/assembly/ShipAssembly.kt @@ -10,10 +10,13 @@ import net.minecraft.world.level.block.entity.BlockEntity import net.minecraft.world.level.levelgen.structure.templatesystem.StructurePlaceSettings import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate import org.joml.Vector3d +import org.valkyrienskies.core.api.VsBeta import org.valkyrienskies.core.api.ships.ServerShip +import org.valkyrienskies.core.api.ships.properties.ShipTransformVelocity import org.valkyrienskies.core.apigame.ShipTeleportData import org.valkyrienskies.core.impl.game.ShipTeleportDataImpl import org.valkyrienskies.core.impl.game.ships.ShipData +import org.valkyrienskies.core.impl.game.ships.ShipDataCommon import org.valkyrienskies.core.impl.game.ships.ShipTransformImpl import org.valkyrienskies.core.util.datastructures.DenseBlockPosSet import org.valkyrienskies.mod.common.dimensionId @@ -26,6 +29,7 @@ import org.valkyrienskies.mod.common.util.toMinecraft import org.valkyrienskies.mod.util.relocateBlock import org.valkyrienskies.mod.util.updateBlock +@OptIn(VsBeta::class) @Deprecated("Use [ShipAssembler.assembleToShip] instead") fun createNewShipWithBlocks( centerBlock: BlockPos, blocks: DenseBlockPosSet, level: ServerLevel @@ -82,11 +86,14 @@ fun createNewShipWithBlocks( ((shipChunkZ shl 4) + (centerBlock.z and 15)).toDouble() ) // The ship's position has shifted from the center block since we assembled the ship, compensate for that - val centerBlockPosInWorld = ship.inertiaData.centerOfMassInShip.sub(centerInShip, Vector3d()) + val centerBlockPosInWorld = ship.inertiaData.centerOfMass.sub(centerInShip, Vector3d()) .add(ship.transform.positionInWorld) // Put the ship into the compensated position, so that all the assembled blocks stay in the same place // TODO: AAAAAAAAA THIS IS HORRIBLE how can the API support this? - (ship as ShipData).transform = (ship.transform as ShipTransformImpl).copy(positionInWorld = centerBlockPosInWorld) + // well now it doesnt kekw + //(ship as ShipDataCommon).transform = (ship.transform).withTransformFrom(positionInWorld = centerBlockPosInWorld) + + (ship as ShipDataCommon).setFromTransform(ship.transform.copy(position = centerBlockPosInWorld)) level.server.executeIf( // This condition will return true if all modified chunks have been both loaded AND // chunk update packets were sent to players @@ -128,13 +135,11 @@ fun createNewShipWithStructure( val centerPos = lowerCorner.toJOMLD().add(diff.x / 2.0, diff.y / 2.0, diff.z / 2.0) // The ship's position has shifted from the center block since we assembled the ship, compensate for that - val centerBlockPosInWorld = ship.inertiaData.centerOfMassInShip.sub(centerPos, Vector3d()) + val centerBlockPosInWorld = ship.inertiaData.centerOfMass.sub(centerPos, Vector3d()) .add(ship.transform.positionInWorld) // Put the ship into the compensated position, so that all the assembled blocks stay in the same place - // TODO: AAAAAAAAA THIS IS HORRIBLE how can the API support this? - //(ship as ShipData).transform = (ship.transform as ShipTransformImpl).copy(positionInWorld = centerBlockPosInWorld) level.shipObjectWorld - .teleportShip(ship, ShipTeleportDataImpl(newPos = centerBlockPosInWorld.add(0.0, 0.0, 0.0, Vector3d()), newPosInShip = ship.inertiaData.centerOfMassInShip)) + .teleportShip(ship, ShipTeleportDataImpl(newPos = centerBlockPosInWorld.add(0.0, 0.0, 0.0, Vector3d()), newPosInShip = ship.inertiaData.centerOfMass)) for (x in lowerCorner.x..higherCorner.x) { diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/block/TestHingeBlock.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/block/TestHingeBlock.kt index 6be92067..0149f346 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/block/TestHingeBlock.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/block/TestHingeBlock.kt @@ -36,8 +36,8 @@ import org.joml.Vector3dc import org.valkyrienskies.core.apigame.joints.VSJointMaxForceTorque import org.valkyrienskies.core.apigame.joints.VSJointPose import org.valkyrienskies.core.apigame.joints.VSRevoluteJoint +import org.valkyrienskies.core.impl.bodies.properties.BodyTransformVelocityImpl import org.valkyrienskies.core.impl.game.ships.ShipDataCommon -import org.valkyrienskies.core.impl.game.ships.ShipTransformImpl import org.valkyrienskies.mod.common.ValkyrienSkiesMod import org.valkyrienskies.mod.common.blockentity.TestHingeBlockEntity import org.valkyrienskies.mod.common.dimensionId @@ -173,22 +173,26 @@ object TestHingeBlock : // Put the new ship where the old ship is val newPos = shipThisIsIn.transform.shipToWorld.transformPosition(attachmentLocalPos0, Vector3d()) newPos.sub(shipThisIsIn.transform.shipToWorldRotation.transform(attachmentOffset1, Vector3d())) - val newTransform = ShipTransformImpl( + val newTransform = BodyTransformVelocityImpl( newPos, ship.transform.positionInShip, shipThisIsIn.transform.shipToWorldRotation, // Copy source ship rotation - ship.transform.shipToWorldScaling + ship.transform.shipToWorldScaling, + velocity = shipThisIsIn.velocity, + angularVelocity = shipThisIsIn.angularVelocity ) // Update the ship transform (ship as ShipDataCommon).transform = newTransform } else { val newPos = Vector3d(attachmentLocalPos0) newPos.sub(attachmentOffset1) - val newTransform = ShipTransformImpl( + val newTransform = BodyTransformVelocityImpl( newPos, ship.transform.positionInShip, ship.transform.shipToWorldRotation, - ship.transform.shipToWorldScaling + ship.transform.shipToWorldScaling, + velocity = ship.velocity, + angularVelocity = ship.angularVelocity ) // Update the ship transform (ship as ShipDataCommon).transform = newTransform diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/config/VSGameConfig.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/config/VSGameConfig.kt index ebf47e73..33a626b0 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/config/VSGameConfig.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/config/VSGameConfig.kt @@ -148,6 +148,16 @@ object VSGameConfig { description = "Minimum scale of ships" ) var minScaling = 0.25 + + @JsonSchema( + description = "Enable splitting in worldspace. (Experimental!)" + ) + var enableWorldSplitting = false + + @JsonSchema( + description = "The default grace timer for splitting. A split won't occur after a block break at a position until this many ticks have passed. Note that setting this too high may prevent things like explosions from properly launching split ships. (in ticks)" + ) + var defaultSplitGraceTimer = 1 } class Common { diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/config/VSMassDataLoader.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/config/VSMassDataLoader.kt index 6ec62527..f43439fb 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/config/VSMassDataLoader.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/config/VSMassDataLoader.kt @@ -27,7 +27,6 @@ import org.valkyrienskies.core.api.physics.blockstates.LiquidState import org.valkyrienskies.core.api.physics.blockstates.SolidBlockShape import org.valkyrienskies.core.apigame.physics.blockstates.VsBlockState import org.valkyrienskies.core.apigame.world.chunks.BlockType -import org.valkyrienskies.core.game.VSBlockType import org.valkyrienskies.mod.common.BlockStateInfoProvider import org.valkyrienskies.mod.common.ValkyrienSkiesMod import org.valkyrienskies.mod.common.hooks.VSGameEvents @@ -44,7 +43,7 @@ private data class VSBlockStateInfo( val mass: Double, val friction: Double, val elasticity: Double, - val type: VSBlockType?, + val type: BlockType?, ) object MassDatapackResolver : BlockStateInfoProvider { diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/entity/ShipMountingEntity.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/entity/ShipMountingEntity.kt index 34da4e64..483cfbea 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/entity/ShipMountingEntity.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/entity/ShipMountingEntity.kt @@ -10,8 +10,8 @@ import net.minecraft.world.entity.LivingEntity import net.minecraft.world.level.Level import net.minecraft.world.phys.Vec3 import org.joml.Vector3f +import org.valkyrienskies.core.api.attachment.removeAttachment import org.valkyrienskies.core.api.ships.LoadedServerShip -import org.valkyrienskies.core.api.ships.setAttachment import org.valkyrienskies.mod.api.SeatedControllingPlayer import org.valkyrienskies.mod.common.config.VSKeyBindings import org.valkyrienskies.mod.common.getShipManagingPos @@ -74,7 +74,7 @@ open class ShipMountingEntity(type: EntityType, level: Level override fun remove(removalReason: RemovalReason) { if (this.isController && !level.isClientSide) (level.getShipObjectManagingPos(blockPosition()) as LoadedServerShip?) - ?.setAttachment(null) + ?.removeAttachment() super.remove(removalReason) } diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/entity/VSPhysicsEntity.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/entity/VSPhysicsEntity.kt index 9adbc52d..28c7b736 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/entity/VSPhysicsEntity.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/entity/VSPhysicsEntity.kt @@ -233,6 +233,7 @@ open class VSPhysicsEntity(type: EntityType, level: Level) : En shipId: ShipId, transform: ShipTransform, radius: Double = 0.5, mass: Double = 10000.0 ): PhysicsEntityData { val inertia = 0.4 * mass * radius * radius + // todo: fix physics entities for some reason using ship inertia data??? what?? ruby pls val inertiaData: ShipInertiaData = ShipInertiaDataImpl(Vector3d(), mass, Matrix3d().scale(inertia)) val collisionShapeData = VSSphereCollisionShapeData(radius) return PhysicsEntityData( diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/entity/handling/WorldEntityHandler.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/entity/handling/WorldEntityHandler.kt index 295792c9..9283d730 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/entity/handling/WorldEntityHandler.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/entity/handling/WorldEntityHandler.kt @@ -64,7 +64,7 @@ object WorldEntityHandler : VSEntityHandler { val newPosInShipLocal = Vector3d(newPos).sub(ship.transform.positionInWorld) val shipVelocity = Vector3d(ship.velocity) // ship linear velocity - .add(Vector3d(ship.omega).cross(newPosInShipLocal)) // angular velocity + .add(Vector3d(ship.angularVelocity).cross(newPosInShipLocal)) // angular velocity .mul(0.05) // Tick velocity val entityVelocity = ship.transform.shipToWorldRotation.transform(entity.deltaMovement.toJOML()) diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/hooks/CommonHooksImpl.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/hooks/CommonHooksImpl.kt index 490f306f..f5e26b1e 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/hooks/CommonHooksImpl.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/hooks/CommonHooksImpl.kt @@ -30,6 +30,10 @@ abstract class CommonHooksImpl : CoreHooksOut { get() = vsCore.hooks.enableWorldConnectivity set(value) {} + override var enableSplitting: Boolean + get() = vsCore.hooks.enableSplitting + set(value) {} + override val playState: PlayState get() { if (!isPhysicalClient) { diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/item/ShipCreatorItem.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/item/ShipCreatorItem.kt index d9335bc2..c6deab82 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/item/ShipCreatorItem.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/item/ShipCreatorItem.kt @@ -10,6 +10,9 @@ import net.minecraft.world.item.context.UseOnContext import net.minecraft.world.level.block.Rotation.NONE import net.minecraft.world.level.block.state.BlockState import org.joml.Vector3d +import org.valkyrienskies.core.api.ships.properties.ShipTransformVelocity +import org.valkyrienskies.core.impl.bodies.properties.BodyTransformImpl +import org.valkyrienskies.core.impl.bodies.properties.BodyTransformVelocityImpl import org.valkyrienskies.core.impl.game.ships.ShipDataCommon import org.valkyrienskies.core.impl.game.ships.ShipTransformImpl import org.valkyrienskies.mod.common.dimensionId @@ -65,7 +68,7 @@ class ShipCreatorItem( newShipScaling = Vector3d(minScaling, minScaling, minScaling) } val shipTransform = - ShipTransformImpl(newShipPosInWorld, newShipPosInShipyard, newShipRotation, newShipScaling) + BodyTransformVelocityImpl(newShipPosInWorld, newShipPosInShipyard, newShipRotation, newShipScaling, Vector3d(), Vector3d()) (serverShip as ShipDataCommon).transform = shipTransform } } diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/networking/VSGamePackets.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/networking/VSGamePackets.kt index 4be65f6e..cc46f222 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/networking/VSGamePackets.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/networking/VSGamePackets.kt @@ -3,9 +3,8 @@ package org.valkyrienskies.mod.common.networking import net.minecraft.core.Registry import net.minecraft.resources.ResourceLocation import net.minecraft.server.level.ServerPlayer +import org.valkyrienskies.core.api.attachment.getAttachment import org.valkyrienskies.core.api.ships.LoadedServerShip -import org.valkyrienskies.core.api.ships.getAttachment -import org.valkyrienskies.core.api.ships.setAttachment import org.valkyrienskies.mod.api.SeatedControllingPlayer import org.valkyrienskies.mod.common.entity.ShipMountingEntity import org.valkyrienskies.mod.common.entity.handling.VSEntityManager @@ -31,7 +30,7 @@ object VSGamePackets { val ship = seat.level.getShipObjectManagingPos(seat.blockPosition()) as? LoadedServerShip ?: return@registerServerHandler - val attachment: SeatedControllingPlayer = ship.getAttachment() + val attachment: SeatedControllingPlayer = ship.getAttachment() ?: SeatedControllingPlayer(seat.direction.opposite).apply { ship.setAttachment(this) } attachment.forwardImpulse = driving.impulse.z diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/util/DimensionIdProvider.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/DimensionIdProvider.kt index a9649fc7..2eb2df99 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/util/DimensionIdProvider.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/DimensionIdProvider.kt @@ -1,6 +1,6 @@ package org.valkyrienskies.mod.common.util -import org.valkyrienskies.core.apigame.world.properties.DimensionId +import org.valkyrienskies.core.api.world.properties.DimensionId /** * Interface used to get the [DimensionId] from Minecraft [Level] objects diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityShipCollisionUtils.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityShipCollisionUtils.kt index 4b4109ae..63a610df 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityShipCollisionUtils.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityShipCollisionUtils.kt @@ -14,6 +14,7 @@ import org.joml.primitives.AABBdc import org.valkyrienskies.core.api.ships.Ship import org.valkyrienskies.core.apigame.collision.ConvexPolygonc import org.valkyrienskies.core.util.extend +import org.valkyrienskies.mod.common.dimensionId import org.valkyrienskies.mod.common.getShipsIntersecting import org.valkyrienskies.mod.common.shipObjectWorld import org.valkyrienskies.mod.common.vsCore @@ -109,7 +110,7 @@ object EntityShipCollisionUtils { val entityBoxWithMovement = entityBoundingBox.expandTowards(movement) val collidingPolygons: MutableList = ArrayList() val entityBoundingBoxExtended = entityBoundingBox.toJOML().extend(movement.toJOML()) - for (shipObject in world.shipObjectWorld.loadedShips.getIntersecting(entityBoundingBoxExtended)) { + for (shipObject in world.shipObjectWorld.loadedShips.getIntersecting(entityBoundingBoxExtended, world.dimensionId)) { val shipTransform = shipObject.transform val entityPolyInShipCoordinates: ConvexPolygonc = collider.createPolygonFromAABB( entityBoxWithMovement.toJOML(), diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/util/MinecraftPlayer.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/MinecraftPlayer.kt index 603227d9..766b1b52 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/util/MinecraftPlayer.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/MinecraftPlayer.kt @@ -2,9 +2,9 @@ package org.valkyrienskies.mod.common.util import net.minecraft.world.entity.player.Player import org.joml.Vector3d +import org.valkyrienskies.core.api.world.properties.DimensionId import org.valkyrienskies.core.apigame.world.IPlayer import org.valkyrienskies.core.apigame.world.PlayerState -import org.valkyrienskies.core.apigame.world.properties.DimensionId import org.valkyrienskies.mod.common.dimensionId import org.valkyrienskies.mod.common.getShipMountedToData import org.valkyrienskies.mod.common.vsCore diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/util/ShipSettings.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/ShipSettings.kt index be9f2f8c..15b13f85 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/util/ShipSettings.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/ShipSettings.kt @@ -1,8 +1,7 @@ package org.valkyrienskies.mod.common.util -import org.valkyrienskies.core.api.ships.ServerShip -import org.valkyrienskies.core.api.ships.getAttachment -import org.valkyrienskies.core.api.ships.saveAttachment +import org.valkyrienskies.core.api.attachment.getAttachment +import org.valkyrienskies.core.api.ships.LoadedServerShip /** * A attachment that stores ship specific settings. @@ -20,5 +19,5 @@ data class ShipSettings( var changeDimensionOnTouchPortals: Boolean = true ) -val ServerShip.settings: ShipSettings - get() = getAttachment() ?: ShipSettings().also { saveAttachment(it) } +val LoadedServerShip.settings: ShipSettings + get() = getAttachment() ?: ShipSettings().also { setAttachment(it) } diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/util/SplitHandler.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/SplitHandler.kt index 81b19547..aa8f7cf1 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/util/SplitHandler.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/SplitHandler.kt @@ -5,15 +5,14 @@ import net.minecraft.core.Vec3i import net.minecraft.server.level.ServerLevel import net.minecraft.world.level.Level import net.minecraft.world.level.block.state.BlockState -import org.joml.primitives.AABBi -import org.valkyrienskies.core.api.ships.getAttachment +import org.valkyrienskies.core.api.attachment.getAttachment +import org.valkyrienskies.core.api.ships.LoadedServerShip import org.valkyrienskies.core.api.world.connectivity.ConnectionStatus.CONNECTED import org.valkyrienskies.core.api.world.connectivity.ConnectionStatus.DISCONNECTED +import org.valkyrienskies.core.api.world.properties.DimensionId import org.valkyrienskies.core.util.datastructures.DenseBlockPosSet -import org.valkyrienskies.core.util.expand -import org.valkyrienskies.mod.common.ValkyrienSkiesMod import org.valkyrienskies.mod.common.assembly.ShipAssembler -import org.valkyrienskies.mod.common.assembly.createNewShipWithBlocks +import org.valkyrienskies.mod.common.config.VSGameConfig import org.valkyrienskies.mod.common.dimensionId import org.valkyrienskies.mod.common.getShipObjectManagingPos import org.valkyrienskies.mod.common.shipObjectWorld @@ -21,11 +20,36 @@ import org.valkyrienskies.mod.util.logger class SplitHandler(private val doEdges: Boolean, private val doCorners: Boolean) { - fun split(level: Level, x: Int, y: Int, z: Int, prevBlockState: BlockState, newBlockState: BlockState) { + val splitQueue: HashMap> = hashMapOf() + + fun queueSplit(level: Level, x: Int, y: Int, z: Int) { + splitQueue[level.dimensionId]?.put(BlockPos(x, y, z), VSGameConfig.SERVER.defaultSplitGraceTimer) ?: run { + splitQueue[level.dimensionId] = hashMapOf(BlockPos(x, y, z) to VSGameConfig.SERVER.defaultSplitGraceTimer) + } + } + + fun tick(level: ServerLevel) { + if (splitQueue[level.dimensionId] != null && splitQueue[level.dimensionId]!!.isNotEmpty()) { + val splitsToProcess = HashSet() + for (splitIndex in splitQueue[level.dimensionId]!!.keys) { + if (splitQueue[level.dimensionId]!![splitIndex]!! <= 0) { + splitsToProcess.add(splitIndex) + } else { + splitQueue[level.dimensionId]!![splitIndex] = splitQueue[level.dimensionId]!![splitIndex]!! - 1 + } + } + splitsToProcess.forEach { + splitQueue[level.dimensionId]!!.remove(it) + split(level, it.x, it.y, it.z, level.getBlockState(it)) + } + } + } + + fun split(level: Level, x: Int, y: Int, z: Int, newBlockState: BlockState) { if (level is ServerLevel) { - val loadedShip = level.getShipObjectManagingPos(x shr 4, z shr 4) - if ((loadedShip != null && loadedShip.getAttachment()?.canSplit() != false)) { - if (!prevBlockState.isAir && newBlockState.isAir) { + val loadedShip : LoadedServerShip? = level.getShipObjectManagingPos(x shr 4, z shr 4) + if ((loadedShip != null && loadedShip.getAttachment()?.canSplit() != false) || (loadedShip == null && VSGameConfig.SERVER.enableWorldSplitting)) { + if (newBlockState.isAir) { val blockNeighbors: HashSet = HashSet() //val shipBox = loadedShip.shipAABB?.expand(1, AABBi()) ?: return diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/world/RaycastUtils.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/world/RaycastUtils.kt index 6e1699db..8c61e767 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/world/RaycastUtils.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/world/RaycastUtils.kt @@ -19,7 +19,8 @@ import org.joml.Vector3d import org.joml.primitives.AABBd import org.joml.primitives.AABBdc import org.valkyrienskies.core.api.ships.properties.ShipId -import org.valkyrienskies.core.game.ships.ShipObjectClient +import org.valkyrienskies.core.api.ships.ClientShip +import org.valkyrienskies.mod.common.dimensionId import org.valkyrienskies.mod.common.shipObjectWorld import org.valkyrienskies.mod.common.util.toJOML import org.valkyrienskies.mod.common.util.toMinecraft @@ -52,13 +53,13 @@ fun Level.clipIncludeShips( // Iterate every ship, find do the raycast in ship space, // choose the raycast with the lowest distance to the start position. - for (ship in shipObjectWorld.loadedShips.getIntersecting(clipAABB)) { + for (ship in shipObjectWorld.loadedShips.getIntersecting(clipAABB, dimensionId)) { // Skip skipShip if (ship.id == skipShip) { continue } - val worldToShip = (ship as? ShipObjectClient)?.renderTransform?.worldToShipMatrix ?: ship.worldToShip - val shipToWorld = (ship as? ShipObjectClient)?.renderTransform?.shipToWorldMatrix ?: ship.shipToWorld + val worldToShip = (ship as? ClientShip)?.renderTransform?.worldToShip ?: ship.worldToShip + val shipToWorld = (ship as? ClientShip)?.renderTransform?.shipToWorld ?: ship.shipToWorld val shipStart = worldToShip.transformPosition(ctx.from.toJOML()).toMinecraft() val shipEnd = worldToShip.transformPosition(ctx.to.toJOML()).toMinecraft() @@ -223,7 +224,7 @@ fun Level.raytraceEntities( val start = Vector3d() val end = Vector3d() - shipObjectWorld.loadedShips.getIntersecting(origBoundingBoxM.toJOML()).forEach { + shipObjectWorld.loadedShips.getIntersecting(origBoundingBoxM.toJOML(), dimensionId).forEach { it.worldToShip.transformPosition(origStartVec, start) it.worldToShip.transformPosition(origEndVec, end) diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/compat/Weather2Compat.kt b/common/src/main/kotlin/org/valkyrienskies/mod/compat/Weather2Compat.kt index 975b461e..947efe3e 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/compat/Weather2Compat.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/compat/Weather2Compat.kt @@ -2,7 +2,7 @@ package org.valkyrienskies.mod.compat import net.minecraft.server.level.ServerLevel import org.joml.Vector3d -import org.valkyrienskies.core.api.ships.getAttachment +import org.valkyrienskies.core.api.attachment.getAttachment import org.valkyrienskies.mod.common.config.VSGameConfig import org.valkyrienskies.mod.common.shipObjectWorld import org.valkyrienskies.mod.common.util.GameTickForceApplier @@ -24,7 +24,7 @@ object Weather2Compat { level.shipObjectWorld.loadedShips.forEach { ship -> val forces = ship.getAttachment()!! - val com = ship.inertiaData.centerOfMassInShip + val com = ship.inertiaData.centerOfMass ship.shipToWorld.transformPosition(com, vec) val pos = vec.toMinecraft() diff --git a/gradle.properties b/gradle.properties index 15e3ca20..a77b5c5c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,7 +11,7 @@ forge_version=1.18.2-40.2.4 create_fabric_version=0.5.1-i-build.1598+mc1.18.2 flywheel_version_fabric=0.6.9-38 createbigcannons_version= 0.5.2-nightly-e815ca4 -vs_core_version=1.1.0+0ea54cda8b +vs_core_version=1.1.0+774ec4e001 # Prevent kotlin from autoincluding stdlib as a dependency, which breaks # gradle's composite builds (includeBuild) for some reason. We'll add it manually kotlin.stdlib.default.dependency=false From 44ddbd5e14dafbde6e371bdb3707c5a448664ddd Mon Sep 17 00:00:00 2001 From: ThePlasticPotato Date: Fri, 27 Dec 2024 12:02:03 -0500 Subject: [PATCH 27/45] Upgrade kotlin to 2.1.0 --- build.gradle | 2 +- .../valkyrienskies/mod/api_impl/events/VSApiImpl.kt | 3 +++ .../valkyrienskies/mod/common/block/TestSphereBlock.kt | 10 +++++----- .../org/valkyrienskies/mod/common/util/SplitHandler.kt | 2 +- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/build.gradle b/build.gradle index 58eff658..f33da4c4 100644 --- a/build.gradle +++ b/build.gradle @@ -11,7 +11,7 @@ plugins { id "dev.architectury.loom" version "1.3.355" apply false id 'io.github.juuxel.loom-vineflower' version '1.11.0' apply false // Kotlin - id "org.jetbrains.kotlin.jvm" version "1.9.10" apply false + id "org.jetbrains.kotlin.jvm" version "2.1.0" apply false id 'com.matthewprenger.cursegradle' version '1.4.0' apply false id "com.modrinth.minotaur" version "2.4.3" apply false } diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/api_impl/events/VSApiImpl.kt b/common/src/main/kotlin/org/valkyrienskies/mod/api_impl/events/VSApiImpl.kt index b67911bf..8abfdfe0 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/api_impl/events/VSApiImpl.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/api_impl/events/VSApiImpl.kt @@ -31,6 +31,9 @@ class VsApiImpl : VsApi { return entity is ShipMountingEntity } + @Deprecated( + "The legacy VS config system will be replaced soon. Migrate to another config library, or the new system when it's released. " + ) override fun createConfigScreenLegacy(parent: Screen, vararg configs: Class<*>): Screen { return VSClothConfig.createConfigScreenFor(parent, *configs) } diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/block/TestSphereBlock.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/block/TestSphereBlock.kt index cfdb38ac..6c917f95 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/block/TestSphereBlock.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/block/TestSphereBlock.kt @@ -10,19 +10,19 @@ import net.minecraft.world.phys.shapes.Shapes import net.minecraft.world.phys.shapes.VoxelShape object TestSphereBlock : Block(Properties.of(Material.STONE)) { + @Deprecated("Deprecated in Java") override fun getVisualShape( - blockState: BlockState?, blockGetter: BlockGetter?, blockPos: BlockPos?, collisionContext: CollisionContext? + blockState: BlockState, blockGetter: BlockGetter, blockPos: BlockPos, collisionContext: CollisionContext ): VoxelShape { return Shapes.empty() } - override fun getShadeBrightness(blockState: BlockState?, blockGetter: BlockGetter?, blockPos: BlockPos?): Float { + @Deprecated("Deprecated in Java") + override fun getShadeBrightness(blockState: BlockState, blockGetter: BlockGetter, blockPos: BlockPos): Float { return 1.0f } - override fun propagatesSkylightDown( - blockState: BlockState?, blockGetter: BlockGetter?, blockPos: BlockPos? - ): Boolean { + override fun propagatesSkylightDown(blockState: BlockState, blockGetter: BlockGetter, blockPos: BlockPos): Boolean { return true } } diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/util/SplitHandler.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/SplitHandler.kt index aa8f7cf1..f49fdc1e 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/util/SplitHandler.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/SplitHandler.kt @@ -20,7 +20,7 @@ import org.valkyrienskies.mod.util.logger class SplitHandler(private val doEdges: Boolean, private val doCorners: Boolean) { - val splitQueue: HashMap> = hashMapOf() + private val splitQueue: HashMap> = hashMapOf() fun queueSplit(level: Level, x: Int, y: Int, z: Int) { splitQueue[level.dimensionId]?.put(BlockPos(x, y, z), VSGameConfig.SERVER.defaultSplitGraceTimer) ?: run { From 83dfca269d0a89919730b574a21529a68bf4d92c Mon Sep 17 00:00:00 2001 From: ThePlasticPotato Date: Fri, 27 Dec 2024 12:31:34 -0500 Subject: [PATCH 28/45] Register shipsettings, that is somewhat important --- .../kotlin/org/valkyrienskies/mod/common/ValkyrienSkiesMod.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/ValkyrienSkiesMod.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/ValkyrienSkiesMod.kt index 86d136e3..24723f7b 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/ValkyrienSkiesMod.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/ValkyrienSkiesMod.kt @@ -14,6 +14,7 @@ import org.valkyrienskies.mod.common.entity.ShipMountingEntity import org.valkyrienskies.mod.common.entity.VSPhysicsEntity import org.valkyrienskies.mod.common.networking.VSGamePackets import org.valkyrienskies.mod.common.util.GameTickForceApplier +import org.valkyrienskies.mod.common.util.ShipSettings import org.valkyrienskies.mod.common.util.SplitHandler import org.valkyrienskies.mod.common.util.SplittingDisablerAttachment @@ -58,6 +59,7 @@ object ValkyrienSkiesMod { splitHandler = SplitHandler(this.vsCore.hooks.enableBlockEdgeConnectivity, this.vsCore.hooks.enableBlockCornerConnectivity) + vsCore.registerAttachment(ShipSettings::class.java) vsCore.registerAttachment(GameTickForceApplier::class.java) vsCore.registerAttachment(SplittingDisablerAttachment::class.java) From 8f853da998119d85f7a9359831d4df0ca63e0172 Mon Sep 17 00:00:00 2001 From: Potato <77798144+ThePlasticPotato@users.noreply.github.com> Date: Fri, 27 Dec 2024 18:07:22 -0500 Subject: [PATCH 29/45] Improved Dragging & Entity Interactions on Ships [Pathfinding, POIs, Raids, etc.] (#1027) - Mobs & Players are now dragged perfectly, even at ludicrous speed - Mob spawning on ships has been fixed - Mob pathfinding on ships has been significantly improved - Mob rotation on ships has been fixed - POI finding on ships has been fixed (Villager stations, portals, bee hives, etc) - Bee flower pathing on ships has been fixed. - Villages can now be on ships and are tracked correctly. - Raids can now target ships, and spawn around them. - Zombie Sieges can now target ships, and spawn around them. - Player targeting of blocks now works more reliably on ships while at high speeds or rotations. - Players can now hold open GUIs while on ships at high speeds or rotations. --- common/build.gradle | 2 +- .../mod/mixin/client/MixinMinecraft.java | 14 +- .../client/renderer/MixinEntityRenderer.java | 48 +++++++ .../client/renderer/MixinGameRenderer.java | 6 +- .../mod/mixin/entity/MixinEntity.java | 87 ++++++++++++ .../ai/goal/JitteredLinearRetryAccessor.java | 14 ++ .../feature/ai/goal/MixinMoveToBlockGoal.java | 25 ++++ .../ai/goal/MixinMoveToTargetSink.java | 20 +++ .../ai/goal/MixinValidateNearbyPoi.java | 21 +++ .../mixin/feature/ai/goal/bees/MixinBee.java | 26 ++++ .../ai/goal/bees/MixinEnterHiveGoal.java | 24 ++++ .../ai/goal/bees/MixinGrowCropGoal.java | 30 +++++ .../ai/goal/bees/MixinLocateHiveGoal.java | 28 ++++ .../ai/goal/bees/MixinPollinateGoal.java | 49 +++++++ .../MixinAssignProfessionFromJobSite.java | 23 ++++ .../villagers/MixinGoToClosestVillage.java | 37 ++++++ .../MixinSetClosestHomeAsWalkTarget.java | 21 +++ .../ai/goal/villagers/MixinWorkAtPoi.java | 29 ++++ .../ai/node_evaluator/MixinPathFinder.java | 40 ++++++ .../node_evaluator/MixinPathNavigation.java | 27 ++++ .../SwimNodeEvaluatorMixin.java | 2 +- .../WalkNodeEvaluatorMixin.java | 2 +- .../MixinAirAndWaterRandomPos.java | 47 +++++++ .../MixinDefaultRandomPos.java | 83 ++++++++++++ .../path_retargeting/MixinLandRandomPos.java | 87 ++++++++++++ .../feature/entity_collision/MixinEntity.java | 69 ++++++++++ .../entity_collision/MixinLivingEntity.java | 47 +++++++ .../MixinLocalPlayer.java | 99 ++++++++++++++ .../MixinServerEntity.java | 91 +++++++++++++ .../mod/mixin/feature/poi/FEATURE.md | 1 + .../mixin/feature/poi/MixinPOIManager.java | 85 ++++++++++++ .../MixinScreenHandler.java | 6 +- .../mixin/feature/wave_spawning/FEATURE.md | 1 + .../feature/wave_spawning/MixinRaid.java | 51 +++++++ .../feature/wave_spawning/MixinRaids.java | 31 +++++ .../wave_spawning/MixinVillageSiege.java | 36 +++++ .../MixinReachEntityAttributes.java | 7 +- .../mixin/server/MixinMinecraftServer.java | 5 +- .../MixinServerGamePacketListenerImpl.java | 21 +++ .../mod/mixin/server/world/MixinChunkMap.java | 15 +++ .../mixin/server/world/MixinServerLevel.java | 27 ++++ .../mod/mixin/world/entity/MixinPlayer.java | 27 ++++ .../mixinducks/world/entity/PlayerDuck.java | 6 + .../valkyrienskies/mod/common/PlayerUtil.kt | 4 +- .../valkyrienskies/mod/common/VSGameUtils.kt | 14 +- .../mod/common/config/VSGameConfig.kt | 2 +- .../networking/PacketEntityShipMotion.kt | 20 +++ .../networking/PacketMobShipRotation.kt | 8 ++ .../networking/PacketPlayerShipMotion.kt | 9 ++ .../mod/common/networking/VSGamePackets.kt | 124 ++++++++++++++++++ .../mod/common/util/EntityDragger.kt | 112 +++++++++++++--- .../common/util/EntityDraggingInformation.kt | 31 ++++- .../mod/common/util/EntityLerper.kt | 110 ++++++++++++++++ .../common/util/EntityShipCollisionUtils.kt | 3 + .../mod/common/world/POIChunkSearcher.kt | 48 +++++++ .../valkyrienskies-common.accesswidener | 8 ++ .../valkyrienskies-common.mixins.json | 27 +++- .../forge_interact/MixinIForgePlayer.java | 14 +- 58 files changed, 1915 insertions(+), 36 deletions(-) create mode 100644 common/src/main/java/org/valkyrienskies/mod/mixin/client/renderer/MixinEntityRenderer.java create mode 100644 common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/JitteredLinearRetryAccessor.java create mode 100644 common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/MixinMoveToBlockGoal.java create mode 100644 common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/MixinMoveToTargetSink.java create mode 100644 common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/MixinValidateNearbyPoi.java create mode 100644 common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/bees/MixinBee.java create mode 100644 common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/bees/MixinEnterHiveGoal.java create mode 100644 common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/bees/MixinGrowCropGoal.java create mode 100644 common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/bees/MixinLocateHiveGoal.java create mode 100644 common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/bees/MixinPollinateGoal.java create mode 100644 common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/villagers/MixinAssignProfessionFromJobSite.java create mode 100644 common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/villagers/MixinGoToClosestVillage.java create mode 100644 common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/villagers/MixinSetClosestHomeAsWalkTarget.java create mode 100644 common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/villagers/MixinWorkAtPoi.java create mode 100644 common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/node_evaluator/MixinPathFinder.java create mode 100644 common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/node_evaluator/MixinPathNavigation.java create mode 100644 common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/path_retargeting/MixinAirAndWaterRandomPos.java create mode 100644 common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/path_retargeting/MixinDefaultRandomPos.java create mode 100644 common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/path_retargeting/MixinLandRandomPos.java create mode 100644 common/src/main/java/org/valkyrienskies/mod/mixin/feature/entity_collision/MixinLivingEntity.java create mode 100644 common/src/main/java/org/valkyrienskies/mod/mixin/feature/entity_movement_packets/MixinLocalPlayer.java create mode 100644 common/src/main/java/org/valkyrienskies/mod/mixin/feature/entity_movement_packets/MixinServerEntity.java create mode 100644 common/src/main/java/org/valkyrienskies/mod/mixin/feature/poi/FEATURE.md create mode 100644 common/src/main/java/org/valkyrienskies/mod/mixin/feature/poi/MixinPOIManager.java create mode 100644 common/src/main/java/org/valkyrienskies/mod/mixin/feature/wave_spawning/FEATURE.md create mode 100644 common/src/main/java/org/valkyrienskies/mod/mixin/feature/wave_spawning/MixinRaid.java create mode 100644 common/src/main/java/org/valkyrienskies/mod/mixin/feature/wave_spawning/MixinRaids.java create mode 100644 common/src/main/java/org/valkyrienskies/mod/mixin/feature/wave_spawning/MixinVillageSiege.java create mode 100644 common/src/main/kotlin/org/valkyrienskies/mod/common/networking/PacketEntityShipMotion.kt create mode 100644 common/src/main/kotlin/org/valkyrienskies/mod/common/networking/PacketMobShipRotation.kt create mode 100644 common/src/main/kotlin/org/valkyrienskies/mod/common/networking/PacketPlayerShipMotion.kt create mode 100644 common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityLerper.kt create mode 100644 common/src/main/kotlin/org/valkyrienskies/mod/common/world/POIChunkSearcher.kt diff --git a/common/build.gradle b/common/build.gradle index b62489b4..53a562e1 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -1,6 +1,6 @@ dependencies { - annotationProcessor(implementation("com.github.LlamaLad7:MixinExtras:0.1.1")) + annotationProcessor(implementation("io.github.llamalad7:mixinextras-common:0.3.5")) compileOnly 'com.google.code.findbugs:jsr305:3.0.2' // We depend on fabric loader here to use the fabric @Environment annotations diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/client/MixinMinecraft.java b/common/src/main/java/org/valkyrienskies/mod/mixin/client/MixinMinecraft.java index ae6ed83a..b119a032 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/client/MixinMinecraft.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/client/MixinMinecraft.java @@ -103,6 +103,17 @@ public ClientShipWorldCore getShipObjectWorld() { @Shadow public abstract ClientPacketListener getConnection(); + @Inject( + method = "tick", + at = @At("HEAD") + ) + public void preTick(final CallbackInfo ci) { + // Tick the ship world and then drag entities + if (!pause && shipObjectWorld != null && level != null && getConnection() != null) { + //EntityDragger.INSTANCE.dragEntitiesWithShips(level.entitiesForRendering(), true); + } + } + @Inject( method = "tick", at = @At("TAIL") @@ -112,7 +123,8 @@ public void postTick(final CallbackInfo ci) { if (!pause && shipObjectWorld != null && level != null && getConnection() != null) { shipObjectWorld.tickNetworking(getConnection().getConnection().getRemoteAddress()); shipObjectWorld.postTick(); - EntityDragger.INSTANCE.dragEntitiesWithShips(level.entitiesForRendering()); + //EntityDragger.INSTANCE.dragEntitiesWithShips(level.entitiesForRendering()); + EntityDragger.INSTANCE.dragEntitiesWithShips(level.entitiesForRendering(), false); } } diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/client/renderer/MixinEntityRenderer.java b/common/src/main/java/org/valkyrienskies/mod/mixin/client/renderer/MixinEntityRenderer.java new file mode 100644 index 00000000..975c94f4 --- /dev/null +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/client/renderer/MixinEntityRenderer.java @@ -0,0 +1,48 @@ +package org.valkyrienskies.mod.mixin.client.renderer; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.renderer.entity.EntityRenderer; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.phys.AABB; +import org.joml.Vector3d; +import org.joml.Vector3dc; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.valkyrienskies.core.api.ships.ClientShip; +import org.valkyrienskies.mod.common.VSGameUtilsKt; +import org.valkyrienskies.mod.common.util.EntityDraggingInformation; +import org.valkyrienskies.mod.common.util.IEntityDraggingInformationProvider; + +@Mixin(EntityRenderer.class) +public class MixinEntityRenderer { + + /** + * This is necessary to avoid the vanilla flickering that occurs when entities are at high speeds. + *

    + * Presumably, it is caused by the culling AABB only being updated on a subsequent tick, so we bypass that. + * @param instance + * @param original + * @return + */ + @WrapOperation(method = "shouldRender", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Entity;getBoundingBoxForCulling()Lnet/minecraft/world/phys/AABB;")) + private AABB redirectAABBConstructor(Entity instance, Operation original) { + if (instance instanceof IEntityDraggingInformationProvider dragProvider && dragProvider.getDraggingInformation().isEntityBeingDraggedByAShip()) { + EntityDraggingInformation dragInfo = dragProvider.getDraggingInformation(); + ClientShip ship = VSGameUtilsKt.getShipObjectWorld((ClientLevel) instance.level).getAllShips().getById(dragInfo.getLastShipStoodOn()); + if (ship == null) { + return original.call(instance); + } + if (dragInfo.getLastShipStoodOn() != null && (dragInfo.getRelativePositionOnShip() != null || dragInfo.getServerRelativePlayerPosition() != null)) { + Vector3dc positionToTransform = dragInfo.bestRelativeEntityPosition(); + if (positionToTransform != null) { + Vector3dc transformed = ship.getRenderTransform().getShipToWorld().transformPosition(positionToTransform, + new Vector3d()); + return instance.getDimensions(instance.getPose()).makeBoundingBox(transformed.x(), transformed.y(), transformed.z()).inflate(0.5D); + } + } + } + return original.call(instance); + } +} diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/client/renderer/MixinGameRenderer.java b/common/src/main/java/org/valkyrienskies/mod/mixin/client/renderer/MixinGameRenderer.java index 8b9c6fe4..e626dc4f 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/client/renderer/MixinGameRenderer.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/client/renderer/MixinGameRenderer.java @@ -158,7 +158,7 @@ private void preRender(final float tickDelta, final long startTime, final boolea ((IEntityDraggingInformationProvider) entity).getDraggingInformation(); final Long lastShipStoodOn = entityDraggingInformation.getLastShipStoodOn(); // Then try getting [entityShouldBeHere] from [entityDraggingInformation] - if (lastShipStoodOn != null && entityDraggingInformation.isEntityBeingDraggedByAShip()) { + if (lastShipStoodOn != null && entityDraggingInformation.isEntityBeingDraggedByAShip()) { //for testing final ClientShip shipObject = VSGameUtilsKt.getShipObjectWorld(clientWorld).getLoadedShips().getById(lastShipStoodOn); if (shipObject != null) { @@ -200,6 +200,10 @@ private void preRender(final float tickDelta, final long startTime, final boolea entity.xo = (entityShouldBeHere.x() - (entity.getX() * tickDelta)) / (1.0 - tickDelta); entity.yo = (entityShouldBeHere.y() - (entity.getY() * tickDelta)) / (1.0 - tickDelta); entity.zo = (entityShouldBeHere.z() - (entity.getZ() * tickDelta)) / (1.0 - tickDelta); + //why the fuck do we do this + + //what if i just... + //dont } } } diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/entity/MixinEntity.java b/common/src/main/java/org/valkyrienskies/mod/mixin/entity/MixinEntity.java index 7b5178cf..e81068d6 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/entity/MixinEntity.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/entity/MixinEntity.java @@ -5,7 +5,9 @@ import net.minecraft.CrashReport; import net.minecraft.CrashReportCategory; import net.minecraft.ReportedException; +import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.util.Mth; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; @@ -33,6 +35,7 @@ import org.valkyrienskies.core.api.ships.properties.ShipTransform; import org.valkyrienskies.mod.common.entity.ShipMountedToData; import org.valkyrienskies.mod.common.VSGameUtilsKt; +import org.valkyrienskies.mod.common.util.EntityDragger; import org.valkyrienskies.mod.common.util.EntityDraggingInformation; import org.valkyrienskies.mod.common.util.IEntityDraggingInformationProvider; import org.valkyrienskies.mod.common.util.VectorConversionsMCKt; @@ -127,11 +130,67 @@ private void preGetEyePosition(final float partialTicks, final CallbackInfoRetur /** * @reason Needed for players to pick blocks correctly when mounted to a ship + * + * Needed, because before we only fixed the clientside one. + */ + @Inject(method = "getEyePosition()Lnet/minecraft/world/phys/Vec3;", at = @At("HEAD"), cancellable = true) + private void preGetEyePositionServer(final CallbackInfoReturnable cir) { + final ShipMountedToData shipMountedToData = VSGameUtilsKt.getShipMountedToData(Entity.class.cast(this), null); + if (shipMountedToData == null) { + return; + } + final LoadedShip shipMountedTo = shipMountedToData.getShipMountedTo(); + + final ShipTransform shipTransform; + if (shipMountedTo instanceof ClientShip) { + shipTransform = ((ClientShip) shipMountedTo).getRenderTransform(); + } else { + shipTransform = shipMountedTo.getShipTransform(); + } + final Vector3dc basePos = shipTransform.getShipToWorldMatrix() + .transformPosition(shipMountedToData.getMountPosInShip(), new Vector3d()); + final Vector3dc eyeRelativePos = shipTransform.getShipCoordinatesToWorldCoordinatesRotation().transform( + new Vector3d(0.0, getEyeHeight(), 0.0) + ); + final Vec3 newEyePos = VectorConversionsMCKt.toMinecraft(basePos.add(eyeRelativePos, new Vector3d())); + cir.setReturnValue(newEyePos); + } + + /** + * @reason Needed for players to pick blocks correctly when mounted to a ship + * + * Additionally, this has to have dragging information included or it breaks. This is because of reasons that I literally + * do not know or understand, but minecraft's rendering pipeline is like that. */ @Inject(method = "calculateViewVector", at = @At("HEAD"), cancellable = true) private void preCalculateViewVector(final float xRot, final float yRot, final CallbackInfoReturnable cir) { final LoadedShip shipMountedTo = VSGameUtilsKt.getShipMountedTo(Entity.class.cast(this)); if (shipMountedTo == null) { + if (Entity.class.cast(this) instanceof final ServerPlayer sPlayer && sPlayer instanceof final IEntityDraggingInformationProvider dragProvider) { + if (dragProvider.getDraggingInformation().isEntityBeingDraggedByAShip() && dragProvider.getDraggingInformation().getServerRelativePlayerYaw() != null) { + final Ship shipDraggedBy = VSGameUtilsKt.getAllShips(level).getById(dragProvider.getDraggingInformation().getLastShipStoodOn()); + if (shipDraggedBy != null) { + final float realYRot = (float) EntityDragger.INSTANCE.serversideEyeRotationOrDefault(sPlayer, yRot); + final float f = xRot * (float) (Math.PI / 180.0); + final float g = -realYRot * (float) (Math.PI / 180.0); + final float h = Mth.cos(g); + final float i = Mth.sin(g); + final float j = Mth.cos(f); + final float k = Mth.sin(f); + final Vector3dc originalViewVector = new Vector3d(i * j, -k, h * j); + + final ShipTransform shipTransform; + if (shipDraggedBy instanceof ClientShip) { + shipTransform = ((ClientShip) shipDraggedBy).getRenderTransform(); + } else { + shipTransform = shipDraggedBy.getShipTransform(); + } + final Vec3 newViewVector = VectorConversionsMCKt.toMinecraft( + shipTransform.getShipCoordinatesToWorldCoordinatesRotation().transform(originalViewVector, new Vector3d())); + cir.setReturnValue(newViewVector); + } + } + } return; } final float f = xRot * (float) (Math.PI / 180.0); @@ -153,6 +212,28 @@ private void preCalculateViewVector(final float xRot, final float yRot, final Ca cir.setReturnValue(newViewVector); } + /** + * @reason Without this and that other mixin, things don't render correctly at high speeds. + * @see org.valkyrienskies.mod.mixin.client.renderer.MixinEntityRenderer + */ + @Inject(method = "shouldRender", at = @At("HEAD"), cancellable = true) + private void onShouldRender(double d, double e, double f, CallbackInfoReturnable cir) { + if (this.draggingInformation.isEntityBeingDraggedByAShip() && this.level.isClientSide) { + final ClientShip ship = VSGameUtilsKt.getShipObjectWorld((ClientLevel) this.level).getAllShips().getById(this.draggingInformation.getLastShipStoodOn()); + if (ship != null) { + final ShipTransform shipTransform = ship.getRenderTransform(); + if (this.draggingInformation.getRelativePositionOnShip() != null) { + Vector3dc redir = shipTransform.getShipToWorld().transformPosition(this.draggingInformation.getRelativePositionOnShip(), new Vector3d()); + double distX = redir.x() - d; + double distY = redir.y() - e; + double distZ = redir.z() - f; + double sqrDist = distX * distX + distY * distY + distZ * distZ; + cir.setReturnValue(shouldRenderAtSqrDistance(sqrDist)); + } + } + } + } + // region shadow functions and fields @Shadow public Level level; @@ -183,6 +264,12 @@ private void preCalculateViewVector(final float xRot, final float yRot, final Ca @Shadow public abstract EntityType getType(); + @Shadow + private float yRot; + + @Shadow + public abstract boolean shouldRenderAtSqrDistance(double d); + @Override @NotNull public EntityDraggingInformation getDraggingInformation() { diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/JitteredLinearRetryAccessor.java b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/JitteredLinearRetryAccessor.java new file mode 100644 index 00000000..ce154c9e --- /dev/null +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/JitteredLinearRetryAccessor.java @@ -0,0 +1,14 @@ +package org.valkyrienskies.mod.mixin.feature.ai.goal; + +import java.util.Random; +import net.minecraft.world.entity.ai.behavior.AcquirePoi.JitteredLinearRetry; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +@Mixin(JitteredLinearRetry.class) +public interface JitteredLinearRetryAccessor { + @Invoker("") + static JitteredLinearRetry create(Random random, long l) { + throw new AssertionError(); + } +} diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/MixinMoveToBlockGoal.java b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/MixinMoveToBlockGoal.java new file mode 100644 index 00000000..da31ae88 --- /dev/null +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/MixinMoveToBlockGoal.java @@ -0,0 +1,25 @@ +package org.valkyrienskies.mod.mixin.feature.ai.goal; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Position; +import net.minecraft.world.entity.PathfinderMob; +import net.minecraft.world.entity.ai.goal.MoveToBlockGoal; +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.valkyrienskies.mod.common.VSGameUtilsKt; + +@Mixin(MoveToBlockGoal.class) +public class MixinMoveToBlockGoal { + @Shadow + @Final + protected PathfinderMob mob; + + @WrapOperation(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/core/BlockPos;closerToCenterThan(Lnet/minecraft/core/Position;D)Z")) + private boolean onCloserToCenterThan(BlockPos instance, Position position, double v, Operation original) { + return original.call(new BlockPos(VSGameUtilsKt.toWorldCoordinates(this.mob.level, instance)), position, v); + } +} diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/MixinMoveToTargetSink.java b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/MixinMoveToTargetSink.java new file mode 100644 index 00000000..9f4c2e66 --- /dev/null +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/MixinMoveToTargetSink.java @@ -0,0 +1,20 @@ +package org.valkyrienskies.mod.mixin.feature.ai.goal; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.llamalad7.mixinextras.sugar.Local; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Vec3i; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.ai.behavior.MoveToTargetSink; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.valkyrienskies.mod.common.VSGameUtilsKt; + +@Mixin(MoveToTargetSink.class) +public class MixinMoveToTargetSink { + @WrapOperation(method = "reachedTarget", at = @At(value = "INVOKE", target = "Lnet/minecraft/core/BlockPos;distManhattan(Lnet/minecraft/core/Vec3i;)I")) + private int onDistManhattan(BlockPos instance, Vec3i vec3i, Operation original, @Local(argsOnly = true) Mob mob) { + return original.call(new BlockPos(VSGameUtilsKt.toWorldCoordinates(mob.level, instance)), vec3i); + } +} diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/MixinValidateNearbyPoi.java b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/MixinValidateNearbyPoi.java new file mode 100644 index 00000000..c080e3ec --- /dev/null +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/MixinValidateNearbyPoi.java @@ -0,0 +1,21 @@ +package org.valkyrienskies.mod.mixin.feature.ai.goal; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.llamalad7.mixinextras.sugar.Local; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Position; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.behavior.ValidateNearbyPoi; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.valkyrienskies.mod.common.VSGameUtilsKt; + +@Mixin(ValidateNearbyPoi.class) +public class MixinValidateNearbyPoi { + @WrapOperation(method = "checkExtraStartConditions", at = @At(value = "INVOKE", target = "Lnet/minecraft/core/BlockPos;closerToCenterThan(Lnet/minecraft/core/Position;D)Z")) + private boolean onCloserToCenterThan(BlockPos instance, Position position, double v, Operation original, @Local + LivingEntity livingEntity) { + return original.call(new BlockPos(VSGameUtilsKt.toWorldCoordinates(livingEntity.level, instance)), position, v); + } +} diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/bees/MixinBee.java b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/bees/MixinBee.java new file mode 100644 index 00000000..32cb2d2d --- /dev/null +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/bees/MixinBee.java @@ -0,0 +1,26 @@ +package org.valkyrienskies.mod.mixin.feature.ai.goal.bees; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Vec3i; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.animal.Bee; +import net.minecraft.world.level.Level; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.valkyrienskies.mod.common.VSGameUtilsKt; + +@Mixin(Bee.class) +public abstract class MixinBee extends Entity { + + public MixinBee(EntityType entityType, Level level) { + super(entityType, level); + } + + @WrapOperation(method = "closerThan", at = @At(value = "INVOKE", target = "Lnet/minecraft/core/BlockPos;closerThan(Lnet/minecraft/core/Vec3i;D)Z")) + private boolean onCloserThan(BlockPos instance, Vec3i vec3i, double v, Operation original) { + return original.call(new BlockPos(VSGameUtilsKt.toWorldCoordinates(this.level, instance)), vec3i, v); + } +} diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/bees/MixinEnterHiveGoal.java b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/bees/MixinEnterHiveGoal.java new file mode 100644 index 00000000..4822cff8 --- /dev/null +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/bees/MixinEnterHiveGoal.java @@ -0,0 +1,24 @@ +package org.valkyrienskies.mod.mixin.feature.ai.goal.bees; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Position; +import net.minecraft.world.entity.animal.Bee; +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.valkyrienskies.mod.common.VSGameUtilsKt; + +@Mixin(Bee.BeeEnterHiveGoal.class) +public class MixinEnterHiveGoal { + @Shadow + @Final + Bee field_20367; + + @WrapOperation(method = "canBeeUse", at = @At(value = "INVOKE", target = "Lnet/minecraft/core/BlockPos;closerToCenterThan(Lnet/minecraft/core/Position;D)Z")) + private boolean onCloserToCenterThan(BlockPos instance, Position position, double v, Operation original) { + return original.call(new BlockPos(VSGameUtilsKt.toWorldCoordinates(this.field_20367.level, instance)), position, v); + } +} diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/bees/MixinGrowCropGoal.java b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/bees/MixinGrowCropGoal.java new file mode 100644 index 00000000..8d04cea7 --- /dev/null +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/bees/MixinGrowCropGoal.java @@ -0,0 +1,30 @@ +package org.valkyrienskies.mod.mixin.feature.ai.goal.bees; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import java.util.List; +import net.minecraft.core.BlockPos; +import net.minecraft.tags.BlockTags; +import net.minecraft.world.entity.animal.Bee; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; +import org.joml.Vector3d; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.valkyrienskies.mod.common.VSGameUtilsKt; + +@Mixin(Bee.BeeGrowCropGoal.class) +public class MixinGrowCropGoal { + @WrapOperation(method = "tick", at = @At(value = "INVOKE", + target = "Lnet/minecraft/world/level/Level;getBlockState(Lnet/minecraft/core/BlockPos;)Lnet/minecraft/world/level/block/state/BlockState;")) + private BlockState onTick(Level instance, BlockPos blockPos, Operation original) { + List possibleCandidates = VSGameUtilsKt.transformToNearbyShipsAndWorld(instance, blockPos.getX(), blockPos.getY(), blockPos.getZ(), 1.5); + for (Vector3d candidate : possibleCandidates) { + BlockState blockState = instance.getBlockState(new BlockPos(candidate.x, candidate.y, candidate.z)); + if (blockState.is(BlockTags.BEE_GROWABLES)) { + return blockState; + } + } + return original.call(instance, blockPos); + } +} diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/bees/MixinLocateHiveGoal.java b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/bees/MixinLocateHiveGoal.java new file mode 100644 index 00000000..c70ea7cb --- /dev/null +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/bees/MixinLocateHiveGoal.java @@ -0,0 +1,28 @@ +package org.valkyrienskies.mod.mixin.feature.ai.goal.bees; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.llamalad7.mixinextras.sugar.Local; +import java.util.Comparator; +import java.util.stream.Stream; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.animal.Bee; +import net.minecraft.world.entity.animal.Bee.BeeLocateHiveGoal; +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.valkyrienskies.mod.common.VSGameUtilsKt; + +@Mixin(BeeLocateHiveGoal.class) +public class MixinLocateHiveGoal { + @Shadow + @Final + Bee field_20375; + + @WrapOperation(method = "findNearbyHivesWithSpace", at = @At(value = "INVOKE", target = "Ljava/util/stream/Stream;sorted(Ljava/util/Comparator;)Ljava/util/stream/Stream;")) + private Stream onComparingDouble(Stream instance, Comparator comparator, + Operation> original, @Local BlockPos blockPos) { + return original.call(instance, Comparator.comparingDouble( pos -> new BlockPos(VSGameUtilsKt.toWorldCoordinates(this.field_20375.level, (BlockPos) pos)).distSqr(blockPos))); + } +} diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/bees/MixinPollinateGoal.java b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/bees/MixinPollinateGoal.java new file mode 100644 index 00000000..20d97823 --- /dev/null +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/bees/MixinPollinateGoal.java @@ -0,0 +1,49 @@ +package org.valkyrienskies.mod.mixin.feature.ai.goal.bees; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import java.util.Comparator; +import java.util.Optional; +import java.util.function.Predicate; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.animal.Bee; +import net.minecraft.world.level.block.state.BlockState; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import org.valkyrienskies.mod.common.VSGameUtilsKt; + +@Mixin(Bee.BeePollinateGoal.class) +public abstract class MixinPollinateGoal { + @Shadow + @Final + Bee field_20377; + + @Shadow + protected abstract Optional findNearestBlock(Predicate predicate, double d); + + @Shadow + @Final + private Predicate VALID_POLLINATION_BLOCKS; + @Unique + private BlockPos modifiedBeePosition = field_20377.blockPosition(); + + @Inject(method = "findNearbyFlower", at = @At("HEAD"), cancellable = true) + private void preFindNearbyFlower(CallbackInfoReturnable> cir) { + Optional res = VSGameUtilsKt.transformToNearbyShipsAndWorld(this.field_20377.level, modifiedBeePosition.getX(), modifiedBeePosition.getY(), modifiedBeePosition.getZ(), 5.0).stream().flatMap(pos -> { + this.modifiedBeePosition = new BlockPos(pos.x, pos.y, pos.z); + return findNearestBlock(VALID_POLLINATION_BLOCKS, 5.0).stream(); + }).min(Comparator.comparingDouble(pos -> VSGameUtilsKt.squaredDistanceBetweenInclShips(this.field_20377.level, modifiedBeePosition.getX(), modifiedBeePosition.getY(), modifiedBeePosition.getZ(), pos.getX(), pos.getY(), pos.getZ()))); + modifiedBeePosition = field_20377.blockPosition(); + cir.setReturnValue(res); + } + + @WrapOperation(method = "findNearestBlock", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/animal/Bee;blockPosition()Lnet/minecraft/core/BlockPos;")) + private BlockPos onBlockPosition(Bee instance, Operation original) { + return modifiedBeePosition; + } +} diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/villagers/MixinAssignProfessionFromJobSite.java b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/villagers/MixinAssignProfessionFromJobSite.java new file mode 100644 index 00000000..9622b37e --- /dev/null +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/villagers/MixinAssignProfessionFromJobSite.java @@ -0,0 +1,23 @@ +package org.valkyrienskies.mod.mixin.feature.ai.goal.villagers; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.llamalad7.mixinextras.sugar.Local; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Position; +import net.minecraft.world.entity.ai.behavior.AssignProfessionFromJobSite; +import net.minecraft.world.entity.npc.Villager; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.valkyrienskies.mod.common.VSGameUtilsKt; + +@Mixin(AssignProfessionFromJobSite.class) +public class MixinAssignProfessionFromJobSite { + @WrapOperation(method = "checkExtraStartConditions(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/world/entity/npc/Villager;)Z", at = @At( + value = "INVOKE", + target = "Lnet/minecraft/core/BlockPos;closerToCenterThan(Lnet/minecraft/core/Position;D)Z")) + private boolean onCloserToCenterThan(BlockPos instance, Position position, double v, Operation original, @Local + Villager villager) { + return original.call(new BlockPos(VSGameUtilsKt.toWorldCoordinates(villager.level, instance)), position, v); + } +} diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/villagers/MixinGoToClosestVillage.java b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/villagers/MixinGoToClosestVillage.java new file mode 100644 index 00000000..daeef208 --- /dev/null +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/villagers/MixinGoToClosestVillage.java @@ -0,0 +1,37 @@ +package org.valkyrienskies.mod.mixin.feature.ai.goal.villagers; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.llamalad7.mixinextras.sugar.Local; +import net.minecraft.core.BlockPos; +import net.minecraft.core.SectionPos; +import net.minecraft.world.entity.ai.behavior.GoToClosestVillage; +import net.minecraft.world.entity.ai.village.poi.PoiManager; +import net.minecraft.world.entity.npc.Villager; +import net.minecraft.world.phys.Vec3; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.valkyrienskies.mod.common.VSGameUtilsKt; + +@Mixin(GoToClosestVillage.class) +public class MixinGoToClosestVillage { + @WrapOperation(method = "start(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/world/entity/npc/Villager;J)V", at = @At( + value = "INVOKE", target = "Lnet/minecraft/world/entity/ai/village/poi/PoiManager;sectionsToVillage(Lnet/minecraft/core/SectionPos;)I", ordinal = 0)) + private int onSectionsToVillageInitial(PoiManager poiManager, SectionPos sectionPos, Operation original, @Local Villager villager) { + int[] currentLevels = {original.call(poiManager, sectionPos)}; + VSGameUtilsKt.transformToNearbyShipsAndWorld(villager.level, villager.getX(), villager.getY(), villager.getZ(), 100, (double x, double y, double z) -> { + currentLevels[0] = Math.min(currentLevels[0], original.call(poiManager, SectionPos.of(new BlockPos(x, y, z)))); + }); + return currentLevels[0]; + } + + @WrapOperation(method = "start(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/world/entity/npc/Villager;J)V", at = @At( + value = "INVOKE", target = "Lnet/minecraft/world/entity/ai/village/poi/PoiManager;sectionsToVillage(Lnet/minecraft/core/SectionPos;)I", ordinal = 1)) + private int onSectionsToVillageVec3(PoiManager poiManager, SectionPos sectionPos, Operation original, @Local Villager villager, @Local(ordinal = 1) Vec3 vec32) { + int[] currentLevels = {original.call(poiManager, sectionPos)}; + VSGameUtilsKt.transformToNearbyShipsAndWorld(villager.level, vec32.x, vec32.y, vec32.z, 100, (double x, double y, double z) -> { + currentLevels[0] = Math.min(currentLevels[0], original.call(poiManager, SectionPos.of(new BlockPos(x, y, z)))); + }); + return currentLevels[0]; + } +} diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/villagers/MixinSetClosestHomeAsWalkTarget.java b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/villagers/MixinSetClosestHomeAsWalkTarget.java new file mode 100644 index 00000000..b438dad8 --- /dev/null +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/villagers/MixinSetClosestHomeAsWalkTarget.java @@ -0,0 +1,21 @@ +package org.valkyrienskies.mod.mixin.feature.ai.goal.villagers; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.llamalad7.mixinextras.sugar.Local; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Vec3i; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.behavior.SetClosestHomeAsWalkTarget; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.valkyrienskies.mod.common.VSGameUtilsKt; + +@Mixin(SetClosestHomeAsWalkTarget.class) +public class MixinSetClosestHomeAsWalkTarget { + @WrapOperation(method = "checkExtraStartConditions", at = @At(value = "INVOKE", target = "Lnet/minecraft/core/BlockPos;distSqr(Lnet/minecraft/core/Vec3i;)D")) + private double onDistSqr(BlockPos instance, Vec3i vec3i, Operation original, @Local LivingEntity livingEntity) { + return original.call(new BlockPos(VSGameUtilsKt.toWorldCoordinates(livingEntity.level, instance)), vec3i); + } +} diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/villagers/MixinWorkAtPoi.java b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/villagers/MixinWorkAtPoi.java new file mode 100644 index 00000000..0d3c1b5c --- /dev/null +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/goal/villagers/MixinWorkAtPoi.java @@ -0,0 +1,29 @@ +package org.valkyrienskies.mod.mixin.feature.ai.goal.villagers; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.llamalad7.mixinextras.sugar.Local; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Position; +import net.minecraft.world.entity.ai.behavior.WorkAtPoi; +import net.minecraft.world.entity.npc.Villager; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.valkyrienskies.mod.common.VSGameUtilsKt; + +@Mixin(WorkAtPoi.class) +public class MixinWorkAtPoi { + @WrapOperation(method = "canStillUse(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/world/entity/npc/Villager;J)Z", at = @At( + value = "INVOKE", target = "Lnet/minecraft/core/BlockPos;closerToCenterThan(Lnet/minecraft/core/Position;D)Z")) + private boolean onCloserToCenterThan(BlockPos instance, Position position, double v, Operation original, @Local + Villager villager) { + return original.call(new BlockPos(VSGameUtilsKt.toWorldCoordinates(villager.level, instance)), position, v); + } + @WrapOperation(method = "checkExtraStartConditions(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/world/entity/npc/Villager;)Z", at = @At( + value = "INVOKE", target = "Lnet/minecraft/core/BlockPos;closerToCenterThan(Lnet/minecraft/core/Position;D)Z" + )) + private boolean onCloserToCenterThan2(BlockPos instance, Position position, double v, Operation original, @Local + Villager villager) { + return original.call(new BlockPos(VSGameUtilsKt.toWorldCoordinates(villager.level, instance)), position, v); + } +} diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/node_evaluator/MixinPathFinder.java b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/node_evaluator/MixinPathFinder.java new file mode 100644 index 00000000..491db5a3 --- /dev/null +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/node_evaluator/MixinPathFinder.java @@ -0,0 +1,40 @@ +package org.valkyrienskies.mod.mixin.feature.ai.node_evaluator; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.llamalad7.mixinextras.sugar.Local; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collector; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.level.pathfinder.NodeEvaluator; +import net.minecraft.world.level.pathfinder.PathFinder; +import net.minecraft.world.level.pathfinder.Target; +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.valkyrienskies.mod.common.VSGameUtilsKt; + +@Mixin(PathFinder.class) +public class MixinPathFinder { + @Shadow + @Final + private NodeEvaluator nodeEvaluator; + + @WrapOperation( + method = "findPath(Lnet/minecraft/world/level/PathNavigationRegion;Lnet/minecraft/world/entity/Mob;Ljava/util/Set;FIF)Lnet/minecraft/world/level/pathfinder/Path;", + at = @At( + value = "INVOKE", + target = "Ljava/util/stream/Stream;collect(Ljava/util/stream/Collector;)Ljava/lang/Object;")) + private Object onCollectPath(Stream instance, Collector> arCollector, Operation> original, @Local + Mob mob) { + return original.call(instance, Collectors.toMap(blockPos -> { + BlockPos transformedPos = new BlockPos(VSGameUtilsKt.toWorldCoordinates(mob.level, blockPos)); + return this.nodeEvaluator.getGoal(transformedPos.getX(), transformedPos.getY(), transformedPos.getZ()); + }, Function.identity())); + } +} diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/node_evaluator/MixinPathNavigation.java b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/node_evaluator/MixinPathNavigation.java new file mode 100644 index 00000000..7eb678c1 --- /dev/null +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/node_evaluator/MixinPathNavigation.java @@ -0,0 +1,27 @@ +package org.valkyrienskies.mod.mixin.feature.ai.node_evaluator; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import net.minecraft.world.entity.ai.navigation.PathNavigation; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.pathfinder.Path; +import net.minecraft.world.phys.Vec3; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.valkyrienskies.mod.common.VSGameUtilsKt; + +@Mixin(PathNavigation.class) +public class MixinPathNavigation { + @Shadow + @Final + protected Level level; + + @WrapOperation(method = "moveTo(DDDD)Z", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/ai/navigation/PathNavigation;createPath(DDDI)Lnet/minecraft/world/level/pathfinder/Path;")) + private Path onMoveToCreatePath(PathNavigation instance, double d, double e, double f, int i, + Operation original) { + Vec3 transformedPos = VSGameUtilsKt.toWorldCoordinates(this.level, new Vec3(d, e, f)); + return original.call(instance, transformedPos.x, transformedPos.y, transformedPos.z, i); + } +} diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/node_evaluator/SwimNodeEvaluatorMixin.java b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/node_evaluator/SwimNodeEvaluatorMixin.java index aefad24f..9a624343 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/node_evaluator/SwimNodeEvaluatorMixin.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/node_evaluator/SwimNodeEvaluatorMixin.java @@ -42,7 +42,7 @@ private FluidState getFluidStateRedirectPathType(final BlockGetter instance, fin final double origZ = blockPos.getZ(); final Level finalLevel = level; VSGameUtilsKt.transformToNearbyShipsAndWorld(level, origX, - origY, origZ, 1, + origY, origZ, 2, (x, y, z) -> { final BlockPos groundPos = new BlockPos(x, y, z); final FluidState tempFluidState = getFluidState.call(finalLevel, groundPos); diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/node_evaluator/WalkNodeEvaluatorMixin.java b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/node_evaluator/WalkNodeEvaluatorMixin.java index 6d28810b..62e9d157 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/node_evaluator/WalkNodeEvaluatorMixin.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/node_evaluator/WalkNodeEvaluatorMixin.java @@ -43,7 +43,7 @@ private static void getBlockPathTypeForShips(final BlockGetter blockGetter, fina if (blockGetter instanceof PathNavigationRegion) { VSGameUtilsKt.transformToNearbyShipsAndWorld(((PathNavigationRegionAccessor) blockGetter).getLevel(), origX, - origY, origZ, 1, + origY, origZ, 2, (x, y, z) -> { final BlockPos groundPos = new BlockPos(x, y, z); BlockPathTypes pathType = diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/path_retargeting/MixinAirAndWaterRandomPos.java b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/path_retargeting/MixinAirAndWaterRandomPos.java new file mode 100644 index 00000000..9e863e6f --- /dev/null +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/path_retargeting/MixinAirAndWaterRandomPos.java @@ -0,0 +1,47 @@ +package org.valkyrienskies.mod.mixin.feature.ai.path_retargeting; + +import com.llamalad7.mixinextras.sugar.Local; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.PathfinderMob; +import net.minecraft.world.entity.ai.util.AirAndWaterRandomPos; +import net.minecraft.world.entity.ai.util.GoalUtils; +import net.minecraft.world.entity.ai.util.RandomPos; +import net.minecraft.world.phys.AABB; +import org.joml.Vector3d; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import org.valkyrienskies.core.api.ships.LoadedShip; +import org.valkyrienskies.mod.common.VSGameUtilsKt; +import org.valkyrienskies.mod.common.util.VectorConversionsMCKt; + +@Mixin(AirAndWaterRandomPos.class) +public class MixinAirAndWaterRandomPos { + @Inject(method = "generateRandomPos", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/ai/util/GoalUtils;isOutsideLimits(Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/entity/PathfinderMob;)Z"), + cancellable = true) + private static void preGenerateRandomPos(PathfinderMob pathfinderMob, int i, int j, int k, double d, double e, + double f, boolean bl, CallbackInfoReturnable cir, @Local(ordinal = 1) BlockPos blockPos2) { + if (pathfinderMob.level != null) { + if (blockPos2 == null) { + return; + } + AABB checker = new AABB(blockPos2); + Iterable ships = VSGameUtilsKt.getShipObjectWorld(pathfinderMob.level).getLoadedShips().getIntersecting( + VectorConversionsMCKt.toJOML(checker), VSGameUtilsKt.getDimensionId(pathfinderMob.level)); + if (ships.iterator().hasNext()) { + for (LoadedShip ship : ships) { + Vector3d posInShip = ship.getWorldToShip() + .transformPosition(VectorConversionsMCKt.toJOMLD(blockPos2), new Vector3d()); + BlockPos blockPosInShip = new BlockPos(VectorConversionsMCKt.toMinecraft(posInShip)); + if (!GoalUtils.isRestricted(bl, pathfinderMob, blockPosInShip) && + !GoalUtils.hasMalus(pathfinderMob, blockPos2 = RandomPos.moveUpOutOfSolid(blockPos2, pathfinderMob.level.getMaxBuildHeight(), arg2 -> GoalUtils.isSolid(pathfinderMob, arg2)))) { + cir.setReturnValue(blockPosInShip); + break; + } + } + } + } + } + +} diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/path_retargeting/MixinDefaultRandomPos.java b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/path_retargeting/MixinDefaultRandomPos.java new file mode 100644 index 00000000..00c463ae --- /dev/null +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/path_retargeting/MixinDefaultRandomPos.java @@ -0,0 +1,83 @@ +package org.valkyrienskies.mod.mixin.feature.ai.path_retargeting; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import java.util.function.Supplier; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.PathfinderMob; +import net.minecraft.world.entity.ai.util.DefaultRandomPos; +import net.minecraft.world.entity.ai.util.GoalUtils; +import net.minecraft.world.entity.ai.util.RandomPos; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; +import org.joml.Vector3d; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import org.valkyrienskies.core.api.ships.LoadedShip; +import org.valkyrienskies.mod.common.VSGameUtilsKt; +import org.valkyrienskies.mod.common.util.VectorConversionsMCKt; + +/** + * @author Tomato + * Should allow for mobs to pathfind on ships. + */ +@Mixin(DefaultRandomPos.class) +public class MixinDefaultRandomPos { + @Inject( + method = "generateRandomPosTowardDirection", + at = @At( + value = "HEAD" + ), + cancellable = true + ) + private static void postGenerateRandomPosTowardDirection(PathfinderMob pathfinderMob, int i, boolean bl, + BlockPos blockPos, final CallbackInfoReturnable cir) { + if (pathfinderMob.level != null) { + final BlockPos blockPos3 = RandomPos.generateRandomPosTowardDirection(pathfinderMob, i, pathfinderMob.getRandom(), blockPos); + if (blockPos3 == null) { + return; + } + AABB checker = new AABB(blockPos3); + Iterable ships = VSGameUtilsKt.getShipObjectWorld(pathfinderMob.level).getLoadedShips().getIntersecting(VectorConversionsMCKt.toJOML(checker), VSGameUtilsKt.getDimensionId(pathfinderMob.level)); + if (ships.iterator().hasNext()) { + for (LoadedShip ship : ships) { + Vector3d posInShip = ship.getWorldToShip() + .transformPosition(VectorConversionsMCKt.toJOMLD(blockPos3), new Vector3d()); + BlockPos blockPosInShip = new BlockPos(VectorConversionsMCKt.toMinecraft(posInShip)); + if (!GoalUtils.isRestricted(bl, pathfinderMob, blockPosInShip) && + !GoalUtils.isNotStable(pathfinderMob.getNavigation(), blockPosInShip) && + !GoalUtils.hasMalus(pathfinderMob, blockPosInShip)) { + cir.setReturnValue(blockPosInShip); + break; + } + } + } + } + } + + @WrapOperation(method = "getPosTowards", at = @At(value = "INVOKE", + target = "Lnet/minecraft/world/entity/ai/util/RandomPos;generateRandomPos(Lnet/minecraft/world/entity/PathfinderMob;Ljava/util/function/Supplier;)Lnet/minecraft/world/phys/Vec3;")) + private static Vec3 redirectGetPosInDirection(PathfinderMob arg, Supplier supplier, + Operation original) { + Vec3 result = original.call(arg, supplier); + if (result != null) { + return VSGameUtilsKt.toWorldCoordinates(arg.level, result); + } + return null; + } + + @WrapOperation(method = "getPos", at = @At(value = "INVOKE", + target = "Lnet/minecraft/world/entity/ai/util/RandomPos;generateRandomPos(Lnet/minecraft/world/entity/PathfinderMob;Ljava/util/function/Supplier;)Lnet/minecraft/world/phys/Vec3;")) + private static Vec3 redirectGetPos(PathfinderMob arg, Supplier supplier, + Operation original) { + Vec3 result = original.call(arg, supplier); + if (result != null) { + return VSGameUtilsKt.toWorldCoordinates(arg.level, result); + } + return null; + } + + +} diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/path_retargeting/MixinLandRandomPos.java b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/path_retargeting/MixinLandRandomPos.java new file mode 100644 index 00000000..bda84f82 --- /dev/null +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/ai/path_retargeting/MixinLandRandomPos.java @@ -0,0 +1,87 @@ +package org.valkyrienskies.mod.mixin.feature.ai.path_retargeting; + +import static net.minecraft.world.entity.ai.util.LandRandomPos.generateRandomPosTowardDirection; +import static net.minecraft.world.entity.ai.util.LandRandomPos.movePosUpOutOfSolid; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import java.util.function.Supplier; +import java.util.function.ToDoubleFunction; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.PathfinderMob; +import net.minecraft.world.entity.ai.util.GoalUtils; +import net.minecraft.world.entity.ai.util.LandRandomPos; +import net.minecraft.world.entity.ai.util.RandomPos; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; +import org.joml.Vector3d; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import org.valkyrienskies.core.api.ships.LoadedShip; +import org.valkyrienskies.mod.common.VSGameUtilsKt; +import org.valkyrienskies.mod.common.util.VectorConversionsMCKt; + +/** + * @author Tomato + * Should allow for mobs to pathfind on ships. + */ +@Mixin(LandRandomPos.class) +public class MixinLandRandomPos { + + @Inject( + method = "generateRandomPosTowardDirection", + at = @At( + value = "HEAD" + ), + cancellable = true + ) + private static void postGenerateRandomPosTowardDirection(PathfinderMob pathfinderMob, int i, boolean bl, + BlockPos blockPos, CallbackInfoReturnable cir) { + if (pathfinderMob.level != null) { + final BlockPos blockPos3 = RandomPos.generateRandomPosTowardDirection(pathfinderMob, i, pathfinderMob.getRandom(), blockPos); + AABB checker = new AABB(blockPos3); + Iterable ships = VSGameUtilsKt.getShipObjectWorld(pathfinderMob.level).getLoadedShips().getIntersecting(VectorConversionsMCKt.toJOML(checker), VSGameUtilsKt.getDimensionId(pathfinderMob.level)); + if (ships.iterator().hasNext()) { + for (LoadedShip ship : ships) { + Vector3d posInShip = ship.getWorldToShip() + .transformPosition(VectorConversionsMCKt.toJOMLD(blockPos3), new Vector3d()); + BlockPos blockPosInShip = new BlockPos(VectorConversionsMCKt.toMinecraft(posInShip)); + if (!GoalUtils.isRestricted(bl, pathfinderMob, blockPosInShip) && + !GoalUtils.isNotStable(pathfinderMob.getNavigation(), blockPosInShip) && + !GoalUtils.hasMalus(pathfinderMob, blockPosInShip)) { + cir.setReturnValue(blockPosInShip); + break; + } + } + } + } + } + + @WrapOperation(method = "getPosInDirection", at = @At(value = "INVOKE", + target = "Lnet/minecraft/world/entity/ai/util/RandomPos;generateRandomPos(Lnet/minecraft/world/entity/PathfinderMob;Ljava/util/function/Supplier;)Lnet/minecraft/world/phys/Vec3;")) + private static Vec3 redirectGetPosInDirection(PathfinderMob arg, Supplier supplier, + Operation original) { + Vec3 result = original.call(arg, supplier); + if (result != null) { + return VSGameUtilsKt.toWorldCoordinates(arg.level, result); + } + return null; + } + + @Inject(method = "getPos(Lnet/minecraft/world/entity/PathfinderMob;IILjava/util/function/ToDoubleFunction;)Lnet/minecraft/world/phys/Vec3;", at = @At("HEAD"), cancellable = true) + private static void preGetPos(PathfinderMob pathfinderMob, int i, int j, + ToDoubleFunction toDoubleFunction, CallbackInfoReturnable cir) { + boolean bl = GoalUtils.mobRestricted(pathfinderMob, i); + Vec3 randomPos = RandomPos.generateRandomPos(() -> { + BlockPos blockPos = RandomPos.generateRandomDirection(pathfinderMob.getRandom(), i, j); + BlockPos blockPos2 = generateRandomPosTowardDirection(pathfinderMob, i, bl, blockPos); + return blockPos2 == null ? null : movePosUpOutOfSolid(pathfinderMob, blockPos2); + }, toDoubleFunction); + + if (randomPos != null) { + cir.setReturnValue(VSGameUtilsKt.toWorldCoordinates(pathfinderMob.level, randomPos)); + } + } +} diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/entity_collision/MixinEntity.java b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/entity_collision/MixinEntity.java index f41afc4d..49aafd52 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/entity_collision/MixinEntity.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/entity_collision/MixinEntity.java @@ -8,6 +8,7 @@ import net.minecraft.core.particles.ParticleTypes; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityDimensions; +import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.MoverType; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.RenderShape; @@ -38,6 +39,27 @@ public abstract class MixinEntity implements IEntityDraggingInformationProvider // region collision + @Shadow + public abstract void setPos(Vec3 arg); + + @Shadow + public abstract boolean is(Entity arg); + + @Shadow + public abstract boolean isControlledByLocalInstance(); + + @Shadow + public abstract EntityType getType(); + + @Shadow + protected boolean firstTick; + + @Shadow + public abstract Iterable getIndirectPassengers(); + + @Shadow + public abstract BlockPos getOnPos(); + /** * Cancel movement of entities that are colliding with unloaded ships */ @@ -71,9 +93,21 @@ public Vec3 collideWithShips(final Entity entity, Vec3 movement, final Operation if (collisionResultWithWorld.distanceToSqr(movement) > 1e-12) { // We collided with the world? Set the dragging ship to null. final EntityDraggingInformation entityDraggingInformation = getDraggingInformation(); + if (entityDraggingInformation.getIgnoreNextGroundStand()) { + entityDraggingInformation.setIgnoreNextGroundStand(false); + return collisionResultWithWorld; + } entityDraggingInformation.setLastShipStoodOn(null); entityDraggingInformation.setAddedMovementLastTick(new Vector3d()); entityDraggingInformation.setAddedYawRotLastTick(0.0); + + for (Entity entityRiding : entity.getIndirectPassengers()) { + final EntityDraggingInformation passengerDraggingInformation = + ((IEntityDraggingInformationProvider) entityRiding).getDraggingInformation(); + passengerDraggingInformation.setLastShipStoodOn(null); + passengerDraggingInformation.setAddedMovementLastTick(new Vector3d()); + passengerDraggingInformation.setAddedYawRotLastTick(0.0); + } } return collisionResultWithWorld; @@ -214,6 +248,41 @@ private void preSpawnSprintParticle(final CallbackInfo ci) { } } } + + @Inject( + method = "baseTick", + at = @At("TAIL") + ) + private void postBaseTick(final CallbackInfo ci) { + final EntityDraggingInformation entityDraggingInformation = getDraggingInformation(); + + if (level != null && level.isClientSide && !firstTick) { + final Ship ship = VSGameUtilsKt.getShipObjectManagingPos(level, getOnPos()); + if (ship != null) { + entityDraggingInformation.setLastShipStoodOn(ship.getId()); + getIndirectPassengers().forEach(entity -> { + final EntityDraggingInformation passengerDraggingInformation = + ((IEntityDraggingInformationProvider) entity).getDraggingInformation(); + passengerDraggingInformation.setLastShipStoodOn(ship.getId()); + }); + } else { + if (!level.getBlockState(getOnPos()).isAir()) { + if (entityDraggingInformation.getIgnoreNextGroundStand()) { + entityDraggingInformation.setIgnoreNextGroundStand(false); + } else { + entityDraggingInformation.setLastShipStoodOn(null); + getIndirectPassengers().forEach(entity -> { + final EntityDraggingInformation passengerDraggingInformation = + ((IEntityDraggingInformationProvider) entity).getDraggingInformation(); + passengerDraggingInformation.setLastShipStoodOn(null); + }); + } + + } + } + } + } + // endregion // region shadow functions and fields diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/entity_collision/MixinLivingEntity.java b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/entity_collision/MixinLivingEntity.java new file mode 100644 index 00000000..07b0930c --- /dev/null +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/entity_collision/MixinLivingEntity.java @@ -0,0 +1,47 @@ +package org.valkyrienskies.mod.mixin.feature.entity_collision; + +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +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.valkyrienskies.core.api.ships.Ship; +import org.valkyrienskies.mod.common.VSGameUtilsKt; +import org.valkyrienskies.mod.common.util.EntityDraggingInformation; +import org.valkyrienskies.mod.common.util.EntityLerper; +import org.valkyrienskies.mod.common.util.IEntityDraggingInformationProvider; + +@Mixin(LivingEntity.class) +public abstract class MixinLivingEntity extends Entity { + + public MixinLivingEntity(EntityType entityType, Level level) { + super(entityType, level); + } + + /** + * @author Tomato + * @reason Adjusted lerping for entities being dragged by ships. + */ + @Inject( + method = "tick", + at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;aiStep()V", shift = At.Shift.BEFORE) + ) + private void preAiStep(CallbackInfo ci) { + // fake lerp movement gaming + if (this.level != null && this.level.isClientSide() && !firstTick) { + if (this.isControlledByLocalInstance() || (((Entity) this instanceof Player player) && player.isLocalPlayer())) return; + EntityDraggingInformation dragInfo = ((IEntityDraggingInformationProvider) this).getDraggingInformation(); + if (dragInfo != null && dragInfo.getLastShipStoodOn() != null) { + final Ship ship = VSGameUtilsKt.getShipObjectWorld(level).getAllShips().getById(dragInfo.getLastShipStoodOn()); + if (ship != null) { + EntityLerper.INSTANCE.lerpStep(dragInfo, ship, (LivingEntity) (Object) this); + EntityLerper.INSTANCE.lerpHeadStep(dragInfo, ship, (LivingEntity) (Object) this); + } + } + } + } +} diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/entity_movement_packets/MixinLocalPlayer.java b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/entity_movement_packets/MixinLocalPlayer.java new file mode 100644 index 00000000..6c0d1e81 --- /dev/null +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/entity_movement_packets/MixinLocalPlayer.java @@ -0,0 +1,99 @@ +package org.valkyrienskies.mod.mixin.feature.entity_movement_packets; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientPacketListener; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ServerboundMovePlayerPacket; +import net.minecraft.network.protocol.game.ServerboundMoveVehiclePacket; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.Level; +import org.joml.Vector3d; +import org.joml.Vector3dc; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.valkyrienskies.core.api.ships.ClientShip; +import org.valkyrienskies.mod.common.VSGameUtilsKt; +import org.valkyrienskies.mod.common.ValkyrienSkiesMod; +import org.valkyrienskies.mod.common.networking.PacketEntityShipMotion; +import org.valkyrienskies.mod.common.networking.PacketPlayerShipMotion; +import org.valkyrienskies.mod.common.util.EntityLerper; +import org.valkyrienskies.mod.common.util.IEntityDraggingInformationProvider; +import org.valkyrienskies.mod.common.util.VectorConversionsMCKt; + +@Mixin(LocalPlayer.class) +public abstract class MixinLocalPlayer extends Entity implements IEntityDraggingInformationProvider { + @Shadow + public abstract float getViewYRot(float f); + + public MixinLocalPlayer(EntityType entityType, Level level) { + super(entityType, level); + } + + /** + * @author Tomato + * @reason Intercept client -> server player position sending to send our own data. + */ + @WrapOperation(method = "sendPosition", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/ClientPacketListener;send(Lnet/minecraft/network/protocol/Packet;)V")) + private void wrapSendPosition(ClientPacketListener instance, Packet arg, Operation original) { + Packet realArg = arg; + if (getDraggingInformation().isEntityBeingDraggedByAShip()) { + if (getDraggingInformation().getLastShipStoodOn() != null) { + ClientShip ship = VSGameUtilsKt.getShipObjectWorld(Minecraft.getInstance().level).getAllShips().getById(getDraggingInformation().getLastShipStoodOn()); + if (ship != null) { + Vector3dc relativePosition = ship.getWorldToShip().transformPosition( + VectorConversionsMCKt.toJOML(getPosition(1f)), new Vector3d()); + + double relativeYaw = EntityLerper.INSTANCE.yawToShip(ship, getViewYRot(1f)); + + PacketPlayerShipMotion packet = new PacketPlayerShipMotion(ship.getId(), relativePosition.x(), relativePosition.y(), relativePosition.z(), relativeYaw); + ValkyrienSkiesMod.getVsCore().getSimplePacketNetworking().sendToServer(packet); + } + } + if (realArg instanceof ServerboundMovePlayerPacket movePacket) { + final boolean isOnGround = movePacket.isOnGround() || getDraggingInformation().isEntityBeingDraggedByAShip(); + if (movePacket.hasPosition() && movePacket.hasRotation()) { + //posrot + realArg = new ServerboundMovePlayerPacket.PosRot(movePacket.getX(0.0), movePacket.getY(0.0), movePacket.getZ(0.0), movePacket.getYRot(0.0f), movePacket.getXRot(0.0f), isOnGround); + } else if (movePacket.hasPosition()) { + //pos + realArg = new ServerboundMovePlayerPacket.Pos(movePacket.getX(0.0), movePacket.getY(0.0), movePacket.getZ(0.0), isOnGround); + } else if (movePacket.hasRotation()) { + //rot + realArg = new ServerboundMovePlayerPacket.Rot(movePacket.getYRot(0.0f), movePacket.getXRot(0.0f), isOnGround); + } else { + //status only + realArg = new ServerboundMovePlayerPacket.StatusOnly(isOnGround()); + } + } + } + original.call(instance, realArg); + } + + @WrapOperation(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/ClientPacketListener;send(Lnet/minecraft/network/protocol/Packet;)V")) + private void wrapSendVehiclePosition(ClientPacketListener instance, Packet arg, Operation original) { + if (arg instanceof ServerboundMoveVehiclePacket vehiclePacket && getRootVehicle() instanceof IEntityDraggingInformationProvider dragProvider) { + if (dragProvider.getDraggingInformation().isEntityBeingDraggedByAShip()) { + if (dragProvider.getDraggingInformation().getLastShipStoodOn() != null) { + ClientShip ship = VSGameUtilsKt.getShipObjectWorld(Minecraft.getInstance().level).getAllShips().getById( + getDraggingInformation().getLastShipStoodOn()); + if (ship != null) { + Vector3dc relativePosition = ship.getWorldToShip().transformPosition( + VectorConversionsMCKt.toJOML(getRootVehicle().getPosition(1f)), new Vector3d()); + + double relativeYaw = EntityLerper.INSTANCE.yawToShip(ship, getRootVehicle().getYRot()); + + PacketEntityShipMotion packet = new PacketEntityShipMotion(getRootVehicle().getId(), ship.getId(), relativePosition.x(), relativePosition.y(), relativePosition.z(), 0.0, 0.0, 0.0, relativeYaw, 0.0); + ValkyrienSkiesMod.getVsCore().getSimplePacketNetworking().sendToServer(packet); + } + } + } + } + original.call(instance, arg); + } + +} diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/entity_movement_packets/MixinServerEntity.java b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/entity_movement_packets/MixinServerEntity.java new file mode 100644 index 00000000..9abd36a7 --- /dev/null +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/entity_movement_packets/MixinServerEntity.java @@ -0,0 +1,91 @@ +package org.valkyrienskies.mod.mixin.feature.entity_movement_packets; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import java.util.function.Consumer; +import net.minecraft.network.protocol.game.ClientboundMoveEntityPacket; +import net.minecraft.network.protocol.game.ClientboundRotateHeadPacket; +import net.minecraft.network.protocol.game.ClientboundSetEntityMotionPacket; +import net.minecraft.network.protocol.game.ClientboundTeleportEntityPacket; +import net.minecraft.server.level.ServerEntity; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.Entity; +import org.joml.Vector3d; +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.valkyrienskies.core.api.ships.ServerShip; +import org.valkyrienskies.core.impl.networking.simple.SimplePacket; +import org.valkyrienskies.mod.common.VSGameUtilsKt; +import org.valkyrienskies.mod.common.ValkyrienSkiesMod; +import org.valkyrienskies.mod.common.networking.PacketEntityShipMotion; +import org.valkyrienskies.mod.common.networking.PacketMobShipRotation; +import org.valkyrienskies.mod.common.util.EntityDraggingInformation; +import org.valkyrienskies.mod.common.util.EntityLerper; +import org.valkyrienskies.mod.common.util.IEntityDraggingInformationProvider; + +@Mixin(ServerEntity.class) +public class MixinServerEntity { + + @Shadow + @Final + private Entity entity; + + @Shadow + @Final + private ServerLevel level; + + /** + * @author Tomato + * @reason Intercept entity motion packets to send our own data, then cancel the original packet. + */ + @WrapOperation( + method = "sendChanges", + at = @At( + value = "INVOKE", + target = "Ljava/util/function/Consumer;accept(Ljava/lang/Object;)V") + ) + private void wrapBroadcastAccept(Consumer instance, Object t, Operation original) { + if (t instanceof ClientboundSetEntityMotionPacket || t instanceof ClientboundTeleportEntityPacket || t instanceof ClientboundMoveEntityPacket || t instanceof ClientboundRotateHeadPacket) { + if (entity instanceof IEntityDraggingInformationProvider draggedEntity) { + EntityDraggingInformation dragInfo = draggedEntity.getDraggingInformation(); + + if (dragInfo != null && dragInfo.isEntityBeingDraggedByAShip() && dragInfo.getLastShipStoodOn() != null) { + ServerShip ship = VSGameUtilsKt.getShipObjectWorld(level).getAllShips().getById(dragInfo.getLastShipStoodOn()); + if (ship != null) { + + Vector3d position = ship.getWorldToShip().transformPosition(new Vector3d(entity.getX(), entity.getY(), entity.getZ())); + if (dragInfo.getServerRelativePlayerPosition() != null) { + position = new Vector3d(dragInfo.getServerRelativePlayerPosition()); + } + Vector3d motion = ship.getTransform().transformDirectionNoScalingFromWorldToShip(new Vector3d(entity.getDeltaMovement().x(), entity.getDeltaMovement().y(), entity.getDeltaMovement().z()), new Vector3d()); + + double yaw; + if (!(t instanceof ClientboundRotateHeadPacket)) { + yaw = EntityLerper.INSTANCE.yawToShip(ship, entity.getYRot()); + } else { + yaw = EntityLerper.INSTANCE.yawToShip(ship, entity.getYHeadRot()); + } + double pitch = entity.getXRot(); + SimplePacket vsPacket; + if (!(t instanceof ClientboundRotateHeadPacket)) { + vsPacket = new PacketEntityShipMotion(entity.getId(), ship.getId(), + position.x, position.y, position.z, + motion.x, motion.y, motion.z, + yaw, pitch); + } else { + vsPacket = new PacketMobShipRotation(entity.getId(), ship.getId(), yaw, pitch); + } + + ValkyrienSkiesMod.getVsCore().getSimplePacketNetworking().sendToAllClients(vsPacket); + return; + } + + + } + } + } + original.call(instance, t); + } +} diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/poi/FEATURE.md b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/poi/FEATURE.md new file mode 100644 index 00000000..3928d45a --- /dev/null +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/poi/FEATURE.md @@ -0,0 +1 @@ +Allows Points of Interest (portals, villager profession stations, beehives, lightning rods) to function on ships. diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/poi/MixinPOIManager.java b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/poi/MixinPOIManager.java new file mode 100644 index 00000000..146597a6 --- /dev/null +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/poi/MixinPOIManager.java @@ -0,0 +1,85 @@ +package org.valkyrienskies.mod.mixin.feature.poi; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.llamalad7.mixinextras.sugar.Local; +import java.util.function.Predicate; +import java.util.stream.Stream; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.ai.village.poi.PoiManager; +import net.minecraft.world.entity.ai.village.poi.PoiManager.Occupancy; +import net.minecraft.world.entity.ai.village.poi.PoiRecord; +import net.minecraft.world.entity.ai.village.poi.PoiType; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; +import org.joml.Vector4ic; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.valkyrienskies.core.api.ships.LoadedServerShip; +import org.valkyrienskies.mod.common.VSGameUtilsKt; +import org.valkyrienskies.mod.common.util.VectorConversionsMCKt; +import org.valkyrienskies.mod.common.world.POIChunkSearcher; +import org.valkyrienskies.mod.mixinducks.world.OfLevel; + +/** + * @author Tomato + * This atrocious mess of a mixin allows POIs in ship space to be detected, however it requires further mixins to Goals for the ship space positions to be correctly used, from what I can understand. + */ +@Mixin(PoiManager.class) +public abstract class MixinPOIManager implements OfLevel { + + @Unique + private Level valkyrienskies$sLevel; + + @Shadow + public abstract Stream getInChunk(Predicate predicate, ChunkPos chunkPos, Occupancy occupancy); + + /** + * @author Tomato + * @reason Allows for ships to be considered as a valid POI, also this method sucks anyway. + */ + @Overwrite + public Stream getInSquare(Predicate predicate, BlockPos blockPos, int i, Occupancy occupancy) { + int j = Math.floorDiv(i, 16) + 1; + final AABB aABB = new AABB(blockPos).inflate((double) i + 1); + Stream chunkRange = ChunkPos.rangeClosed(new ChunkPos(blockPos), j); + if (this.valkyrienskies$sLevel instanceof ServerLevel sLevel) { + for (LoadedServerShip ship : VSGameUtilsKt.getShipObjectWorld(sLevel).getLoadedShips().getIntersecting( + VectorConversionsMCKt.toJOML(aABB), VSGameUtilsKt.getDimensionId(sLevel))) { + Vector4ic chunkRangeBounds = POIChunkSearcher.INSTANCE.shipChunkBounds(ship.getActiveChunksSet()); + if (chunkRangeBounds == null) { + continue; + } + chunkRange = Stream.concat(chunkRange, ChunkPos.rangeClosed(new ChunkPos(chunkRangeBounds.x(), chunkRangeBounds.y()), + new ChunkPos(chunkRangeBounds.z(), chunkRangeBounds.w()))); + } + } + return chunkRange.flatMap((chunkPos) -> this.getInChunk(predicate, chunkPos, occupancy)).filter((poiRecord) -> { + BlockPos blockPos2 = poiRecord.getPos(); + Vec3 vecPos = VSGameUtilsKt.toWorldCoordinates(valkyrienskies$sLevel, new Vec3(blockPos2.getX(), blockPos2.getY(), blockPos2.getZ())); + return Math.abs(vecPos.x() - blockPos.getX()) <= i && Math.abs(vecPos.z() - blockPos.getZ()) <= i; + }); + } + + @WrapOperation(method = "getInRange", at = @At(value = "INVOKE", target = "Ljava/util/stream/Stream;filter(Ljava/util/function/Predicate;)Ljava/util/stream/Stream;")) + private Stream onGetInRange(Stream instance, Predicate predicate, Operation> original, @Local(argsOnly = true) BlockPos arg, @Local(argsOnly = true) int i) { + final int k = i * i; + return instance.filter(poiRecord -> POIChunkSearcher.INSTANCE.getWorldPos(poiRecord, this.valkyrienskies$sLevel).distanceToSqr(Vec3.atLowerCornerOf(arg)) <= (double)k); + } + + @Override + public Level getLevel() { + return valkyrienskies$sLevel; + } + + @Override + public void setLevel(Level level) { + valkyrienskies$sLevel = level; + } +} diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/screen_distance_check/MixinScreenHandler.java b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/screen_distance_check/MixinScreenHandler.java index c8f5a8e4..8a7e524e 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/screen_distance_check/MixinScreenHandler.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/screen_distance_check/MixinScreenHandler.java @@ -2,10 +2,13 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; +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; import org.valkyrienskies.mod.common.VSGameUtilsKt; +import org.valkyrienskies.mod.common.util.EntityDragger; +import org.valkyrienskies.mod.common.util.IEntityDraggingInformationProvider; @Mixin(AbstractContainerMenu.class) public class MixinScreenHandler { @@ -22,7 +25,8 @@ public class MixinScreenHandler { ) private static double includeShipsInDistanceCheck( final Player receiver, final double x, final double y, final double z) { - return VSGameUtilsKt.squaredDistanceToInclShips(receiver, x, y, z); + final Vec3 eye = EntityDragger.INSTANCE.serversideEyePosition(receiver); + return VSGameUtilsKt.squaredDistanceToInclShips(receiver, eye.x, eye.y, eye.z); } } diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/wave_spawning/FEATURE.md b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/wave_spawning/FEATURE.md new file mode 100644 index 00000000..1b88c36b --- /dev/null +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/wave_spawning/FEATURE.md @@ -0,0 +1 @@ +Allows Raids and Zombie Sieges to spawn surrounding ships that count as villages. diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/wave_spawning/MixinRaid.java b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/wave_spawning/MixinRaid.java new file mode 100644 index 00000000..f14d11f2 --- /dev/null +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/wave_spawning/MixinRaid.java @@ -0,0 +1,51 @@ +package org.valkyrienskies.mod.mixin.feature.wave_spawning; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.raid.Raid; +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.valkyrienskies.mod.common.VSGameUtilsKt; + +@Mixin(Raid.class) +public abstract class MixinRaid { + @Shadow + public abstract BlockPos getCenter(); + + @Shadow + protected abstract void setCenter(BlockPos blockPos); + + @Shadow + @Final + private ServerLevel level; + + @WrapOperation(method = "getValidSpawnPos", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/raid/Raid;findRandomSpawnPos(II)Lnet/minecraft/core/BlockPos;")) + private BlockPos onFindRandomSpawnPos(Raid instance, int i, int j, Operation original) { + BlockPos originalCenter = this.getCenter(); + this.setCenter(new BlockPos(VSGameUtilsKt.toWorldCoordinates(this.level, originalCenter))); + BlockPos result = original.call(instance, i, j); + this.setCenter(originalCenter); + if (result != null) { + return result; + } else { + return original.call(instance, i, j); + } + } + + @WrapOperation(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/raid/Raid;findRandomSpawnPos(II)Lnet/minecraft/core/BlockPos;")) + private BlockPos onFindRandomSpawnPos2(Raid instance, int i, int j, Operation original) { + BlockPos originalCenter = this.getCenter(); + this.setCenter(new BlockPos(VSGameUtilsKt.toWorldCoordinates(this.level, originalCenter))); + BlockPos result = original.call(instance, i, j); + this.setCenter(originalCenter); + if (result != null) { + return result; + } else { + return original.call(instance, i, j); + } + } +} diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/wave_spawning/MixinRaids.java b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/wave_spawning/MixinRaids.java new file mode 100644 index 00000000..b0411192 --- /dev/null +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/wave_spawning/MixinRaids.java @@ -0,0 +1,31 @@ +package org.valkyrienskies.mod.mixin.feature.wave_spawning; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import java.util.Map; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.raid.Raid; +import net.minecraft.world.entity.raid.Raids; +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.valkyrienskies.mod.common.VSGameUtilsKt; + +@Mixin(Raids.class) +public class MixinRaids { + @Shadow + @Final + private ServerLevel level; + + @Shadow + @Final + private Map raidMap; + + @WrapOperation(method = "getNearbyRaid", at = @At(value = "INVOKE", + target = "Lnet/minecraft/world/entity/raid/Raid;getCenter()Lnet/minecraft/core/BlockPos;")) + private BlockPos onGetNearbyRaid(Raid instance, Operation original) { + return new BlockPos(VSGameUtilsKt.toWorldCoordinates(this.level, original.call(instance))); + } +} diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/wave_spawning/MixinVillageSiege.java b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/wave_spawning/MixinVillageSiege.java new file mode 100644 index 00000000..2c50de35 --- /dev/null +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/wave_spawning/MixinVillageSiege.java @@ -0,0 +1,36 @@ +package org.valkyrienskies.mod.mixin.feature.wave_spawning; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.ai.village.VillageSiege; +import net.minecraft.world.phys.Vec3; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.valkyrienskies.mod.common.VSGameUtilsKt; + +@Mixin(VillageSiege.class) +public class MixinVillageSiege { + @WrapOperation(method = "tryToSetupSiege", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/ai/village/VillageSiege;findRandomSpawnPos(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/core/BlockPos;)Lnet/minecraft/world/phys/Vec3;")) + private Vec3 onFindRandomSpawnPos(VillageSiege instance, ServerLevel k, BlockPos l, Operation original) { + BlockPos transformedCenter = new BlockPos(VSGameUtilsKt.toWorldCoordinates(k, l)); + Vec3 result = original.call(instance, k, transformedCenter); + if (result != null) { + return result; + } else { + return original.call(instance, k, l); + } + } + + @WrapOperation(method = "trySpawn", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/ai/village/VillageSiege;findRandomSpawnPos(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/core/BlockPos;)Lnet/minecraft/world/phys/Vec3;")) + private Vec3 onFindRandomSpawnPos2(VillageSiege instance, ServerLevel k, BlockPos l, Operation original) { + BlockPos transformedCenter = new BlockPos(VSGameUtilsKt.toWorldCoordinates(k, l)); + Vec3 result = original.call(instance, k, transformedCenter); + if (result != null) { + return result; + } else { + return original.call(instance, k, l); + } + } +} diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/reachentityattributes/MixinReachEntityAttributes.java b/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/reachentityattributes/MixinReachEntityAttributes.java index d6f48d90..85dde7b7 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/reachentityattributes/MixinReachEntityAttributes.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/reachentityattributes/MixinReachEntityAttributes.java @@ -7,11 +7,13 @@ import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec3; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; import org.spongepowered.asm.mixin.Pseudo; import org.spongepowered.asm.mixin.Shadow; import org.valkyrienskies.mod.common.VSGameUtilsKt; +import org.valkyrienskies.mod.common.util.EntityDragger; @Pseudo @Mixin(ReachEntityAttributes.class) @@ -24,6 +26,8 @@ public static double getReachDistance(final LivingEntity entity, final double ba /** * @author Triode * @reason Fix getting players within reach of ship blocks + * Additionally, we use the custom serversideEyePosition method from EntityDragger because otherwise we'd be invasively changing + * the eye position of the player, which many mods use and would absolutely undoubtedly break things. */ @Overwrite public static List getPlayersWithinReach(final Predicate viewerPredicate, final Level world, final int x, final int y, final int z, final double baseReachDistance) { @@ -31,7 +35,8 @@ public static List getPlayersWithinReach(final Predicate viewerP for (final Player player : world.players()) { if (viewerPredicate.test(player)) { final var reach = getReachDistance(player, baseReachDistance); - if (VSGameUtilsKt.squaredDistanceBetweenInclShips(world, x + 0.5, y + 0.5, z + 0.5, player.getX(), player.getEyeY(), player.getZ()) <= (reach * reach)) { + final Vec3 eye = EntityDragger.INSTANCE.serversideEyePosition(player); + if (VSGameUtilsKt.squaredDistanceBetweenInclShips(world, x + 0.5, y + 0.5, z + 0.5, eye.x, eye.y, eye.z) <= (reach * reach)) { playersWithinReach.add(player); } } diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/server/MixinMinecraftServer.java b/common/src/main/java/org/valkyrienskies/mod/mixin/server/MixinMinecraftServer.java index e7f6c3e4..99877918 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/server/MixinMinecraftServer.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/server/MixinMinecraftServer.java @@ -202,6 +202,9 @@ private void preTick(final CallbackInfo ci) { // endregion vsPipeline.preTickGame(); + for (final ServerLevel level : getAllLevels()) { + //EntityDragger.INSTANCE.dragEntitiesWithShips(level.getAllEntities(), true); + } } /** @@ -233,7 +236,7 @@ private void postTick(final CallbackInfo ci) { vsPipeline.postTickGame(); // Only drag entities after we have updated the ship positions for (final ServerLevel level : getAllLevels()) { - EntityDragger.INSTANCE.dragEntitiesWithShips(level.getAllEntities()); + EntityDragger.INSTANCE.dragEntitiesWithShips(level.getAllEntities(), false); if (LoadedMods.getWeather2()) Weather2Compat.INSTANCE.tick(level); } diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/server/network/MixinServerGamePacketListenerImpl.java b/common/src/main/java/org/valkyrienskies/mod/mixin/server/network/MixinServerGamePacketListenerImpl.java index b7c29d64..0e82ecbb 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/server/network/MixinServerGamePacketListenerImpl.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/server/network/MixinServerGamePacketListenerImpl.java @@ -9,6 +9,7 @@ import net.minecraft.network.chat.Component; import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.ClientboundPlayerPositionPacket; +import net.minecraft.network.protocol.game.ServerboundMovePlayerPacket; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; @@ -17,6 +18,7 @@ import net.minecraft.world.level.ChunkPos; import net.minecraft.world.phys.Vec3; import org.joml.Vector3d; +import org.slf4j.Logger; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -28,6 +30,7 @@ import org.valkyrienskies.mod.common.VSGameUtilsKt; import org.valkyrienskies.mod.common.config.VSGameConfig; import org.valkyrienskies.mod.common.util.VectorConversionsMCKt; +import org.valkyrienskies.mod.mixinducks.world.entity.PlayerDuck; @Mixin(ServerGamePacketListenerImpl.class) public abstract class MixinServerGamePacketListenerImpl { @@ -54,6 +57,10 @@ public abstract class MixinServerGamePacketListenerImpl { @Final private MinecraftServer server; + @Shadow + @Final + private static Logger LOGGER; + @ModifyExpressionValue( at = @At(value = "FIELD", target = "Lnet/minecraft/server/network/ServerGamePacketListenerImpl;aboveGroundTickCount:I", ordinal = 0), @@ -177,4 +184,18 @@ void onDisconnect(final Component reason, final CallbackInfo ci) { } } + @Inject( + method = "handleMovePlayer", + at = @At("TAIL") + ) + void afterHandleMovePlayer(ServerboundMovePlayerPacket serverboundMovePlayerPacket, CallbackInfo ci) { + if (this.player instanceof PlayerDuck duck) { + duck.vs_setHandledMovePacket(true); + if (duck.vs_getQueuedPositionUpdate() != null) { + this.player.setPos(duck.vs_getQueuedPositionUpdate()); + duck.vs_setQueuedPositionUpdate(null); + } + } + } + } diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/server/world/MixinChunkMap.java b/common/src/main/java/org/valkyrienskies/mod/mixin/server/world/MixinChunkMap.java index 590b3c56..316fc4c6 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/server/world/MixinChunkMap.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/server/world/MixinChunkMap.java @@ -1,14 +1,20 @@ package org.valkyrienskies.mod.mixin.server.world; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.llamalad7.mixinextras.sugar.Local; import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; import java.util.function.Supplier; +import net.minecraft.core.BlockPos; import net.minecraft.server.level.ChunkMap; +import net.minecraft.server.level.ChunkMap.DistanceManager; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.Entity; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.storage.DimensionDataStorage; import org.spongepowered.asm.mixin.Final; @@ -102,4 +108,13 @@ private void postGetPlayersWatchingChunk(final ChunkPos chunkPos, final boolean cir.setReturnValue(new ArrayList<>(watchingPlayers)); } + @WrapOperation(method = "anyPlayerCloseEnoughForSpawning", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/level/ChunkMap$DistanceManager;hasPlayersNearby(J)Z")) + private boolean onHasPlayersNearby(DistanceManager instance, long l, Operation original, @Local(argsOnly = true) ChunkPos arg) { + return original.call(instance, new ChunkPos(new BlockPos(VSGameUtilsKt.toWorldCoordinates(level, arg.getMiddleBlockPosition(63)))).toLong()); + } + + @WrapOperation(method = "playerIsCloseEnoughForSpawning", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/level/ChunkMap;euclideanDistanceSquared(Lnet/minecraft/world/level/ChunkPos;Lnet/minecraft/world/entity/Entity;)D")) + private double onEuclideanDistanceSquared(ChunkPos d0, Entity d1, Operation original) { + return original.call(new ChunkPos(new BlockPos(VSGameUtilsKt.toWorldCoordinates(level, d0.getMiddleBlockPosition(63)))), d1); + } } diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/server/world/MixinServerLevel.java b/common/src/main/java/org/valkyrienskies/mod/mixin/server/world/MixinServerLevel.java index 0f48547f..3c60e483 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/server/world/MixinServerLevel.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/server/world/MixinServerLevel.java @@ -18,12 +18,14 @@ import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Holder; import net.minecraft.core.Position; +import net.minecraft.core.SectionPos; import net.minecraft.resources.ResourceKey; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ChunkHolder; import net.minecraft.server.level.ServerChunkCache; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.progress.ChunkProgressListener; +import net.minecraft.world.entity.ai.village.poi.PoiManager; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkAccess; @@ -44,6 +46,7 @@ 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; import org.valkyrienskies.core.api.ships.LoadedServerShip; import org.valkyrienskies.core.api.ships.Wing; import org.valkyrienskies.core.api.ships.WingManager; @@ -57,6 +60,7 @@ import org.valkyrienskies.mod.common.util.VectorConversionsMCKt; import org.valkyrienskies.mod.mixin.accessors.server.level.ChunkMapAccessor; import org.valkyrienskies.mod.mixin.accessors.server.level.DistanceManagerAccessor; +import org.valkyrienskies.mod.mixinducks.world.OfLevel; import org.valkyrienskies.mod.util.McMathUtilKt; @Mixin(ServerLevel.class) @@ -69,6 +73,9 @@ public abstract class MixinServerLevel implements IShipObjectWorldServerProvider @NotNull public abstract MinecraftServer getServer(); + @Shadow + public abstract int sectionsToVillage(SectionPos arg); + // Map from ChunkPos to the list of voxel chunks that chunk owns @Unique private final Map> vs$knownChunks = new HashMap<>(); @@ -105,6 +112,26 @@ void onInit(final MinecraftServer minecraftServer, final Executor executor, } } + @Inject(method = "getPoiManager", at = @At("HEAD")) + void onGetPoiManager(CallbackInfoReturnable cir) { + if (chunkSource.getPoiManager() instanceof final OfLevel levelProvider) { + levelProvider.setLevel((ServerLevel) (Object) this); + } + } + + @Inject(method = "isCloseToVillage", at = @At("HEAD"), cancellable = true) + void preIsCloseToVillage(BlockPos blockPos, int i, CallbackInfoReturnable cir) { + if (i <= 6) { + final boolean[] found = {false}; + VSGameUtilsKt.transformToNearbyShipsAndWorld(ServerLevel.class.cast(this), blockPos.getX(), blockPos.getY(), blockPos.getZ(), i * 100.0, (double x, double y, double z) -> { + found[0] = found[0] || this.sectionsToVillage(SectionPos.of(new BlockPos(x, y, z))) <= i; + }); + if (found[0]) { + cir.setReturnValue(true); + } + } + } + /** * Include ships in particle distance check. Seems to only be used by /particle */ diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/world/entity/MixinPlayer.java b/common/src/main/java/org/valkyrienskies/mod/mixin/world/entity/MixinPlayer.java index d0256992..4436ec46 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/world/entity/MixinPlayer.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/world/entity/MixinPlayer.java @@ -1,6 +1,7 @@ package org.valkyrienskies.mod.mixin.world.entity; import net.minecraft.world.entity.player.Player; +import net.minecraft.world.phys.Vec3; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; import org.valkyrienskies.mod.common.util.MinecraftPlayer; @@ -12,8 +13,34 @@ public class MixinPlayer implements PlayerDuck { @Unique private final MinecraftPlayer vsPlayer = new MinecraftPlayer(Player.class.cast(this)); + @Unique + private Vec3 queuedPositionUpdate = null; + + @Unique + private boolean handledMovePacket = false; + @Override public MinecraftPlayer vs_getPlayer() { return vsPlayer; } + + @Override + public Vec3 vs_getQueuedPositionUpdate() { + return this.queuedPositionUpdate; + } + + @Override + public void vs_setQueuedPositionUpdate(Vec3 queuedPositionUpdate) { + this.queuedPositionUpdate = queuedPositionUpdate; + } + + @Override + public boolean vs_handledMovePacket() { + return this.handledMovePacket; + } + + @Override + public void vs_setHandledMovePacket(boolean handledMovePacket) { + this.handledMovePacket = handledMovePacket; + } } diff --git a/common/src/main/java/org/valkyrienskies/mod/mixinducks/world/entity/PlayerDuck.java b/common/src/main/java/org/valkyrienskies/mod/mixinducks/world/entity/PlayerDuck.java index ce500ba8..cc48f61b 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixinducks/world/entity/PlayerDuck.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixinducks/world/entity/PlayerDuck.java @@ -1,9 +1,15 @@ package org.valkyrienskies.mod.mixinducks.world.entity; +import net.minecraft.world.phys.Vec3; import org.valkyrienskies.mod.common.util.MinecraftPlayer; public interface PlayerDuck { MinecraftPlayer vs_getPlayer(); + Vec3 vs_getQueuedPositionUpdate(); + void vs_setQueuedPositionUpdate(Vec3 queuedPositionUpdate); + + boolean vs_handledMovePacket(); + void vs_setHandledMovePacket(boolean handledMovePacket); } diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/PlayerUtil.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/PlayerUtil.kt index a246a2bb..4f4df009 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/PlayerUtil.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/PlayerUtil.kt @@ -6,6 +6,7 @@ import net.minecraft.world.entity.player.Player import net.minecraft.world.level.Level import net.minecraft.world.phys.Vec3 import org.valkyrienskies.core.api.ships.LoadedShip +import org.valkyrienskies.mod.common.util.EntityDragger.serversideEyeRotationOrDefault import org.valkyrienskies.mod.common.util.toJOML import org.valkyrienskies.mod.common.util.toMinecraft import org.valkyrienskies.mod.mixin.accessors.entity.EntityAccessor @@ -38,8 +39,9 @@ object PlayerUtil { val yaw = -atan2(direction.x, direction.z) val pitch = -atan2(direction.y, sqrt((direction.x * direction.x) + (direction.z * direction.z))) - player.yRot = (yaw * (180 / Math.PI)).toFloat() + player.yRot = player.serversideEyeRotationOrDefault(yaw * (180 / Math.PI)).toFloat() player.yHeadRot = player.yRot + player.xRot = (pitch * (180 / Math.PI)).toFloat() (player as EntityAccessor).setPosNoUpdates(position.toMinecraft()) } diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/VSGameUtils.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/VSGameUtils.kt index 6c1f081e..03fd56c4 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/VSGameUtils.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/VSGameUtils.kt @@ -10,6 +10,7 @@ import net.minecraft.resources.ResourceLocation import net.minecraft.server.MinecraftServer import net.minecraft.server.level.ServerChunkCache import net.minecraft.server.level.ServerLevel +import net.minecraft.server.level.ServerPlayer import net.minecraft.util.thread.BlockableEventLoop import net.minecraft.world.entity.Entity import net.minecraft.world.entity.player.Player @@ -41,6 +42,8 @@ import org.valkyrienskies.core.util.expand import org.valkyrienskies.mod.common.entity.ShipMountedToData import org.valkyrienskies.mod.common.entity.ShipMountedToDataProvider import org.valkyrienskies.mod.common.util.DimensionIdProvider +import org.valkyrienskies.mod.common.util.EntityDragger.serversideEyePosition +import org.valkyrienskies.mod.common.util.IEntityDraggingInformationProvider import org.valkyrienskies.mod.common.util.MinecraftPlayer import org.valkyrienskies.mod.common.util.set import org.valkyrienskies.mod.common.util.toJOML @@ -118,8 +121,11 @@ val Player.playerWrapper get() = (this as PlayerDuck).vs_getPlayer() /** * Like [Entity.squaredDistanceTo] except the destination is transformed into world coordinates if it is a ship */ -fun Entity.squaredDistanceToInclShips(x: Double, y: Double, z: Double) = - level.squaredDistanceBetweenInclShips(x, y, z, this.x, this.y, this.z) +fun Entity.squaredDistanceToInclShips(x: Double, y: Double, z: Double): Double { + val eyePos = if (getShipMountedTo(this) != null) getShipMountedToData(this, null)!!.mountPosInShip.toMinecraft() else this.serversideEyePosition() + return level.squaredDistanceBetweenInclShips(x, y, z, eyePos.x, eyePos.y - 1.0, eyePos.z) +} + /** * Calculates the squared distance between to points. @@ -348,6 +354,10 @@ fun Ship.toWorldCoordinates(pos: BlockPos): Vector3d = fun Ship.toWorldCoordinates(pos: Vec3): Vec3 = shipToWorld.transformPosition(pos.toJOML()).toMinecraft() +fun Level?.toWorldCoordinates(pos: BlockPos): Vec3 { + return this?.getShipManagingPos(pos)?.toWorldCoordinates(pos)?.toMinecraft() ?: pos.toJOMLD().toMinecraft() +} + fun Level?.toWorldCoordinates(pos: Vec3): Vec3 { return this?.getShipManagingPos(pos)?.toWorldCoordinates(pos) ?: pos } diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/config/VSGameConfig.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/config/VSGameConfig.kt index 33a626b0..d4009b81 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/config/VSGameConfig.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/config/VSGameConfig.kt @@ -135,7 +135,7 @@ object VSGameConfig { var allowMobSpawns = true @JsonSchema( - description = "Allow rudimentary pathfinding on ships" + description = "Allow pathfinding on ships" ) var aiOnShips = true diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/networking/PacketEntityShipMotion.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/networking/PacketEntityShipMotion.kt new file mode 100644 index 00000000..4a7a6cc3 --- /dev/null +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/networking/PacketEntityShipMotion.kt @@ -0,0 +1,20 @@ +package org.valkyrienskies.mod.common.networking + +import org.valkyrienskies.core.impl.networking.simple.SimplePacket + +/** + * This packet is used to update an entity's relative position while being dragged by a ship, in place of + * [net.minecraft.network.protocol.game.ClientboundTeleportEntityPacket], [net.minecraft.network.protocol.game.ClientboundMoveEntityPacket], and [net.minecraft.network.protocol.game.ClientboundSetEntityMotionPacket]. + */ +data class PacketEntityShipMotion( + val entityID: Int, + val shipID: Long, + val x: Double, + val y: Double, + val z: Double, + val xVel: Double, + val yVel: Double, + val zVel: Double, + val yRot: Double, + val xRot: Double, +): SimplePacket diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/networking/PacketMobShipRotation.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/networking/PacketMobShipRotation.kt new file mode 100644 index 00000000..1b50eb66 --- /dev/null +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/networking/PacketMobShipRotation.kt @@ -0,0 +1,8 @@ +package org.valkyrienskies.mod.common.networking + +import org.valkyrienskies.core.impl.networking.simple.SimplePacket + +/** + * This packet is used in place of [net.minecraft.network.protocol.game.ClientboundRotateHeadPacket] to update the head rotation of a mob being dragged by a ship. + */ +data class PacketMobShipRotation(val entityID: Int, val shipID: Long, val yaw: Double, val pitch: Double): SimplePacket diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/networking/PacketPlayerShipMotion.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/networking/PacketPlayerShipMotion.kt new file mode 100644 index 00000000..8c9fce29 --- /dev/null +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/networking/PacketPlayerShipMotion.kt @@ -0,0 +1,9 @@ +package org.valkyrienskies.mod.common.networking + +import org.valkyrienskies.core.impl.networking.simple.SimplePacket + +/** + * This packet is used to update the player's relative position and yaw rotation while being dragged by a ship, alongside + * [net.minecraft.network.protocol.game.ServerboundMovePlayerPacket]. + */ +data class PacketPlayerShipMotion(val shipID: Long, val x: Double, val y: Double, val z: Double, val yRot: Double): SimplePacket diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/networking/VSGamePackets.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/networking/VSGamePackets.kt index cc46f222..0326f0cf 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/networking/VSGamePackets.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/networking/VSGamePackets.kt @@ -1,16 +1,27 @@ package org.valkyrienskies.mod.common.networking +import net.minecraft.client.Minecraft +import net.minecraft.client.player.LocalPlayer import net.minecraft.core.Registry import net.minecraft.resources.ResourceLocation +import net.minecraft.server.level.ServerLevel import net.minecraft.server.level.ServerPlayer +import net.minecraft.world.phys.Vec3 +import org.joml.Vector3d import org.valkyrienskies.core.api.attachment.getAttachment import org.valkyrienskies.core.api.ships.LoadedServerShip import org.valkyrienskies.mod.api.SeatedControllingPlayer import org.valkyrienskies.mod.common.entity.ShipMountingEntity import org.valkyrienskies.mod.common.entity.handling.VSEntityManager import org.valkyrienskies.mod.common.getShipObjectManagingPos +import org.valkyrienskies.mod.common.shipObjectWorld +import org.valkyrienskies.mod.common.toWorldCoordinates +import org.valkyrienskies.mod.common.util.EntityLerper +import org.valkyrienskies.mod.common.util.IEntityDraggingInformationProvider import org.valkyrienskies.mod.common.util.MinecraftPlayer +import org.valkyrienskies.mod.common.util.toMinecraft import org.valkyrienskies.mod.common.vsCore +import org.valkyrienskies.mod.mixinducks.world.entity.PlayerDuck object VSGamePackets { @@ -19,6 +30,9 @@ object VSGamePackets { PacketStopChunkUpdates::class.register() PacketRestartChunkUpdates::class.register() PacketSyncVSEntityTypes::class.register() + PacketEntityShipMotion::class.register() + PacketMobShipRotation::class.register() + PacketPlayerShipMotion::class.register() } fun registerHandlers() = with(vsCore.simplePacketNetworking) { @@ -51,5 +65,115 @@ object VSGamePackets { ) } } + + PacketEntityShipMotion::class.registerClientHandler { setMotion -> + val mc = Minecraft.getInstance() + val level = mc.level ?: return@registerClientHandler + val entity = level.getEntity(setMotion.entityID) ?: return@registerClientHandler + + if (entity.isControlledByLocalInstance || mc.player?.id == entity.id) return@registerClientHandler + + val ship = level.shipObjectWorld.allShips.getById(setMotion.shipID) + ?: return@registerClientHandler + + if (entity is IEntityDraggingInformationProvider) { + if (entity.draggingInformation.lastShipStoodOn == null || entity.draggingInformation.lastShipStoodOn != setMotion.shipID) { + entity.draggingInformation.lastShipStoodOn = setMotion.shipID + entity.draggingInformation.ignoreNextGroundStand = true + } + + entity.draggingInformation.relativePositionOnShip = ship.worldToShip.transformPosition( + Vector3d(entity.x, entity.y, entity.z) + ) + entity.draggingInformation.previousRelativeVelocityOnShip = entity.draggingInformation.relativeVelocityOnShip + entity.draggingInformation.relativeYawOnShip = EntityLerper.yawToShip(ship, entity.yRot.toDouble()) + + entity.draggingInformation.lerpPositionOnShip = Vector3d(setMotion.x, setMotion.y, setMotion.z) + entity.draggingInformation.relativeVelocityOnShip = Vector3d(setMotion.xVel, setMotion.yVel, setMotion.zVel) + entity.draggingInformation.lerpYawOnShip = setMotion.yRot + + val previousWorldPosition = if (entity.draggingInformation.relativePositionOnShip != null) { + ship.renderTransform.shipToWorld.transformPosition(Vector3d(entity.draggingInformation.relativePositionOnShip)) + } else { + Vector3d(entity.x, entity.y, entity.z) + } + val worldPosition = ship.renderTransform.shipToWorld.transformPosition(Vector3d(setMotion.x, setMotion.y, setMotion.z)) + entity.setPacketCoordinates(worldPosition.x, worldPosition.y, worldPosition.z) + val worldVelocity = ship.renderTransform.shipToWorld.transformDirection(Vector3d(setMotion.xVel, setMotion.yVel, setMotion.zVel)) + entity.setDeltaMovement(worldVelocity.x, worldVelocity.y, worldVelocity.z) + entity.draggingInformation.lerpSteps = 3 + + // entity.setPos(previousWorldPosition.x, previousWorldPosition.y, previousWorldPosition.z) + // entity.lerpTo(worldPosition.x, worldPosition.y, worldPosition.z, Math.toDegrees(setMotion.yRot).toFloat(), Math.toDegrees(setMotion.xRot).toFloat(), 3, true) + } + } + + PacketMobShipRotation::class.registerClientHandler { setRotation -> + val mc = Minecraft.getInstance() ?: return@registerClientHandler + val level = mc.level ?: return@registerClientHandler + val entity = level.getEntity(setRotation.entityID) ?: return@registerClientHandler + + if (entity.isControlledByLocalInstance || entity is LocalPlayer) return@registerClientHandler + + val ship = level.shipObjectWorld.allShips.getById(setRotation.shipID) + ?: return@registerClientHandler + + if (entity is IEntityDraggingInformationProvider) { + if (entity.draggingInformation.lastShipStoodOn == null || entity.draggingInformation.lastShipStoodOn != setRotation.shipID) { + entity.draggingInformation.lastShipStoodOn = setRotation.shipID + entity.draggingInformation.ignoreNextGroundStand = true + } + entity.draggingInformation.relativeHeadYawOnShip = EntityLerper.yawToShip(ship, entity.yHeadRot.toDouble()) + entity.draggingInformation.lerpHeadYawOnShip = setRotation.yaw + entity.draggingInformation.relativePitchOnShip = entity.xRot.toDouble() + entity.draggingInformation.lerpPitchOnShip = setRotation.pitch + entity.draggingInformation.headLerpSteps = 3 + } + } + + PacketPlayerShipMotion::class.registerServerHandler { motion, iPlayer -> + val player = (iPlayer as MinecraftPlayer).player as ServerPlayer? + ?: return@registerServerHandler + + if (player is IEntityDraggingInformationProvider) { + if (player.draggingInformation.lastShipStoodOn == null || player.draggingInformation.lastShipStoodOn != motion.shipID) { + player.draggingInformation.lastShipStoodOn = motion.shipID + } + player.draggingInformation.serverRelativePlayerPosition = Vector3d(motion.x, motion.y, motion.z) + if (player.level != null) { + val sLevel = (player.level as ServerLevel) + val ship = sLevel.shipObjectWorld.allShips.getById(motion.shipID) + if (ship != null) { + val posUpdate = ship.shipToWorld.transformPosition(Vector3d(motion.x, motion.y, motion.z), Vector3d()).toMinecraft() + if ((player as PlayerDuck).vs_handledMovePacket()) { + player.setPos(posUpdate.x, posUpdate.y, posUpdate.z) + player.vs_setHandledMovePacket(false) + } else { + player.vs_setQueuedPositionUpdate(posUpdate) + } + } + } + player.draggingInformation.serverRelativePlayerYaw = motion.yRot + } + } + + PacketEntityShipMotion::class.registerServerHandler { motion, iPlayer -> + val player = (iPlayer as MinecraftPlayer).player as ServerPlayer + val entity = player.level.getEntity(motion.entityID) ?: return@registerServerHandler + + if (entity is IEntityDraggingInformationProvider) { + if (entity.draggingInformation.lastShipStoodOn == null || entity.draggingInformation.lastShipStoodOn != motion.shipID) { + entity.draggingInformation.lastShipStoodOn = motion.shipID + entity.draggingInformation.ignoreNextGroundStand = true + } + + entity.draggingInformation.relativePositionOnShip = Vector3d(motion.x, motion.y, motion.z) + entity.draggingInformation.relativeYawOnShip = motion.yRot + + if ((player.level as ServerLevel).shipObjectWorld.allShips.getById(motion.shipID) != null) { + entity.setPos(player.level.toWorldCoordinates(Vec3(motion.x, motion.y, motion.z))) + } + } + } } } diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityDragger.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityDragger.kt index 2c6e4bf5..c5cb860b 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityDragger.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityDragger.kt @@ -1,9 +1,15 @@ package org.valkyrienskies.mod.common.util +import net.minecraft.client.Minecraft +import net.minecraft.client.player.LocalPlayer import net.minecraft.server.level.ServerPlayer +import net.minecraft.util.Mth import net.minecraft.world.entity.Entity +import net.minecraft.world.entity.player.Player +import net.minecraft.world.phys.Vec3 import org.joml.Vector3d import org.joml.Vector3dc +import org.valkyrienskies.core.api.ships.ClientShip import org.valkyrienskies.mod.common.shipObjectWorld import kotlin.math.asin import kotlin.math.atan2 @@ -17,8 +23,8 @@ object EntityDragger { /** * Drag these entities with the ship they're standing on. */ - fun dragEntitiesWithShips(entities: Iterable) { - entities.forEach { entity -> + fun dragEntitiesWithShips(entities: Iterable, preTick: Boolean = false) { + for (entity in entities) { val entityDraggingInformation = (entity as IEntityDraggingInformationProvider).draggingInformation var dragTheEntity = false @@ -35,26 +41,31 @@ object EntityDragger { if (shipData != null) { dragTheEntity = true + val entityReferencePos: Vector3dc = if (preTick) { + Vector3d(entity.x, entity.y, entity.z) + } else { + Vector3d(entity.xo, entity.yo, entity.zo) + } + + val referenceTransform = if (shipData is ClientShip) shipData.transform else shipData.transform + // region Compute position dragging - val newPosIdeal = shipData.shipToWorld.transformPosition( + val newPosIdeal: Vector3dc = referenceTransform.shipToWorld.transformPosition( shipData.prevTickTransform.worldToShip.transformPosition( - Vector3d(entity.x, entity.y, entity.z) + Vector3d(entityReferencePos) ) ) - addedMovement = Vector3d( - newPosIdeal.x - entity.x, - newPosIdeal.y - entity.y, - newPosIdeal.z - entity.z - ) + addedMovement = newPosIdeal.sub(entityReferencePos, Vector3d()) // endregion // region Compute look dragging - val yViewRot = entity.getViewYRot(1.0f).toDouble() + val yViewRot = entity.yRot.toDouble() + // Get the y-look vector of the entity only using y-rotation, ignore x-rotation val entityLookYawOnly = Vector3d(sin(-Math.toRadians(yViewRot)), 0.0, cos(-Math.toRadians(yViewRot))) - val newLookIdeal = shipData.shipToWorld.transformDirection( + val newLookIdeal = referenceTransform.shipToWorld.transformDirection( shipData.prevTickTransform.worldToShip.transformDirection( entityLookYawOnly ) @@ -68,15 +79,15 @@ object EntityDragger { // The Y rotation of the entity before dragging var entityYRotCorrected = entity.yRot % 360.0 // Limit [entityYRotCorrected] to be between -180 to 180 degrees - if (entityYRotCorrected < -180.0) entityYRotCorrected += 360.0 - if (entityYRotCorrected > 180.0) entityYRotCorrected -= 360.0 + if (entityYRotCorrected <= -180.0) entityYRotCorrected += 360.0 + if (entityYRotCorrected >= 180.0) entityYRotCorrected -= 360.0 // The Y rotation of the entity after dragging val newYRotAsDegrees = Math.toDegrees(newYRot) // Limit [addedYRotFromDragging] to be between -180 to 180 degrees var addedYRotFromDragging = newYRotAsDegrees - entityYRotCorrected - if (addedYRotFromDragging < -180.0) addedYRotFromDragging += 360.0 - if (addedYRotFromDragging > 180.0) addedYRotFromDragging -= 360.0 + if (addedYRotFromDragging <= -180.0) addedYRotFromDragging += 360.0 + if (addedYRotFromDragging >= 180.0) addedYRotFromDragging -= 360.0 addedYRot = addedYRotFromDragging // endregion @@ -103,10 +114,25 @@ object EntityDragger { entityDraggingInformation.addedMovementLastTick = addedMovement // Apply [addedYRot] - // Don't apply it to server players to fix rotation of placed blocks - if (addedYRot.isFinite() && entity !is ServerPlayer) { - entity.yRot += addedYRot.toFloat() - entity.yHeadRot += addedYRot.toFloat() + if (addedYRot.isFinite()) { + if (!entity.level.isClientSide()) { + if (entity !is ServerPlayer) { + entity.yRot = ((entity.yRot + addedYRot.toFloat()) + 360f) % 360f + entity.yHeadRot = ((entity.yHeadRot + addedYRot.toFloat()) + 360f) % 360f + } else { + entity.yRot = Mth.wrapDegrees(entity.yRot + addedYRot.toFloat()) + entity.yHeadRot = Mth.wrapDegrees(entity.yHeadRot + addedYRot.toFloat()) + } + } else { + if (!entity.isControlledByLocalInstance && entity !is LocalPlayer) { + entity.yRot = Mth.wrapDegrees(entity.yRot + addedYRot.toFloat()) + entity.yHeadRot = Mth.wrapDegrees(entity.yHeadRot + addedYRot.toFloat()) + } else { + entity.yRot = (entity.yRot + addedYRot.toFloat()) + entity.yHeadRot = (entity.yHeadRot + addedYRot.toFloat()) + } + } + entityDraggingInformation.addedYawRotLastTick = addedYRot } } @@ -114,4 +140,52 @@ object EntityDragger { entityDraggingInformation.mountedToEntity = entity.vehicle != null } } + + /** + * Checks if the entity is a ServerPlayer and has a [serverRelativePlayerPosition] set. If it does, returns that, which is in ship space; otherwise, returns worldspace eye position. + */ + fun Entity.serversideEyePosition(): Vec3 { + if (this is ServerPlayer && this is IEntityDraggingInformationProvider && this.draggingInformation.isEntityBeingDraggedByAShip()) { + if (this.draggingInformation.serverRelativePlayerPosition != null) { + return this.draggingInformation.serverRelativePlayerPosition!!.toMinecraft() + } + } + return this.eyePosition + } + + /** + * Checks if the entity is a ServerPlayer and has a [serverRelativePlayerYaw] set. If it does, returns that, which is in ship space; otherwise, returns worldspace eye rotation. + */ + fun Entity.serversideEyeRotation(): Double { + if (this is ServerPlayer && this is IEntityDraggingInformationProvider && this.draggingInformation.isEntityBeingDraggedByAShip()) { + if (this.draggingInformation.serverRelativePlayerYaw != null) { + return this.draggingInformation.serverRelativePlayerYaw!! * 180.0 / Math.PI + } + } + return this.yRot.toDouble() + } + + /** + * Checks if the entity is a ServerPlayer and has a [serverRelativePlayerPosition] set. If it does, returns that, which is in ship space; otherwise, returns a default value. + */ + fun Entity.serversideEyePositionOrDefault(default: Vec3): Vec3 { + if (this is ServerPlayer && this is IEntityDraggingInformationProvider && this.draggingInformation.isEntityBeingDraggedByAShip()) { + if (this.draggingInformation.serverRelativePlayerPosition != null) { + return this.draggingInformation.serverRelativePlayerPosition!!.toMinecraft() + } + } + return default + } + + /** + * Checks if the entity is a ServerPlayer and has a [serverRelativePlayerYaw] set. If it does, returns that, which is in ship space; otherwise, returns a default value. + */ + fun Entity.serversideEyeRotationOrDefault(default: Double): Double { + if (this is ServerPlayer && this is IEntityDraggingInformationProvider && this.draggingInformation.isEntityBeingDraggedByAShip()) { + if (this.draggingInformation.serverRelativePlayerYaw != null) { + return Math.toDegrees(this.draggingInformation.serverRelativePlayerYaw!!) + } + } + return default + } } diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityDraggingInformation.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityDraggingInformation.kt index 353310f3..915f9a0d 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityDraggingInformation.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityDraggingInformation.kt @@ -16,19 +16,48 @@ class EntityDraggingInformation { field = value } var ticksSinceStoodOnShip: Int = 0 + var ignoreNextGroundStand = false var mountedToEntity: Boolean = false + var lerpPositionOnShip: Vector3dc? = null + var relativeVelocityOnShip: Vector3dc? = null + var lerpYawOnShip: Double? = null + var lerpHeadYawOnShip: Double? = null + var lerpPitchOnShip: Double? = null + + var relativePositionOnShip: Vector3dc? = null + var previousRelativeVelocityOnShip: Vector3dc? = null + var relativeYawOnShip: Double? = null + var relativeHeadYawOnShip: Double? = null + var relativePitchOnShip: Double? = null + + var lerpSteps: Int = 0 + var headLerpSteps: Int = 0 + // Used by the client rendering code only var cachedLastPosition: Vector3dc? = null var restoreCachedLastPosition = false + var serverRelativePlayerPosition: Vector3dc? = null + var serverRelativePlayerYaw: Double? = null + fun isEntityBeingDraggedByAShip(): Boolean { return (lastShipStoodOn != null) && (ticksSinceStoodOnShip < TICKS_TO_DRAG_ENTITIES) && !mountedToEntity } + fun bestRelativeEntityPosition(): Vector3dc? { + return if (serverRelativePlayerPosition != null) { + serverRelativePlayerPosition!! + } else if (relativePositionOnShip != null) { + relativePositionOnShip!! + } else { + null + } + } + companion object { // Max number of ticks we will drag an entity after the entity has jumped off the ship - private const val TICKS_TO_DRAG_ENTITIES = 20 + private const val TICKS_TO_DRAG_ENTITIES = 40 } } diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityLerper.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityLerper.kt new file mode 100644 index 00000000..53562a0f --- /dev/null +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityLerper.kt @@ -0,0 +1,110 @@ +package org.valkyrienskies.mod.common.util + +import net.minecraft.util.Mth +import net.minecraft.world.entity.Entity +import net.minecraft.world.entity.LivingEntity +import org.joml.Vector3d +import org.joml.Vector3dc +import org.valkyrienskies.core.api.ships.ClientShip +import org.valkyrienskies.core.api.ships.Ship +import kotlin.math.atan2 +import kotlin.math.cos +import kotlin.math.sin + +object EntityLerper { + + /** + * Called from preAiStep. This function lerps the entity's movement while keeping it locked relative to the ship. + */ + fun lerpStep(dragInfo: EntityDraggingInformation, refship: Ship, entity: Entity) { + if (refship !is ClientShip) { + return + } + val ship = refship as ClientShip + if (dragInfo.lerpSteps > 0) { + val currentX: Double = dragInfo.relativePositionOnShip?.x() ?: return + val currentY: Double = dragInfo.relativePositionOnShip!!.y() + val currentZ: Double = dragInfo.relativePositionOnShip!!.z() + + val lerpX: Double = dragInfo.lerpPositionOnShip!!.x() + val lerpY: Double = dragInfo.lerpPositionOnShip!!.y() + val lerpZ: Double = dragInfo.lerpPositionOnShip!!.z() + + val currentYaw: Double = dragInfo.relativeYawOnShip ?: return + val lerpYaw: Double = dragInfo.lerpYawOnShip ?: return + + val newX: Double = currentX + (lerpX - currentX) / dragInfo.lerpSteps + val newY: Double = currentY + (lerpY - currentY) / dragInfo.lerpSteps + val newZ: Double = currentZ + (lerpZ - currentZ) / dragInfo.lerpSteps + + val newPos = ship.shipToWorld.transformPosition(newX, newY, newZ, Vector3d()) + + val currentYawWorld = yawToWorld(ship, currentYaw) + val lerpYawWorld = yawToWorld(ship, lerpYaw) + + dragInfo.relativePositionOnShip = Vector3d(newX, newY, newZ) + entity.setPos(newPos.x(), newPos.y(), newPos.z()) + + val g = Mth.wrapDegrees(lerpYawWorld - currentYawWorld) + val newYaw = (currentYawWorld + g / dragInfo.lerpSteps).toFloat() + + entity.yRot = newYaw + dragInfo.relativeYawOnShip = yawToShip(ship, newYaw.toDouble()) + + dragInfo.lerpSteps -= 1 + } + } + + /** + * Additional function to lerp head separately, as it's a separate packet. + */ + fun lerpHeadStep(dragInfo: EntityDraggingInformation, refship: Ship, entity: Entity) { + if (refship !is ClientShip) { + return + } + val ship = refship as ClientShip + if (dragInfo.headLerpSteps > 0) { + val currentHeadYaw: Double = dragInfo.relativeHeadYawOnShip ?: return + val lerpHeadYaw: Double = dragInfo.lerpHeadYawOnShip ?: return + + val currentHeadYawWorld = yawToWorld(ship, currentHeadYaw) + val lerpHeadYawWorld = yawToWorld(ship, lerpHeadYaw) + + val newHeadYaw = currentHeadYawWorld + Mth.wrapDegrees(lerpHeadYawWorld - currentHeadYawWorld) / dragInfo.headLerpSteps.toFloat() + entity.xRot += (dragInfo.lerpPitchOnShip!!.toFloat() - entity.xRot) / dragInfo.headLerpSteps.toFloat() + entity.yHeadRot = newHeadYaw.toFloat() + dragInfo.relativeHeadYawOnShip = yawToShip(ship, newHeadYaw.toDouble()) + + dragInfo.headLerpSteps-- + } + } + + /** + * Converts yaw to worldspace. + * + * Takes in radians, outputs degrees. + */ + fun yawToWorld(ship: Ship, yaw: Double): Double { + val entityYawOnly: Vector3dc = Vector3d(sin(yaw), 0.0, cos(yaw)) + + val newLookIdeal = ship.transform.transformDirectionNoScalingFromShipToWorld(entityYawOnly, Vector3d()) + + val newYRot = atan2(newLookIdeal.x(), newLookIdeal.z()) + + return Mth.wrapDegrees(newYRot * 180.0 / Math.PI) + } + + /** + * Converts yaw to shipspace. + * + * Takes in degrees, outputs radians + */ + fun yawToShip(ship: Ship, yaw: Double): Double { + val entityYawOnly: Vector3dc = Vector3d(sin(yaw * Math.PI / 180.0), 0.0, cos(yaw * Math.PI / 180.0)) + + val newLookIdeal = ship.transform.transformDirectionNoScalingFromWorldToShip(entityYawOnly, Vector3d()) + + val newYRot = atan2(newLookIdeal.x(), newLookIdeal.z()) + return newYRot + } +} diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityShipCollisionUtils.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityShipCollisionUtils.kt index 63a610df..2763c1a5 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityShipCollisionUtils.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityShipCollisionUtils.kt @@ -96,6 +96,9 @@ object EntityShipCollisionUtils { if (shipCollidingWith != null) { // Update the [IEntity.lastShipStoodOn] (entity as IEntityDraggingInformationProvider).draggingInformation.lastShipStoodOn = shipCollidingWith + for (entityRiding in entity.indirectPassengers) { + (entityRiding as IEntityDraggingInformationProvider).draggingInformation.lastShipStoodOn = shipCollidingWith + } } } return newMovement.toMinecraft() diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/world/POIChunkSearcher.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/world/POIChunkSearcher.kt new file mode 100644 index 00000000..3e9b2554 --- /dev/null +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/world/POIChunkSearcher.kt @@ -0,0 +1,48 @@ +package org.valkyrienskies.mod.common.world + +import net.minecraft.server.level.ServerLevel +import net.minecraft.world.entity.ai.village.poi.PoiRecord +import net.minecraft.world.level.ChunkPos +import net.minecraft.world.level.Level +import net.minecraft.world.phys.AABB +import net.minecraft.world.phys.Vec3 +import org.joml.Vector4i +import org.joml.Vector4ic +import org.valkyrienskies.core.api.ships.LoadedServerShip +import org.valkyrienskies.core.api.ships.QueryableShipData +import org.valkyrienskies.core.api.ships.properties.IShipActiveChunksSet +import org.valkyrienskies.core.impl.chunk_tracking.ShipActiveChunksSet +import org.valkyrienskies.mod.common.dimensionId +import org.valkyrienskies.mod.common.getShipObjectManagingPos +import org.valkyrienskies.mod.common.shipObjectWorld +import org.valkyrienskies.mod.common.toWorldCoordinates +import org.valkyrienskies.mod.common.util.toJOML +import org.valkyrienskies.mod.common.util.toMinecraft +import kotlin.math.max +import kotlin.math.min + +object POIChunkSearcher { + fun shipChunkBounds(chunkSet: IShipActiveChunksSet): Vector4ic? { + if (chunkSet.size == 0) { + return null + } + var minChunkX = Int.MAX_VALUE + var minChunkZ = Int.MAX_VALUE + var maxChunkX = Int.MIN_VALUE + var maxChunkZ = Int.MIN_VALUE + chunkSet.forEach { chunkX, chunkZ -> + minChunkX = min(minChunkX, chunkX) + minChunkZ = min(minChunkZ, chunkZ) + maxChunkX = max(maxChunkX, chunkX) + maxChunkZ = max(maxChunkZ, chunkZ) + } + if (minChunkX == Int.MAX_VALUE || minChunkZ == Int.MAX_VALUE || maxChunkX == Int.MIN_VALUE || maxChunkZ == Int.MIN_VALUE) { + return null + } + return Vector4i(minChunkX, minChunkZ, maxChunkX, maxChunkZ) + } + + fun PoiRecord.getWorldPos(level: Level): Vec3 { + return level.toWorldCoordinates(this.pos) + } +} diff --git a/common/src/main/resources/valkyrienskies-common.accesswidener b/common/src/main/resources/valkyrienskies-common.accesswidener index f9e16771..31a23adc 100644 --- a/common/src/main/resources/valkyrienskies-common.accesswidener +++ b/common/src/main/resources/valkyrienskies-common.accesswidener @@ -26,3 +26,11 @@ mutable field net/minecraft/world/phys/HitResult location Lnet/minecraft/ accessible field net/minecraft/world/phys/HitResult location Lnet/minecraft/world/phys/Vec3; accessible class net/minecraft/server/level/ChunkMap$DistanceManager + +accessible class net/minecraft/world/entity/ai/behavior/AcquirePoi$JitteredLinearRetry + +accessible class net/minecraft/world/entity/animal/Bee$BeePollinateGoal +accessible class net/minecraft/world/entity/animal/Bee$BeeEnterHiveGoal +accessible class net/minecraft/world/entity/animal/Bee$BeeLocateHiveGoal +accessible class net/minecraft/world/entity/animal/Bee$BeeGrowCropGoal +accessible class net/minecraft/world/entity/animal/Bee$BaseBeeGoal diff --git a/common/src/main/resources/valkyrienskies-common.mixins.json b/common/src/main/resources/valkyrienskies-common.mixins.json index 4872bf2d..9159d345 100644 --- a/common/src/main/resources/valkyrienskies-common.mixins.json +++ b/common/src/main/resources/valkyrienskies-common.mixins.json @@ -16,9 +16,27 @@ "accessors.world.level.pathfinder.PathAccessor", "commands.argument.selector.MixinEntitySelectorParser", "entity.MixinEntity", + "feature.ai.goal.JitteredLinearRetryAccessor", + "feature.ai.goal.MixinMoveToBlockGoal", + "feature.ai.goal.MixinMoveToTargetSink", + "feature.ai.goal.MixinValidateNearbyPoi", + "feature.ai.goal.bees.MixinBee", + "feature.ai.goal.bees.MixinEnterHiveGoal", + "feature.ai.goal.bees.MixinGrowCropGoal", + "feature.ai.goal.bees.MixinLocateHiveGoal", + "feature.ai.goal.bees.MixinPollinateGoal", + "feature.ai.goal.villagers.MixinAssignProfessionFromJobSite", + "feature.ai.goal.villagers.MixinGoToClosestVillage", + "feature.ai.goal.villagers.MixinSetClosestHomeAsWalkTarget", + "feature.ai.goal.villagers.MixinWorkAtPoi", + "feature.ai.node_evaluator.MixinPathFinder", + "feature.ai.node_evaluator.MixinPathNavigation", "feature.ai.node_evaluator.PathNavigationRegionAccessor", "feature.ai.node_evaluator.SwimNodeEvaluatorMixin", "feature.ai.node_evaluator.WalkNodeEvaluatorMixin", + "feature.ai.path_retargeting.MixinAirAndWaterRandomPos", + "feature.ai.path_retargeting.MixinDefaultRandomPos", + "feature.ai.path_retargeting.MixinLandRandomPos", "feature.bed_fix.MixinServerPlayer", "feature.block_placement_orientation.MixinBlockItem", "feature.block_placement_orientation.MixinBlockPlaceContext", @@ -31,7 +49,9 @@ "feature.dispensers.MixinDefaultDispenseItemBehavior", "feature.distance_replace.MixinEntity", "feature.entity_collision.MixinEntity", + "feature.entity_collision.MixinLivingEntity", "feature.entity_collision.MixinPlayer", + "feature.entity_movement_packets.MixinServerEntity", "feature.explosions.MixinExplosion", "feature.fire_between_ship_and_world.LavaFluidMixin", "feature.fluid_escaping_ship_config.MixinFlowingFluid", @@ -39,6 +59,7 @@ "feature.ladders.MixinLivingEntity", "feature.mass_tooltip.MixinBlockItem", "feature.mob_spawning.NaturalSpawnerMixin", + "feature.poi.MixinPOIManager", "feature.render_pathfinding.MixinDebugPackets", "feature.screen_distance_check.MixinScreenHandler", "feature.sealed_air_sync.MixinSectionBlocksUpdatePacket", @@ -50,6 +71,9 @@ "feature.spawn_player_on_ship.MixinServerGamePacketListenerImpl", "feature.tick_ship_chunks.MixinChunkMap", "feature.water_in_ships_entity.MixinEntity", + "feature.wave_spawning.MixinRaid", + "feature.wave_spawning.MixinRaids", + "feature.wave_spawning.MixinVillageSiege", "feature.world_border.MixinLevel", "feature.world_border.MixinWorldBorder", "mod_compat.bluemap.HiresTileModelAccessor", @@ -127,13 +151,14 @@ "client.multiplayer.MixinClientPacketListener", "client.player.MixinLocalPlayer", "client.player.MixinPlayer", + "client.renderer.MixinEntityRenderer", "client.renderer.MixinGameRenderer", "client.renderer.MixinLevelRenderer", "client.world.MixinClientChunkCache", "client.world.MixinClientLevel", "feature.block_tint.MixinClientLevel", "feature.commands.MixinClientSuggestionProvider", - "feature.debug_sparse_voxel_rendering.MixinDebugRenderer", + "feature.entity_movement_packets.MixinLocalPlayer", "feature.fix_render_chunk_sorting.MixinRenderChunk", "feature.fluid_camera_fix.MixinCamera", "feature.render_blockentity_distance_check.MixinBlockEntityRenderDispatcher", diff --git a/forge/src/main/java/org/valkyrienskies/mod/forge/mixin/feature/forge_interact/MixinIForgePlayer.java b/forge/src/main/java/org/valkyrienskies/mod/forge/mixin/feature/forge_interact/MixinIForgePlayer.java index 2c712438..dfbbc773 100644 --- a/forge/src/main/java/org/valkyrienskies/mod/forge/mixin/feature/forge_interact/MixinIForgePlayer.java +++ b/forge/src/main/java/org/valkyrienskies/mod/forge/mixin/feature/forge_interact/MixinIForgePlayer.java @@ -11,6 +11,7 @@ import org.spongepowered.asm.mixin.Shadow; import org.valkyrienskies.mod.common.VSGameUtilsKt; import org.valkyrienskies.mod.common.config.VSGameConfig; +import org.valkyrienskies.mod.common.util.EntityDragger; @Mixin(IForgePlayer.class) public interface MixinIForgePlayer { @@ -19,13 +20,15 @@ public interface MixinIForgePlayer { Player self(); /** - * Include ships in server-side distance check when player interacts with a block. + * @author Ewoudje + * @reason Include ships in server-side distance check when player interacts with a block. + * Modified by Tomato to use the serversided player reference position. */ @Overwrite(remap = false) default boolean canInteractWith(final BlockPos pos, final double padding) { if (VSGameConfig.SERVER.getEnableInteractDistanceChecks()) { final double reach = this.self().getReachDistance() + padding; - final Vec3 eyes = this.self().getEyePosition(); + final Vec3 eyes = EntityDragger.INSTANCE.serversideEyePosition(this.self()); return VSGameUtilsKt.squaredDistanceBetweenInclShips(this.self().level, pos.getX() + 0.5, pos.getY() + 0.5, @@ -37,10 +40,15 @@ default boolean canInteractWith(final BlockPos pos, final double padding) { } } + /** + * @author Ewoudje + * @reason Include ships in server-side distance check when player interacts with an entity. + * Modified by Tomato to use the serversided player reference position. + */ @Overwrite(remap = false) default boolean isCloseEnough(final Entity entity, final double distance) { if (VSGameConfig.SERVER.getEnableInteractDistanceChecks()) { - final Vec3 eye = this.self().getEyePosition(); + final Vec3 eye = EntityDragger.INSTANCE.serversideEyePosition(this.self()); final Vec3 targetCenter = entity.getPosition(1.0F).add(0.0, (double) (entity.getBbHeight() / 2.0F), 0.0); final Optional hit = entity.getBoundingBox().clip(eye, targetCenter); return (hit.isPresent() ? From 89fcb099fdc472de6207eca6a09f1f614777e5d8 Mon Sep 17 00:00:00 2001 From: ThePlasticPotato Date: Fri, 27 Dec 2024 18:34:30 -0500 Subject: [PATCH 30/45] Extremely rudimentary backport of API changes --- common/build.gradle | 15 +- .../mod/api/ShipBlockHitResult.kt | 69 ++ .../valkyrienskies/mod/api/ValkyrienSkies.kt | 611 ++++++++++++++++++ .../org/valkyrienskies/mod/api/VsAPI.kt | 131 +++- .../mod/api_impl/events/VSApiImpl.kt | 105 +-- .../mod/common/BlockStateInfoProvider.kt | 7 +- .../mod/common/ValkyrienSkiesMod.kt | 43 +- .../mod/common/config/VSMassDataLoader.kt | 8 + 8 files changed, 927 insertions(+), 62 deletions(-) create mode 100644 common/src/main/kotlin/org/valkyrienskies/mod/api/ShipBlockHitResult.kt create mode 100644 common/src/main/kotlin/org/valkyrienskies/mod/api/ValkyrienSkies.kt diff --git a/common/build.gradle b/common/build.gradle index 53a562e1..a7f1a171 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -11,15 +11,24 @@ dependencies { modCompileOnly("curse.maven:sodium-394468:3669187") + implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.1.0") + // vs-core implementation("org.valkyrienskies.core:impl:${rootProject.vs_core_version}") { exclude module: "netty-buffer" exclude module: "fastutil" + exclude module: "kotlin-stdlib" } - implementation("org.valkyrienskies.core:api:${rootProject.vs_core_version}") - implementation("org.valkyrienskies.core:api-game:${rootProject.vs_core_version}") - implementation("org.valkyrienskies.core:util:${rootProject.vs_core_version}") + implementation("org.valkyrienskies.core:api:${rootProject.vs_core_version}") { + exclude module: "kotlin-stdlib" + } + implementation("org.valkyrienskies.core:api-game:${rootProject.vs_core_version}") { + exclude module: "kotlin-stdlib" + } + implementation("org.valkyrienskies.core:util:${rootProject.vs_core_version}") { + exclude module: "kotlin-stdlib" + } // FTB Stuffs modCompileOnly("curse.maven:ftb-util-404465:4210935") diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/api/ShipBlockHitResult.kt b/common/src/main/kotlin/org/valkyrienskies/mod/api/ShipBlockHitResult.kt new file mode 100644 index 00000000..729fa365 --- /dev/null +++ b/common/src/main/kotlin/org/valkyrienskies/mod/api/ShipBlockHitResult.kt @@ -0,0 +1,69 @@ +package org.valkyrienskies.mod.api + +import net.minecraft.world.phys.BlockHitResult +import net.minecraft.world.phys.Vec3 + +/** + * Valkyrien Skies modifies vanilla methods to return an instance of [ShipBlockHitResult] when a raycast hits a block + * on a ship. + * + * By default, we set the [location] to be in world-space, while the [blockPos] is in ship-space. However, + * in some cases, mods want the [location] to be in ship-space as well. In that case, that mod (or a mixin into it) + * can check if a hit result is `instanceof ShipBlockHitResult` and use either [useLocationInShip] or + * [withLocationInShip] to change the [location]. + * + * See also: [#613](https://github.com/ValkyrienSkies/Valkyrien-Skies-2/issues/613) + * + * @constructor The default constructor uses the [locationInWorld] to set [location]. The [location] of the original + * [BlockHitResult] is ignored. + */ +class ShipBlockHitResult private constructor( + hitResult: BlockHitResult, + /** + * The location this raycast hit, in ship coordinates + */ + val locationInShip: Vec3, + /** + * The location this raycast hit, in world coordinates + */ + val locationInWorld: Vec3, +) : BlockHitResult(locationInWorld, hitResult.direction, hitResult.blockPos, hitResult.isInside) { + + companion object { + @JvmStatic + fun create(hitResult: BlockHitResult, locationInShip: Vec3, locationInWorld: Vec3) = + ShipBlockHitResult(hitResult, locationInShip, locationInWorld) + } + + init { + require(hitResult.type != Type.MISS) { "Cannot construct a ShipBlockHitResult out of a miss." } + } + + /** + * Sets [location] to [locationInShip]. This *mutates* the current hit result - use carefully. + */ + fun useLocationInShip(): BlockHitResult = also { + this.location = locationInShip + } + + /** + * Sets [location] to [locationInWorld]. This *mutates* the current hit result - use carefully. + */ + fun useLocationInWorld(): BlockHitResult = also { + this.location = locationInWorld + } + + /** + * Returns a new copy of this [ShipBlockHitResult] with [location] set to [locationInWorld]. + */ + fun withLocationInWorld(): ShipBlockHitResult = + ShipBlockHitResult(this, locationInShip, locationInWorld) + .also { it.useLocationInWorld() } + + /** + * Returns a new copy of this [ShipBlockHitResult] with [location] set to [locationInShip]. + */ + fun withLocationInShip(): ShipBlockHitResult = + ShipBlockHitResult(this, locationInShip, locationInWorld) + .also { it.useLocationInShip() } +} diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/api/ValkyrienSkies.kt b/common/src/main/kotlin/org/valkyrienskies/mod/api/ValkyrienSkies.kt new file mode 100644 index 00000000..fff7db52 --- /dev/null +++ b/common/src/main/kotlin/org/valkyrienskies/mod/api/ValkyrienSkies.kt @@ -0,0 +1,611 @@ +/* + * This is basically the god class for all functions needed by addon developers. + * + * This class may be moved into a separate mod at some point, so that it can + * be shaded. Therefore, only use standard libraries, Minecraft classes, and + * classes in + * + * - org.valkyrienskies.core.api.* + * - org.valkyrienskies.mod.api.* + * - org.joml.* + * + * Notably do NOT use classes from + * - org.valkyrienskies.mod.* (except api) + * - org.valkyrienskies.core.util.* + * - org.valkyrienskies.core.apigame.* + * + * Style notes: + * + * Since this class will also be used from Java, try to make parameters nullable + * wherever possible. Null-checking is pretty cumbersome in Java, so for each + * function that takes non-nullable parameters and returns a non-nullable type, + * make a variant that takes nullable parameters and returns a nullable type as + * well. + * + * Prefer to use extension functions and fields rather than global functions. + */ +@file:JvmName("ValkyrienSkies") +package org.valkyrienskies.mod.api + +import com.mojang.blaze3d.vertex.PoseStack +import com.mojang.math.Matrix3f +import com.mojang.math.Matrix4f +import net.minecraft.client.Minecraft +import net.minecraft.core.BlockPos +import net.minecraft.core.Direction +import net.minecraft.core.Position +import net.minecraft.core.Vec3i +import net.minecraft.server.MinecraftServer +import net.minecraft.world.entity.Entity +import net.minecraft.world.level.ChunkPos +import net.minecraft.world.level.Level +import net.minecraft.world.phys.AABB +import net.minecraft.world.phys.Vec3 +import org.jetbrains.annotations.Contract +import org.joml.Matrix4d +import org.joml.Matrix4dc +import org.joml.Quaterniondc +import org.joml.Quaternionf +import org.joml.Vector2i +import org.joml.Vector2ic +import org.joml.Vector3d +import org.joml.Vector3dc +import org.joml.Vector3f +import org.joml.Vector3i +import org.joml.Vector3ic +import org.joml.Vector4f +import org.joml.primitives.AABBd +import org.joml.primitives.AABBdc +import org.valkyrienskies.core.api.ships.Ship +import org.valkyrienskies.core.api.ships.properties.ShipId +import org.valkyrienskies.core.api.ships.properties.ShipTransform +import org.valkyrienskies.core.api.util.functions.DoubleTernaryConsumer +import org.valkyrienskies.core.api.world.ClientShipWorld +import org.valkyrienskies.core.api.world.ServerShipWorld +import org.valkyrienskies.core.api.world.ShipWorld +import org.valkyrienskies.core.api.world.properties.DimensionId +import org.valkyrienskies.mod.common.util.multiply +import org.valkyrienskies.mod.common.util.set +import org.valkyrienskies.mod.common.util.toJOML +import org.valkyrienskies.mod.common.util.toMinecraft +import kotlin.contracts.ExperimentalContracts +import kotlin.contracts.InvocationKind.EXACTLY_ONCE +import kotlin.contracts.contract +import kotlin.math.sqrt + +/** + * The singleton instance of [VsApi]. + */ +@get:JvmName("api") +val vsApi: VsApi by lazy { + try { + val modClass = Class.forName("org.valkyrienskies.mod.common.ValkyrienSkiesMod") + val getApi = modClass.getDeclaredMethod("getApi") + val instance = getApi.invoke(null) as VsApi + + instance + } catch (ex: Exception) { + throw IllegalStateException("Failed initialize the Valkyrien Skies API. " + + "Suggestion: Ensure that you have Valkyrien Skies installed.", ex) + } +} + +/** + * The String/[DimensionId] used within vs-core for representing this [Level]. + * + * This is a Kotlin-only function. + */ +val Level.dimensionId: DimensionId + @JvmSynthetic + @JvmName("getDimensionIdNonnull") + get() = vsApi.getDimensionId(this) + +/** + * The String/[DimensionId] used within vs-core for representing this [Level]. + */ +val Level?.dimensionId: DimensionId? + @Contract("null -> null; !null -> !null") + get() = this?.dimensionId + + +/** + * The [ServerShipWorld] associated with this [MinecraftServer] if it exists. + */ +val MinecraftServer?.shipWorld: ServerShipWorld? get() = + vsApi.getServerShipWorld(this) + +/** + * The [ClientShipWorld] associated with this [Minecraft] if it exists. + */ +val Minecraft?.shipWorld: ClientShipWorld? get() = + vsApi.getClientShipWorld(this) + +val Level?.shipWorld: ShipWorld? get() = + vsApi.getShipWorld(this) + +fun Level?.getShipById(id: ShipId): Ship? = + shipWorld?.allShips?.getById(id) + +fun Level?.isBlockInShipyard(blockX: Int, blockY: Int, blockZ: Int): Boolean = + isChunkInShipyard(blockX shr 4, blockZ shr 4) + +fun Level?.isChunkInShipyard(chunkX: Int, chunkZ: Int): Boolean = + vsApi.isChunkInShipyard(this, chunkX, chunkZ) + +fun Level?.getShipManagingChunk(chunkX: Int, chunkZ: Int): Ship? = + vsApi.getShipManagingChunk(this, chunkX, chunkZ) + +fun Level?.getShipManagingChunk(pos: ChunkPos?): Ship? = + pos?.let { getShipManagingChunk(pos.x, pos.z) } + +fun Level?.getShipManagingBlock(x: Int, y: Int, z: Int): Ship? = + getShipManagingChunk(x shr 4, z shr 4) + +fun Level?.getShipManagingBlock(pos: BlockPos?): Ship? = + pos?.let { getShipManagingBlock(pos.x, pos.y, pos.z) } + +fun Level?.getShipManagingBlock(x: Double, y: Double, z: Double): Ship? = + getShipManagingBlock(x.toInt(), y.toInt(), z.toInt()) + +fun Level?.getShipManagingBlock(v: Vector3dc?): Ship? = + v?.let { getShipManagingBlock(v.x(), v.y(), v.z()) } + +fun Level?.getShipManagingBlock(v: Position?): Ship? = + v?.let { getShipManagingBlock(v.x(), v.y(), v.z()) } + +/** + * Convenience function for + * `entity.level().getShipManagingBlock(entity.position())`. + * + * @see getShipManagingBlock + */ +fun Entity?.getShipManagingEntity(): Ship? = + this?.level()?.getShipManagingBlock(position()) + +/** + * If both endpoints of the given [aabb] are in the same ship, transform them + * to the world and return the new AABB. Otherwise, leaves it untouched. + */ +fun Level?.toWorld(aabb: AABBdc, dest: AABBd): AABBd { + val ship1 = getShipManagingBlock(aabb.minX(), aabb.minY(), aabb.minZ()) + ?: return dest.set(aabb) + val ship2 = getShipManagingBlock(aabb.maxX(), aabb.maxY(), aabb.maxZ()) + ?: return dest.set(aabb) + + // if both endpoints of the aabb are in the same ship, do the transform + if (ship1.id == ship2.id) { + return aabb.transform(ship1.shipToWorld, dest) + } + + return dest.set(aabb) +} + +fun Level?.toWorld(aabb: AABBd) = + toWorld(aabb, aabb) + +fun Level?.toWorld(aabb: AABB): AABB = + toWorld(aabb.toJOML()).toMinecraft() + + +fun Level?.positionToWorld(pos: Vec3): Vec3 = + getShipManagingBlock(pos).positionToWorld(pos) + +fun Level?.positionToWorld(pos: Vector3d): Vector3d = + positionToWorld(pos, pos) + +fun Level?.positionToWorld(pos: Vector3dc, dest: Vector3d): Vector3d = + getShipManagingBlock(pos).positionToWorld(pos, dest) + +fun Ship?.positionToWorld(pos: Vec3): Vec3 = + this?.transform.positionToWorld(pos) + +fun Ship?.positionToWorld(pos: Vector3d): Vector3d = + positionToWorld(pos, pos) + +fun Ship?.positionToWorld(pos: Vector3dc, dest: Vector3d): Vector3d = + this?.transform.positionToWorld(pos, dest) + +fun Ship?.positionToShip(pos: Vec3): Vec3 = + this?.transform.positionToShip(pos) + +fun Ship?.positionToShip(pos: Vector3d): Vector3d = + positionToShip(pos, pos) + +fun Ship?.positionToShip(pos: Vector3dc, dest: Vector3d): Vector3d = + this?.transform.positionToShip(pos, dest) + +fun ShipTransform?.positionToWorld(pos: Vec3): Vec3 = + this?.shipToWorld?.transformPosition(pos) ?: pos + +fun ShipTransform?.positionToWorld(pos: Vector3d): Vector3d = + positionToWorld(pos, pos) + +fun ShipTransform?.positionToWorld(pos: Vector3dc, dest: Vector3d): Vector3d = + this?.shipToWorld?.transformPosition(pos, dest) ?: dest.set(pos) + +fun ShipTransform?.positionToShip(pos: Vec3): Vec3 = + this?.worldToShip?.transformPosition(pos) ?: pos + +fun ShipTransform?.positionToShip(pos: Vector3d): Vector3d = + positionToShip(pos, pos) + +fun ShipTransform?.positionToShip(pos: Vector3dc, dest: Vector3d): Vector3d = + this?.worldToShip?.transformPosition(pos, dest) ?: dest.set(pos) + +/** + * Returns all the ships whose AABBs contain x/y/z + */ +fun Level?.getShipsIntersecting(x: Double, y: Double, z: Double): Iterable = + vsApi.getShipsIntersecting(this, x, y, z) + +/** + * Returns all the ships whose AABBs intersect [aabb] + */ +fun Level?.getShipsIntersecting(aabb: AABBdc?): Iterable = + vsApi.getShipsIntersecting(this, aabb) + +/** + * Transforms the given world position x/y/z into the ship space of all ships whose AABBs contain x/y/z + */ +fun Level?.positionToNearbyShips(x: Double, y: Double, z: Double): Iterable = + getShipsIntersecting(x, y, z).map { it.positionToShip(Vector3d(x, y, z)) } + +/** + * Transforms the given world position into the ship space of all ships whose AABB intersects [aabb] + */ +fun Level?.positionToNearbyShips(x: Double, y: Double, z: Double, aabb: AABBdc?): Iterable { + if (this == null || aabb == null) return emptyList() + return getShipsIntersecting(aabb).map { it.positionToShip(Vector3d(x, y, z)) } +} + +fun Level?.positionToNearbyShips(x: Double, y: Double, z: Double, aabbRadius: Double): Iterable = + positionToNearbyShips(x, y, z, newAABBWithRadius(x, y, z, aabbRadius)) + +fun Level?.positionToNearbyShips(x: Double, y: Double, z: Double, cb: DoubleTernaryConsumer): Unit = + positionToNearbyShips(x, y, z, null, cb::accept) + +fun Level?.positionToNearbyShips(x: Double, y: Double, z: Double, aabb: AABBdc?, cb: DoubleTernaryConsumer): Unit = + positionToNearbyShips(x, y, z, aabb, cb::accept) + +fun Level?.positionToNearbyShips(x: Double, y: Double, z: Double, aabbRadius: Double, cb: DoubleTernaryConsumer): Unit = + positionToNearbyShips(x, y, z, newAABBWithRadius(x, y, z, aabbRadius), cb) + +fun Level?.positionToNearbyShipsAndWorld(x: Double, y: Double, z: Double): Iterable = + listOf(Vector3d(x, y, z)) + positionToNearbyShips(x, y, z) + +fun Level?.positionToNearbyShipsAndWorld(x: Double, y: Double, z: Double, aabb: AABBdc?): Iterable = + listOf(Vector3d(x, y, z)) + positionToNearbyShips(x, y, z, aabb) + +fun Level?.positionToNearbyShipsAndWorld(x: Double, y: Double, z: Double, aabbRadius: Double): Iterable = + positionToNearbyShipsAndWorld(x, y, z, newAABBWithRadius(x, y, z, aabbRadius)) + +fun Level?.positionToNearbyShipsAndWorld(x: Double, y: Double, z: Double, cb: DoubleTernaryConsumer): Unit = + positionToNearbyShipsAndWorld(x, y, z, null, cb::accept) + +fun Level?.positionToNearbyShipsAndWorld(x: Double, y: Double, z: Double, aabb: AABBdc?, cb: DoubleTernaryConsumer): Unit = + positionToNearbyShipsAndWorld(x, y, z, aabb, cb::accept) + +fun Level?.positionToNearbyShipsAndWorld(x: Double, y: Double, z: Double, aabbRadius: Double, cb: DoubleTernaryConsumer): Unit = + positionToNearbyShipsAndWorld(x, y, z, newAABBWithRadius(x, y, z, aabbRadius), cb) + +private fun newAABBWithRadius(x: Double, y: Double, z: Double, r: Double) = + AABBd(x - r, y - r, z - r, x + r, y + r, z + r) + +private inline fun Level?.positionToNearbyShipsAndWorld( + x: Double, + y: Double, + z: Double, + aabb: AABBdc?, + cb: (Double, Double, Double) -> Unit +) { + cb(x, y, z) + positionToNearbyShips(x, y, z, aabb, cb) +} + +/** + * Gets all ships intersecting [aabb] (or x, y, z if [aabb] is null), then + * transforms the position x, y, z to their respective ship spaces + * and calls [cb] with the transformed positions. + */ +private inline fun Level?.positionToNearbyShips( + x: Double, + y: Double, + z: Double, + aabb: AABBdc?, + cb: (Double, Double, Double) -> Unit +) { + val ships = aabb?.let(this::getShipsIntersecting) + ?: this.getShipsIntersecting(x, y, z) + + for (ship in ships) { + ship.worldToShip.transformPositionInline(x, y, z, cb) + } +} + +fun Level?.distance(x1: Double, y1: Double, z1: Double, x2: Double, y2: Double, z2: Double): Double = + sqrt(distanceSquared(x1, y1, z1, x2, y2, z2)) + +fun Level?.distance(v1: Position, v2: Position): Double = + sqrt(distanceSquared(v1, v2)) + +/** + * Calculates squared distance including ships. + * + * Transforms the points into world space, then calculates the squared distance + * between them. + */ +fun Level?.distanceSquared(x1: Double, y1: Double, z1: Double, x2: Double, y2: Double, z2: Double): Double { + var inWorldX1 = x1 + var inWorldY1 = y1 + var inWorldZ1 = z1 + var inWorldX2 = x2 + var inWorldY2 = y2 + var inWorldZ2 = z2 + + val ship1 = this.getShipManagingBlock(x1, y1, z1) + val ship2 = this.getShipManagingBlock(x2, y2, z2) + + // Do this transform manually to avoid allocation + if (ship1 != null && ship2 != null && ship1 != ship2) { + ship1.shipToWorld.transformPositionInline(x1, y1, z1) { x, y, z -> + inWorldX1 = x + inWorldY1 = y + inWorldZ1 = z + } + ship2.shipToWorld.transformPositionInline(x2, y2, z2) { x, y, z -> + inWorldX2 = x + inWorldY2 = y + inWorldZ2 = z + } + } + + val dx = inWorldX2 - inWorldX1 + val dy = inWorldY2 - inWorldY1 + val dz = inWorldZ2 - inWorldZ1 + + return dx * dx + dy * dy + dz * dz +} + +/** + * Variant of [Vec3.distanceToSqr] including ships. + */ +fun Level?.distanceSquared(v1: Position, v2: Position): Double = + distanceSquared(v1.x(), v1.y(), v1.z(), v2.x(), v2.y(), v2.z()) + +/** + * Variant of [Vec3i.distSqr] including ships. + */ +fun Level?.distanceSquared(v1: Vec3i, v2: Vec3i): Double = + distanceSquared(v1.x.toDouble(), v1.y.toDouble(), v1.z.toDouble(), + v2.x.toDouble(), v2.y.toDouble(), v2.z.toDouble()) + +/** + * Variant of [Vec3i.distToCenterSqr] including ships. + */ +fun Level?.distanceToCenterSquared(v1: Vec3i, x2: Double, y2: Double, z2: Double): Double = + distanceSquared(v1.x.toDouble() + 0.5, v1.y.toDouble() + 0.5, v1.z.toDouble() + 0.5, x2, y2, z2) + +/** + * Variant of [Vec3i.distToCenterSqr] including ships. + */ +fun Level?.distanceToCenterSquared(v1: Vec3i, v2: Position): Double = + distanceToCenterSquared(v1, v2.x(), v2.y(), v2.z()) + +/** + * Variant of [Vec3.closerThan] including ships. + */ +fun Level?.closerThan(v1: Position, v2: Position, distance: Double): Boolean = + distanceSquared(v1, v2) < distance.squared() + +/** + * Variant of [Vec3i.closerThan] including ships + */ +fun Level?.closerThan(v1: Vec3i, v2: Vec3i, distance: Double): Boolean = + distanceSquared(v1, v2) < distance.squared() + +/** + * Variant of [Vec3i.closerToCenterThan] including ships + */ +fun Level?.closerToCenterThan(v1: Vec3i, x2: Double, y2: Double, z2: Double, distance: Double): Boolean = + distanceToCenterSquared(v1, x2, y2, z2) < distance.squared() + +/** + * Variant of [Vec3i.closerToCenterThan] including ships + */ +fun Level?.closerToCenterThan(v1: Vec3i, v2: Position, distance: Double): Boolean = + distanceToCenterSquared(v1, v2) < distance.squared() + +// region Private utilities + +private fun Double.squared() = this * this + +/** + * Transform a position without allocating any intermediate objects + */ +@OptIn(ExperimentalContracts::class) +private inline fun Matrix4dc.transformPositionInline( + x: Double, + y: Double, + z: Double, + transformed: (Double, Double, Double) -> T +): T { + contract { + callsInPlace(transformed, EXACTLY_ONCE) + } + return transformed( + m00() * x + m10() * y + m20() * z + m30(), + m01() * x + m11() * y + m21() * z + m31(), + m02() * x + m12() * y + m22() * z + m32() + ) +} + +// endregion + +// region Vector Conversions + +// region JOML + +/** + * Sets the x, y, and z components to match the supplied vector [v]. + * + * @return this + */ +fun Vector3i.set(v: Vec3i) = also { + x = v.x + y = v.y + z = v.z +} + +/** + * Sets the x, y, and z components to match the supplied vector [v]. + * + * @return this + */ +fun Vector3d.set(v: Vec3i) = also { + x = v.x.toDouble() + y = v.y.toDouble() + z = v.z.toDouble() +} + +/** + * Sets the x, y, and z components to match the supplied vector [v]. + * + * @return this + */ +fun Vector3f.set(v: Vec3i) = also { + x = v.x.toFloat() + y = v.y.toFloat() + z = v.z.toFloat() +} + +/** + * Sets the x, y, and z components to match the supplied vector [v]. + * + * @return this + */ +fun Vector3d.set(v: Position) = also { + x = v.x() + y = v.y() + z = v.z() +} + +/** + * Sets the minX, minY, minZ, maxX, maxY, and maxZ components to match the + * supplied aabb [v]. + * + * @return this + */ +fun AABBd.set(v: AABB) = also { + minX = v.minX + minY = v.minY + minZ = v.minZ + maxX = v.maxX + maxY = v.maxY + maxZ = v.maxZ +} + +/** + * Converts a [Vector3ic] to a [BlockPos]. + * + * @return a new [BlockPos] with x, y, and z components matching this. + */ +fun Vector3ic.toBlockPos() = BlockPos(x(), y(), z()) + +/** + * Converts a [Vector3dc] to a [Vec3]. + * + * @return a new [Vec3] with x, y, and z components matching this. + */ +fun Vector3dc.toMinecraft() = Vec3(x(), y(), z()) + +/** + * Converts an [AABBdc] to an [AABB]. + * + * @return a new [AABB] with minX, minY, minZ, maxX, maxY, and maxZ components + * matching this. + */ +fun AABBdc.toMinecraft() = AABB(minX(), minY(), minZ(), maxX(), maxY(), maxZ()) + +/** + * Converts an [AABB] to an [AABBd]. + * + * @return a new [AABBd] with minX, minY, minZ, maxX, maxY, and maxZ components + * matching this. + */ +fun AABB.toJOML() = AABBd().set(this) + +fun Vector2ic.toChunkPos() = ChunkPos(x(), y()) +fun ChunkPos.toJOML() = Vector2i().set(this) + +fun Vec3.toJOML() = Vector3d().set(this) + +fun Vector3d.set(v: Vec3) = also { + x = v.x + y = v.y + z = v.z +} + +fun Vector2i.set(pos: ChunkPos) = also { + x = pos.x + y = pos.z +} + +@JvmOverloads +fun Matrix4dc.transformDirection(v: Vec3i, dest: Vector3d = Vector3d()): Vector3d = + transformDirection(dest.set(v.x.toDouble(), v.y.toDouble(), v.z.toDouble())) + +@JvmOverloads +fun Matrix4dc.transformDirection(dir: Direction, dest: Vector3d = Vector3d()) = transformDirection(dir.normal, dest) + +fun Matrix4dc.transform(v: Vector4f) = v.also { + it.set( + (m00() * v.x() + m01() * v.y() + m02() * v.z() + m03() * v.w()).toFloat(), + (m10() * v.x() + m11() * v.y() + m12() * v.z() + m13() * v.w()).toFloat(), + (m20() * v.x() + m21() * v.y() + m22() * v.z() + m23() * v.w()).toFloat(), + (m30() * v.x() + m31() * v.y() + m32() * v.z() + m33() * v.w()).toFloat() + ) +} + +/** + * Transforms the position [v] by this. + * + * @return a new [Vec3] representing the transformed position + * + * @see Matrix4dc.transformPosition + */ +fun Matrix4dc.transformPosition(v: Position): Vec3 { + transformPositionInline(v.x(), v.y(), v.z()) { x, y, z -> + return Vec3(x, y, z) + } +} + +// endregion + +// region Minecraft + +// fun PoseStack.multiply(modelTransform: Matrix4dc, normalTransform: Quaterniondc) = also { +// val last = last() +// +// val newPose = Matrix4d().set(last.pose()).mul(modelTransform) +// val newNormal = last.normal().mul(Matrix3f().mul(normalTransform.toMinecraft())) +// +// last.pose().set(newPose) +// last.normal().set(newNormal) +// } + +fun PoseStack.multiply(modelTransform: Matrix4dc) = also { + val last = last() + val newPose = Matrix4f().set(last.pose().toJOML()).multiply(modelTransform) + last.pose().set(newPose.toJOML()) +} + +fun Vec3i.toJOML() = Vector3i().set(this) +fun Vec3i.toJOMLd() = Vector3d().set(this) +fun Vec3i.toJOMLf() = Vector3f().set(this) + +fun Position.toJOML() = Vector3d().set(this) + +fun Quaterniondc.toFloat() = Quaternionf(x(), y(), z(), w()) +// endregion + +// endregion diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/api/VsAPI.kt b/common/src/main/kotlin/org/valkyrienskies/mod/api/VsAPI.kt index 270bf4eb..8ae41d30 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/api/VsAPI.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/api/VsAPI.kt @@ -1,21 +1,47 @@ package org.valkyrienskies.mod.api +import net.minecraft.client.Minecraft import net.minecraft.client.gui.screens.Screen import net.minecraft.client.multiplayer.ClientLevel -import net.minecraft.core.BlockPos -import net.minecraft.world.level.ChunkPos -import net.minecraft.world.level.Level +import net.minecraft.server.MinecraftServer import net.minecraft.server.level.ServerLevel import net.minecraft.world.entity.Entity - +import net.minecraft.world.level.Level import org.jetbrains.annotations.ApiStatus.* +import org.joml.Vector3dc +import org.joml.primitives.AABBdc import org.valkyrienskies.core.api.VsCoreApi import org.valkyrienskies.core.api.event.ListenableEvent import org.valkyrienskies.core.api.ships.* +import org.valkyrienskies.core.api.world.ClientShipWorld +import org.valkyrienskies.core.api.world.ServerShipWorld +import org.valkyrienskies.core.api.world.ShipWorld +import org.valkyrienskies.core.api.world.properties.DimensionId import org.valkyrienskies.mod.api.events.PostRenderShipEvent import org.valkyrienskies.mod.api.events.PreRenderShipEvent import org.valkyrienskies.mod.api.events.RegisterBlockStateEvent +/** + * Public API for Valkyrien Skies with both Minecraft and core APIs. This class + * is stable to use, but using the extension methods (exposed as static methods + * in `ValkyrienSkies` class to Java users) is more ergonomic in most cases. + * + * This is meant to be used by: + * - Valkyrien Skies addon developers + * - 3rd-party mod developers implementing Valkyrien Skies compatibility or + * integrations + * + * You can access the singleton instance of this via [vsApi] + * (exposed as `ValkyrienSkies.getApi()` from Java). + */ +/* + * This class may be moved into a separate mod at some point, so that it can + * be shaded. Therefore, only use Minecraft classes and classes in + * + * - org.valkyrienskies.core.api.* + * - org.valkyrienskies.mod.api.* + * - org.joml.* + */ @NonExtendable interface VsApi : VsCoreApi { @@ -31,26 +57,105 @@ interface VsApi : VsCoreApi { @get:Experimental val postRenderShipEvent: ListenableEvent - fun isShipMountingEntity(entity: Entity): Boolean @Deprecated(message = "The legacy VS config system will be replaced soon. " + "Migrate to another config library, or the new system when it's released. ") fun createConfigScreenLegacy(parent: Screen, vararg configs: Class<*>): Screen /** - * Get the ship with the chunk claim that contains [pos], if it exists. + * Returns the [DimensionId] + */ + fun getDimensionId(level: Level): DimensionId + + /** + * Returns the ship that [entity] is mounted to, if it exists. + */ + fun getShipMountedTo(entity: Entity?): Ship? + + /** + * Returns the position in the ship that the [entity] is mounted to, if + * it exists. + */ + fun getMountPosInShip(entity: Entity?): Vector3dc? + + /** + * Returns the position in the ship that the [entity] is mounted to, if + * it exists, interpolating their position using [partialTicks] + */ + fun getMountPosInShip(entity: Entity?, partialTicks: Float): Vector3dc? + + /** + * Returns the [ServerShipWorld] associated with the given [MinecraftServer] + * if it exists. + * + * This will return null if there is no [ServerShipWorld] associated with + * [server] + */ + fun getServerShipWorld(server: MinecraftServer?): ServerShipWorld? + + /** + * Returns the [ClientShipWorld] associated with the given [Minecraft] + * if it exists. + * + * This will return null if there is no [ClientShipWorld] associated with + * [client] + */ + fun getClientShipWorld(client: Minecraft?): ClientShipWorld? + + /** + * Returns the [ShipWorld] associated with the given [Level] if it exists. * - * If either parameter is null, this will return null. + * This will return null if there is no [ShipWorld] associated with [level]. + */ + fun getShipWorld(level: Level?): ShipWorld? + + /** + * Potentially returns the globally unique [ServerShipWorld] if it exists. * - * @param level The [Level] to look for the ship in. If [level] is a - * [ServerLevel], this will return a [ServerShip]. If [level] is a - * [ClientLevel], this will return a [ClientShip]. + * This is not guaranteed to always work. Prefer to use + * `getServerShipWorld(MinecraftServer)` in almost all cases. * - * @param pos A block position in the Shipyard + * This will return null if no [ServerShipWorld] is currently loaded, or if + * multiple are loaded because multiple [MinecraftServer] are loaded. */ - fun getShipManagingBlock(level: Level?, pos: BlockPos?): Ship? + @Experimental + fun getServerShipWorld(): ServerShipWorld? - fun getShipManagingChunk(level: Level?, pos: ChunkPos?): Ship? + /** + * Potentially returns the globally unique [ClientShipWorld] if it exists. + * + * This is not guaranteed to always work. Prefer to use + * `getClientShipWorld(Minecraft)` in almost all cases. + * + * This will return null if no [ClientShipWorld] is currently loaded, or if + * multiple are loaded because multiple [Minecraft] are loaded. + */ + @Experimental + fun getClientShipWorld(): ClientShipWorld? + /** + * Returns true if the chunk is in the shipyard. + * + * If [level] is null, always returns false. + */ + fun isChunkInShipyard(level: Level?, chunkX: Int, chunkZ: Int): Boolean + + /** + * Returns the ship whose shipyard contains this chunk, if it exists and is + * in [level]. + * + * If [level] is a [ServerLevel], this will return a [ServerShip]. + * If [level] is a [ClientLevel], this will return a [ClientShip]. + * + * @param level The [Level] to look for the ship in. + */ fun getShipManagingChunk(level: Level?, chunkX: Int, chunkZ: Int): Ship? + + fun getShipManagingChunk(level: ClientLevel?, chunkX: Int, chunkZ: Int): ClientShip? + + fun getShipManagingChunk(level: ServerLevel?, chunkX: Int, chunkZ: Int): ServerShip? + + fun getShipsIntersecting(level: Level?, aabb: AABBdc?): Iterable + + fun getShipsIntersecting(level: Level?, x: Double, y: Double, z: Double): Iterable } diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/api_impl/events/VSApiImpl.kt b/common/src/main/kotlin/org/valkyrienskies/mod/api_impl/events/VSApiImpl.kt index 8abfdfe0..ac81343a 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/api_impl/events/VSApiImpl.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/api_impl/events/VSApiImpl.kt @@ -1,72 +1,99 @@ package org.valkyrienskies.mod.api_impl.events +import net.minecraft.client.Minecraft import net.minecraft.client.gui.screens.Screen -import net.minecraft.core.BlockPos +import net.minecraft.client.multiplayer.ClientLevel +import net.minecraft.server.MinecraftServer +import net.minecraft.server.level.ServerLevel import net.minecraft.world.entity.Entity -import net.minecraft.world.level.ChunkPos import net.minecraft.world.level.Level -import org.valkyrienskies.core.api.VsBeta -import org.valkyrienskies.core.api.attachment.AttachmentRegistration -import org.valkyrienskies.core.api.attachment.AttachmentRegistration.Builder -import org.valkyrienskies.core.api.bodies.properties.BodyTransform.Factory +import org.joml.Vector3dc +import org.joml.primitives.AABBd +import org.joml.primitives.AABBdc +import org.valkyrienskies.core.api.VsCoreApi +import org.valkyrienskies.core.api.ships.ClientShip +import org.valkyrienskies.core.api.ships.ServerShip import org.valkyrienskies.core.api.ships.Ship -import org.valkyrienskies.core.impl.bodies.properties.BodyTransformFactory +import org.valkyrienskies.core.api.world.ClientShipWorld +import org.valkyrienskies.core.api.world.ServerShipWorld +import org.valkyrienskies.core.api.world.ShipWorld import org.valkyrienskies.core.util.events.EventEmitterImpl import org.valkyrienskies.mod.api.VsApi import org.valkyrienskies.mod.api.events.PostRenderShipEvent import org.valkyrienskies.mod.api.events.PreRenderShipEvent import org.valkyrienskies.mod.api.events.RegisterBlockStateEvent +import org.valkyrienskies.mod.common.IShipObjectWorldClientProvider +import org.valkyrienskies.mod.common.IShipObjectWorldServerProvider import org.valkyrienskies.mod.common.ValkyrienSkiesMod -import org.valkyrienskies.mod.common.entity.ShipMountingEntity +import org.valkyrienskies.mod.common.dimensionId import org.valkyrienskies.mod.common.getShipManagingPos +import org.valkyrienskies.mod.common.getShipMountedToData +import org.valkyrienskies.mod.common.getShipObjectManagingPos +import org.valkyrienskies.mod.common.getShipsIntersecting import org.valkyrienskies.mod.compat.clothconfig.VSClothConfig -class VsApiImpl : VsApi { +@Suppress("OVERRIDE_DEPRECATION") +class VsApiImpl( + private val core: VsCoreApi +) : VsApi, VsCoreApi by core { override val registerBlockStateEvent = EventEmitterImpl() override val preRenderShipEvent = EventEmitterImpl() override val postRenderShipEvent = EventEmitterImpl() - override fun isShipMountingEntity(entity: Entity): Boolean { - return entity is ShipMountingEntity - } + override fun createConfigScreenLegacy(parent: Screen, vararg configs: Class<*>): Screen + = VSClothConfig.createConfigScreenFor(parent, *configs) - @Deprecated( - "The legacy VS config system will be replaced soon. Migrate to another config library, or the new system when it's released. " - ) - override fun createConfigScreenLegacy(parent: Screen, vararg configs: Class<*>): Screen { - return VSClothConfig.createConfigScreenFor(parent, *configs) - } + override fun getDimensionId(level: Level): String = + level.dimensionId + override fun getShipMountedTo(entity: Entity?): Ship? = + entity?.let { org.valkyrienskies.mod.common.getShipMountedTo(it) } - override fun getShipManagingBlock(level: Level?, pos: BlockPos?): Ship? { - return pos?.let { level?.getShipManagingPos(it) } - } + override fun getMountPosInShip(entity: Entity?): Vector3dc? = + entity?.let { getShipMountedToData(it) }?.mountPosInShip - override fun getShipManagingChunk(level: Level?, pos: ChunkPos?): Ship? { - return pos?.let { level?.getShipManagingPos(it) } - } + override fun getMountPosInShip(entity: Entity?, partialTicks: Float): Vector3dc? = + entity?.let { getShipMountedToData(it, partialTicks) }?.mountPosInShip - override fun getShipManagingChunk(level: Level?, chunkX: Int, chunkZ: Int): Ship? { - return level?.getShipManagingPos(chunkX, chunkZ) - } + override fun getServerShipWorld(): ServerShipWorld? = + getServerShipWorld(ValkyrienSkiesMod.currentServer) - @VsBeta - override val transformFactory: Factory = BodyTransformFactory + override fun getServerShipWorld(server: MinecraftServer?): ServerShipWorld? = + (server as IShipObjectWorldServerProvider?)?.shipObjectWorld - override fun newAttachmentRegistrationBuilder(attachmentClass: Class): Builder { - return ValkyrienSkiesMod.vsCore.newAttachmentRegistrationBuilder(attachmentClass) - } + override fun getClientShipWorld(): ClientShipWorld? = + getClientShipWorld(Minecraft.getInstance()) - override fun registerAttachment(attachmentClass: Class, registrationBuilder: Builder.() -> Unit) { - ValkyrienSkiesMod.vsCore.registerAttachment(attachmentClass, registrationBuilder) - } + override fun getShipWorld(level: Level?): ShipWorld? = + when (level) { + is ServerLevel -> getServerShipWorld(level.server) + is ClientLevel -> getClientShipWorld() + else -> null + } - override fun registerAttachment(registration: AttachmentRegistration) { - ValkyrienSkiesMod.vsCore.registerAttachment(registration) + override fun isChunkInShipyard(level: Level?, chunkX: Int, chunkZ: Int): Boolean { + if (level == null) return false + return getShipWorld(level)?.isChunkInShipyard(chunkX, chunkZ, getDimensionId(level)) ?: false } - override fun registerAttachmentForRemoval(attachmentKey: String) { - ValkyrienSkiesMod.vsCore.registerAttachmentForRemoval(attachmentKey) + override fun getClientShipWorld(client: Minecraft?): ClientShipWorld? = + (client as IShipObjectWorldClientProvider?)?.shipObjectWorld + + override fun getShipManagingChunk(level: Level?, chunkX: Int, chunkZ: Int): Ship? = + level?.getShipManagingPos(chunkX, chunkZ) + + override fun getShipManagingChunk(level: ClientLevel?, chunkX: Int, chunkZ: Int): ClientShip? = + level?.getShipObjectManagingPos(chunkX, chunkZ) + + override fun getShipManagingChunk(level: ServerLevel?, chunkX: Int, chunkZ: Int): ServerShip? = + level?.getShipObjectManagingPos(chunkX, chunkZ) + + override fun getShipsIntersecting(level: Level?, aabb: AABBdc?): Iterable { + if (level == null || aabb == null) return emptyList() + return level.getShipsIntersecting(aabb) } + + override fun getShipsIntersecting(level: Level?, x: Double, y: Double, z: Double): Iterable = + getShipsIntersecting(level, AABBd(x, y, z, x, y, z)) } diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/BlockStateInfoProvider.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/BlockStateInfoProvider.kt index 5962906b..e6a247f0 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/BlockStateInfoProvider.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/BlockStateInfoProvider.kt @@ -11,8 +11,8 @@ import net.minecraft.server.level.ServerLevel import net.minecraft.world.level.Level import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.state.BlockState +import org.valkyrienskies.core.api.VsBeta import org.valkyrienskies.core.api.ships.Wing -import org.valkyrienskies.core.api.ships.WingManager import org.valkyrienskies.core.apigame.world.chunks.BlockType import org.valkyrienskies.mod.common.block.WingBlock import org.valkyrienskies.mod.common.config.MassDatapackResolver @@ -99,6 +99,7 @@ object BlockStateInfo { fun onSetBlock(level: Level, blockPos: BlockPos, prevBlockState: BlockState, newBlockState: BlockState) = onSetBlock(level, blockPos.x, blockPos.y, blockPos.z, prevBlockState, newBlockState) + @OptIn(VsBeta::class) fun onSetBlock(level: Level, x: Int, y: Int, z: Int, prevBlockState: BlockState, newBlockState: BlockState) { if (!::SORTED_REGISTRY.isInitialized) return @@ -111,8 +112,8 @@ object BlockStateInfo { // region Inject wings if (level is ServerLevel) { val loadedShip = level.getShipObjectManagingPos(x shr 4, z shr 4) - if (loadedShip != null) { - val wingManager = loadedShip.getAttachment(WingManager::class.java)!! + val wingManager = loadedShip?.wingManager + if (loadedShip != null && wingManager != null) { val wasOldBlockWing = prevBlockState.block is WingBlock val newBlockStateBlock = newBlockState.block val newWing: Wing? = diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/ValkyrienSkiesMod.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/ValkyrienSkiesMod.kt index 24723f7b..64ea86ab 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/ValkyrienSkiesMod.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/ValkyrienSkiesMod.kt @@ -8,6 +8,7 @@ import net.minecraft.world.level.block.entity.BlockEntityType import org.valkyrienskies.core.apigame.VSCore import org.valkyrienskies.core.apigame.VSCoreClient import org.valkyrienskies.core.impl.hooks.VSEvents +import org.valkyrienskies.mod.api_impl.events.VsApiImpl import org.valkyrienskies.mod.common.blockentity.TestHingeBlockEntity import org.valkyrienskies.mod.common.config.VSGameConfig import org.valkyrienskies.mod.common.entity.ShipMountingEntity @@ -36,8 +37,19 @@ object ValkyrienSkiesMod { lateinit var PHYSICS_ENTITY_TYPE: EntityType lateinit var TEST_HINGE_BLOCK_ENTITY_TYPE: BlockEntityType + /** + * Keeps track of the MinecraftServers which have been created and run. Hopefully this contains at most one + * server... + */ + private val currentServers = mutableListOf() + + @JvmStatic - var currentServer: MinecraftServer? = null + var currentServer: MinecraftServer? + get() { + return currentServers.lastOrNull() + } + set(value) {} @JvmStatic lateinit var vsCore: VSCore @@ -45,9 +57,28 @@ object ValkyrienSkiesMod { @JvmStatic val vsCoreClient get() = vsCore as VSCoreClient + @JvmStatic + val api by lazy { + VsApiImpl(vsCore) + } + @JvmStatic lateinit var splitHandler: SplitHandler + @JvmStatic + fun addServer(server: MinecraftServer?) { + if (server != null) { + currentServers.add(server) + } + } + @JvmStatic + fun removeServer(server: MinecraftServer?) { + if (server != null) { + currentServers.remove(server) + } + } + + fun init(core: VSCore) { this.vsCore = core @@ -59,9 +90,13 @@ object ValkyrienSkiesMod { splitHandler = SplitHandler(this.vsCore.hooks.enableBlockEdgeConnectivity, this.vsCore.hooks.enableBlockCornerConnectivity) - vsCore.registerAttachment(ShipSettings::class.java) - vsCore.registerAttachment(GameTickForceApplier::class.java) - vsCore.registerAttachment(SplittingDisablerAttachment::class.java) + core.registerAttachment(ShipSettings::class.java) + core.registerAttachment(GameTickForceApplier::class.java) { + useLegacySerializer() + } + core.registerAttachment(SplittingDisablerAttachment::class.java) { + useLegacySerializer() + } VSEvents.ShipLoadEvent.on { event -> event.ship.setAttachment(GameTickForceApplier()) diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/config/VSMassDataLoader.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/config/VSMassDataLoader.kt index f43439fb..f9862a06 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/config/VSMassDataLoader.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/config/VSMassDataLoader.kt @@ -27,6 +27,7 @@ import org.valkyrienskies.core.api.physics.blockstates.LiquidState import org.valkyrienskies.core.api.physics.blockstates.SolidBlockShape import org.valkyrienskies.core.apigame.physics.blockstates.VsBlockState import org.valkyrienskies.core.apigame.world.chunks.BlockType +import org.valkyrienskies.mod.api_impl.events.RegisterBlockStateEventImpl import org.valkyrienskies.mod.common.BlockStateInfoProvider import org.valkyrienskies.mod.common.ValkyrienSkiesMod import org.valkyrienskies.mod.common.hooks.VSGameEvents @@ -374,8 +375,15 @@ object MassDatapackResolver : BlockStateInfoProvider { mcBlockStateToVs[blockState] = vsBlockState } + runRegisterBlockStateEvent() + registeredBlocks = true } + private fun runRegisterBlockStateEvent() { + val event = RegisterBlockStateEventImpl() + ValkyrienSkiesMod.api.registerBlockStateEvent.emit(event) + } + private val logger by logger() } From e73a24f1ce257644028de6802f4ee69cf77b1f42 Mon Sep 17 00:00:00 2001 From: ThePlasticPotato Date: Fri, 27 Dec 2024 18:36:13 -0500 Subject: [PATCH 31/45] fix mixin minecraft server --- .../valkyrienskies/mod/mixin/server/MixinMinecraftServer.java | 4 ++-- .../kotlin/org/valkyrienskies/mod/common/ValkyrienSkiesMod.kt | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/server/MixinMinecraftServer.java b/common/src/main/java/org/valkyrienskies/mod/mixin/server/MixinMinecraftServer.java index 99877918..54dbb47a 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/server/MixinMinecraftServer.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/server/MixinMinecraftServer.java @@ -96,12 +96,12 @@ public abstract class MixinMinecraftServer implements IShipObjectWorldServerProv method = "runServer" ) private void beforeInitServer(final CallbackInfo info) { - ValkyrienSkiesMod.setCurrentServer(MinecraftServer.class.cast(this)); + ValkyrienSkiesMod.addServer(MinecraftServer.class.cast(this)); } @Inject(at = @At("TAIL"), method = "stopServer") private void afterStopServer(final CallbackInfo ci) { - ValkyrienSkiesMod.setCurrentServer(null); + ValkyrienSkiesMod.removeServer(null); } @Nullable diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/ValkyrienSkiesMod.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/ValkyrienSkiesMod.kt index 64ea86ab..5fa0c2f3 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/ValkyrienSkiesMod.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/ValkyrienSkiesMod.kt @@ -49,7 +49,7 @@ object ValkyrienSkiesMod { get() { return currentServers.lastOrNull() } - set(value) {} + set(value) { currentServer = value } @JvmStatic lateinit var vsCore: VSCore From ac586b16dd0c342942532fe8b676b6ed1b137cbf Mon Sep 17 00:00:00 2001 From: ThePlasticPotato Date: Fri, 27 Dec 2024 18:39:43 -0500 Subject: [PATCH 32/45] remove parenthesis --- .../main/kotlin/org/valkyrienskies/mod/api/ValkyrienSkies.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/api/ValkyrienSkies.kt b/common/src/main/kotlin/org/valkyrienskies/mod/api/ValkyrienSkies.kt index fff7db52..b390403f 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/api/ValkyrienSkies.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/api/ValkyrienSkies.kt @@ -160,7 +160,7 @@ fun Level?.getShipManagingBlock(v: Position?): Ship? = * @see getShipManagingBlock */ fun Entity?.getShipManagingEntity(): Ship? = - this?.level()?.getShipManagingBlock(position()) + this?.level?.getShipManagingBlock(position()) /** * If both endpoints of the given [aabb] are in the same ship, transform them From 9b7bc546dc4fd36c2e491fd2ec2fd42b0d51233d Mon Sep 17 00:00:00 2001 From: Potato <77798144+ThePlasticPotato@users.noreply.github.com> Date: Fri, 27 Dec 2024 20:07:11 -0500 Subject: [PATCH 33/45] -> 2.5.0 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index a77b5c5c..d8a3d4c9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=1G minecraft_version=1.18.2 enabled_platforms=quilt,fabric,forge archives_base_name=valkyrienskies-118 -mod_version=2.1.1-beta.6 +mod_version=2.5.0-beta.2 maven_group=org.valkyrienskies.mod architectury_version=4.10.86 fabric_loader_version=0.14.11 From cb0341b00166dfa03df346ca3d7747808f72d42b Mon Sep 17 00:00:00 2001 From: Potato <77798144+ThePlasticPotato@users.noreply.github.com> Date: Fri, 27 Dec 2024 20:10:40 -0500 Subject: [PATCH 34/45] update forge krunch version --- forge/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/forge/build.gradle b/forge/build.gradle index e6d657c6..d1dd8d95 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -115,11 +115,11 @@ dependencies { transitive = false } - forgeRuntimeLibrary shadowCommon("org.valkyrienskies:physics_api_krunch:1.0.0+1dcdf4060f") { + forgeRuntimeLibrary shadowCommon("org.valkyrienskies:physics_api_krunch:1.0.0+04b9857549") { transitive = false } - forgeRuntimeLibrary shadowCommon("org.valkyrienskies:physics_api:1.0.0+0c82dd6264") { + forgeRuntimeLibrary shadowCommon("org.valkyrienskies:physics_api:1.0.0+2990315383") { transitive = false } From 38dc79c821d9f5cfe76120070b13401e93e698b5 Mon Sep 17 00:00:00 2001 From: StewStrong Date: Fri, 27 Dec 2024 21:23:09 -0800 Subject: [PATCH 35/45] Set ice friction to 0 --- .../src/main/resources/data/valkyrienskies/vs_mass/misc.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/src/main/resources/data/valkyrienskies/vs_mass/misc.json b/common/src/main/resources/data/valkyrienskies/vs_mass/misc.json index 7c91c380..bfafc65d 100644 --- a/common/src/main/resources/data/valkyrienskies/vs_mass/misc.json +++ b/common/src/main/resources/data/valkyrienskies/vs_mass/misc.json @@ -422,12 +422,12 @@ { "block": "minecraft:ice", "mass": 125.0, - "friction": 0.05 + "friction": 0.0 }, { "block": "minecraft:packed_ice", "mass": 250.0, - "friction": 0.02 + "friction": 0.0 }, { "block": "minecraft:blue_ice", From fe7e25030a3098c1e782269593548a15d5e23008 Mon Sep 17 00:00:00 2001 From: ThePlasticPotato Date: Sat, 28 Dec 2024 12:01:26 -0500 Subject: [PATCH 36/45] Misc Fixes --- .../valkyrienskies/mod/common/assembly/ShipAssembly.kt | 9 +++++---- .../mod/common/util/EntityDraggingInformation.kt | 4 +++- .../org/valkyrienskies/mod/common/util/EntityLerper.kt | 4 ++++ .../kotlin/org/valkyrienskies/mod/util/RelocationUtil.kt | 2 +- gradle.properties | 2 +- 5 files changed, 14 insertions(+), 7 deletions(-) diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/assembly/ShipAssembly.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/assembly/ShipAssembly.kt index 436aea8e..24bfc05a 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/assembly/ShipAssembly.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/assembly/ShipAssembly.kt @@ -19,6 +19,7 @@ import org.valkyrienskies.core.impl.game.ships.ShipData import org.valkyrienskies.core.impl.game.ships.ShipDataCommon import org.valkyrienskies.core.impl.game.ships.ShipTransformImpl import org.valkyrienskies.core.util.datastructures.DenseBlockPosSet +import org.valkyrienskies.mod.api.vsApi import org.valkyrienskies.mod.common.dimensionId import org.valkyrienskies.mod.common.executeIf import org.valkyrienskies.mod.common.isTickingChunk @@ -93,7 +94,7 @@ fun createNewShipWithBlocks( // well now it doesnt kekw //(ship as ShipDataCommon).transform = (ship.transform).withTransformFrom(positionInWorld = centerBlockPosInWorld) - (ship as ShipDataCommon).setFromTransform(ship.transform.copy(position = centerBlockPosInWorld)) + (ship as ShipDataCommon).setFromTransform(vsApi.transformFactory.create(centerBlockPosInWorld, ship.transform.rotation, ship.transform.scaling, ship.transform.positionInShip)) level.server.executeIf( // This condition will return true if all modified chunks have been both loaded AND // chunk update packets were sent to players @@ -132,14 +133,14 @@ fun createNewShipWithStructure( blocks.placeInWorld(level, BlockPos(lowerCornerInShip.toMinecraft()), BlockPos(lowerCornerInShip.toMinecraft()), StructurePlaceSettings(), level.random, Block.UPDATE_ALL) val diff = higherCorner.subtract(lowerCorner) - val centerPos = lowerCorner.toJOMLD().add(diff.x / 2.0, diff.y / 2.0, diff.z / 2.0) + val centerPos = lowerCorner.toJOMLD().add(diff.x + 1 / 2.0, diff.y + 1 / 2.0, diff.z + 1 / 2.0) // The ship's position has shifted from the center block since we assembled the ship, compensate for that val centerBlockPosInWorld = ship.inertiaData.centerOfMass.sub(centerPos, Vector3d()) .add(ship.transform.positionInWorld) // Put the ship into the compensated position, so that all the assembled blocks stay in the same place level.shipObjectWorld - .teleportShip(ship, ShipTeleportDataImpl(newPos = centerBlockPosInWorld.add(0.0, 0.0, 0.0, Vector3d()), newPosInShip = ship.inertiaData.centerOfMass)) + .teleportShip(ship, ShipTeleportDataImpl(newPos = centerBlockPosInWorld.add(0.5, 128.5 - centerBlockPosInWorld.y, 0.5, Vector3d()), newPosInShip = ship.inertiaData.centerOfMass)) for (x in lowerCorner.x..higherCorner.x) { @@ -149,7 +150,7 @@ fun createNewShipWithStructure( val blockEntity: BlockEntity? = level.getBlockEntity(BlockPos(x, y, z)) Clearable.tryClear(blockEntity) level.removeBlockEntity(BlockPos(x, y, z)) - level.setBlock(BlockPos(x, y, z), Blocks.AIR.defaultBlockState(), Block.UPDATE_CLIENTS) + level.getChunk(x,z).setBlockState(BlockPos(x,y,z), org.valkyrienskies.mod.util.AIR, false) //level.getChunk(BlockPos(x, y, z)).setBlockState(BlockPos(x, y, z), Blocks.AIR.defaultBlockState(), false) } diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityDraggingInformation.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityDraggingInformation.kt index 915f9a0d..974e1e5e 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityDraggingInformation.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityDraggingInformation.kt @@ -10,9 +10,11 @@ import org.valkyrienskies.core.api.ships.properties.ShipId class EntityDraggingInformation { var addedMovementLastTick: Vector3dc = Vector3d() var addedYawRotLastTick: Double = 0.0 + var changedShipLastTick = false var lastShipStoodOn: ShipId? = null set(value) { ticksSinceStoodOnShip = 0 + changedShipLastTick = field != value && field != null field = value } var ticksSinceStoodOnShip: Int = 0 @@ -57,7 +59,7 @@ class EntityDraggingInformation { companion object { // Max number of ticks we will drag an entity after the entity has jumped off the ship - private const val TICKS_TO_DRAG_ENTITIES = 40 + private const val TICKS_TO_DRAG_ENTITIES = 25 } } diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityLerper.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityLerper.kt index 53562a0f..50574d97 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityLerper.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityLerper.kt @@ -22,6 +22,10 @@ object EntityLerper { } val ship = refship as ClientShip if (dragInfo.lerpSteps > 0) { + if (dragInfo.changedShipLastTick) { + dragInfo.lerpSteps = 1 + dragInfo.changedShipLastTick = false + } val currentX: Double = dragInfo.relativePositionOnShip?.x() ?: return val currentY: Double = dragInfo.relativePositionOnShip!!.y() val currentZ: Double = dragInfo.relativePositionOnShip!!.z() diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/util/RelocationUtil.kt b/common/src/main/kotlin/org/valkyrienskies/mod/util/RelocationUtil.kt index 068c5553..d06cc44d 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/util/RelocationUtil.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/util/RelocationUtil.kt @@ -13,7 +13,7 @@ import net.minecraft.world.level.block.state.BlockState import net.minecraft.world.level.chunk.LevelChunk import org.valkyrienskies.core.api.ships.ServerShip -private val AIR = Blocks.AIR.defaultBlockState() +val AIR = Blocks.AIR.defaultBlockState() /** * Relocate block diff --git a/gradle.properties b/gradle.properties index d8a3d4c9..c2be7df0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,7 +11,7 @@ forge_version=1.18.2-40.2.4 create_fabric_version=0.5.1-i-build.1598+mc1.18.2 flywheel_version_fabric=0.6.9-38 createbigcannons_version= 0.5.2-nightly-e815ca4 -vs_core_version=1.1.0+774ec4e001 +vs_core_version=1.1.0+36a4890e15 # Prevent kotlin from autoincluding stdlib as a dependency, which breaks # gradle's composite builds (includeBuild) for some reason. We'll add it manually kotlin.stdlib.default.dependency=false From 77bee916ac2ae61e805840a33e7ccd7207c01b09 Mon Sep 17 00:00:00 2001 From: ThePlasticPotato Date: Sat, 28 Dec 2024 14:37:48 -0500 Subject: [PATCH 37/45] Update VSCore --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index c2be7df0..1f22d1ec 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,7 +11,7 @@ forge_version=1.18.2-40.2.4 create_fabric_version=0.5.1-i-build.1598+mc1.18.2 flywheel_version_fabric=0.6.9-38 createbigcannons_version= 0.5.2-nightly-e815ca4 -vs_core_version=1.1.0+36a4890e15 +vs_core_version=1.1.0+ac444c2026 # Prevent kotlin from autoincluding stdlib as a dependency, which breaks # gradle's composite builds (includeBuild) for some reason. We'll add it manually kotlin.stdlib.default.dependency=false From d8e609b2c832324b602709bf91afe54adeafa378 Mon Sep 17 00:00:00 2001 From: ThePlasticPotato Date: Sat, 28 Dec 2024 17:31:24 -0500 Subject: [PATCH 38/45] Fixed lerping again, also fixed contraptions being dragged hopefully --- .../entity_movement_packets/MixinServerEntity.java | 2 +- .../mod/common/util/EntityDraggingInformation.kt | 2 +- .../valkyrienskies/mod/common/util/EntityLerper.kt | 11 ++++++++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/entity_movement_packets/MixinServerEntity.java b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/entity_movement_packets/MixinServerEntity.java index 9abd36a7..fa1f3788 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/entity_movement_packets/MixinServerEntity.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/entity_movement_packets/MixinServerEntity.java @@ -48,7 +48,7 @@ public class MixinServerEntity { ) private void wrapBroadcastAccept(Consumer instance, Object t, Operation original) { if (t instanceof ClientboundSetEntityMotionPacket || t instanceof ClientboundTeleportEntityPacket || t instanceof ClientboundMoveEntityPacket || t instanceof ClientboundRotateHeadPacket) { - if (entity instanceof IEntityDraggingInformationProvider draggedEntity) { + if (entity instanceof IEntityDraggingInformationProvider draggedEntity && draggedEntity.vs$shouldDrag()) { EntityDraggingInformation dragInfo = draggedEntity.getDraggingInformation(); if (dragInfo != null && dragInfo.isEntityBeingDraggedByAShip() && dragInfo.getLastShipStoodOn() != null) { diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityDraggingInformation.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityDraggingInformation.kt index 974e1e5e..e487c5a9 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityDraggingInformation.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityDraggingInformation.kt @@ -14,7 +14,7 @@ class EntityDraggingInformation { var lastShipStoodOn: ShipId? = null set(value) { ticksSinceStoodOnShip = 0 - changedShipLastTick = field != value && field != null + changedShipLastTick = field != value && field != null && value != null field = value } var ticksSinceStoodOnShip: Int = 0 diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityLerper.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityLerper.kt index 50574d97..05dd9346 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityLerper.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityLerper.kt @@ -23,8 +23,17 @@ object EntityLerper { val ship = refship as ClientShip if (dragInfo.lerpSteps > 0) { if (dragInfo.changedShipLastTick) { - dragInfo.lerpSteps = 1 + dragInfo.lerpSteps = 0 dragInfo.changedShipLastTick = false + val transformed = if (dragInfo.lerpPositionOnShip != null) { + ship.transform.shipToWorld.transformPosition(dragInfo.lerpPositionOnShip, Vector3d()) + } else entity.position().toJOML() + val transformedYaw = if (dragInfo.lerpYawOnShip != null) { + yawToWorld(ship, dragInfo.lerpYawOnShip!!) + } else entity.yRot.toDouble() + entity.setPos(transformed.x, transformed.y, transformed.z) + entity.yRot = transformedYaw.toFloat() + return } val currentX: Double = dragInfo.relativePositionOnShip?.x() ?: return val currentY: Double = dragInfo.relativePositionOnShip!!.y() From e613e38b5d8f12756f9c2a57ffba303c7c805bc6 Mon Sep 17 00:00:00 2001 From: TechTastic <74630543+TechTastic@users.noreply.github.com> Date: Sun, 29 Dec 2024 11:30:42 -0600 Subject: [PATCH 39/45] Tiny Cleanup of FTB Chunks Mixin (#1039) * Tiny Cleanup of FTB Chunks Mixin * Updated FTB Chunks Mixin to new API * Switched FTB Chunks dependency to the proper source rather than CurseMaven --- build.gradle | 14 ++++++++++++++ common/build.gradle | 4 +--- .../ftb_chunks/MixinClaimedChunkManager.java | 17 +++++++---------- 3 files changed, 22 insertions(+), 13 deletions(-) diff --git a/build.gradle b/build.gradle index f33da4c4..64c45a82 100644 --- a/build.gradle +++ b/build.gradle @@ -132,6 +132,20 @@ subprojects { includeGroup "com.rbasamoyai" } } + maven { // FTB Stuffs + url "https://maven.saps.dev/releases" + content { + includeGroup "dev.latvian.mods" + includeGroup "dev.ftb.mods" + } + } + maven { // FTB Stuffs + url "https://maven.saps.dev/snapshots" + content { + includeGroup "dev.latvian.mods" + includeGroup "dev.ftb.mods" + } + } } } diff --git a/common/build.gradle b/common/build.gradle index a7f1a171..6469e4d2 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -31,9 +31,7 @@ dependencies { } // FTB Stuffs - modCompileOnly("curse.maven:ftb-util-404465:4210935") - modCompileOnly("curse.maven:ftb-teams-404468:4229138") - modCompileOnly("curse.maven:ftb-chunks-314906:4229120") + modCompileOnly("dev.ftb.mods:ftb-chunks:1802.3.19-build.362") { transitive = false } // Weather2 1.18 modCompileOnly("curse.maven:weather-storms-tornadoes-237746:4426524") diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/ftb_chunks/MixinClaimedChunkManager.java b/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/ftb_chunks/MixinClaimedChunkManager.java index 43f3bd67..60795640 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/ftb_chunks/MixinClaimedChunkManager.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/ftb_chunks/MixinClaimedChunkManager.java @@ -4,7 +4,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.world.entity.Entity; import net.minecraft.world.level.Level; -import org.joml.Vector3d; +import net.minecraft.world.phys.Vec3; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Pseudo; import org.spongepowered.asm.mixin.Unique; @@ -12,9 +12,8 @@ import org.spongepowered.asm.mixin.injection.ModifyArg; import org.spongepowered.asm.mixin.injection.ModifyVariable; import org.valkyrienskies.core.api.ships.Ship; -import org.valkyrienskies.mod.common.VSGameUtilsKt; +import org.valkyrienskies.mod.api.ValkyrienSkies; import org.valkyrienskies.mod.common.config.VSGameConfig; -import org.valkyrienskies.mod.common.util.VectorConversionsMCKt; @Pseudo @Mixin(ClaimedChunkManager.class) @@ -42,18 +41,16 @@ public abstract class MixinClaimedChunkManager { final Level level = entity.level; - final Ship ship = VSGameUtilsKt.getShipManagingPos(level, pos); + final Ship ship = ValkyrienSkies.getShipManagingBlock(level, pos); if (ship == null) { return pos; } - final Vector3d vec = ship.getShipToWorld().transformPosition(new Vector3d(pos.getX(), pos.getY(), pos.getZ())); - final BlockPos newPos = new BlockPos(VectorConversionsMCKt.toMinecraft(vec)); + final Vec3 vec = ValkyrienSkies.positionToWorld(ship, Vec3.atCenterOf(pos)); + final BlockPos newPos = new BlockPos(vec); - if ( - (newPos.getY() > level.getMaxBuildHeight() || newPos.getY() < level.getMinBuildHeight()) && - !VSGameConfig.SERVER.getFTBChunks().getShipsProtectionOutOfBuildHeight() - ) { + if ((newPos.getY() > level.getMaxBuildHeight() || newPos.getY() < level.getMinBuildHeight()) && + !VSGameConfig.SERVER.getFTBChunks().getShipsProtectionOutOfBuildHeight()) { return pos; } From 33cfa947dc56e614c80288cee3476fd144ac5068 Mon Sep 17 00:00:00 2001 From: TechTastic <74630543+TechTastic@users.noreply.github.com> Date: Sun, 29 Dec 2024 15:30:00 -0600 Subject: [PATCH 40/45] Cleaning up Old Mixins (#1040) * And updated CC depndencies * Updated CC Mixins to new API * Switched `VectorConversionMCKt` calls to `ValkyrienSkies` and implemented PR [#1035](https://github.com/ValkyrienSkies/Valkyrien-Skies-2/pull/1035) to both Forge and Fabric `MixinTurtleMoveCommand` * Removed unnecessary method from both `MixinTurtleMoveCommand` mixins * Fixed `Iterable` -> `Stream` jank --- .../cc_restitched/MixinSpeakerSound.java | 14 ++-- .../cc_restitched/MixinTurtleBrain.java | 74 +++-------------- .../cc_restitched/MixinTurtleMoveCommand.java | 36 ++++----- .../cc_restitched/MixinWirelessNetwork.java | 10 +-- forge/build.gradle | 2 +- .../compat/cc_tweaked/MixinSpeakerSound.java | 16 ++-- .../compat/cc_tweaked/MixinTurtleBrain.java | 79 ++++--------------- .../cc_tweaked/MixinTurtleMoveCommand.java | 35 ++++---- .../cc_tweaked/MixinWirelessNetwork.java | 7 +- 9 files changed, 81 insertions(+), 192 deletions(-) diff --git a/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/compat/cc_restitched/MixinSpeakerSound.java b/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/compat/cc_restitched/MixinSpeakerSound.java index 1244e4b4..c47346d4 100644 --- a/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/compat/cc_restitched/MixinSpeakerSound.java +++ b/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/compat/cc_restitched/MixinSpeakerSound.java @@ -10,20 +10,22 @@ import org.joml.Vector3d; import org.joml.Vector3dc; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Pseudo; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.valkyrienskies.core.api.ships.Ship; +import org.valkyrienskies.mod.api.ValkyrienSkies; import org.valkyrienskies.mod.client.audio.VelocityTickableSoundInstance; -import org.valkyrienskies.mod.common.VSGameUtilsKt; +@Pseudo @Mixin(SpeakerSound.class) public abstract class MixinSpeakerSound extends AbstractSoundInstance implements VelocityTickableSoundInstance { @Unique private SpeakerPosition speakerPosition; @Unique private Ship ship; - protected MixinSpeakerSound(ResourceLocation arg, SoundSource arg2) { + protected MixinSpeakerSound(final ResourceLocation arg, final SoundSource arg2) { super(arg, arg2); } @@ -32,11 +34,11 @@ protected MixinSpeakerSound(ResourceLocation arg, SoundSource arg2) { at = @At("RETURN"), remap = false ) - private void isOnShip(SpeakerPosition position, CallbackInfo ci) { + private void isOnShip(final SpeakerPosition position, final CallbackInfo ci) { this.speakerPosition = position; - this.ship = VSGameUtilsKt.getShipManagingPos(position.level(), position.position()); + this.ship = ValkyrienSkies.getShipManagingBlock(position.level(), position.position()); if (this.ship != null) { - Vec3 worldPos = VSGameUtilsKt.toWorldCoordinates(speakerPosition.level(), speakerPosition.position()); + final Vec3 worldPos = ValkyrienSkies.positionToWorld(speakerPosition.level(), speakerPosition.position()); x = worldPos.x; y = worldPos.y; z = worldPos.z; @@ -49,7 +51,7 @@ private void isOnShip(SpeakerPosition position, CallbackInfo ci) { ) private void updateWorldPos(CallbackInfo ci) { if (this.ship != null) { - Vec3 worldPos = VSGameUtilsKt.toWorldCoordinates(speakerPosition.level(), speakerPosition.position()); + final Vec3 worldPos = ValkyrienSkies.positionToWorld(speakerPosition.level(), speakerPosition.position()); x = worldPos.x; y = worldPos.y; z = worldPos.z; diff --git a/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/compat/cc_restitched/MixinTurtleBrain.java b/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/compat/cc_restitched/MixinTurtleBrain.java index 654235c8..a1ac5a15 100644 --- a/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/compat/cc_restitched/MixinTurtleBrain.java +++ b/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/compat/cc_restitched/MixinTurtleBrain.java @@ -4,22 +4,16 @@ import dan200.computercraft.shared.turtle.core.TurtleBrain; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.core.Vec3i; import net.minecraft.world.level.Level; -import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; -import org.joml.Matrix4dc; import org.joml.Vector3d; -import org.joml.Vector3dc; -import org.joml.primitives.AABBic; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Pseudo; 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.ModifyVariable; import org.valkyrienskies.core.api.ships.Ship; -import org.valkyrienskies.mod.common.VSGameUtilsKt; +import org.valkyrienskies.mod.api.ValkyrienSkies; import org.valkyrienskies.mod.common.config.VSGameConfig; import org.valkyrienskies.mod.common.util.VectorConversionsMCKt; @@ -36,7 +30,7 @@ public abstract class MixinTurtleBrain { public abstract Level getLevel(); @ModifyVariable( - method = "Ldan200/computercraft/shared/turtle/core/TurtleBrain;teleportTo(Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;)Z", + method = "teleportTo(Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;)Z", at = @At(value = "HEAD"), index = 2 ) @@ -45,71 +39,27 @@ public abstract class MixinTurtleBrain { final BlockPos oldPos = currentOwner.getBlockPos(); final Level world = getLevel(); - final Ship ship = VSGameUtilsKt.getShipManagingPos(world, oldPos); + final Ship ship = ValkyrienSkies.getShipManagingBlock(world, oldPos); if (ship != null) { // THERE IS A SHIP - final Direction d = getNewDirection(ship, currentOwner.getDirection()); - if (!doesShipContainPoint(ship, pos)) { + final Vector3d transformedDirection = ship.getShipToWorld().transformDirection( + ValkyrienSkies.toJOMLd(currentOwner.getDirection().getNormal()) + ); + if (!ship.getShipAABB().containsPoint(VectorConversionsMCKt.toJOML(pos))) { // POSITION IS OUTSIDE THE SHIP'S AABB - currentOwner.setDirection(d); + currentOwner.setDirection( + Direction.getNearest(transformedDirection.x, transformedDirection.y, transformedDirection.z)); setOwner(currentOwner); - if (!isShipScaled(ship)) { - // SHIP IS NOT SCALED - - return getWorldPosFromShipPos(ship, pos); - } else if (turtlesLeaveScaledShips()) { + if (ship.getTransform().getShipToWorldScaling().equals(1.000E+0, 1.000E+0, 1.000E+0) && + VSGameConfig.SERVER.getComputerCraft().getCanTurtlesLeaveScaledShips()) { // SHIP IS SCALED AND TURTLES CAN LEAVE SCALED SHIPS - return getWorldPosFromShipPos(ship, pos); + return new BlockPos(ValkyrienSkies.positionToWorld(ship, Vec3.atCenterOf(pos))); } } } return pos; } - - // CUSTOM METHODS - - @Unique - private static Direction getNewDirection(final Ship ship, final Direction direction) { - final Matrix4dc matrix = ship.getShipToWorld(); - final Vec3i turtleDirectionVector = direction.getNormal(); - final Vector3d directionVec = - matrix.transformDirection(turtleDirectionVector.getX(), turtleDirectionVector.getY(), - turtleDirectionVector.getZ(), new Vector3d()); - final Direction dir = Direction.getNearest(directionVec.x, directionVec.y, directionVec.z); - - return dir; - } - - @Unique - private static boolean turtlesLeaveScaledShips() { - return VSGameConfig.SERVER.getComputerCraft().getCanTurtlesLeaveScaledShips(); - } - - @Unique - private static boolean isShipScaled(final Ship ship) { - final Vector3dc scale = ship.getTransform().getShipToWorldScaling(); - final Vector3dc normalScale = new Vector3d(1.000E+0, 1.000E+0, 1.000E+0); - return !scale.equals(normalScale); - } - - @Unique - private static boolean doesShipContainPoint(final Ship ship, final BlockPos pos) { - final AABBic shipAABB = ship.getShipAABB(); - - final AABB t = new AABB(shipAABB.maxX(), shipAABB.maxY(), shipAABB.maxZ(), shipAABB.minX(), shipAABB.minY(), - shipAABB.minZ()); - return t.intersects(new AABB(pos)); - } - - @Unique - private static BlockPos getWorldPosFromShipPos(final Ship ship, final BlockPos pos) { - final Vec3 tPos = VectorConversionsMCKt.toMinecraft( - VSGameUtilsKt.toWorldCoordinates(ship, pos.getX() + 0.5, pos.getY() + 0.5, - pos.getZ() + 0.5)); - final BlockPos newPos = new BlockPos(tPos.x, tPos.y, tPos.z); - return newPos; - } } diff --git a/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/compat/cc_restitched/MixinTurtleMoveCommand.java b/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/compat/cc_restitched/MixinTurtleMoveCommand.java index 7e44efd4..52135e8a 100644 --- a/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/compat/cc_restitched/MixinTurtleMoveCommand.java +++ b/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/compat/cc_restitched/MixinTurtleMoveCommand.java @@ -1,13 +1,17 @@ package org.valkyrienskies.mod.fabric.mixin.compat.cc_restitched; +import com.google.common.collect.Streams; import dan200.computercraft.api.turtle.TurtleCommandResult; import dan200.computercraft.shared.turtle.core.TurtleMoveCommand; import dan200.computercraft.shared.turtle.core.TurtlePlayer; +import java.util.ArrayList; import java.util.List; +import java.util.stream.Stream; import javax.annotation.Nonnull; import net.minecraft.core.BlockPos; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; import org.joml.Vector3d; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Pseudo; @@ -16,7 +20,7 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.valkyrienskies.core.api.ships.Ship; -import org.valkyrienskies.mod.common.VSGameUtilsKt; +import org.valkyrienskies.mod.api.ValkyrienSkies; @Pseudo @Mixin(TurtleMoveCommand.class) @@ -26,32 +30,24 @@ public abstract class MixinTurtleMoveCommand { final TurtlePlayer turtlePlayer, final Level world, @Nonnull final BlockPos position, final CallbackInfoReturnable cir) { if (cir.getReturnValue().isSuccess()) { - final Ship ship = VSGameUtilsKt.getShipManagingPos(world, position); + final Ship ship = ValkyrienSkies.getShipManagingBlock(world, position); if (ship == null) { - final Ship iShip = VSGameUtilsKt.getShipManagingPos(world, getShipPosFromWorldPos(world, position)); - if (iShip != null) { - cir.setReturnValue(TurtleCommandResult.failure("ship")); + final boolean notInAir = Streams + .stream(ValkyrienSkies.positionToNearbyShipsAndWorld(world, position.getX() + 0.5, position.getY() + 0.5, position.getZ() + 0.5, 0.1)) + .map(pos -> ValkyrienSkies.getShipManagingBlock(world, pos)) + .map(s -> ValkyrienSkies.positionToShip(s, new Vector3d(position.getX() + 0.5, position.getY() + 0.5, position.getZ() + 0.5))) + .map(pos -> world.getBlockState(new BlockPos(ValkyrienSkies.toMinecraft(pos)))) + .anyMatch(BlockState::isAir); + + if (notInAir) { + cir.setReturnValue(TurtleCommandResult.failure("Movement obstructed by ship")); } } else { final ChunkPos chunk = world.getChunkAt(position).getPos(); if (!ship.getChunkClaim().contains(chunk.x, chunk.z)) { - cir.setReturnValue(TurtleCommandResult.failure("out of ship")); + cir.setReturnValue(TurtleCommandResult.failure("Out of ship chunk")); } } } } - - //CUSTOM METHODS - @Unique - private static Vector3d getShipPosFromWorldPos(final Level world, final BlockPos position) { - final List detectedShips = - VSGameUtilsKt.transformToNearbyShipsAndWorld(world, position.getX() + 0.5, position.getY() + 0.5, - position.getZ() + 0.5, 0.1); - for (final Vector3d vec : detectedShips) { - if (vec != null) { - return vec; - } - } - return new Vector3d(position.getX(), position.getY(), position.getZ()); - } } diff --git a/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/compat/cc_restitched/MixinWirelessNetwork.java b/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/compat/cc_restitched/MixinWirelessNetwork.java index 62dbb0c1..e9d26d17 100644 --- a/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/compat/cc_restitched/MixinWirelessNetwork.java +++ b/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/compat/cc_restitched/MixinWirelessNetwork.java @@ -11,7 +11,7 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.ModifyVariable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.valkyrienskies.mod.common.VSGameUtilsKt; +import org.valkyrienskies.mod.api.ValkyrienSkies; @Pseudo @Mixin(WirelessNetwork.class) @@ -28,12 +28,8 @@ public class MixinWirelessNetwork { final Vec3 posOnShip = shipReceiver.getPosition(); final Vec3 posInWorld = shipSender.getPosition(); - final double distance = - VSGameUtilsKt.squaredDistanceBetweenInclShips(shipReceiver.getLevel(), - posOnShip.x, posOnShip.y, posOnShip.z, - posInWorld.x, posInWorld.y, posInWorld.z); - - return distance; + return ValkyrienSkies.distanceSquared(shipReceiver.getLevel(), + posOnShip.x, posOnShip.y, posOnShip.z, posInWorld.x, posInWorld.y, posInWorld.z); } @Inject(at = @At("HEAD"), method = "tryTransmit", remap = false) diff --git a/forge/build.gradle b/forge/build.gradle index d1dd8d95..58cbe9e1 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -76,7 +76,7 @@ dependencies { modImplementation("curse.maven:coroutil-237749:5008370") // CC Tweaked - modCompileOnly("curse.maven:cc-tweaked-282001:4061947") + modCompileOnly("curse.maven:cc-tweaked-282001:4630521") // TIS-3d modCompileOnly("curse.maven:tis3d-238603:3738437") diff --git a/forge/src/main/java/org/valkyrienskies/mod/forge/mixin/compat/cc_tweaked/MixinSpeakerSound.java b/forge/src/main/java/org/valkyrienskies/mod/forge/mixin/compat/cc_tweaked/MixinSpeakerSound.java index 3a3fa424..e2697818 100644 --- a/forge/src/main/java/org/valkyrienskies/mod/forge/mixin/compat/cc_tweaked/MixinSpeakerSound.java +++ b/forge/src/main/java/org/valkyrienskies/mod/forge/mixin/compat/cc_tweaked/MixinSpeakerSound.java @@ -10,20 +10,22 @@ import org.joml.Vector3d; import org.joml.Vector3dc; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Pseudo; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.valkyrienskies.core.api.ships.Ship; +import org.valkyrienskies.mod.api.ValkyrienSkies; import org.valkyrienskies.mod.client.audio.VelocityTickableSoundInstance; -import org.valkyrienskies.mod.common.VSGameUtilsKt; +@Pseudo @Mixin(SpeakerSound.class) public abstract class MixinSpeakerSound extends AbstractSoundInstance implements VelocityTickableSoundInstance { @Unique private SpeakerPosition speakerPosition; @Unique private Ship ship; - protected MixinSpeakerSound(ResourceLocation arg, SoundSource arg2) { + protected MixinSpeakerSound(final ResourceLocation arg, final SoundSource arg2) { super(arg, arg2); } @@ -32,11 +34,11 @@ protected MixinSpeakerSound(ResourceLocation arg, SoundSource arg2) { at = @At("RETURN"), remap = false ) - private void isOnShip(SpeakerPosition position, CallbackInfo ci) { + private void isOnShip(final SpeakerPosition position, final CallbackInfo ci) { this.speakerPosition = position; - this.ship = VSGameUtilsKt.getShipManagingPos(position.level(), position.position()); + this.ship = ValkyrienSkies.getShipManagingBlock(position.level(), position.position()); if (this.ship != null) { - Vec3 worldPos = VSGameUtilsKt.toWorldCoordinates(speakerPosition.level(), speakerPosition.position()); + final Vec3 worldPos = ValkyrienSkies.positionToWorld(speakerPosition.level(), speakerPosition.position()); x = worldPos.x; y = worldPos.y; z = worldPos.z; @@ -47,9 +49,9 @@ private void isOnShip(SpeakerPosition position, CallbackInfo ci) { method = "tick", at = @At("HEAD") ) - private void updateWorldPos(CallbackInfo ci) { + private void updateWorldPos(final CallbackInfo ci) { if (this.ship != null) { - Vec3 worldPos = VSGameUtilsKt.toWorldCoordinates(speakerPosition.level(), speakerPosition.position()); + final Vec3 worldPos = ValkyrienSkies.positionToWorld(speakerPosition.level(), speakerPosition.position()); x = worldPos.x; y = worldPos.y; z = worldPos.z; diff --git a/forge/src/main/java/org/valkyrienskies/mod/forge/mixin/compat/cc_tweaked/MixinTurtleBrain.java b/forge/src/main/java/org/valkyrienskies/mod/forge/mixin/compat/cc_tweaked/MixinTurtleBrain.java index a5ca0bd7..17f12ecd 100644 --- a/forge/src/main/java/org/valkyrienskies/mod/forge/mixin/compat/cc_tweaked/MixinTurtleBrain.java +++ b/forge/src/main/java/org/valkyrienskies/mod/forge/mixin/compat/cc_tweaked/MixinTurtleBrain.java @@ -4,22 +4,16 @@ import dan200.computercraft.shared.turtle.core.TurtleBrain; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.core.Vec3i; import net.minecraft.world.level.Level; -import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; -import org.joml.Matrix4dc; import org.joml.Vector3d; -import org.joml.Vector3dc; -import org.joml.primitives.AABBic; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Pseudo; 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.ModifyVariable; import org.valkyrienskies.core.api.ships.Ship; -import org.valkyrienskies.mod.common.VSGameUtilsKt; +import org.valkyrienskies.mod.api.ValkyrienSkies; import org.valkyrienskies.mod.common.config.VSGameConfig; import org.valkyrienskies.mod.common.util.VectorConversionsMCKt; @@ -36,81 +30,36 @@ public abstract class MixinTurtleBrain { public abstract Level getLevel(); @ModifyVariable( - method = "Ldan200/computercraft/shared/turtle/core/TurtleBrain;teleportTo(Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;)Z", + method = "teleportTo(Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;)Z", at = @At(value = "HEAD"), - index = 2, - remap = false + index = 2 ) private BlockPos ValkyrienSkies2$teleportToBlockPos(final BlockPos pos) { final TileTurtle currentOwner = getOwner(); - final BlockPos oldPos = currentOwner.getAccess().getPosition(); + final BlockPos oldPos = currentOwner.getBlockPos(); final Level world = getLevel(); - final Ship ship = VSGameUtilsKt.getShipManagingPos(world, oldPos); + final Ship ship = ValkyrienSkies.getShipManagingBlock(world, oldPos); if (ship != null) { // THERE IS A SHIP - final Direction d = getNewDirection(ship, currentOwner.getDirection()); - if (!doesShipContainPoint(ship, pos)) { + final Vector3d transformedDirection = ship.getShipToWorld().transformDirection( + ValkyrienSkies.toJOMLd(currentOwner.getDirection().getNormal()) + ); + if (!ship.getShipAABB().containsPoint(VectorConversionsMCKt.toJOML(pos))) { // POSITION IS OUTSIDE THE SHIP'S AABB - currentOwner.setDirection(d); + currentOwner.setDirection( + Direction.getNearest(transformedDirection.x, transformedDirection.y, transformedDirection.z)); setOwner(currentOwner); - if (!isShipScaled(ship)) { - // SHIP IS NOT SCALED - - return getWorldPosFromShipPos(ship, pos); - } else if (turtlesLeaveScaledShips()) { + if (ship.getTransform().getShipToWorldScaling().equals(1.000E+0, 1.000E+0, 1.000E+0) && + VSGameConfig.SERVER.getComputerCraft().getCanTurtlesLeaveScaledShips()) { // SHIP IS SCALED AND TURTLES CAN LEAVE SCALED SHIPS - return getWorldPosFromShipPos(ship, pos); + return new BlockPos(ValkyrienSkies.positionToWorld(ship, Vec3.atCenterOf(pos))); } } } return pos; } - - // CUSTOM METHODS - - @Unique - private static Direction getNewDirection(final Ship ship, final Direction direction) { - final Matrix4dc matrix = ship.getShipToWorld(); - final Vec3i turtleDirectionVector = direction.getNormal(); - final Vector3d directionVec = - matrix.transformDirection(turtleDirectionVector.getX(), turtleDirectionVector.getY(), - turtleDirectionVector.getZ(), new Vector3d()); - final Direction dir = Direction.getNearest(directionVec.x, directionVec.y, directionVec.z); - - return dir; - } - - @Unique - private static boolean turtlesLeaveScaledShips() { - return VSGameConfig.SERVER.getComputerCraft().getCanTurtlesLeaveScaledShips(); - } - - @Unique - private static boolean isShipScaled(final Ship ship) { - final Vector3dc scale = ship.getTransform().getShipToWorldScaling(); - final Vector3dc normalScale = new Vector3d(1.000E+0, 1.000E+0, 1.000E+0); - return !scale.equals(normalScale); - } - - @Unique - private static boolean doesShipContainPoint(final Ship ship, final BlockPos pos) { - final AABBic shipAABB = ship.getShipAABB(); - - final AABB t = new AABB(shipAABB.maxX(), shipAABB.maxY(), shipAABB.maxZ(), shipAABB.minX(), shipAABB.minY(), - shipAABB.minZ()); - return t.intersects(new AABB(pos)); - } - - @Unique - private static BlockPos getWorldPosFromShipPos(final Ship ship, final BlockPos pos) { - final Vec3 tPos = VectorConversionsMCKt.toMinecraft( - VSGameUtilsKt.toWorldCoordinates(ship, pos.getX() + 0.5, pos.getY() + 0.5, - pos.getZ() + 0.5)); - final BlockPos newPos = new BlockPos(tPos.x, tPos.y, tPos.z); - return newPos; - } } diff --git a/forge/src/main/java/org/valkyrienskies/mod/forge/mixin/compat/cc_tweaked/MixinTurtleMoveCommand.java b/forge/src/main/java/org/valkyrienskies/mod/forge/mixin/compat/cc_tweaked/MixinTurtleMoveCommand.java index 4798d724..4de46e92 100644 --- a/forge/src/main/java/org/valkyrienskies/mod/forge/mixin/compat/cc_tweaked/MixinTurtleMoveCommand.java +++ b/forge/src/main/java/org/valkyrienskies/mod/forge/mixin/compat/cc_tweaked/MixinTurtleMoveCommand.java @@ -1,13 +1,16 @@ package org.valkyrienskies.mod.forge.mixin.compat.cc_tweaked; +import com.google.common.collect.Streams; import dan200.computercraft.api.turtle.TurtleCommandResult; import dan200.computercraft.shared.turtle.core.TurtleMoveCommand; import dan200.computercraft.shared.turtle.core.TurtlePlayer; +import java.util.ArrayList; import java.util.List; import javax.annotation.Nonnull; import net.minecraft.core.BlockPos; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; import org.joml.Vector3d; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Pseudo; @@ -16,7 +19,7 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.valkyrienskies.core.api.ships.Ship; -import org.valkyrienskies.mod.common.VSGameUtilsKt; +import org.valkyrienskies.mod.api.ValkyrienSkies; @Pseudo @Mixin(TurtleMoveCommand.class) @@ -26,32 +29,24 @@ public abstract class MixinTurtleMoveCommand { final TurtlePlayer turtlePlayer, final Level world, @Nonnull final BlockPos position, final CallbackInfoReturnable cir) { if (cir.getReturnValue().isSuccess()) { - final Ship ship = VSGameUtilsKt.getShipManagingPos(world, position); + final Ship ship = ValkyrienSkies.getShipManagingBlock(world, position); if (ship == null) { - final Ship iShip = VSGameUtilsKt.getShipManagingPos(world, getShipPosFromWorldPos(world, position)); - if (iShip != null) { - cir.setReturnValue(TurtleCommandResult.failure("ship")); + final boolean notInAir = Streams + .stream(ValkyrienSkies.positionToNearbyShipsAndWorld(world, position.getX() + 0.5, position.getY() + 0.5, position.getZ() + 0.5, 0.1)) + .map(pos -> ValkyrienSkies.getShipManagingBlock(world, pos)) + .map(s -> ValkyrienSkies.positionToShip(s, new Vector3d(position.getX() + 0.5, position.getY() + 0.5, position.getZ() + 0.5))) + .map(pos -> world.getBlockState(new BlockPos(ValkyrienSkies.toMinecraft(pos)))) + .anyMatch(BlockState::isAir); + + if (notInAir) { + cir.setReturnValue(TurtleCommandResult.failure("Movement obstructed by ship")); } } else { final ChunkPos chunk = world.getChunkAt(position).getPos(); if (!ship.getChunkClaim().contains(chunk.x, chunk.z)) { - cir.setReturnValue(TurtleCommandResult.failure("out of ship")); + cir.setReturnValue(TurtleCommandResult.failure("Out of ship chunk")); } } } } - - //CUSTOM METHODS - @Unique - private static Vector3d getShipPosFromWorldPos(final Level world, final BlockPos position) { - final List detectedShips = - VSGameUtilsKt.transformToNearbyShipsAndWorld(world, position.getX() + 0.5, position.getY() + 0.5, - position.getZ() + 0.5, 0.1); - for (final Vector3d vec : detectedShips) { - if (vec != null) { - return vec; - } - } - return new Vector3d(position.getX(), position.getY(), position.getZ()); - } } diff --git a/forge/src/main/java/org/valkyrienskies/mod/forge/mixin/compat/cc_tweaked/MixinWirelessNetwork.java b/forge/src/main/java/org/valkyrienskies/mod/forge/mixin/compat/cc_tweaked/MixinWirelessNetwork.java index f623cc25..cbac1f18 100644 --- a/forge/src/main/java/org/valkyrienskies/mod/forge/mixin/compat/cc_tweaked/MixinWirelessNetwork.java +++ b/forge/src/main/java/org/valkyrienskies/mod/forge/mixin/compat/cc_tweaked/MixinWirelessNetwork.java @@ -11,7 +11,7 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.valkyrienskies.mod.common.VSGameUtilsKt; +import org.valkyrienskies.mod.api.ValkyrienSkies; @Pseudo @Mixin(WirelessNetwork.class) @@ -27,14 +27,13 @@ public class MixinWirelessNetwork { ) ) private static double ValkyrienSkies$distanceToSqr(final Vec3 instance, final Vec3 d) { - return VSGameUtilsKt.squaredDistanceBetweenInclShips(shipReceiver.getLevel(), instance.x, instance.y, + return ValkyrienSkies.distanceSquared(shipReceiver.getLevel(), instance.x, instance.y, instance.z, d.x, d.y, d.z); } @Inject(at = @At("HEAD"), method = "tryTransmit", remap = false) private static void ValkyrienSkies2$tryTransmit(final IPacketReceiver receiver, final Packet packet, - final double range, - final boolean interdimensional, final CallbackInfo ci) { + final double range, final boolean interdimensional, final CallbackInfo ci) { shipReceiver = receiver; shipSender = packet.sender(); } From a0db30bb4894768ae07dff01fa228a60576a0748 Mon Sep 17 00:00:00 2001 From: TechTastic <74630543+TechTastic@users.noreply.github.com> Date: Mon, 30 Dec 2024 00:42:08 -0600 Subject: [PATCH 41/45] I fell victim to one of the classic blunders --- .../mod/forge/mixin/compat/cc_tweaked/MixinTurtleBrain.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/forge/src/main/java/org/valkyrienskies/mod/forge/mixin/compat/cc_tweaked/MixinTurtleBrain.java b/forge/src/main/java/org/valkyrienskies/mod/forge/mixin/compat/cc_tweaked/MixinTurtleBrain.java index 17f12ecd..67468743 100644 --- a/forge/src/main/java/org/valkyrienskies/mod/forge/mixin/compat/cc_tweaked/MixinTurtleBrain.java +++ b/forge/src/main/java/org/valkyrienskies/mod/forge/mixin/compat/cc_tweaked/MixinTurtleBrain.java @@ -30,9 +30,10 @@ public abstract class MixinTurtleBrain { public abstract Level getLevel(); @ModifyVariable( - method = "teleportTo(Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;)Z", + method = "teleportTo", at = @At(value = "HEAD"), - index = 2 + index = 2, + remap = false ) private BlockPos ValkyrienSkies2$teleportToBlockPos(final BlockPos pos) { final TileTurtle currentOwner = getOwner(); From a79885511ef04dcb69084bdc9cd57c587d1edaad Mon Sep 17 00:00:00 2001 From: ThePlasticPotato Date: Mon, 30 Dec 2024 01:50:02 -0500 Subject: [PATCH 42/45] Entity dragging tweaks --- .../valkyrienskies/mod/common/PlayerUtil.kt | 6 ++- .../mod/common/networking/VSGamePackets.kt | 1 + .../mod/common/util/EntityLerper.kt | 50 ++++++++++++++----- .../common/util/EntityShipCollisionUtils.kt | 4 +- 4 files changed, 46 insertions(+), 15 deletions(-) diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/PlayerUtil.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/PlayerUtil.kt index 4f4df009..fe5d7bff 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/PlayerUtil.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/PlayerUtil.kt @@ -7,6 +7,8 @@ import net.minecraft.world.level.Level import net.minecraft.world.phys.Vec3 import org.valkyrienskies.core.api.ships.LoadedShip import org.valkyrienskies.mod.common.util.EntityDragger.serversideEyeRotationOrDefault +import org.valkyrienskies.mod.common.util.EntityLerper.yawToWorld +import org.valkyrienskies.mod.common.util.IEntityDraggingInformationProvider import org.valkyrienskies.mod.common.util.toJOML import org.valkyrienskies.mod.common.util.toMinecraft import org.valkyrienskies.mod.mixin.accessors.entity.EntityAccessor @@ -39,10 +41,10 @@ object PlayerUtil { val yaw = -atan2(direction.x, direction.z) val pitch = -atan2(direction.y, sqrt((direction.x * direction.x) + (direction.z * direction.z))) - player.yRot = player.serversideEyeRotationOrDefault(yaw * (180 / Math.PI)).toFloat() + player.yRot = (yaw * (180.0 / Math.PI)).toFloat() player.yHeadRot = player.yRot - player.xRot = (pitch * (180 / Math.PI)).toFloat() + player.xRot = (pitch * (180.0 / Math.PI)).toFloat() (player as EntityAccessor).setPosNoUpdates(position.toMinecraft()) } diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/networking/VSGamePackets.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/networking/VSGamePackets.kt index 0326f0cf..76b0adc7 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/networking/VSGamePackets.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/networking/VSGamePackets.kt @@ -6,6 +6,7 @@ import net.minecraft.core.Registry import net.minecraft.resources.ResourceLocation import net.minecraft.server.level.ServerLevel import net.minecraft.server.level.ServerPlayer +import net.minecraft.world.entity.player.Player import net.minecraft.world.phys.Vec3 import org.joml.Vector3d import org.valkyrienskies.core.api.attachment.getAttachment diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityLerper.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityLerper.kt index 05dd9346..8d98f8c0 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityLerper.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityLerper.kt @@ -7,6 +7,8 @@ import org.joml.Vector3d import org.joml.Vector3dc import org.valkyrienskies.core.api.ships.ClientShip import org.valkyrienskies.core.api.ships.Ship +import org.valkyrienskies.mod.common.getShipObjectManagingPos +import org.valkyrienskies.mod.common.toWorldCoordinates import kotlin.math.atan2 import kotlin.math.cos import kotlin.math.sin @@ -17,24 +19,48 @@ object EntityLerper { * Called from preAiStep. This function lerps the entity's movement while keeping it locked relative to the ship. */ fun lerpStep(dragInfo: EntityDraggingInformation, refship: Ship, entity: Entity) { - if (refship !is ClientShip) { + if (refship !is ClientShip || !dragInfo.isEntityBeingDraggedByAShip()) { return } val ship = refship as ClientShip if (dragInfo.lerpSteps > 0) { if (dragInfo.changedShipLastTick) { - dragInfo.lerpSteps = 0 + //dragInfo.lerpSteps = 0 dragInfo.changedShipLastTick = false - val transformed = if (dragInfo.lerpPositionOnShip != null) { - ship.transform.shipToWorld.transformPosition(dragInfo.lerpPositionOnShip, Vector3d()) - } else entity.position().toJOML() - val transformedYaw = if (dragInfo.lerpYawOnShip != null) { - yawToWorld(ship, dragInfo.lerpYawOnShip!!) - } else entity.yRot.toDouble() - entity.setPos(transformed.x, transformed.y, transformed.z) - entity.yRot = transformedYaw.toFloat() - return + + + // val transformed = if (dragInfo.lerpPositionOnShip != null) { + // entity.level.toWorldCoordinates(Vector3d(dragInfo.lerpPositionOnShip)) + // } else entity.position().toJOML() + // val transformedYaw = if (dragInfo.lerpYawOnShip != null) { + // yawToWorld(ship, dragInfo.lerpYawOnShip!!) + // } else entity.yRot.toDouble() + // + // if (dragInfo.relativePositionOnShip != null) { + // val newX: Double = dragInfo.relativePositionOnShip!!.x() + (dragInfo.lerpPositionOnShip - currentX) / dragInfo.lerpSteps + // val newY: Double = currentY + (lerpY - currentY) / dragInfo.lerpSteps + // val newZ: Double = currentZ + (lerpZ - currentZ) / dragInfo.lerpSteps + // + // entity.setPos(transformed.x, transformed.y, transformed.z) + // entity.yRot = transformedYaw.toFloat() + // } + //dragInfo.lerpSteps-- + //return + } + + val lerpship = entity.level.getShipObjectManagingPos(dragInfo.lerpPositionOnShip!!) + val posship = entity.level.getShipObjectManagingPos(dragInfo.relativePositionOnShip!!) + if (dragInfo.lerpPositionOnShip != null && lerpship != null && lerpship.id != ship.id) { + //transform it to the new ship + val worldPos = lerpship.transform.shipToWorld.transformPosition(Vector3d(dragInfo.lerpPositionOnShip), Vector3d()) + dragInfo.lerpPositionOnShip = ship.transform.worldToShip.transformPosition(worldPos, Vector3d()) + } + if (dragInfo.relativePositionOnShip != null && posship != null && posship.id != ship.id) { + val worldRelativePos = posship.shipToWorld.transformPosition(Vector3d(dragInfo.relativePositionOnShip), Vector3d()) + dragInfo.relativePositionOnShip = ship.transform.worldToShip.transformPosition(worldRelativePos, Vector3d()) + } + val currentX: Double = dragInfo.relativePositionOnShip?.x() ?: return val currentY: Double = dragInfo.relativePositionOnShip!!.y() val currentZ: Double = dragInfo.relativePositionOnShip!!.z() @@ -50,7 +76,7 @@ object EntityLerper { val newY: Double = currentY + (lerpY - currentY) / dragInfo.lerpSteps val newZ: Double = currentZ + (lerpZ - currentZ) / dragInfo.lerpSteps - val newPos = ship.shipToWorld.transformPosition(newX, newY, newZ, Vector3d()) + val newPos = entity.level.toWorldCoordinates(newX, newY, newZ, Vector3d()) val currentYawWorld = yawToWorld(ship, currentYaw) val lerpYawWorld = yawToWorld(ship, lerpYaw) diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityShipCollisionUtils.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityShipCollisionUtils.kt index 2763c1a5..856ba85d 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityShipCollisionUtils.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityShipCollisionUtils.kt @@ -15,6 +15,7 @@ import org.valkyrienskies.core.api.ships.Ship import org.valkyrienskies.core.apigame.collision.ConvexPolygonc import org.valkyrienskies.core.util.extend import org.valkyrienskies.mod.common.dimensionId +import org.valkyrienskies.mod.common.getShipObjectManagingPos import org.valkyrienskies.mod.common.getShipsIntersecting import org.valkyrienskies.mod.common.shipObjectWorld import org.valkyrienskies.mod.common.vsCore @@ -93,7 +94,8 @@ object EntityShipCollisionUtils { movement.toJOML(), entityBoundingBox.toJOML(), stepHeight, collidingShipPolygons ) if (entity != null) { - if (shipCollidingWith != null) { + val standingOnShip = entity.level.getShipObjectManagingPos(entity.onPos) + if (shipCollidingWith != null && standingOnShip != null && standingOnShip.id == shipCollidingWith) { // Update the [IEntity.lastShipStoodOn] (entity as IEntityDraggingInformationProvider).draggingInformation.lastShipStoodOn = shipCollidingWith for (entityRiding in entity.indirectPassengers) { From 03def21c5a78fe572520218965e5048571140873 Mon Sep 17 00:00:00 2001 From: StewStrong Date: Sun, 5 Jan 2025 13:48:31 -0800 Subject: [PATCH 43/45] Updated core, fixed D6Joint motion axes null error --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 1f22d1ec..c693a2e9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,7 +11,7 @@ forge_version=1.18.2-40.2.4 create_fabric_version=0.5.1-i-build.1598+mc1.18.2 flywheel_version_fabric=0.6.9-38 createbigcannons_version= 0.5.2-nightly-e815ca4 -vs_core_version=1.1.0+ac444c2026 +vs_core_version=1.1.0+a285580c09 # Prevent kotlin from autoincluding stdlib as a dependency, which breaks # gradle's composite builds (includeBuild) for some reason. We'll add it manually kotlin.stdlib.default.dependency=false From 3d9cedc0d89696843503250c2730c226f099577b Mon Sep 17 00:00:00 2001 From: StewStrong Date: Sun, 5 Jan 2025 16:48:10 -0800 Subject: [PATCH 44/45] Use vscore kinematics --- .../mod/common/assembly/ShipAssembly.kt | 5 ---- .../mod/common/block/TestHingeBlock.kt | 24 ++++++++++--------- .../mod/common/item/ShipCreatorItem.kt | 19 +++++++++------ 3 files changed, 25 insertions(+), 23 deletions(-) diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/assembly/ShipAssembly.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/assembly/ShipAssembly.kt index 24bfc05a..5a51f664 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/assembly/ShipAssembly.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/assembly/ShipAssembly.kt @@ -5,19 +5,14 @@ import net.minecraft.server.level.ServerLevel import net.minecraft.world.Clearable import net.minecraft.world.level.ChunkPos import net.minecraft.world.level.block.Block -import net.minecraft.world.level.block.Blocks import net.minecraft.world.level.block.entity.BlockEntity import net.minecraft.world.level.levelgen.structure.templatesystem.StructurePlaceSettings import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate import org.joml.Vector3d import org.valkyrienskies.core.api.VsBeta import org.valkyrienskies.core.api.ships.ServerShip -import org.valkyrienskies.core.api.ships.properties.ShipTransformVelocity -import org.valkyrienskies.core.apigame.ShipTeleportData import org.valkyrienskies.core.impl.game.ShipTeleportDataImpl -import org.valkyrienskies.core.impl.game.ships.ShipData import org.valkyrienskies.core.impl.game.ships.ShipDataCommon -import org.valkyrienskies.core.impl.game.ships.ShipTransformImpl import org.valkyrienskies.core.util.datastructures.DenseBlockPosSet import org.valkyrienskies.mod.api.vsApi import org.valkyrienskies.mod.common.dimensionId diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/block/TestHingeBlock.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/block/TestHingeBlock.kt index 0149f346..6b6d66bd 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/block/TestHingeBlock.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/block/TestHingeBlock.kt @@ -33,10 +33,11 @@ import org.joml.Quaterniond import org.joml.Quaterniondc import org.joml.Vector3d import org.joml.Vector3dc +import org.valkyrienskies.core.api.VsBeta import org.valkyrienskies.core.apigame.joints.VSJointMaxForceTorque import org.valkyrienskies.core.apigame.joints.VSJointPose import org.valkyrienskies.core.apigame.joints.VSRevoluteJoint -import org.valkyrienskies.core.impl.bodies.properties.BodyTransformVelocityImpl +import org.valkyrienskies.core.impl.bodies.properties.BodyKinematicsFactory import org.valkyrienskies.core.impl.game.ships.ShipDataCommon import org.valkyrienskies.mod.common.ValkyrienSkiesMod import org.valkyrienskies.mod.common.blockentity.TestHingeBlockEntity @@ -100,6 +101,7 @@ object TestHingeBlock : } } + @OptIn(VsBeta::class) @Deprecated("Deprecated in Java") override fun use( state: BlockState, @@ -173,29 +175,29 @@ object TestHingeBlock : // Put the new ship where the old ship is val newPos = shipThisIsIn.transform.shipToWorld.transformPosition(attachmentLocalPos0, Vector3d()) newPos.sub(shipThisIsIn.transform.shipToWorldRotation.transform(attachmentOffset1, Vector3d())) - val newTransform = BodyTransformVelocityImpl( + val newKinematics = BodyKinematicsFactory.create( + shipThisIsIn.velocity, + shipThisIsIn.angularVelocity, newPos, - ship.transform.positionInShip, shipThisIsIn.transform.shipToWorldRotation, // Copy source ship rotation ship.transform.shipToWorldScaling, - velocity = shipThisIsIn.velocity, - angularVelocity = shipThisIsIn.angularVelocity + ship.transform.positionInShip, ) // Update the ship transform - (ship as ShipDataCommon).transform = newTransform + (ship as ShipDataCommon).kinematics = newKinematics } else { val newPos = Vector3d(attachmentLocalPos0) newPos.sub(attachmentOffset1) - val newTransform = BodyTransformVelocityImpl( + val newKinematics = BodyKinematicsFactory.create( + ship.velocity, + ship.angularVelocity, newPos, - ship.transform.positionInShip, ship.transform.shipToWorldRotation, ship.transform.shipToWorldScaling, - velocity = ship.velocity, - angularVelocity = ship.angularVelocity + ship.transform.positionInShip, ) // Update the ship transform - (ship as ShipDataCommon).transform = newTransform + (ship as ShipDataCommon).kinematics = newKinematics } level.setBlockAndUpdate(shipCenterPos, Blocks.IRON_BLOCK.defaultBlockState()) diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/item/ShipCreatorItem.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/item/ShipCreatorItem.kt index c6deab82..576d01a8 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/item/ShipCreatorItem.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/item/ShipCreatorItem.kt @@ -10,11 +10,9 @@ import net.minecraft.world.item.context.UseOnContext import net.minecraft.world.level.block.Rotation.NONE import net.minecraft.world.level.block.state.BlockState import org.joml.Vector3d -import org.valkyrienskies.core.api.ships.properties.ShipTransformVelocity -import org.valkyrienskies.core.impl.bodies.properties.BodyTransformImpl -import org.valkyrienskies.core.impl.bodies.properties.BodyTransformVelocityImpl +import org.valkyrienskies.core.api.VsBeta +import org.valkyrienskies.core.impl.bodies.properties.BodyKinematicsFactory import org.valkyrienskies.core.impl.game.ships.ShipDataCommon -import org.valkyrienskies.core.impl.game.ships.ShipTransformImpl import org.valkyrienskies.mod.common.dimensionId import org.valkyrienskies.mod.common.getShipManagingPos import org.valkyrienskies.mod.common.shipObjectWorld @@ -33,6 +31,7 @@ class ShipCreatorItem( return true } + @OptIn(VsBeta::class) override fun useOn(ctx: UseOnContext): InteractionResult { val level = ctx.level as? ServerLevel ?: return super.useOn(ctx) val blockPos = ctx.clickedPos @@ -67,9 +66,15 @@ class ShipCreatorItem( // Do not allow scaling to go below minScaling newShipScaling = Vector3d(minScaling, minScaling, minScaling) } - val shipTransform = - BodyTransformVelocityImpl(newShipPosInWorld, newShipPosInShipyard, newShipRotation, newShipScaling, Vector3d(), Vector3d()) - (serverShip as ShipDataCommon).transform = shipTransform + val newKinematics = BodyKinematicsFactory.create( + Vector3d(), + Vector3d(), + newShipPosInWorld, + newShipRotation, + newShipScaling, + newShipPosInShipyard, + ) + (serverShip as ShipDataCommon).kinematics = newKinematics } } } From e81c025686c1f835e423411aa2ca0c19f1110f61 Mon Sep 17 00:00:00 2001 From: theplasticpotato Date: Mon, 6 Jan 2025 11:20:50 -0500 Subject: [PATCH 45/45] Fixed incorrect yaw transformation --- .../mod/mixin/entity/MixinEntity.java | 2 +- .../valkyrienskies/mod/common/util/EntityDragger.kt | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/entity/MixinEntity.java b/common/src/main/java/org/valkyrienskies/mod/mixin/entity/MixinEntity.java index e81068d6..869eb371 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/entity/MixinEntity.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/entity/MixinEntity.java @@ -170,7 +170,7 @@ private void preCalculateViewVector(final float xRot, final float yRot, final Ca if (dragProvider.getDraggingInformation().isEntityBeingDraggedByAShip() && dragProvider.getDraggingInformation().getServerRelativePlayerYaw() != null) { final Ship shipDraggedBy = VSGameUtilsKt.getAllShips(level).getById(dragProvider.getDraggingInformation().getLastShipStoodOn()); if (shipDraggedBy != null) { - final float realYRot = (float) EntityDragger.INSTANCE.serversideEyeRotationOrDefault(sPlayer, yRot); + final float realYRot = (float) EntityDragger.INSTANCE.serversideWorldEyeRotationOrDefault(sPlayer, shipDraggedBy, yRot); final float f = xRot * (float) (Math.PI / 180.0); final float g = -realYRot * (float) (Math.PI / 180.0); final float h = Mth.cos(g); diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityDragger.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityDragger.kt index c5cb860b..0036e7ff 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityDragger.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityDragger.kt @@ -10,7 +10,10 @@ import net.minecraft.world.phys.Vec3 import org.joml.Vector3d import org.joml.Vector3dc import org.valkyrienskies.core.api.ships.ClientShip +import org.valkyrienskies.core.api.ships.ServerShip +import org.valkyrienskies.core.api.ships.Ship import org.valkyrienskies.mod.common.shipObjectWorld +import org.valkyrienskies.mod.common.util.EntityLerper.yawToWorld import kotlin.math.asin import kotlin.math.atan2 import kotlin.math.cos @@ -188,4 +191,14 @@ object EntityDragger { } return default } + + + fun Entity.serversideWorldEyeRotationOrDefault(ship: Ship, default: Double): Double { + if (this is ServerPlayer && this is IEntityDraggingInformationProvider && this.draggingInformation.isEntityBeingDraggedByAShip()) { + if (this.draggingInformation.serverRelativePlayerYaw != null) { + return yawToWorld(ship, this.draggingInformation.serverRelativePlayerYaw!!) + } + } + return default + } }