diff --git a/build.gradle b/build.gradle index c82644a..5cf63a5 100644 --- a/build.gradle +++ b/build.gradle @@ -192,6 +192,9 @@ dependencies { implementation(fg.deobf("com.simibubi.create:create-1.20.1:0.5.1.j")) implementation fg.deobf(files("./libs/api-1.1.0+b19b27c4a4.jar")) + implementation fg.deobf("maven.modrinth:create-copies-cats:0.0.1-1.20.1") + //implementation fg.deobf(files("./libs/framed/FramedBlocks-9.3.0.jar")) + // For more info: // http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html diff --git a/src/main/java/space/eptaproject/vmodaddon/Vmodaddon.java b/src/main/java/space/eptaproject/vmodaddon/Vmodaddon.java index f75c6d6..07db39f 100644 --- a/src/main/java/space/eptaproject/vmodaddon/Vmodaddon.java +++ b/src/main/java/space/eptaproject/vmodaddon/Vmodaddon.java @@ -18,8 +18,10 @@ import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.registries.RegistryObject; import org.slf4j.Logger; -import space.eptaproject.vmodaddon.block.TBB; -import space.eptaproject.vmodaddon.block.TBBE; +import space.eptaproject.vmodaddon.block.CompactBackupBlock; +import space.eptaproject.vmodaddon.block.CompactBackupBlockEntity; +import space.eptaproject.vmodaddon.block.TrackBackupBlock; +import space.eptaproject.vmodaddon.block.TrackBackupBlockEntity; import space.eptaproject.vmodaddon.util.ModRegistry; @Mod(Vmodaddon.MODID) @@ -31,13 +33,15 @@ public class Vmodaddon { public static final RegistryObject SHIP_VOID_BLOCK; - public static final RegistryObject TRAK_BUK; + public static final RegistryObject COMPACT_BACKUP; + + public static final RegistryObject> MY_BLOCK_ENTITY; + public static final RegistryObject> COMPACT_BACKUP_BLOCK_ENTITY; - public static final RegistryObject> MY_BLOCK_ENTITY; public static RegistryObject MY_BLOCK_ITEM; - public static RegistryObject SHIP_VOID_ITEM; + public static RegistryObject COMPACT_BACKUP_ITEM; public static final ModRegistry REGISTRY; @@ -47,15 +51,18 @@ public class Vmodaddon { static { REGISTRY = new ModRegistry(MODID); - TRAK_BUK = REGISTRY.BLOCKS.register("track_b", () -> new TBB(BlockBehaviour.Properties.of().mapColor(MapColor.STONE))); + TRAK_BUK = REGISTRY.BLOCKS.register("track_b", () -> new TrackBackupBlock(BlockBehaviour.Properties.of().mapColor(MapColor.STONE))); SHIP_VOID_BLOCK = REGISTRY.BLOCKS.register("ship_void", () -> new Block(BlockBehaviour.Properties.of().mapColor(MapColor.STONE))); + COMPACT_BACKUP = REGISTRY.BLOCKS.register("compact_backup", () -> new CompactBackupBlock(BlockBehaviour.Properties.of().mapColor(MapColor.STONE))); - MY_BLOCK_ENTITY = REGISTRY.BLOCK_ENTITIES.register("my_block_entity", () -> BlockEntityType.Builder.of(TBBE::new, TRAK_BUK.get()).build(null)); + MY_BLOCK_ENTITY = REGISTRY.BLOCK_ENTITIES.register("track_backup", () -> BlockEntityType.Builder.of(TrackBackupBlockEntity::new, TRAK_BUK.get()).build(null)); + COMPACT_BACKUP_BLOCK_ENTITY = REGISTRY.BLOCK_ENTITIES.register("compact_backup", () -> BlockEntityType.Builder.of(CompactBackupBlockEntity::new, COMPACT_BACKUP.get()).build(null)); EXAMPLE_TAB = REGISTRY.TabBuilder() .push((registry) -> { MY_BLOCK_ITEM = registry.register("track_b", () -> new BlockItem(TRAK_BUK.get(), new Item.Properties())); SHIP_VOID_ITEM = registry.register("ship_void", () -> new BlockItem(SHIP_VOID_BLOCK.get(), new Item.Properties())); + COMPACT_BACKUP_ITEM = registry.register("compact_backup", () -> new BlockItem(COMPACT_BACKUP.get(), new Item.Properties())); }) .build("vmodaddon", Items.BEDROCK.getDefaultInstance()); } diff --git a/src/main/java/space/eptaproject/vmodaddon/block/CompactBackupBlock.java b/src/main/java/space/eptaproject/vmodaddon/block/CompactBackupBlock.java new file mode 100644 index 0000000..1447287 --- /dev/null +++ b/src/main/java/space/eptaproject/vmodaddon/block/CompactBackupBlock.java @@ -0,0 +1,23 @@ +package space.eptaproject.vmodaddon.block; + +import com.simibubi.create.foundation.block.IBE; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntityType; +import space.eptaproject.vmodaddon.Vmodaddon; + +public class CompactBackupBlock extends Block implements IBE { + + public CompactBackupBlock(Properties properties) { + super(properties); + } + + @Override + public BlockEntityType getBlockEntityType() { + return Vmodaddon.COMPACT_BACKUP_BLOCK_ENTITY.get(); + } + + @Override + public Class getBlockEntityClass() { + return CompactBackupBlockEntity.class; + } +} diff --git a/src/main/java/space/eptaproject/vmodaddon/block/CompactBackupBlockEntity.java b/src/main/java/space/eptaproject/vmodaddon/block/CompactBackupBlockEntity.java new file mode 100644 index 0000000..0e9bbec --- /dev/null +++ b/src/main/java/space/eptaproject/vmodaddon/block/CompactBackupBlockEntity.java @@ -0,0 +1,138 @@ +package space.eptaproject.vmodaddon.block; + +import edn.stratodonut.drivebywire.wire.ShipWireNetworkManager; +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.Rotation; +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 CompactBackupBlockEntity extends BlockEntity { + private CompoundTag pendingBackupData; + + public CompactBackupBlockEntity(BlockPos p_155229_, BlockState p_155230_) { + super(Vmodaddon.COMPACT_BACKUP_BLOCK_ENTITY.get(), p_155229_, p_155230_); + } + + @Override + protected void saveAdditional(CompoundTag tag) { + super.saveAdditional(tag); + ServerShip ship = (ServerShip) VSGameUtilsKt.getShipObjectManagingPos(this.level, getBlockPos()); + if (ship != null) { + { + PhysicsTrackController physicsTrackController = ship.getAttachment(PhysicsTrackController.class); + IPhysicsTrackController controller = (IPhysicsTrackController) physicsTrackController; + if (physicsTrackController != null) { + CompoundTag PhysicsTrackControllerTag = new CompoundTag(); + + PhysicsTrackControllerTag.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()); + + PhysicsTrackControllerTag.put("suspensionAdjust", suspensionAdjust); + } + + tag.put("PhysicsTrackController", PhysicsTrackControllerTag); + } + } + { + SimpleWheelController simpleWheelController = ship.getAttachment(SimpleWheelController.class); + ISimpleWheelController controller = (ISimpleWheelController) simpleWheelController; + if (simpleWheelController != null) { + CompoundTag SimpleWheelControllerTag = new CompoundTag(); + + SimpleWheelControllerTag.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()); + + SimpleWheelControllerTag.put("suspensionAdjust", suspensionAdjust); + } + + tag.put("SimpleWheelController", SimpleWheelControllerTag); + } + } + } + + ship = (ServerShip) VSGameUtilsKt.getShipManagingPos(this.level, this.getBlockPos()); + + if (this.level != null) { + if (this.pendingBackupData == null) { + this.pendingBackupData = new CompoundTag(); + } + + ShipWireNetworkManager.get(ship).ifPresent((m) -> this.pendingBackupData.merge(m.serialiseToNbt(this.level, this.getBlockPos()))); + + if (this.pendingBackupData != null) { + tag.put("WireNetwork", this.pendingBackupData); + } + + } + } + + @Override + public void load(CompoundTag tag) { + super.load(tag); + + ServerShip ship = (ServerShip) VSGameUtilsKt.getShipObjectManagingPos(this.level, getBlockPos()); + if (ship != null) { + if (tag.contains("SimpleWheelController")) { + CompoundTag L = tag.getCompound("SimpleWheelController"); + SimpleWheelController controller2 = SimpleWheelController.getOrCreate(ship); + if (L.contains("SuspensionStiffness")) { + ((ISimpleWheelController) controller2).setSuspensionStiffness(L.getFloat("SuspensionStiffness")); + } + if (L.contains("suspensionAdjust")) { + CompoundTag suspensionAdjust = L.getCompound("suspensionAdjust"); + + ((ISimpleWheelController) controller2).setSuspensionAdjust(new Vector3d(new Vector3d(suspensionAdjust.getDouble("x"), suspensionAdjust.getDouble("y"), suspensionAdjust.getDouble("z")))); + } + } + + if (tag.contains("PhysicsTrackController")) { + CompoundTag L = tag.getCompound("PhysicsTrackController"); + PhysicsTrackController controller = PhysicsTrackController.getOrCreate(ship); + if (L.contains("SuspensionStiffness")) { + ((IPhysicsTrackController) controller).setSuspensionStiffness(L.getFloat("SuspensionStiffness")); + } + if (L.contains("suspensionAdjust")) { + CompoundTag suspensionAdjust = L.getCompound("suspensionAdjust"); + + + ((IPhysicsTrackController) controller).setSuspensionAdjust(new Vector3d(suspensionAdjust.getDouble("x"), suspensionAdjust.getDouble("y"), suspensionAdjust.getDouble("z"))); + } + } + } + + ship = (ServerShip) VSGameUtilsKt.getShipManagingPos(this.level, getBlockPos()); + if (ship != null) { + if (tag.contains("WireNetwork", 10)) { + ShipWireNetworkManager.loadIfNotExists(ship, level, tag.getCompound("WireNetwork"), this.getBlockPos(), Rotation.NONE); + + this.pendingBackupData = tag.getCompound("WireNetwork"); + } + } + } +} diff --git a/src/main/java/space/eptaproject/vmodaddon/block/TBBE.java b/src/main/java/space/eptaproject/vmodaddon/block/TBBE.java deleted file mode 100644 index 21a711b..0000000 --- a/src/main/java/space/eptaproject/vmodaddon/block/TBBE.java +++ /dev/null @@ -1,68 +0,0 @@ -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 { - public TBBE(BlockPos p_155229_, BlockState p_155230_) { - super(Vmodaddon.MY_BLOCK_ENTITY.get(), p_155229_, p_155230_); - } - - @Override - protected void saveAdditional(CompoundTag tag) { - super.saveAdditional(tag); - ServerShip ship = (ServerShip) VSGameUtilsKt.getShipObjectManagingPos(this.level, getBlockPos()); - if (ship != null) { - 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); - } - } - } - } - - @Override - public void load(CompoundTag tag) { - super.load(tag); - - 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/block/TBB.java b/src/main/java/space/eptaproject/vmodaddon/block/TrackBackupBlock.java similarity index 53% rename from src/main/java/space/eptaproject/vmodaddon/block/TBB.java rename to src/main/java/space/eptaproject/vmodaddon/block/TrackBackupBlock.java index 01b93b7..ddc4b41 100644 --- a/src/main/java/space/eptaproject/vmodaddon/block/TBB.java +++ b/src/main/java/space/eptaproject/vmodaddon/block/TrackBackupBlock.java @@ -5,19 +5,19 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntityType; import space.eptaproject.vmodaddon.Vmodaddon; -public class TBB extends Block implements IBE { +public class TrackBackupBlock extends Block implements IBE { - public TBB(Properties properties) { + public TrackBackupBlock(Properties properties) { super(properties); } @Override - public BlockEntityType getBlockEntityType() { + public BlockEntityType getBlockEntityType() { return Vmodaddon.MY_BLOCK_ENTITY.get(); } @Override - public Class getBlockEntityClass() { - return TBBE.class; + public Class getBlockEntityClass() { + return TrackBackupBlockEntity.class; } } diff --git a/src/main/java/space/eptaproject/vmodaddon/block/TrackBackupBlockEntity.java b/src/main/java/space/eptaproject/vmodaddon/block/TrackBackupBlockEntity.java new file mode 100644 index 0000000..95503e5 --- /dev/null +++ b/src/main/java/space/eptaproject/vmodaddon/block/TrackBackupBlockEntity.java @@ -0,0 +1,108 @@ +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 TrackBackupBlockEntity extends BlockEntity { + public TrackBackupBlockEntity(BlockPos p_155229_, BlockState p_155230_) { + super(Vmodaddon.MY_BLOCK_ENTITY.get(), p_155229_, p_155230_); + } + + @Override + protected void saveAdditional(CompoundTag tag) { + super.saveAdditional(tag); + ServerShip ship = (ServerShip) VSGameUtilsKt.getShipObjectManagingPos(this.level, getBlockPos()); + if (ship != null) { + { + PhysicsTrackController physicsTrackController = ship.getAttachment(PhysicsTrackController.class); + IPhysicsTrackController controller = (IPhysicsTrackController) physicsTrackController; + if (physicsTrackController != null) { + CompoundTag PhysicsTrackControllerTag = new CompoundTag(); + + PhysicsTrackControllerTag.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()); + + PhysicsTrackControllerTag.put("suspensionAdjust", suspensionAdjust); + } + + tag.put("PhysicsTrackController", PhysicsTrackControllerTag); + } + } + { + SimpleWheelController simpleWheelController = ship.getAttachment(SimpleWheelController.class); + ISimpleWheelController controller = (ISimpleWheelController) simpleWheelController; + if (simpleWheelController != null) { + CompoundTag SimpleWheelControllerTag = new CompoundTag(); + + SimpleWheelControllerTag.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()); + + SimpleWheelControllerTag.put("suspensionAdjust", suspensionAdjust); + } + + tag.put("SimpleWheelController", SimpleWheelControllerTag); + } + } + } + } + + @Override + public void load(CompoundTag tag) { + super.load(tag); + + ServerShip ship = (ServerShip) VSGameUtilsKt.getShipObjectManagingPos(this.level, getBlockPos()); + if (ship != null) { + if (tag.contains("SimpleWheelController")) { + CompoundTag L = tag.getCompound("SimpleWheelController"); + SimpleWheelController controller2 = SimpleWheelController.getOrCreate(ship); + if (L.contains("SuspensionStiffness")) { + ((ISimpleWheelController) controller2).setSuspensionStiffness(L.getFloat("SuspensionStiffness")); + } + if (L.contains("suspensionAdjust")) { + CompoundTag suspensionAdjust = L.getCompound("suspensionAdjust"); + + ((ISimpleWheelController) controller2).setSuspensionAdjust(new Vector3d(new Vector3d(suspensionAdjust.getDouble("x"), suspensionAdjust.getDouble("y"), suspensionAdjust.getDouble("z")))); + } + } + + if (tag.contains("PhysicsTrackController")) { + CompoundTag L = tag.getCompound("PhysicsTrackController"); + PhysicsTrackController controller = PhysicsTrackController.getOrCreate(ship); + if (L.contains("SuspensionStiffness")) { + ((IPhysicsTrackController) controller).setSuspensionStiffness(L.getFloat("SuspensionStiffness")); + } + if (L.contains("suspensionAdjust")) { + CompoundTag suspensionAdjust = L.getCompound("suspensionAdjust"); + + + ((IPhysicsTrackController) controller).setSuspensionAdjust(new Vector3d(suspensionAdjust.getDouble("x"), suspensionAdjust.getDouble("y"), suspensionAdjust.getDouble("z"))); + } + } + } + } +} diff --git a/src/main/java/space/eptaproject/vmodaddon/mixin/MixinPlugin.java b/src/main/java/space/eptaproject/vmodaddon/mixin/MixinPlugin.java index eec9204..2229bee 100644 --- a/src/main/java/space/eptaproject/vmodaddon/mixin/MixinPlugin.java +++ b/src/main/java/space/eptaproject/vmodaddon/mixin/MixinPlugin.java @@ -39,7 +39,9 @@ public class MixinPlugin implements IMixinConfigPlugin { return List.of( "BlockPaletteHashMapV1Mixin", "PhysicsTrackControllerAccessor", - "PhysicsTrackControllerMixin" + "PhysicsTrackControllerMixin", + "SimpleWheelControllerAccessor", + "SimpleWheelControllerMixin" ); } @Override diff --git a/src/main/java/space/eptaproject/vmodaddon/mixins/SimpleWheelControllerAccessor.java b/src/main/java/space/eptaproject/vmodaddon/mixins/SimpleWheelControllerAccessor.java index ae436c4..f77cd80 100644 --- a/src/main/java/space/eptaproject/vmodaddon/mixins/SimpleWheelControllerAccessor.java +++ b/src/main/java/space/eptaproject/vmodaddon/mixins/SimpleWheelControllerAccessor.java @@ -7,6 +7,12 @@ import org.spongepowered.asm.mixin.gen.Accessor; @Mixin(SimpleWheelController.class) public interface SimpleWheelControllerAccessor { + @Accessor(value = "suspensionStiffness", remap = false) + float getSuspensionStiffness(); + + @Accessor(value = "suspensionStiffness", remap = false) + void setSuspensionStiffness(float val); + @Accessor(value = "suspensionAdjust", remap = false) Vector3dc getSuspensionAdjust(); diff --git a/src/main/java/space/eptaproject/vmodaddon/mixins/SimpleWheelControllerMixin.java b/src/main/java/space/eptaproject/vmodaddon/mixins/SimpleWheelControllerMixin.java new file mode 100644 index 0000000..76e5a3d --- /dev/null +++ b/src/main/java/space/eptaproject/vmodaddon/mixins/SimpleWheelControllerMixin.java @@ -0,0 +1,20 @@ +package space.eptaproject.vmodaddon.mixins; + +import edn.stratodonut.trackwork.tracks.forces.SimpleWheelController; +import org.joml.Math; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.Shadow; +import space.eptaproject.vmodaddon.Config; +import space.eptaproject.vmodaddon.ISimpleWheelController; + +@Mixin(SimpleWheelController.class) +public abstract class SimpleWheelControllerMixin implements ISimpleWheelController { + @Shadow private volatile float suspensionStiffness; + + @Overwrite(remap = false) + public final float setDamperCoefficient(float delta) { + this.suspensionStiffness = Math.clamp(1, Config.Suspension_Stiffness_LIMIT.get(), this.suspensionStiffness + delta); + return this.suspensionStiffness; + } +}