From 58c6bfb72d185c3f0ee886edcabf1903ce7e0acb Mon Sep 17 00:00:00 2001 From: ThePlasticPotato Date: Fri, 27 Dec 2024 00:14:00 -0500 Subject: [PATCH] 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 39a16b43c..52a8180fa 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 000000000..ea5f5b0ed --- /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 000000000..f38515020 --- /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 000000000..956fc626a --- /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 000000000..6e835c004 --- /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 000000000..f975f8d35 --- /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 ccc3d182c..f1e985ad2 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 b22a496ec..6be920674 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 19ba56f16..07bc7f6f3 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 4c141aa5d..4d2adcccc 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 d6f02bcc4..e7ea8cc06 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 9520a16b1..6b4b22ea7 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 112e704b5..4872bf2d3 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 2410644ff..b2ff69dd2 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