diff --git a/src/main/java/space/eptaproject/vmodaddon/Config.java b/src/main/java/space/eptaproject/vmodaddon/Config.java index c94e88f..2a78cc5 100644 --- a/src/main/java/space/eptaproject/vmodaddon/Config.java +++ b/src/main/java/space/eptaproject/vmodaddon/Config.java @@ -60,7 +60,7 @@ public class Config { Suspension_Stiffness_LIMIT = builder .comment("track suspension stiffness") - .defineInRange("SuspensionStiffness", 4, 0, 20); + .defineInRange("SuspensionStiffness", 4, 1, 20); builder.pop(); COMMON_CONFIG = builder.build(); diff --git a/src/main/java/space/eptaproject/vmodaddon/ISimpleWheelController.java b/src/main/java/space/eptaproject/vmodaddon/ISimpleWheelController.java new file mode 100644 index 0000000..2516b5b --- /dev/null +++ b/src/main/java/space/eptaproject/vmodaddon/ISimpleWheelController.java @@ -0,0 +1,6 @@ +package space.eptaproject.vmodaddon; + +import space.eptaproject.vmodaddon.mixins.SimpleWheelControllerAccessor; + +public interface ISimpleWheelController extends SimpleWheelControllerAccessor { +} diff --git a/src/main/java/space/eptaproject/vmodaddon/block/TBBE.java b/src/main/java/space/eptaproject/vmodaddon/block/TBBE.java index 38c7cb7..21a711b 100644 --- a/src/main/java/space/eptaproject/vmodaddon/block/TBBE.java +++ b/src/main/java/space/eptaproject/vmodaddon/block/TBBE.java @@ -1,13 +1,17 @@ package space.eptaproject.vmodaddon.block; import edn.stratodonut.trackwork.tracks.forces.PhysicsTrackController; +import edn.stratodonut.trackwork.tracks.forces.SimpleWheelController; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; +import org.joml.Vector3d; +import org.joml.Vector3dc; import org.valkyrienskies.core.api.ships.ServerShip; import org.valkyrienskies.mod.common.VSGameUtilsKt; import space.eptaproject.vmodaddon.IPhysicsTrackController; +import space.eptaproject.vmodaddon.ISimpleWheelController; import space.eptaproject.vmodaddon.Vmodaddon; public class TBBE extends BlockEntity { @@ -20,9 +24,21 @@ public class TBBE extends BlockEntity { super.saveAdditional(tag); ServerShip ship = (ServerShip) VSGameUtilsKt.getShipObjectManagingPos(this.level, getBlockPos()); if (ship != null) { - PhysicsTrackController controller = ship.getAttachment(PhysicsTrackController.class); - if (controller != null) { - tag.putFloat("SuspensionStiffness", ((IPhysicsTrackController) controller).getSuspensionStiffness()); + PhysicsTrackController physicsTrackController = ship.getAttachment(PhysicsTrackController.class); + IPhysicsTrackController controller = (IPhysicsTrackController) physicsTrackController; + if (physicsTrackController != null) { + tag.putFloat("SuspensionStiffness", controller.getSuspensionStiffness()); + { + CompoundTag suspensionAdjust = new CompoundTag(); + + Vector3dc vec = controller.getSuspensionAdjust(); + + suspensionAdjust.putDouble("x", vec.x()); + suspensionAdjust.putDouble("y", vec.y()); + suspensionAdjust.putDouble("z", vec.z()); + + tag.put("suspensionAdjust", suspensionAdjust); + } } } } @@ -31,12 +47,22 @@ public class TBBE extends BlockEntity { public void load(CompoundTag tag) { super.load(tag); - if (tag.contains("SuspensionStiffness")) { - ServerShip ship = (ServerShip) VSGameUtilsKt.getShipObjectManagingPos(this.level, getBlockPos()); - if (ship != null) { - PhysicsTrackController controller = PhysicsTrackController.getOrCreate(ship); + ServerShip ship = (ServerShip) VSGameUtilsKt.getShipObjectManagingPos(this.level, getBlockPos()); + if (ship != null) { + PhysicsTrackController controller = PhysicsTrackController.getOrCreate(ship); + SimpleWheelController controller2 = SimpleWheelController.getOrCreate(ship); + if (tag.contains("SuspensionStiffness")) { ((IPhysicsTrackController) controller).setSuspensionStiffness(tag.getFloat("SuspensionStiffness")); } + + if (tag.contains("suspensionAdjust")) { + CompoundTag suspensionAdjust = tag.getCompound("suspensionAdjust"); + + Vector3dc vector3dc = new Vector3d(suspensionAdjust.getDouble("x"), suspensionAdjust.getDouble("y"), suspensionAdjust.getDouble("z")); + + ((IPhysicsTrackController) controller).setSuspensionAdjust(new Vector3d(vector3dc)); + ((ISimpleWheelController) controller2).setSuspensionAdjust(new Vector3d(vector3dc)); + } } } } diff --git a/src/main/java/space/eptaproject/vmodaddon/mixins/PhysicsTrackControllerAccessor.java b/src/main/java/space/eptaproject/vmodaddon/mixins/PhysicsTrackControllerAccessor.java index 842bbc9..fc629df 100644 --- a/src/main/java/space/eptaproject/vmodaddon/mixins/PhysicsTrackControllerAccessor.java +++ b/src/main/java/space/eptaproject/vmodaddon/mixins/PhysicsTrackControllerAccessor.java @@ -1,6 +1,7 @@ package space.eptaproject.vmodaddon.mixins; import edn.stratodonut.trackwork.tracks.forces.PhysicsTrackController; +import org.joml.Vector3dc; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; @@ -11,4 +12,10 @@ public interface PhysicsTrackControllerAccessor { @Accessor(value = "suspensionStiffness", remap = false) void setSuspensionStiffness(float val); + + @Accessor(value = "suspensionAdjust", remap = false) + Vector3dc getSuspensionAdjust(); + + @Accessor(value = "suspensionAdjust", remap = false) + void setSuspensionAdjust(Vector3dc vector3d); } diff --git a/src/main/java/space/eptaproject/vmodaddon/mixins/PhysicsTrackControllerMixin.java b/src/main/java/space/eptaproject/vmodaddon/mixins/PhysicsTrackControllerMixin.java index ca38712..ad1c55c 100644 --- a/src/main/java/space/eptaproject/vmodaddon/mixins/PhysicsTrackControllerMixin.java +++ b/src/main/java/space/eptaproject/vmodaddon/mixins/PhysicsTrackControllerMixin.java @@ -32,7 +32,7 @@ public abstract class PhysicsTrackControllerMixin implements IPhysicsTrackContro */ @Overwrite(remap = false) public final float setDamperCoefficient(float delta) { - this.suspensionStiffness = Math.clamp(0, Config.Suspension_Stiffness_LIMIT.get(), this.suspensionStiffness + delta); + this.suspensionStiffness = Math.clamp(1, Config.Suspension_Stiffness_LIMIT.get(), this.suspensionStiffness + delta); return this.suspensionStiffness; } } diff --git a/src/main/java/space/eptaproject/vmodaddon/mixins/SimpleWheelControllerAccessor.java b/src/main/java/space/eptaproject/vmodaddon/mixins/SimpleWheelControllerAccessor.java new file mode 100644 index 0000000..ae436c4 --- /dev/null +++ b/src/main/java/space/eptaproject/vmodaddon/mixins/SimpleWheelControllerAccessor.java @@ -0,0 +1,15 @@ +package space.eptaproject.vmodaddon.mixins; + +import edn.stratodonut.trackwork.tracks.forces.SimpleWheelController; +import org.joml.Vector3dc; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(SimpleWheelController.class) +public interface SimpleWheelControllerAccessor { + @Accessor(value = "suspensionAdjust", remap = false) + Vector3dc getSuspensionAdjust(); + + @Accessor(value = "suspensionAdjust", remap = false) + void setSuspensionAdjust(Vector3dc vector3d); +}