From 6b226a0bb83a6448e94a8d1b2df3344d7d3bf102 Mon Sep 17 00:00:00 2001 From: mrsterner Date: Thu, 30 Nov 2023 17:23:13 +0100 Subject: [PATCH] fixed create valuebox rendering on ships --- .../create/client/MixinValueBox.java | 38 +++++++++++++++++++ .../mod/common/VSClientGameUtils.kt | 5 +++ .../valkyrienskies-common.mixins.json | 1 + .../compat/create/client/MixinValueBox.java | 25 ------------ .../valkyrienskies-fabric.mixins.json | 3 +- .../compat/create/client/MixinValueBox.java | 23 ----------- .../valkyrienskies-forge.mixins.json | 1 - 7 files changed, 45 insertions(+), 51 deletions(-) create mode 100644 common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/create/client/MixinValueBox.java delete mode 100644 fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/compat/create/client/MixinValueBox.java delete mode 100644 forge/src/main/java/org/valkyrienskies/mod/forge/mixin/compat/create/client/MixinValueBox.java diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/create/client/MixinValueBox.java b/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/create/client/MixinValueBox.java new file mode 100644 index 000000000..acd4792f1 --- /dev/null +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/create/client/MixinValueBox.java @@ -0,0 +1,38 @@ +package org.valkyrienskies.mod.mixin.mod_compat.create.client; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.mojang.blaze3d.vertex.PoseStack; +import com.simibubi.create.foundation.blockEntity.behaviour.ValueBox; +import net.minecraft.client.Minecraft; +import net.minecraft.core.BlockPos; +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.VSClientGameUtils; + +@Mixin(ValueBox.class) +public class MixinValueBox { + + @Shadow + protected BlockPos pos; + + @WrapOperation( + method = "render", + at = @At( + value = "INVOKE", + target = "Lcom/mojang/blaze3d/vertex/PoseStack;translate(DDD)V", + ordinal = 0 + ) + ) + public void wrapOpTranslate(final PoseStack instance, final double x, final double y, final double z, final Operation operation) { + final ClientShip ship = VSClientGameUtils.getClientShip(x, y, z); + if (ship != null) { + final var camera = Minecraft.getInstance().gameRenderer.getMainCamera().getPosition(); + VSClientGameUtils.transformRenderWithShip(ship.getRenderTransform(), instance, pos.getX(),pos.getY(),pos.getZ(), camera.x, camera.y, camera.z ); + } else { + operation.call(instance, x, y, z); + } + } +} diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/VSClientGameUtils.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/VSClientGameUtils.kt index 090da4119..116d3658c 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/VSClientGameUtils.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/VSClientGameUtils.kt @@ -33,6 +33,11 @@ object VSClientGameUtils { } } + @JvmStatic + fun getClientShip(offsetX: Double, offsetY: Double, offsetZ: Double): ClientShip? { + return Minecraft.getInstance().level?.getShipObjectManagingPos(offsetX, offsetY, offsetZ) + } + /** * Modify the last transform of [poseStack] to be the following: * diff --git a/common/src/main/resources/valkyrienskies-common.mixins.json b/common/src/main/resources/valkyrienskies-common.mixins.json index d91a6d85b..9c5d41cef 100644 --- a/common/src/main/resources/valkyrienskies-common.mixins.json +++ b/common/src/main/resources/valkyrienskies-common.mixins.json @@ -75,6 +75,7 @@ "mod_compat.create.blockentity.MixinCrushingWheelControllerTileEntity", "mod_compat.create.blockentity.MixinEjectorTileEntity", "mod_compat.create.blockentity.MixinEncasedFanTileEntity", + "mod_compat.create.client.MixinValueBox", "mod_compat.create.entity.MixinAbstractContraptionEntity", "mod_compat.create.entity.MixinCarriageContraptionEntity", "mod_compat.create.entity.MixinControlledContraptionEntity", diff --git a/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/compat/create/client/MixinValueBox.java b/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/compat/create/client/MixinValueBox.java deleted file mode 100644 index b946ce720..000000000 --- a/fabric/src/main/java/org/valkyrienskies/mod/fabric/mixin/compat/create/client/MixinValueBox.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.valkyrienskies.mod.fabric.mixin.compat.create.client; - -import com.mojang.blaze3d.vertex.PoseStack; -import com.simibubi.create.foundation.blockEntity.behaviour.ValueBox; -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.VSClientGameUtils; - -@Mixin(ValueBox.class) -public class MixinValueBox { - - @Redirect( - method = "render", - at = @At( - value = "INVOKE", - target = "Lcom/mojang/blaze3d/vertex/PoseStack;translate(DDD)V" - ), - require = 0 - ) - public void redirectTranslate(final PoseStack instance, final double x, final double y, final double z) { - VSClientGameUtils.transformRenderIfInShipyard(instance, x, y, z); - } - -} diff --git a/fabric/src/main/resources/valkyrienskies-fabric.mixins.json b/fabric/src/main/resources/valkyrienskies-fabric.mixins.json index 04d2ec57f..c646cb2f7 100644 --- a/fabric/src/main/resources/valkyrienskies-fabric.mixins.json +++ b/fabric/src/main/resources/valkyrienskies-fabric.mixins.json @@ -21,8 +21,7 @@ "compat.create.client.MixinContraptionRenderInfo", "compat.create.client.MixinCullingBlockEntityIterator", "compat.create.client.MixinFlwContraption", - "compat.create.client.MixinSuperGlueSelectionHandler", - "compat.create.client.MixinValueBox" + "compat.create.client.MixinSuperGlueSelectionHandler" ], "injectors": { "defaultRequire": 1 diff --git a/forge/src/main/java/org/valkyrienskies/mod/forge/mixin/compat/create/client/MixinValueBox.java b/forge/src/main/java/org/valkyrienskies/mod/forge/mixin/compat/create/client/MixinValueBox.java deleted file mode 100644 index cf0f8f2bb..000000000 --- a/forge/src/main/java/org/valkyrienskies/mod/forge/mixin/compat/create/client/MixinValueBox.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.valkyrienskies.mod.forge.mixin.compat.create.client; - -import com.mojang.blaze3d.vertex.PoseStack; -import com.simibubi.create.foundation.blockEntity.behaviour.ValueBox; -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.VSClientGameUtils; - -@Mixin(ValueBox.class) -public class MixinValueBox { - @Redirect( - method = "render", - at = @At( - value = "INVOKE", - target = "Lcom/mojang/blaze3d/vertex/PoseStack;translate(DDD)V" - ), - require = 0 - ) - public void redirectTranslate(final PoseStack instance, final double x, final double y, final double z) { - VSClientGameUtils.transformRenderIfInShipyard(instance, x, y, z); - } -} diff --git a/forge/src/main/resources/valkyrienskies-forge.mixins.json b/forge/src/main/resources/valkyrienskies-forge.mixins.json index 34deb5e14..e029a1dcf 100644 --- a/forge/src/main/resources/valkyrienskies-forge.mixins.json +++ b/forge/src/main/resources/valkyrienskies-forge.mixins.json @@ -23,7 +23,6 @@ "compat.create.client.MixinContraptionRenderInfo", "compat.create.client.MixinFlwContraption", "compat.create.client.MixinSuperGlueSelectionHandler", - "compat.create.client.MixinValueBox", "compat.sodium.MixinRenderSectionManager", "compat.tis3d.MixinCasingTileEntityRender", "compat.tis3d.MixinRenderContextImpl"