Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixed patch f crash and added some support for Create utilities #743

Merged
merged 3 commits into from
Mar 30, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading