Skip to content

Commit

Permalink
Fixed patch f crash and added some support for Create utilities (#743)
Browse files Browse the repository at this point in the history
* Added support for Create utilities VoidValueBox position and fixed MixinTrackBlockOutline

* added javadoc i guess
  • Loading branch information
mrsterner authored Mar 30, 2024
1 parent ab16a44 commit d9e0db7
Show file tree
Hide file tree
Showing 12 changed files with 205 additions and 8 deletions.
1 change: 1 addition & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,7 @@ subprojects {
maven { url = "https://maven.shedaniel.me/" } // Cloth Config, REI
maven { url "https://maven.architectury.dev/" }
maven { url = "https://mvn.devos.one/snapshots/" } // Fabric Create, Porting Lib, Forge Tags, Milk Lib
maven { url = "https://mvn.devos.one/releases/" }
maven { url = "https://raw.githubusercontent.com/Fuzss/modresources/main/maven/" } // Forge Config API Port
maven { url = "https://maven.tterrag.com/" } // Registrate, Forge Create and Flywheel
maven { url = "https://maven.cafeteria.dev/releases" } // Fake Player API
Expand Down
3 changes: 3 additions & 0 deletions common/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,9 @@ dependencies {
modCompileOnly("com.jozufozu.flywheel:flywheel-fabric-${minecraft_version}:${flywheel_version_fabric}")

modCompileOnly("maven.modrinth:create-big-cannons:${createbigcannons_version}")

modCompileOnly("maven.modrinth:create-utilities:${create_utilities_version}")
modImplementation("teamreborn:energy:${energy_version}")
}

architectury {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package org.valkyrienskies.mod.mixin.mod_compat.create_utilities;

import me.duquee.createutilities.blocks.voidtypes.VoidLinkBehaviour;
import net.minecraft.world.level.Level;
import net.minecraft.world.phys.Vec3;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.valkyrienskies.core.api.ships.Ship;
import org.valkyrienskies.mod.common.VSGameUtilsKt;
import org.valkyrienskies.mod.common.util.VectorConversionsMCKt;
import org.valkyrienskies.mod.mixin.mod_compat.create.behaviour.MixinLinkBehaviour;

@Mixin(VoidLinkBehaviour.class)
public class MixinVoidLinkBehaviour {

/**
* Identical to {@link MixinLinkBehaviour} but for Create: Utilities Void link
*/
@Redirect(
method = "testHit",
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/world/phys/Vec3;subtract(Lnet/minecraft/world/phys/Vec3;)Lnet/minecraft/world/phys/Vec3;"
)
)
public Vec3 redirectSubtract(Vec3 instance, Vec3 vec) {
Level level = ((VoidLinkBehaviour) (Object) this).getWorld();

Vec3 pos1 = instance;
Vec3 pos2 = vec;

if (level != null) {
Ship ship1 = VSGameUtilsKt.getShipManagingPos(level, pos1.x, pos1.y, pos1.z);
Ship ship2 = VSGameUtilsKt.getShipManagingPos(level, pos2.x, pos2.y, pos2.z);
if (ship1 != null && ship2 == null) {
pos2 = VectorConversionsMCKt.toMinecraft(
ship1.getWorldToShip().transformPosition(VectorConversionsMCKt.toJOML(pos2))
);
} else if (ship1 == null && ship2 != null) {
pos1 = VectorConversionsMCKt.toMinecraft(
ship2.getWorldToShip().transformPosition(VectorConversionsMCKt.toJOML(pos1))
);
}
}
return pos1.subtract(pos2);
}

}
4 changes: 2 additions & 2 deletions common/src/main/resources/valkyrienskies-common.mixins.json
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@
"mod_compat.create.packets.MixinTrainRelocationPacket",
"mod_compat.create.pr.MixinSeatBlock",
"mod_compat.create_big_cannons.MixinPitchOrientedContraptionEntity",
"mod_compat.create_utilities.MixinVoidLinkBehaviour",
"mod_compat.reachentityattributes.MixinReachEntityAttributes",
"server.MixinMinecraftServer",
"server.MixinPlayerList",
Expand Down Expand Up @@ -158,9 +159,8 @@
"mod_compat.create.client.MixinSoundScapes",
"mod_compat.create.client.MixinTileEntityRenderHelper",
"mod_compat.create.client.MixinTrainRelocator",
"mod_compat.create.client.trackOutlines.MixinBigOutlines",
"mod_compat.create.client.trackOutlines.MixinTrackBlockOutline",
"mod_compat.create.client.MixinValueBox",
"mod_compat.create.client.trackOutlines.MixinBigOutlines",
"mod_compat.flywheel.InstancingEngineAccessor",
"mod_compat.flywheel.MixinBlockEntityInstanceManager",
"mod_compat.flywheel.MixinInstanceManager",
Expand Down
4 changes: 4 additions & 0 deletions fabric/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ dependencies {
include(modImplementation("net.fabricmc:fabric-language-kotlin:${kotlin_fabric_version}"))
include(modImplementation("me.shedaniel.cloth:cloth-config-fabric:${cloth_config_version}"))

modCompileOnly("maven.modrinth:create-utilities:${create_utilities_version}")
modImplementation("maven.modrinth:sodium:${sodium_version}")
// Disable indium until we update sodium to newer versions
// modRuntimeOnly("maven.modrinth:indium:${indium_version}")
Expand All @@ -48,6 +49,9 @@ dependencies {
// Depend on the fabric API
modImplementation("net.fabricmc.fabric-api:fabric-api:${rootProject.fabric_api_version}")

modImplementation("teamreborn:energy:${energy_version}") {
transitive = false
}

implementation("org.valkyrienskies.core:impl:${rootProject.vs_core_version}") {
exclude module: "netty-buffer"
Expand Down
2 changes: 1 addition & 1 deletion fabric/gradle.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
loader_platform=Fabric
create_version=0.5.1-c-build.1160+mc1.19.2
create_version=0.5.1-f-build.1335+mc1.20.1
# https://github.com/Fabricators-of-Create/Create/blob/4724359545de070788221dbb6387c31e582e9d45/gradle.properties#L24
config_api_id=4583000
# https://github.com/Fabricators-of-Create/Create/blob/4724359545de070788221dbb6387c31e582e9d45/gradle.properties#L25
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.valkyrienskies.mod.mixin.mod_compat.create.client.trackOutlines;
package org.valkyrienskies.mod.fabric.mixin.compat.create.client.trackOutlines;

import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
"compat.create.MixinBlockBreakingKineticTileEntity",
"compat.create.MixinBlocks",
"compat.create.MixinControlledContraptionEntity",
"compat.create.client.trackOutlines.MixinTrackBlockOutline",
"compat.sodium.MixinRenderSectionManager",
"feature.explosions.ClipContextMixin",
"server.network.MixinServerGamePacketListenerImpl",
Expand Down
4 changes: 4 additions & 0 deletions forge/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,10 @@ dependencies {
// CC Tweaked
modCompileOnly("maven.modrinth:cc-tweaked:${cc_tweaked_version}")

modCompileOnly("maven.modrinth:create-utilities:0.2.0+1.20.1")
modImplementation("teamreborn:energy:${energy_version}") {
transitive = false
}
// TIS-3d
modCompileOnly("maven.modrinth:tis3d:${tis3d_version}")

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
package org.valkyrienskies.mod.forge.mixin.compat.create.client.trackOutlines;

import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import com.simibubi.create.content.trains.track.TrackBlockOutline;
import com.simibubi.create.content.trains.track.TrackBlockOutline.BezierPointSelection;
import net.minecraft.client.Camera;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.core.BlockPos;
import net.minecraft.world.level.Level;
import net.minecraft.world.phys.BlockHitResult;
import net.minecraft.world.phys.Vec3;
import net.minecraftforge.client.event.RenderHighlightEvent.Block;
import org.joml.Quaterniond;
import org.joml.Vector3d;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.ModifyArg;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
import org.valkyrienskies.core.api.ships.Ship;
import org.valkyrienskies.core.impl.game.ships.ShipObjectClient;
import org.valkyrienskies.mod.common.VSClientGameUtils;
import org.valkyrienskies.mod.common.VSGameUtilsKt;
import org.valkyrienskies.mod.common.util.VectorConversionsMCKt;

@Mixin(value = TrackBlockOutline.class, remap = false)
public class MixinTrackBlockOutline {
@Unique
private static Vec3 valkyrienskies$cameraVec3;
@Unique
private static Vec3 valkyrienskies$vec;
@Unique
private static Vec3 valkyrienskies$angles;

@Inject(method = "drawCurveSelection(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/world/phys/Vec3;)V",
at = @At(value = "INVOKE",
target = "Lcom/simibubi/create/content/trains/track/TrackBlockOutline$BezierPointSelection;angles()Lnet/minecraft/world/phys/Vec3;"),
locals = LocalCapture.CAPTURE_FAILHARD)
private static void harvestDrawCurveSelection(final PoseStack ms, final MultiBufferSource buffer, final Vec3 camera,
final CallbackInfo ci, final Minecraft mc,
final BezierPointSelection result, final VertexConsumer vb, final Vec3 vec) {

valkyrienskies$cameraVec3 = camera;
valkyrienskies$vec = result.vec();
valkyrienskies$angles = result.angles();
}

@ModifyArg(method = "drawCurveSelection(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/world/phys/Vec3;)V",
at = @At(value = "INVOKE",
target = "Lcom/simibubi/create/content/trains/track/TrackBlockOutline;renderShape(Lnet/minecraft/world/phys/shapes/VoxelShape;Lcom/mojang/blaze3d/vertex/PoseStack;Lcom/mojang/blaze3d/vertex/VertexConsumer;Ljava/lang/Boolean;)V"),
index = 1)
private static PoseStack redirectTransformStackTranslate(final PoseStack ms) {

final Level level = Minecraft.getInstance().level;
if (level != null && valkyrienskies$vec != null) {
final ShipObjectClient ship;
if ((ship = (ShipObjectClient) VSGameUtilsKt.getShipManagingPos(level, valkyrienskies$vec)) != null) {
final Quaterniond rotation = new Quaterniond().identity();
final Quaterniond yawQuat = new Quaterniond().rotateY(valkyrienskies$angles.y);
final Quaterniond pitchQuat = new Quaterniond().rotateX(valkyrienskies$angles.x);

yawQuat.mul(pitchQuat, rotation);
ship.getRenderTransform().getShipToWorldRotation().mul(rotation, rotation);

final Vector3d worldVec = ship.getRenderTransform().getShipToWorld()
.transformPosition(
new Vector3d(valkyrienskies$vec.x, valkyrienskies$vec.y + .125, valkyrienskies$vec.z),
new Vector3d());

ms.popPose();
ms.pushPose();
ms.translate(worldVec.x - valkyrienskies$cameraVec3.x,
worldVec.y - valkyrienskies$cameraVec3.y,
worldVec.z - valkyrienskies$cameraVec3.z);
ms.mulPose(VectorConversionsMCKt.toFloat(rotation));
ms.translate(-.5, -.125f, -.5);
}
}
return ms;
}

@Unique
private static Camera valkyrienskies$info;
@Unique
private static BlockHitResult valkyrienskies$hitResult;

@ModifyArg(method = "drawCustomBlockSelection", at = @At(value = "INVOKE",
target = "Lnet/minecraft/world/level/border/WorldBorder;isWithinBounds(Lnet/minecraft/core/BlockPos;)Z"))
private static BlockPos modIsWithinBounds(final BlockPos blockPos) {
final Level level = Minecraft.getInstance().level;
if (level != null) {
final Ship ship;
if ((ship = VSGameUtilsKt.getShipManagingPos(level, blockPos)) != null) {
return BlockPos.containing(VectorConversionsMCKt.toMinecraft(ship.getShipToWorld()
.transformPosition(VectorConversionsMCKt.toJOMLD(blockPos))));
}
}
return blockPos;
}

@Inject(method = "drawCustomBlockSelection",
at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/vertex/PoseStack;translate(DDD)V"))
private static void harvest(Block event, CallbackInfo ci) {
valkyrienskies$info = event.getCamera();
valkyrienskies$hitResult = (BlockHitResult) event.getTarget();
}

@Redirect(method = "drawCustomBlockSelection",
at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/vertex/PoseStack;translate(DDD)V"))
private static void redirectTranslate(final PoseStack instance, final double d, final double e, final double f) {
final Level level = Minecraft.getInstance().level;
if (level != null) {
final ShipObjectClient ship;
if ((ship = (ShipObjectClient) VSGameUtilsKt.getShipManagingPos(level,
valkyrienskies$hitResult.getBlockPos())) != null) {
final Vec3 camPos = valkyrienskies$info.getPosition();
VSClientGameUtils.transformRenderWithShip(ship.getRenderTransform(), instance,
valkyrienskies$hitResult.getBlockPos(),
camPos.x, camPos.y, camPos.z);
} else {
instance.translate(d, e, f);
}
} else {
instance.translate(d, e, f);
}
}
}
3 changes: 2 additions & 1 deletion forge/src/main/resources/valkyrienskies-forge.mixins.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,12 @@
"compat.create.MixinBlockBreakingKineticTileEntity",
"compat.create.MixinBlocks",
"compat.create.MixinControlledContraptionEntity",
"compat.create.client.trackOutlines.MixinTrackBlockOutline",
"compat.immersivengineering.MixinBlockEntityInventory",
"compat.modular_routers.MixinRouterMenu",
"compat.tfc.MixinTFCChunkGenerator",
"compat.thermalexpansion.MixinTileCoFH",
"compat.tis3d.MixinInfraredPacketEntity",
"compat.modular_routers.MixinRouterMenu",
"feature.forge_interact.MixinIForgePlayer",
"feature.water_in_ships_entity.MixinEntity",
"world.level.block.FireMixin"
Expand Down
8 changes: 5 additions & 3 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -9,22 +9,24 @@ maven_group=org.valkyrienskies.mod
architectury_version=9.1.12

# https://fabricmc.net/develop/
fabric_loader_version=0.14.24
fabric_loader_version=0.15.7

# https://fabricmc.net/develop/
fabric_api_version=0.90.7+1.20.1
fabric_api_version=0.92.0+1.20.1

# https://files.minecraftforge.net/net/minecraftforge/forge/
forge_version=1.20.1-47.2.0

# https://modrinth.com/mod/create-fabric/versions
create_fabric_version=0.5.1-d-build.1161+mc1.20.1
create_fabric_version=0.5.1-f-build.1335+mc1.20.1

# https://github.com/Fabricators-of-Create/Create/blob/mc1.19/fabric/dev/gradle.properties
flywheel_version_fabric=0.6.9-6

# https://modrinth.com/mod/create-big-cannons/versions
createbigcannons_version= 0.5.2.a
create_utilities_version=0.2.1+1.20.1
energy_version=2.3.0

vs_core_version=1.1.0+b19b27c4a4
# Prevent kotlin from autoincluding stdlib as a dependency, which breaks
Expand Down

0 comments on commit d9e0db7

Please sign in to comment.