This commit is contained in:
p2vman 2025-05-25 20:01:57 +03:00
parent 6fe6b7913e
commit 38085d0b01
6 changed files with 63 additions and 9 deletions

View File

@ -60,7 +60,7 @@ public class Config {
Suspension_Stiffness_LIMIT = builder Suspension_Stiffness_LIMIT = builder
.comment("track suspension stiffness") .comment("track suspension stiffness")
.defineInRange("SuspensionStiffness", 4, 0, 20); .defineInRange("SuspensionStiffness", 4, 1, 20);
builder.pop(); builder.pop();
COMMON_CONFIG = builder.build(); COMMON_CONFIG = builder.build();

View File

@ -0,0 +1,6 @@
package space.eptaproject.vmodaddon;
import space.eptaproject.vmodaddon.mixins.SimpleWheelControllerAccessor;
public interface ISimpleWheelController extends SimpleWheelControllerAccessor {
}

View File

@ -1,13 +1,17 @@
package space.eptaproject.vmodaddon.block; package space.eptaproject.vmodaddon.block;
import edn.stratodonut.trackwork.tracks.forces.PhysicsTrackController; import edn.stratodonut.trackwork.tracks.forces.PhysicsTrackController;
import edn.stratodonut.trackwork.tracks.forces.SimpleWheelController;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState; 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.core.api.ships.ServerShip;
import org.valkyrienskies.mod.common.VSGameUtilsKt; import org.valkyrienskies.mod.common.VSGameUtilsKt;
import space.eptaproject.vmodaddon.IPhysicsTrackController; import space.eptaproject.vmodaddon.IPhysicsTrackController;
import space.eptaproject.vmodaddon.ISimpleWheelController;
import space.eptaproject.vmodaddon.Vmodaddon; import space.eptaproject.vmodaddon.Vmodaddon;
public class TBBE extends BlockEntity { public class TBBE extends BlockEntity {
@ -20,9 +24,21 @@ public class TBBE extends BlockEntity {
super.saveAdditional(tag); super.saveAdditional(tag);
ServerShip ship = (ServerShip) VSGameUtilsKt.getShipObjectManagingPos(this.level, getBlockPos()); ServerShip ship = (ServerShip) VSGameUtilsKt.getShipObjectManagingPos(this.level, getBlockPos());
if (ship != null) { if (ship != null) {
PhysicsTrackController controller = ship.getAttachment(PhysicsTrackController.class); PhysicsTrackController physicsTrackController = ship.getAttachment(PhysicsTrackController.class);
if (controller != null) { IPhysicsTrackController controller = (IPhysicsTrackController) physicsTrackController;
tag.putFloat("SuspensionStiffness", ((IPhysicsTrackController) controller).getSuspensionStiffness()); 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) { public void load(CompoundTag tag) {
super.load(tag); super.load(tag);
if (tag.contains("SuspensionStiffness")) {
ServerShip ship = (ServerShip) VSGameUtilsKt.getShipObjectManagingPos(this.level, getBlockPos()); ServerShip ship = (ServerShip) VSGameUtilsKt.getShipObjectManagingPos(this.level, getBlockPos());
if (ship != null) { if (ship != null) {
PhysicsTrackController controller = PhysicsTrackController.getOrCreate(ship); PhysicsTrackController controller = PhysicsTrackController.getOrCreate(ship);
SimpleWheelController controller2 = SimpleWheelController.getOrCreate(ship);
if (tag.contains("SuspensionStiffness")) {
((IPhysicsTrackController) controller).setSuspensionStiffness(tag.getFloat("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));
}
} }
} }
} }

View File

@ -1,6 +1,7 @@
package space.eptaproject.vmodaddon.mixins; package space.eptaproject.vmodaddon.mixins;
import edn.stratodonut.trackwork.tracks.forces.PhysicsTrackController; import edn.stratodonut.trackwork.tracks.forces.PhysicsTrackController;
import org.joml.Vector3dc;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor; import org.spongepowered.asm.mixin.gen.Accessor;
@ -11,4 +12,10 @@ public interface PhysicsTrackControllerAccessor {
@Accessor(value = "suspensionStiffness", remap = false) @Accessor(value = "suspensionStiffness", remap = false)
void setSuspensionStiffness(float val); void setSuspensionStiffness(float val);
@Accessor(value = "suspensionAdjust", remap = false)
Vector3dc getSuspensionAdjust();
@Accessor(value = "suspensionAdjust", remap = false)
void setSuspensionAdjust(Vector3dc vector3d);
} }

View File

@ -32,7 +32,7 @@ public abstract class PhysicsTrackControllerMixin implements IPhysicsTrackContro
*/ */
@Overwrite(remap = false) @Overwrite(remap = false)
public final float setDamperCoefficient(float delta) { 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; return this.suspensionStiffness;
} }
} }

View File

@ -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);
}