summaryrefslogtreecommitdiff
path: root/src/main/java/net/cshift/mc
diff options
context:
space:
mode:
authorKyle Gunger <kgunger12@gmail.com>2024-11-03 02:40:23 -0500
committerKyle Gunger <kgunger12@gmail.com>2024-11-03 02:40:23 -0500
commit8a6be0ce81d935551ab2ebc9c4e7d41b88297957 (patch)
treeed194dd70239f4a022d8ee824876cdbcd5c950c7 /src/main/java/net/cshift/mc
parentf6ecfac78b963a694a13891df06413df104b19fb (diff)
Update to currentHEADmain
Diffstat (limited to 'src/main/java/net/cshift/mc')
-rw-r--r--src/main/java/net/cshift/mc/sparkt/SparktInit.java32
-rw-r--r--src/main/java/net/cshift/mc/sparkt/block/Blocks.java50
-rw-r--r--src/main/java/net/cshift/mc/sparkt/block/DriverElectric.java31
-rw-r--r--src/main/java/net/cshift/mc/sparkt/block/DriverMechanical.java32
-rw-r--r--src/main/java/net/cshift/mc/sparkt/block/MachineBlock.java67
-rw-r--r--src/main/java/net/cshift/mc/sparkt/block/MachineFrame.java17
-rw-r--r--src/main/java/net/cshift/mc/sparkt/block/MachineFurnace.java23
-rw-r--r--src/main/java/net/cshift/mc/sparkt/block/MachineGrinder.java23
-rw-r--r--src/main/java/net/cshift/mc/sparkt/block/Wire.java44
-rw-r--r--src/main/java/net/cshift/mc/sparkt/block/entity/BlockEntityTypes.java36
-rw-r--r--src/main/java/net/cshift/mc/sparkt/block/entity/MachineDriverEntity.java60
-rw-r--r--src/main/java/net/cshift/mc/sparkt/block/entity/MachineNodeEntity.java59
-rw-r--r--src/main/java/net/cshift/mc/sparkt/block/entity/WireEntity.java82
-rw-r--r--src/main/java/net/cshift/mc/sparkt/item/HeatingElement.java11
-rw-r--r--src/main/java/net/cshift/mc/sparkt/item/IngotTungsten.java11
-rw-r--r--src/main/java/net/cshift/mc/sparkt/item/Items.java20
-rw-r--r--src/main/java/net/cshift/mc/sparkt/item/RawTungsten.java11
-rw-r--r--src/main/java/net/cshift/mc/sparkt/netcode/ClientRenderNetwork.java5
-rw-r--r--src/main/java/net/cshift/mc/sparkt/netcode/NetConstants.java10
-rw-r--r--src/main/java/net/cshift/mc/sparkt/netcode/ServerRenderNetwork.java10
-rw-r--r--src/main/java/net/cshift/mc/sparkt/netcode/payload/DeliveryPayload.java22
-rw-r--r--src/main/java/net/cshift/mc/sparkt/netcode/payload/ProgressPayload.java19
-rw-r--r--src/main/java/net/cshift/mc/sparkt/netcode/payload/TransitPayload.java25
23 files changed, 700 insertions, 0 deletions
diff --git a/src/main/java/net/cshift/mc/sparkt/SparktInit.java b/src/main/java/net/cshift/mc/sparkt/SparktInit.java
new file mode 100644
index 0000000..f35c094
--- /dev/null
+++ b/src/main/java/net/cshift/mc/sparkt/SparktInit.java
@@ -0,0 +1,32 @@
+package net.cshift.mc.sparkt;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import net.cshift.mc.sparkt.block.Blocks;
+import net.cshift.mc.sparkt.block.entity.BlockEntityTypes;
+import net.cshift.mc.sparkt.item.Items;
+import net.cshift.mc.sparkt.netcode.payload.DeliveryPayload;
+import net.cshift.mc.sparkt.netcode.payload.TransitPayload;
+import net.fabricmc.api.ModInitializer;
+import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry;
+
+public class SparktInit implements ModInitializer {
+
+ public static final Logger LOG = LogManager.getFormatterLogger("Sparkt/Init");
+ public static final String MODID = "sparkt";
+
+ @Override
+ public void onInitialize() {
+ LOG.info("Preparing to spark a reaction!");
+ Blocks.register();
+ Items.register();
+ BlockEntityTypes.register();
+
+ PayloadTypeRegistry.playS2C().register(DeliveryPayload.ID, DeliveryPayload.CODEC);
+ // PayloadTypeRegistry.playS2C().register(ProgressPayload.ID, ProgressPayload.CODEC);
+ PayloadTypeRegistry.playS2C().register(TransitPayload.ID, TransitPayload.CODEC);
+ }
+
+
+}
diff --git a/src/main/java/net/cshift/mc/sparkt/block/Blocks.java b/src/main/java/net/cshift/mc/sparkt/block/Blocks.java
new file mode 100644
index 0000000..e7cdd47
--- /dev/null
+++ b/src/main/java/net/cshift/mc/sparkt/block/Blocks.java
@@ -0,0 +1,50 @@
+package net.cshift.mc.sparkt.block;
+
+import net.cshift.mc.sparkt.SparktInit;
+import net.minecraft.block.Block;
+import net.minecraft.block.ExperienceDroppingBlock;
+import net.minecraft.block.AbstractBlock.Settings;
+import net.minecraft.item.BlockItem;
+import net.minecraft.item.Item;
+import net.minecraft.util.Identifier;
+import net.minecraft.util.math.intprovider.ConstantIntProvider;
+import net.minecraft.registry.*;
+
+public class Blocks {
+
+ public static final Block MACHINE_FRAME = new MachineFrame(Settings.create().strength(1, 1));
+ public static final Block MACHINE_FURNACE = new MachineFurnace(Settings.create().strength(1, 1));
+ public static final Block DRIVER_MECHANICAL = new DriverMechanical(Settings.create().strength(1, 1));
+ public static final Block DRIVER_ELECTRIC = new DriverElectric(Settings.create().strength(1, 1));
+ public static final Block MACHINE_GRINDER = new MachineGrinder(Settings.create().strength(1, 1));
+ public static final Block WIRE = new Wire(Settings.create().strength(1, 1));
+
+ public static final Block ORE_TUNGSTEN = new ExperienceDroppingBlock(ConstantIntProvider.create(0), Settings.create().requiresTool().strength(3.0f, 3.0f));
+ public static final Block ORE_DEEPSLATE_TUNGSTEN = new ExperienceDroppingBlock(ConstantIntProvider.create(0), Settings.create().requiresTool().strength(3.0f, 3.0f));
+
+ public static void register() {
+ Registry.register(Registries.BLOCK, Identifier.of(SparktInit.MODID, "machine_frame"), MACHINE_FRAME);
+ Registry.register(Registries.ITEM, Identifier.of(SparktInit.MODID, "machine_frame"), new BlockItem(MACHINE_FRAME, new Item.Settings()));
+
+ Registry.register(Registries.BLOCK, Identifier.of(SparktInit.MODID, "machine_furnace"), MACHINE_FURNACE);
+ Registry.register(Registries.ITEM, Identifier.of(SparktInit.MODID, "machine_furnace"), new BlockItem(MACHINE_FURNACE, new Item.Settings()));
+
+ Registry.register(Registries.BLOCK, Identifier.of(SparktInit.MODID, "machine_grinder"), MACHINE_GRINDER);
+ Registry.register(Registries.ITEM, Identifier.of(SparktInit.MODID, "machine_grinder"), new BlockItem(MACHINE_GRINDER, new Item.Settings()));
+
+ Registry.register(Registries.BLOCK, Identifier.of(SparktInit.MODID, "driver_mechanical"), DRIVER_MECHANICAL);
+ Registry.register(Registries.ITEM, Identifier.of(SparktInit.MODID, "driver_mechanical"), new BlockItem(DRIVER_MECHANICAL, new Item.Settings()));
+
+ Registry.register(Registries.BLOCK, Identifier.of(SparktInit.MODID, "driver_electric"), DRIVER_ELECTRIC);
+ Registry.register(Registries.ITEM, Identifier.of(SparktInit.MODID, "driver_electric"), new BlockItem(DRIVER_ELECTRIC, new Item.Settings()));
+
+ Registry.register(Registries.BLOCK, Identifier.of(SparktInit.MODID, "ore_tungsten"), ORE_TUNGSTEN);
+ Registry.register(Registries.ITEM, Identifier.of(SparktInit.MODID, "ore_tungsten"), new BlockItem(ORE_TUNGSTEN, new Item.Settings()));
+
+ Registry.register(Registries.BLOCK, Identifier.of(SparktInit.MODID, "ore_deepslate_tungsten"), ORE_DEEPSLATE_TUNGSTEN);
+ Registry.register(Registries.ITEM, Identifier.of(SparktInit.MODID, "ore_deepslate_tungsten"), new BlockItem(ORE_DEEPSLATE_TUNGSTEN, new Item.Settings()));
+
+ Registry.register(Registries.BLOCK, Identifier.of(SparktInit.MODID, "wire"), WIRE);
+ Registry.register(Registries.ITEM, Identifier.of(SparktInit.MODID, "wire"), new BlockItem(WIRE, new Item.Settings()));
+ }
+}
diff --git a/src/main/java/net/cshift/mc/sparkt/block/DriverElectric.java b/src/main/java/net/cshift/mc/sparkt/block/DriverElectric.java
new file mode 100644
index 0000000..31ed63b
--- /dev/null
+++ b/src/main/java/net/cshift/mc/sparkt/block/DriverElectric.java
@@ -0,0 +1,31 @@
+package net.cshift.mc.sparkt.block;
+
+import com.mojang.serialization.MapCodec;
+
+import net.cshift.mc.sparkt.block.entity.MachineDriverEntity;
+import net.minecraft.block.BlockState;
+import net.minecraft.block.entity.BlockEntity;
+import net.minecraft.item.ItemPlacementContext;
+import net.minecraft.util.math.BlockPos;
+
+public class DriverElectric extends MachineBlock{
+ public static final MapCodec<DriverElectric> CODEC = createCodec(DriverElectric::new);
+
+ public MapCodec<DriverElectric> getCodec() {
+ return CODEC;
+ }
+
+ public DriverElectric(Settings settings) {
+ super(settings);
+ }
+
+ @Override
+ public BlockEntity createBlockEntity(BlockPos var1, BlockState var2) {
+ return new MachineDriverEntity(var1, var2);
+ }
+
+ @Override
+ public BlockState getPlacementState(ItemPlacementContext ctx) {
+ return (BlockState)this.getDefaultState().with(FACING, ctx.getPlayerLookDirection().getOpposite());
+ }
+} \ No newline at end of file
diff --git a/src/main/java/net/cshift/mc/sparkt/block/DriverMechanical.java b/src/main/java/net/cshift/mc/sparkt/block/DriverMechanical.java
new file mode 100644
index 0000000..c1f5954
--- /dev/null
+++ b/src/main/java/net/cshift/mc/sparkt/block/DriverMechanical.java
@@ -0,0 +1,32 @@
+package net.cshift.mc.sparkt.block;
+
+import com.mojang.serialization.MapCodec;
+
+import net.cshift.mc.sparkt.block.entity.MachineDriverEntity;
+import net.minecraft.block.BlockState;
+import net.minecraft.block.entity.BlockEntity;
+import net.minecraft.item.ItemPlacementContext;
+import net.minecraft.util.math.BlockPos;
+
+public class DriverMechanical extends MachineBlock{
+
+ public static final MapCodec<DriverMechanical> CODEC = createCodec(DriverMechanical::new);
+
+ public MapCodec<DriverMechanical> getCodec() {
+ return CODEC;
+ }
+
+ public DriverMechanical(Settings settings) {
+ super(settings);
+ }
+
+ @Override
+ public BlockEntity createBlockEntity(BlockPos var1, BlockState var2) {
+ return new MachineDriverEntity(var1, var2);
+ }
+
+ @Override
+ public BlockState getPlacementState(ItemPlacementContext ctx) {
+ return (BlockState)this.getDefaultState().with(FACING, ctx.getPlayerLookDirection().getOpposite());
+ }
+}
diff --git a/src/main/java/net/cshift/mc/sparkt/block/MachineBlock.java b/src/main/java/net/cshift/mc/sparkt/block/MachineBlock.java
new file mode 100644
index 0000000..92e95f2
--- /dev/null
+++ b/src/main/java/net/cshift/mc/sparkt/block/MachineBlock.java
@@ -0,0 +1,67 @@
+package net.cshift.mc.sparkt.block;
+
+import com.mojang.serialization.MapCodec;
+
+import net.cshift.mc.sparkt.block.entity.MachineNodeEntity;
+import net.minecraft.block.AbstractBlock;
+import net.minecraft.block.Block;
+import net.minecraft.block.BlockRenderType;
+import net.minecraft.block.BlockState;
+import net.minecraft.block.BlockWithEntity;
+import net.minecraft.block.FacingBlock;
+import net.minecraft.block.entity.BlockEntity;
+import net.minecraft.entity.LivingEntity;
+import net.minecraft.item.ItemPlacementContext;
+import net.minecraft.item.ItemStack;
+import net.minecraft.state.StateManager;
+import net.minecraft.state.property.*;
+import net.minecraft.util.math.BlockPos;
+import net.minecraft.util.math.Direction;
+import net.minecraft.world.World;
+
+public abstract class MachineBlock extends BlockWithEntity {
+ public static final DirectionProperty FACING;
+ public static final BooleanProperty ACTIVE;
+
+ public MachineBlock(AbstractBlock.Settings settings) {
+ super(settings);
+ this.setDefaultState(
+ this.stateManager
+ .getDefaultState()
+ .with(FACING, Direction.NORTH)
+ .with(ACTIVE, false)
+ );
+ }
+
+ @Override
+ public BlockRenderType getRenderType(BlockState state) {
+ return BlockRenderType.MODEL;
+ }
+
+ @Override
+ public BlockEntity createBlockEntity(BlockPos var1, BlockState var2) {
+ return new MachineNodeEntity(var1, var2);
+ }
+
+ @Override
+ public void onPlaced(World world, BlockPos pos, BlockState state, LivingEntity placer, ItemStack itemStack) {
+ super.onPlaced(world, pos, state, placer, itemStack);
+ }
+
+ public BlockState getPlacementState(ItemPlacementContext ctx) {
+ return (BlockState)this.getDefaultState().with(FACING, ctx.getHorizontalPlayerFacing().getOpposite());
+ }
+
+ @Override
+ protected void appendProperties(StateManager.Builder<Block, BlockState> builder) {
+ super.appendProperties(builder);
+ builder.add(new Property[]{FACING, ACTIVE});
+ }
+
+ protected abstract MapCodec<? extends BlockWithEntity> getCodec();
+
+ static {
+ FACING = FacingBlock.FACING;
+ ACTIVE = Properties.LIT;
+ }
+}
diff --git a/src/main/java/net/cshift/mc/sparkt/block/MachineFrame.java b/src/main/java/net/cshift/mc/sparkt/block/MachineFrame.java
new file mode 100644
index 0000000..10f6314
--- /dev/null
+++ b/src/main/java/net/cshift/mc/sparkt/block/MachineFrame.java
@@ -0,0 +1,17 @@
+package net.cshift.mc.sparkt.block;
+
+import com.mojang.serialization.MapCodec;
+
+import net.minecraft.block.AbstractBlock;
+
+public class MachineFrame extends MachineBlock{
+ public static final MapCodec<MachineFrame> CODEC = createCodec(MachineFrame::new);
+
+ public MapCodec<MachineFrame> getCodec() {
+ return CODEC;
+ }
+
+ public MachineFrame(AbstractBlock.Settings settings) {
+ super(settings);
+ }
+}
diff --git a/src/main/java/net/cshift/mc/sparkt/block/MachineFurnace.java b/src/main/java/net/cshift/mc/sparkt/block/MachineFurnace.java
new file mode 100644
index 0000000..0ae61e0
--- /dev/null
+++ b/src/main/java/net/cshift/mc/sparkt/block/MachineFurnace.java
@@ -0,0 +1,23 @@
+package net.cshift.mc.sparkt.block;
+
+import com.mojang.serialization.MapCodec;
+
+import net.minecraft.util.math.Direction;
+
+public class MachineFurnace extends MachineBlock{
+ public static final MapCodec<MachineFurnace> CODEC = createCodec(MachineFurnace::new);
+
+ public MapCodec<MachineFurnace> getCodec() {
+ return CODEC;
+ }
+
+ public MachineFurnace(Settings settings) {
+ super(settings);
+ this.setDefaultState(
+ this.stateManager
+ .getDefaultState()
+ .with(FACING, Direction.NORTH)
+ .with(ACTIVE, true)
+ );
+ }
+}
diff --git a/src/main/java/net/cshift/mc/sparkt/block/MachineGrinder.java b/src/main/java/net/cshift/mc/sparkt/block/MachineGrinder.java
new file mode 100644
index 0000000..87c7808
--- /dev/null
+++ b/src/main/java/net/cshift/mc/sparkt/block/MachineGrinder.java
@@ -0,0 +1,23 @@
+package net.cshift.mc.sparkt.block;
+
+import com.mojang.serialization.MapCodec;
+
+import net.minecraft.util.math.Direction;
+
+public class MachineGrinder extends MachineBlock{
+ public static final MapCodec<MachineGrinder> CODEC = createCodec(MachineGrinder::new);
+
+ public MapCodec<MachineGrinder> getCodec() {
+ return CODEC;
+ }
+
+ public MachineGrinder(Settings settings) {
+ super(settings);
+ this.setDefaultState(
+ this.stateManager
+ .getDefaultState()
+ .with(FACING, Direction.NORTH)
+ .with(ACTIVE, true)
+ );
+ }
+}
diff --git a/src/main/java/net/cshift/mc/sparkt/block/Wire.java b/src/main/java/net/cshift/mc/sparkt/block/Wire.java
new file mode 100644
index 0000000..3ad78ed
--- /dev/null
+++ b/src/main/java/net/cshift/mc/sparkt/block/Wire.java
@@ -0,0 +1,44 @@
+package net.cshift.mc.sparkt.block;
+
+import org.jetbrains.annotations.Nullable;
+
+import com.mojang.serialization.MapCodec;
+
+import net.cshift.mc.sparkt.block.entity.BlockEntityTypes;
+import net.cshift.mc.sparkt.block.entity.WireEntity;
+import net.minecraft.block.BlockState;
+import net.minecraft.block.BlockWithEntity;
+import net.minecraft.block.entity.BlockEntity;
+import net.minecraft.block.entity.BlockEntityTicker;
+import net.minecraft.block.entity.BlockEntityType;
+import net.minecraft.util.math.BlockPos;
+import net.minecraft.world.World;
+
+public class Wire extends BlockWithEntity {
+ public static final MapCodec<Wire> CODEC = createCodec(Wire::new);
+
+ public MapCodec<Wire> getCodec() {
+ return CODEC;
+ }
+
+ public Wire(Settings settings) {
+ super(settings);
+ }
+
+ @Override
+ public BlockEntity createBlockEntity(BlockPos var1, BlockState var2) {
+ return new WireEntity(var1, var2);
+ }
+
+ @Override
+ public <T extends BlockEntity> BlockEntityTicker<T> getTicker(World world, BlockState state,
+ BlockEntityType<T> type) {
+ // TODO Auto-generated method stub
+ return validateTicker(world, type, BlockEntityTypes.WIRE_ENTITY);
+ }
+
+ @Nullable
+ protected static <T extends BlockEntity> BlockEntityTicker<T> validateTicker(World world, BlockEntityType<T> givenType, BlockEntityType<? extends WireEntity> expectedType) {
+ return world.isClient ? null : validateTicker(givenType, expectedType, WireEntity::tick);
+ }
+}
diff --git a/src/main/java/net/cshift/mc/sparkt/block/entity/BlockEntityTypes.java b/src/main/java/net/cshift/mc/sparkt/block/entity/BlockEntityTypes.java
new file mode 100644
index 0000000..102cc00
--- /dev/null
+++ b/src/main/java/net/cshift/mc/sparkt/block/entity/BlockEntityTypes.java
@@ -0,0 +1,36 @@
+package net.cshift.mc.sparkt.block.entity;
+
+import net.cshift.mc.sparkt.SparktInit;
+import net.cshift.mc.sparkt.block.Blocks;
+import net.minecraft.block.Block;
+import net.minecraft.block.entity.BlockEntityType;
+import net.minecraft.registry.Registries;
+import net.minecraft.registry.Registry;
+import net.minecraft.util.Identifier;
+
+public class BlockEntityTypes {
+
+ public static final BlockEntityType<MachineNodeEntity> MACHINE_BLOCK_ENTITY = Registry.register(
+ Registries.BLOCK_ENTITY_TYPE,
+ Identifier.of(SparktInit.MODID, "machine_node_entity"),
+ net.minecraft.block.entity.BlockEntityType.Builder.create(MachineNodeEntity::new, new Block[]{Blocks.MACHINE_FRAME, Blocks.MACHINE_FURNACE, Blocks.MACHINE_GRINDER}).build()
+ );
+
+ public static final BlockEntityType<MachineDriverEntity> MACHINE_DRIVER_ENTITY = Registry.register(
+ Registries.BLOCK_ENTITY_TYPE,
+ Identifier.of(SparktInit.MODID, "machine_driver_entity"),
+ net.minecraft.block.entity.BlockEntityType.Builder.create(MachineDriverEntity::new, new Block[]{Blocks.DRIVER_MECHANICAL, Blocks.DRIVER_ELECTRIC}).build()
+ );
+
+ public static final BlockEntityType<WireEntity> WIRE_ENTITY = Registry.register(
+ Registries.BLOCK_ENTITY_TYPE,
+ Identifier.of(SparktInit.MODID, "wire_entity"),
+ net.minecraft.block.entity.BlockEntityType.Builder.create(WireEntity::new, new Block[]{Blocks.WIRE}).build()
+ );
+
+ public static void register() {
+ MACHINE_BLOCK_ENTITY.getRegistryEntry();
+ MACHINE_DRIVER_ENTITY.getRegistryEntry();
+ WIRE_ENTITY.getRegistryEntry();
+ }
+}
diff --git a/src/main/java/net/cshift/mc/sparkt/block/entity/MachineDriverEntity.java b/src/main/java/net/cshift/mc/sparkt/block/entity/MachineDriverEntity.java
new file mode 100644
index 0000000..52cf125
--- /dev/null
+++ b/src/main/java/net/cshift/mc/sparkt/block/entity/MachineDriverEntity.java
@@ -0,0 +1,60 @@
+package net.cshift.mc.sparkt.block.entity;
+
+import net.cshift.mc.transit.network.Channel;
+import net.cshift.mc.transit.network.INode;
+import net.cshift.mc.transit.network.PoolManifest;
+import net.cshift.mc.transit.network.packet.IStaticPacket;
+import net.minecraft.block.BlockState;
+import net.minecraft.block.entity.BlockEntity;
+import net.minecraft.util.math.BlockPos;
+
+public class MachineDriverEntity extends BlockEntity implements INode{
+
+ public MachineDriverEntity(BlockPos pos, BlockState state) {
+ super(BlockEntityTypes.MACHINE_DRIVER_ENTITY, pos, state);
+ //TODO Auto-generated constructor stub
+ }
+
+ @Override
+ public PoolManifest getManifest() {
+ // TODO Auto-generated method stub
+ throw new UnsupportedOperationException("Unimplemented method 'getManifest'");
+ }
+
+ @Override
+ public <T> Channel<T> connect(int poolID, String group, INode asker) {
+ // TODO Auto-generated method stub
+ throw new UnsupportedOperationException("Unimplemented method 'connect'");
+ }
+
+ @Override
+ public <T> Channel<T> connectDefault(String group, INode asker) {
+ // TODO Auto-generated method stub
+ throw new UnsupportedOperationException("Unimplemented method 'connectDefault'");
+ }
+
+ @Override
+ public <T> IStaticPacket<T> accept(IStaticPacket<T> packet, Channel<T> channel) {
+ // TODO Auto-generated method stub
+ throw new UnsupportedOperationException("Unimplemented method 'accept'");
+ }
+
+ @Override
+ public <T> Number getPressure(Channel<T> channel) {
+ // TODO Auto-generated method stub
+ throw new UnsupportedOperationException("Unimplemented method 'getPressure'");
+ }
+
+ @Override
+ public <T> Number getRate(Channel<T> channel) {
+ // TODO Auto-generated method stub
+ throw new UnsupportedOperationException("Unimplemented method 'getRate'");
+ }
+
+ @Override
+ public <T> void onTerminate(Channel<T> channel) {
+ // TODO Auto-generated method stub
+ throw new UnsupportedOperationException("Unimplemented method 'onTerminate'");
+ }
+
+}
diff --git a/src/main/java/net/cshift/mc/sparkt/block/entity/MachineNodeEntity.java b/src/main/java/net/cshift/mc/sparkt/block/entity/MachineNodeEntity.java
new file mode 100644
index 0000000..4c21801
--- /dev/null
+++ b/src/main/java/net/cshift/mc/sparkt/block/entity/MachineNodeEntity.java
@@ -0,0 +1,59 @@
+package net.cshift.mc.sparkt.block.entity;
+
+import net.cshift.mc.transit.network.*;
+import net.cshift.mc.transit.network.packet.IStaticPacket;
+import net.minecraft.block.BlockState;
+import net.minecraft.block.entity.BlockEntity;
+import net.minecraft.util.math.BlockPos;
+
+public class MachineNodeEntity extends BlockEntity implements INode {
+
+ public MachineNodeEntity(BlockPos pos, BlockState state) {
+ super(BlockEntityTypes.MACHINE_BLOCK_ENTITY, pos, state);
+ }
+
+ @Override
+ public <T> IStaticPacket<T> accept(IStaticPacket<T> arg0, Channel<T> arg1) {
+ // TODO Auto-generated method stub
+ throw new UnsupportedOperationException("Unimplemented method 'accept'");
+ }
+
+ @Override
+ public <T> Channel<T> connect(int arg0, String arg1, INode arg2) {
+ // TODO Auto-generated method stub
+ throw new UnsupportedOperationException("Unimplemented method 'connect'");
+ }
+
+ @Override
+ public <T> Channel<T> connectDefault(String arg0, INode arg1) {
+ // TODO Auto-generated method stub
+ throw new UnsupportedOperationException("Unimplemented method 'connectDefault'");
+ }
+
+ @Override
+ public PoolManifest getManifest() {
+ // TODO Auto-generated method stub
+ throw new UnsupportedOperationException("Unimplemented method 'getManifest'");
+ }
+
+ @Override
+ public <T> Number getPressure(Channel<T> arg0) {
+ // TODO Auto-generated method stub
+ throw new UnsupportedOperationException("Unimplemented method 'getPressure'");
+ }
+
+ @Override
+ public <T> Number getRate(Channel<T> arg0) {
+ // TODO Auto-generated method stub
+ throw new UnsupportedOperationException("Unimplemented method 'getRate'");
+ }
+
+ @Override
+ public <T> void onTerminate(Channel<T> arg0) {
+ // TODO Auto-generated method stub
+ throw new UnsupportedOperationException("Unimplemented method 'onTerminate'");
+ }
+
+
+
+}
diff --git a/src/main/java/net/cshift/mc/sparkt/block/entity/WireEntity.java b/src/main/java/net/cshift/mc/sparkt/block/entity/WireEntity.java
new file mode 100644
index 0000000..208a84f
--- /dev/null
+++ b/src/main/java/net/cshift/mc/sparkt/block/entity/WireEntity.java
@@ -0,0 +1,82 @@
+package net.cshift.mc.sparkt.block.entity;
+
+import net.cshift.mc.sparkt.netcode.payload.DeliveryPayload;
+import net.cshift.mc.transit.network.*;
+import net.cshift.mc.transit.network.packet.IStaticPacket;
+import net.fabricmc.fabric.api.networking.v1.PlayerLookup;
+import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
+import net.minecraft.block.BlockState;
+import net.minecraft.block.entity.BlockEntity;
+import net.minecraft.server.network.ServerPlayerEntity;
+import net.minecraft.server.world.ServerWorld;
+import net.minecraft.util.math.BlockPos;
+import net.minecraft.world.World;
+
+public class WireEntity extends BlockEntity implements INode {
+ public static final int COOLDOWN = 40;
+ private int ticks = COOLDOWN;
+
+
+ public WireEntity(BlockPos pos, BlockState state) {
+ super(BlockEntityTypes.WIRE_ENTITY, pos, state);
+
+ }
+
+ @Override
+ public <T> IStaticPacket<T> accept(IStaticPacket<T> arg0, Channel<T> arg1) {
+ // TODO Auto-generated method stub
+ throw new UnsupportedOperationException("Unimplemented method 'accept'");
+ }
+
+ @Override
+ public <T> Channel<T> connect(int arg0, String arg1, INode arg2) {
+ // TODO Auto-generated method stub
+ throw new UnsupportedOperationException("Unimplemented method 'connect'");
+ }
+
+ @Override
+ public <T> Channel<T> connectDefault(String arg0, INode arg1) {
+ // TODO Auto-generated method stub
+ throw new UnsupportedOperationException("Unimplemented method 'connectDefault'");
+ }
+
+ @Override
+ public PoolManifest getManifest() {
+ // TODO Auto-generated method stub
+ throw new UnsupportedOperationException("Unimplemented method 'getManifest'");
+ }
+
+ @Override
+ public <T> Number getPressure(Channel<T> arg0) {
+ // TODO Auto-generated method stub
+ throw new UnsupportedOperationException("Unimplemented method 'getPressure'");
+ }
+
+ @Override
+ public <T> Number getRate(Channel<T> arg0) {
+ // TODO Auto-generated method stub
+ throw new UnsupportedOperationException("Unimplemented method 'getRate'");
+ }
+
+ @Override
+ public <T> void onTerminate(Channel<T> arg0) {
+ // TODO Auto-generated method stub
+ throw new UnsupportedOperationException("Unimplemented method 'onTerminate'");
+ }
+
+ public static void tick(World world, BlockPos pos, BlockState state, WireEntity blockEntity) {
+ if (world.isClient)
+ return;
+
+ blockEntity.ticks--;
+
+ if (blockEntity.ticks > 0)
+ return;
+
+ for (ServerPlayerEntity player : PlayerLookup.world((ServerWorld) world))
+ ServerPlayNetworking.send(player, new DeliveryPayload("lmao"));
+
+ blockEntity.ticks = COOLDOWN;
+ }
+
+}
diff --git a/src/main/java/net/cshift/mc/sparkt/item/HeatingElement.java b/src/main/java/net/cshift/mc/sparkt/item/HeatingElement.java
new file mode 100644
index 0000000..5c7bc61
--- /dev/null
+++ b/src/main/java/net/cshift/mc/sparkt/item/HeatingElement.java
@@ -0,0 +1,11 @@
+package net.cshift.mc.sparkt.item;
+
+import net.minecraft.item.Item;
+
+public class HeatingElement extends Item {
+
+ public HeatingElement(Settings settings) {
+ super(settings);
+ }
+
+}
diff --git a/src/main/java/net/cshift/mc/sparkt/item/IngotTungsten.java b/src/main/java/net/cshift/mc/sparkt/item/IngotTungsten.java
new file mode 100644
index 0000000..1f8d92e
--- /dev/null
+++ b/src/main/java/net/cshift/mc/sparkt/item/IngotTungsten.java
@@ -0,0 +1,11 @@
+package net.cshift.mc.sparkt.item;
+
+import net.minecraft.item.Item;
+
+public class IngotTungsten extends Item{
+
+ public IngotTungsten(Settings settings) {
+ super(settings);
+ }
+
+}
diff --git a/src/main/java/net/cshift/mc/sparkt/item/Items.java b/src/main/java/net/cshift/mc/sparkt/item/Items.java
new file mode 100644
index 0000000..94c53e9
--- /dev/null
+++ b/src/main/java/net/cshift/mc/sparkt/item/Items.java
@@ -0,0 +1,20 @@
+package net.cshift.mc.sparkt.item;
+
+import net.cshift.mc.sparkt.SparktInit;
+import net.minecraft.item.Item;
+import net.minecraft.item.Item.Settings;
+import net.minecraft.registry.Registries;
+import net.minecraft.registry.Registry;
+import net.minecraft.util.Identifier;
+
+public class Items {
+ public static final Item INGOT_TUNGSTEN = new IngotTungsten(new Settings());
+ public static final Item RAW_TUNGSTEN = new RawTungsten(new Settings());
+ public static final Item HEATING_ELEMENT = new HeatingElement(new Settings());
+
+ public static void register() {
+ Registry.register(Registries.ITEM, Identifier.of(SparktInit.MODID, "ingot_tungsten"), INGOT_TUNGSTEN);
+ Registry.register(Registries.ITEM, Identifier.of(SparktInit.MODID, "raw_tungsten"), RAW_TUNGSTEN);
+ Registry.register(Registries.ITEM, Identifier.of(SparktInit.MODID, "heating_element"), HEATING_ELEMENT);
+ }
+}
diff --git a/src/main/java/net/cshift/mc/sparkt/item/RawTungsten.java b/src/main/java/net/cshift/mc/sparkt/item/RawTungsten.java
new file mode 100644
index 0000000..18e6213
--- /dev/null
+++ b/src/main/java/net/cshift/mc/sparkt/item/RawTungsten.java
@@ -0,0 +1,11 @@
+package net.cshift.mc.sparkt.item;
+
+import net.minecraft.item.Item;
+
+public class RawTungsten extends Item {
+
+ public RawTungsten(Settings settings) {
+ super(settings);
+ }
+
+}
diff --git a/src/main/java/net/cshift/mc/sparkt/netcode/ClientRenderNetwork.java b/src/main/java/net/cshift/mc/sparkt/netcode/ClientRenderNetwork.java
new file mode 100644
index 0000000..067d0e0
--- /dev/null
+++ b/src/main/java/net/cshift/mc/sparkt/netcode/ClientRenderNetwork.java
@@ -0,0 +1,5 @@
+package net.cshift.mc.sparkt.netcode;
+
+public class ClientRenderNetwork {
+
+}
diff --git a/src/main/java/net/cshift/mc/sparkt/netcode/NetConstants.java b/src/main/java/net/cshift/mc/sparkt/netcode/NetConstants.java
new file mode 100644
index 0000000..a7358eb
--- /dev/null
+++ b/src/main/java/net/cshift/mc/sparkt/netcode/NetConstants.java
@@ -0,0 +1,10 @@
+package net.cshift.mc.sparkt.netcode;
+
+import net.cshift.mc.sparkt.SparktInit;
+import net.minecraft.util.Identifier;
+
+public class NetConstants {
+ public static final Identifier TRANSIT_PACKET_ID = Identifier.of(SparktInit.MODID, "net_transit");
+ public static final Identifier PROGRESS_PACKET_ID = Identifier.of(SparktInit.MODID, "net_progress");
+ public static final Identifier DELIVERY_PACKET_ID = Identifier.of(SparktInit.MODID, "net_delivery");
+}
diff --git a/src/main/java/net/cshift/mc/sparkt/netcode/ServerRenderNetwork.java b/src/main/java/net/cshift/mc/sparkt/netcode/ServerRenderNetwork.java
new file mode 100644
index 0000000..6bb249d
--- /dev/null
+++ b/src/main/java/net/cshift/mc/sparkt/netcode/ServerRenderNetwork.java
@@ -0,0 +1,10 @@
+package net.cshift.mc.sparkt.netcode;
+
+public class ServerRenderNetwork {
+
+
+ static void update() {
+
+ }
+
+}
diff --git a/src/main/java/net/cshift/mc/sparkt/netcode/payload/DeliveryPayload.java b/src/main/java/net/cshift/mc/sparkt/netcode/payload/DeliveryPayload.java
new file mode 100644
index 0000000..5c7caff
--- /dev/null
+++ b/src/main/java/net/cshift/mc/sparkt/netcode/payload/DeliveryPayload.java
@@ -0,0 +1,22 @@
+package net.cshift.mc.sparkt.netcode.payload;
+
+import net.cshift.mc.sparkt.netcode.NetConstants;
+import net.minecraft.network.RegistryByteBuf;
+import net.minecraft.network.codec.PacketCodec;
+import net.minecraft.network.codec.PacketCodecs;
+import net.minecraft.network.packet.CustomPayload;
+
+public record DeliveryPayload (String uuid) implements CustomPayload {
+ public static final CustomPayload.Id<DeliveryPayload> ID = new CustomPayload.Id<>(NetConstants.DELIVERY_PACKET_ID);
+
+ public static final PacketCodec<RegistryByteBuf, DeliveryPayload> CODEC = PacketCodec.tuple(
+ PacketCodecs.STRING, DeliveryPayload::uuid,
+ DeliveryPayload::new
+ );
+
+ @Override
+ public CustomPayload.Id<? extends CustomPayload> getId ()
+ {
+ return ID;
+ }
+}
diff --git a/src/main/java/net/cshift/mc/sparkt/netcode/payload/ProgressPayload.java b/src/main/java/net/cshift/mc/sparkt/netcode/payload/ProgressPayload.java
new file mode 100644
index 0000000..bbc0395
--- /dev/null
+++ b/src/main/java/net/cshift/mc/sparkt/netcode/payload/ProgressPayload.java
@@ -0,0 +1,19 @@
+package net.cshift.mc.sparkt.netcode.payload;
+
+import java.util.HashMap;
+
+import net.cshift.mc.sparkt.netcode.NetConstants;
+import net.minecraft.network.RegistryByteBuf;
+import net.minecraft.network.codec.PacketCodec;
+import net.minecraft.network.packet.CustomPayload;
+
+public record ProgressPayload (HashMap<String, Double> map) implements CustomPayload {
+ public static final CustomPayload.Id<ProgressPayload> ID = new CustomPayload.Id<>(NetConstants.PROGRESS_PACKET_ID);
+ public static final PacketCodec<RegistryByteBuf, ProgressPayload> CODEC = PacketCodec.tuple(null, null, null);
+
+ @Override
+ public CustomPayload.Id<? extends CustomPayload> getId ()
+ {
+ return ID;
+ }
+}
diff --git a/src/main/java/net/cshift/mc/sparkt/netcode/payload/TransitPayload.java b/src/main/java/net/cshift/mc/sparkt/netcode/payload/TransitPayload.java
new file mode 100644
index 0000000..bc7bb6c
--- /dev/null
+++ b/src/main/java/net/cshift/mc/sparkt/netcode/payload/TransitPayload.java
@@ -0,0 +1,25 @@
+package net.cshift.mc.sparkt.netcode.payload;
+
+import com.mojang.authlib.properties.PropertyMap;
+
+import net.cshift.mc.sparkt.netcode.NetConstants;
+import net.minecraft.network.RegistryByteBuf;
+import net.minecraft.network.codec.PacketCodec;
+import net.minecraft.network.codec.PacketCodecs;
+import net.minecraft.network.packet.CustomPayload;
+
+public record TransitPayload(String uuid, PropertyMap obj) implements CustomPayload {
+ public static final CustomPayload.Id<TransitPayload> ID = new CustomPayload.Id<>(NetConstants.TRANSIT_PACKET_ID);
+
+ public static final PacketCodec<RegistryByteBuf, TransitPayload> CODEC = PacketCodec.tuple(
+ PacketCodecs.STRING, TransitPayload::uuid,
+ PacketCodecs.PROPERTY_MAP, TransitPayload::obj,
+ TransitPayload::new
+ );
+
+ @Override
+ public CustomPayload.Id<? extends CustomPayload> getId ()
+ {
+ return ID;
+ }
+}