diff --git a/build.gradle b/build.gradle index e158117..de5812d 100644 --- a/build.gradle +++ b/build.gradle @@ -153,6 +153,8 @@ repositories { maven { url = uri("https://maven.tterrag.com/releases") } + + maven { url 'https://squiddev.cc/maven/' } } dependencies { @@ -206,6 +208,8 @@ dependencies { compileOnly 'org.projectlombok:lombok:1.18.20' annotationProcessor 'org.projectlombok:lombok:1.18.20' + implementation fg.deobf("org.squiddev:cc-tweaked-1.19.2:1.101.3") + } diff --git a/src/main/java/space/eptaproject/vmodextras/VmodExtras.java b/src/main/java/space/eptaproject/vmodextras/VmodExtras.java index 23e4483..766b121 100644 --- a/src/main/java/space/eptaproject/vmodextras/VmodExtras.java +++ b/src/main/java/space/eptaproject/vmodextras/VmodExtras.java @@ -1,10 +1,6 @@ package space.eptaproject.vmodextras; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; import com.mojang.logging.LogUtils; -import net.minecraft.client.Minecraft; -import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.*; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntityType; @@ -22,16 +18,10 @@ import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.registries.*; import org.slf4j.Logger; -import space.eptaproject.vmodextras.block.CompactBackupBlock; -import space.eptaproject.vmodextras.block.CompactBackupBlockEntity; -import space.eptaproject.vmodextras.block.TrackBackupBlock; -import space.eptaproject.vmodextras.block.TrackBackupBlockEntity; +import space.eptaproject.vmodextras.block.*; +import space.eptaproject.vmodextras.compact.Compact; import space.eptaproject.vmodextras.util.ModRegistry; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.util.Map; - @Mod(VmodExtras.MODID) public class VmodExtras { public static final String MODID = "vmodextras"; @@ -42,13 +32,16 @@ public class VmodExtras { public static final RegistryObject SHIP_VOID_BLOCK; public static final RegistryObject TRAK_BUK; public static final RegistryObject COMPACT_BACKUP; + public static final RegistryObject ENTITY_BACKUP; public static final RegistryObject> MY_BLOCK_ENTITY; public static final RegistryObject> COMPACT_BACKUP_BLOCK_ENTITY; + public static final RegistryObject> ENTITY_BACKUP_BLOCK_ENTITY; public static RegistryObject MY_BLOCK_ITEM; public static RegistryObject SHIP_VOID_ITEM; public static RegistryObject COMPACT_BACKUP_ITEM; + public static RegistryObject ENTITY_BACKUP_ITEM; public static final ModRegistry REGISTRY; @@ -61,24 +54,28 @@ public class VmodExtras { TRAK_BUK = REGISTRY.BLOCKS.register("track_backup", () -> 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))); + ENTITY_BACKUP = REGISTRY.BLOCKS.register("entity_backup", () -> new EntityBackupBlock(BlockBehaviour.Properties.of().mapColor(MapColor.STONE))); 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)); + ENTITY_BACKUP_BLOCK_ENTITY = REGISTRY.BLOCK_ENTITIES.register("entity_backup", () -> BlockEntityType.Builder.of(EntityBackupBlockEntity::new, ENTITY_BACKUP.get()).build(null)); EXAMPLE_TAB = REGISTRY.TabBuilder() .push((registry) -> { - MY_BLOCK_ITEM = registry.register("track_backup", () -> new BlockItem(TRAK_BUK.get(), new Item.Properties())); + MY_BLOCK_ITEM = registry.register("track_backup", () -> new BlockItem(TRAK_BUK.get(), new Item.Properties().rarity(Rarity.EPIC))); 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())); + COMPACT_BACKUP_ITEM = registry.register("compact_backup", () -> new BlockItem(COMPACT_BACKUP.get(), new Item.Properties().rarity(Rarity.EPIC))); + ENTITY_BACKUP_ITEM = registry.register("entity_backup", () -> new BlockItem(ENTITY_BACKUP.get(), new Item.Properties().rarity(Rarity.EPIC))); }) .build("vmodetras", Items.BEDROCK.getDefaultInstance()); + + new Compact(); } public VmodExtras() { IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); modEventBus.addListener(this::commonSetup); - REGISTRY.register(modEventBus); MinecraftForge.EVENT_BUS.register(this); diff --git a/src/main/java/space/eptaproject/vmodextras/block/CompactBackupBlockEntity.java b/src/main/java/space/eptaproject/vmodextras/block/CompactBackupBlockEntity.java index 0126123..4861f13 100644 --- a/src/main/java/space/eptaproject/vmodextras/block/CompactBackupBlockEntity.java +++ b/src/main/java/space/eptaproject/vmodextras/block/CompactBackupBlockEntity.java @@ -5,12 +5,11 @@ 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.nbt.Tag; 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.vmodextras.trackwork.IPhysicsTrackController; @@ -32,46 +31,25 @@ public class CompactBackupBlockEntity extends BlockEntity { if (ship != null) { { PhysicsTrackController physicsTrackController = ship.getAttachment(PhysicsTrackController.class); - IPhysicsTrackController controller = (IPhysicsTrackController) physicsTrackController; if (physicsTrackController != null) { - CompoundTag PhysicsTrackControllerTag = new CompoundTag(); + IPhysicsTrackController controller = (IPhysicsTrackController) physicsTrackController; + CompoundTag local = new CompoundTag(); - PhysicsTrackControllerTag.putFloat("SuspensionStiffness", controller.getSuspensionStiffness()); - { - CompoundTag suspensionAdjust = new CompoundTag(); + controller.encode(local); - 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); + tag.put("PhysicsTrackController", local); } } + { SimpleWheelController simpleWheelController = ship.getAttachment(SimpleWheelController.class); - ISimpleWheelController controller = (ISimpleWheelController) simpleWheelController; if (simpleWheelController != null) { - CompoundTag SimpleWheelControllerTag = new CompoundTag(); + ISimpleWheelController controller = (ISimpleWheelController) simpleWheelController; + CompoundTag local = new CompoundTag(); - SimpleWheelControllerTag.putFloat("SuspensionStiffness", controller.getSuspensionStiffness()); - { - CompoundTag suspensionAdjust = new CompoundTag(); + controller.encode(local); - 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); + tag.put("SimpleWheelController", local); } } } @@ -98,31 +76,12 @@ public class CompactBackupBlockEntity extends BlockEntity { 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("SimpleWheelController", Tag.TAG_COMPOUND)) { + ((ISimpleWheelController) SimpleWheelController.getOrCreate(ship)).decode(tag.getCompound("SimpleWheelController")); } - 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"))); - } + if (tag.contains("PhysicsTrackController", Tag.TAG_COMPOUND)) { + ((IPhysicsTrackController) PhysicsTrackController.getOrCreate(ship)).decode(tag.getCompound("PhysicsTrackController")); } } diff --git a/src/main/java/space/eptaproject/vmodextras/block/EntityBackupBlock.java b/src/main/java/space/eptaproject/vmodextras/block/EntityBackupBlock.java new file mode 100644 index 0000000..8fa09db --- /dev/null +++ b/src/main/java/space/eptaproject/vmodextras/block/EntityBackupBlock.java @@ -0,0 +1,23 @@ +package space.eptaproject.vmodextras.block; + +import com.simibubi.create.foundation.block.IBE; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockBehaviour; +import space.eptaproject.vmodextras.VmodExtras; + +public class EntityBackupBlock extends Block implements IBE { + public EntityBackupBlock(BlockBehaviour.Properties properties) { + super(properties); +} + + @Override + public BlockEntityType getBlockEntityType() { + return VmodExtras.ENTITY_BACKUP_BLOCK_ENTITY.get(); + } + + @Override + public Class getBlockEntityClass() { + return EntityBackupBlockEntity.class; + } +} diff --git a/src/main/java/space/eptaproject/vmodextras/block/EntityBackupBlockEntity.java b/src/main/java/space/eptaproject/vmodextras/block/EntityBackupBlockEntity.java new file mode 100644 index 0000000..2aa4744 --- /dev/null +++ b/src/main/java/space/eptaproject/vmodextras/block/EntityBackupBlockEntity.java @@ -0,0 +1,29 @@ +package space.eptaproject.vmodextras.block; + +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.valkyrienskies.core.api.ships.ServerShip; +import org.valkyrienskies.mod.common.VSGameUtilsKt; +import space.eptaproject.vmodextras.VmodExtras; + + +public class EntityBackupBlockEntity extends BlockEntity { + public EntityBackupBlockEntity(BlockPos p_155229_, BlockState p_155230_) { + super(VmodExtras.ENTITY_BACKUP_BLOCK_ENTITY.get(), p_155229_, p_155230_); + } + + @Override + public void load(CompoundTag tag) { + super.load(tag); + + } + + @Override + public void saveAdditional(CompoundTag tag) { + super.saveAdditional(tag); + ServerShip ship = (ServerShip) VSGameUtilsKt.getShipManagingPos(this.level, this.getBlockPos()); + + } +} diff --git a/src/main/java/space/eptaproject/vmodextras/compact/Compact.java b/src/main/java/space/eptaproject/vmodextras/compact/Compact.java new file mode 100644 index 0000000..3db56a3 --- /dev/null +++ b/src/main/java/space/eptaproject/vmodextras/compact/Compact.java @@ -0,0 +1,19 @@ +package space.eptaproject.vmodextras.compact; + +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.Items; +import net.minecraftforge.registries.RegistryObject; +import space.eptaproject.vmodextras.VmodExtras; +import space.eptaproject.vmodextras.compact.computercraft.ComputerCraftCompact; +import space.eptaproject.vmodextras.util.ModRegistry; + +public class Compact { + public static RegistryObject COMPACT_TAB; + + public Compact() { + ModRegistry REGISTRY = VmodExtras.REGISTRY; + ModRegistry.TabBuilder builder = REGISTRY.TabBuilder(); + new ComputerCraftCompact(REGISTRY, builder); + COMPACT_TAB = builder.build("compact", Items.PAPER.getDefaultInstance()); + } +} diff --git a/src/main/java/space/eptaproject/vmodextras/compact/computercraft/ComputerCraftCompact.java b/src/main/java/space/eptaproject/vmodextras/compact/computercraft/ComputerCraftCompact.java new file mode 100644 index 0000000..44cdbf0 --- /dev/null +++ b/src/main/java/space/eptaproject/vmodextras/compact/computercraft/ComputerCraftCompact.java @@ -0,0 +1,30 @@ +package space.eptaproject.vmodextras.compact.computercraft; + +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.Rarity; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.material.MapColor; +import net.minecraftforge.registries.RegistryObject; +import space.eptaproject.vmodextras.util.ModRegistry; + +public class ComputerCraftCompact { + public static RegistryObject> TRACK_WORK_CONTROLLER_BLOCK_ENTITY; + + + public static RegistryObject TRACK_WORK_CONTROLLER_BLOCK; + + public static RegistryObject TRACK_WORK_CONTROLLER_ITEM; + + + public ComputerCraftCompact(ModRegistry REGISTRY, ModRegistry.TabBuilder builder) { + TRACK_WORK_CONTROLLER_BLOCK = REGISTRY.BLOCKS.register("track_work_controller", () -> new TrackWorkController(BlockBehaviour.Properties.of().mapColor(MapColor.STONE))); + TRACK_WORK_CONTROLLER_BLOCK_ENTITY = REGISTRY.BLOCK_ENTITIES.register("track_work_controller", () -> BlockEntityType.Builder.of(TrackWorkControllerEntity::new, TRACK_WORK_CONTROLLER_BLOCK.get()).build(null)); + + builder.push((registry) -> { + TRACK_WORK_CONTROLLER_ITEM = registry.register("track_work_controller", () -> new BlockItem(TRACK_WORK_CONTROLLER_BLOCK.get(), new Item.Properties().rarity(Rarity.EPIC))); + }); + } +} diff --git a/src/main/java/space/eptaproject/vmodextras/compact/computercraft/TrackWorkController.java b/src/main/java/space/eptaproject/vmodextras/compact/computercraft/TrackWorkController.java new file mode 100644 index 0000000..755fe63 --- /dev/null +++ b/src/main/java/space/eptaproject/vmodextras/compact/computercraft/TrackWorkController.java @@ -0,0 +1,22 @@ +package space.eptaproject.vmodextras.compact.computercraft; + +import com.simibubi.create.foundation.block.IBE; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntityType; + +public class TrackWorkController extends Block implements IBE { + public TrackWorkController(Properties properties) { + super(properties); + } + + + @Override + public BlockEntityType getBlockEntityType() { + return ComputerCraftCompact.TRACK_WORK_CONTROLLER_BLOCK_ENTITY.get(); + } + + @Override + public Class getBlockEntityClass() { + return TrackWorkControllerEntity.class; + } +} diff --git a/src/main/java/space/eptaproject/vmodextras/compact/computercraft/TrackWorkControllerEntity.java b/src/main/java/space/eptaproject/vmodextras/compact/computercraft/TrackWorkControllerEntity.java new file mode 100644 index 0000000..1787aa9 --- /dev/null +++ b/src/main/java/space/eptaproject/vmodextras/compact/computercraft/TrackWorkControllerEntity.java @@ -0,0 +1,33 @@ +package space.eptaproject.vmodextras.compact.computercraft; + +import dan200.computercraft.api.peripheral.IPeripheral; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.util.LazyOptional; +import org.jetbrains.annotations.NotNull; + +import static dan200.computercraft.shared.Capabilities.CAPABILITY_PERIPHERAL; + +public class TrackWorkControllerEntity extends BlockEntity { + public TrackWorkControllerEntity(BlockPos p_155229_, BlockState p_155230_) { + super(ComputerCraftCompact.TRACK_WORK_CONTROLLER_BLOCK_ENTITY.get(), p_155229_, p_155230_); + } + + protected TrackWorkControllerPeripheral peripheral = new TrackWorkControllerPeripheral(this); + private LazyOptional peripheralCap; + + @Override + @NotNull + public LazyOptional getCapability(@NotNull Capability cap, Direction direction) { + if (cap == CAPABILITY_PERIPHERAL) { + if (peripheralCap == null) { + peripheralCap = LazyOptional.of(() -> peripheral); + } + return peripheralCap.cast(); + } + return super.getCapability(cap, direction); + } +} diff --git a/src/main/java/space/eptaproject/vmodextras/compact/computercraft/TrackWorkControllerPeripheral.java b/src/main/java/space/eptaproject/vmodextras/compact/computercraft/TrackWorkControllerPeripheral.java new file mode 100644 index 0000000..bcf9e07 --- /dev/null +++ b/src/main/java/space/eptaproject/vmodextras/compact/computercraft/TrackWorkControllerPeripheral.java @@ -0,0 +1,61 @@ +package space.eptaproject.vmodextras.compact.computercraft; + +import dan200.computercraft.api.lua.IArguments; +import dan200.computercraft.api.lua.LuaException; +import dan200.computercraft.api.lua.LuaFunction; +import dan200.computercraft.api.peripheral.IComputerAccess; +import dan200.computercraft.api.peripheral.IPeripheral; +import edn.stratodonut.trackwork.tracks.forces.SimpleWheelController; +import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import lombok.AllArgsConstructor; +import org.joml.Vector3d; +import org.joml.Vector3dc; +import org.valkyrienskies.core.api.ships.ServerShip; +import org.valkyrienskies.mod.common.VSGameUtilsKt; +import space.eptaproject.vmodextras.trackwork.ISimpleWheelController; + +import java.util.List; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +@AllArgsConstructor +public class TrackWorkControllerPeripheral implements IPeripheral { + private final List connectedComputers = new ObjectArrayList<>(); + + private TrackWorkControllerEntity entity; + + @Override + public @Nonnull String getType() { + return "track_work_controller"; + } + + public boolean equals(IPeripheral iPeripheral) { + return this == iPeripheral; + } + + @Override + public void detach(@Nullable IComputerAccess computer) { + connectedComputers.remove(computer); + } + + @Override + public void attach(@Nonnull IComputerAccess computer) { + connectedComputers.add(computer); + } + + @LuaFunction + public final void SetSuspensionAdjust(IArguments arguments) throws LuaException { + Vector3dc vec = new Vector3d(arguments.getDouble(0),arguments.getDouble(1),arguments.getDouble(2)); + + ServerShip ship = (ServerShip) VSGameUtilsKt.getShipObjectManagingPos(this.entity.getLevel(), this.entity.getBlockPos()); + if (ship != null) { + ((ISimpleWheelController) SimpleWheelController.getOrCreate(ship)).setSuspensionAdjust(vec); + } + } + + @LuaFunction + public final void GetSuspensionAdjust(IArguments arguments) throws LuaException { + + } +}