Finish wireless terminals
@@ -28,7 +28,7 @@ import java.util.HashMap;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
public class ServerStorage implements ModInitializer {
 | 
			
		||||
    public static final List<String> moduleList = Arrays.asList("bus", "configuration", "container", "display", "drive", "filtering", "inventory", "pagination", "pcb", "transport", "netherite_upgrade");
 | 
			
		||||
    public static final List<String> moduleList = Arrays.asList("bus", "configuration", "container", "display", "drive", "filtering", "inventory", "pagination", "pcb", "transport", "antenna", "radio", "antenna_connector", "modem", "netherite_upgrade");
 | 
			
		||||
    public static final List<String> tiers = Arrays.asList("iron", "golden", "diamond", "netherite");
 | 
			
		||||
    public static final List<String> materialList = Arrays.asList("pcb", "pcb_substrate", "cpu", "cpu_substrate", "drive_controller", "drive_casing");
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,8 @@
 | 
			
		||||
package systems.brn.serverstorage.blocks;
 | 
			
		||||
 | 
			
		||||
import eu.pb4.polymer.blocks.api.BlockModelType;
 | 
			
		||||
import eu.pb4.polymer.blocks.api.PolymerBlockModel;
 | 
			
		||||
import eu.pb4.polymer.blocks.api.PolymerBlockResourceUtils;
 | 
			
		||||
import eu.pb4.polymer.core.api.block.SimplePolymerBlock;
 | 
			
		||||
import net.minecraft.block.Block;
 | 
			
		||||
import net.minecraft.block.BlockState;
 | 
			
		||||
@@ -9,11 +12,14 @@ import net.minecraft.inventory.Inventory;
 | 
			
		||||
import net.minecraft.item.ItemStack;
 | 
			
		||||
import net.minecraft.state.StateManager;
 | 
			
		||||
import net.minecraft.state.property.EnumProperty;
 | 
			
		||||
import net.minecraft.util.Identifier;
 | 
			
		||||
import net.minecraft.util.math.BlockPos;
 | 
			
		||||
import net.minecraft.util.math.Direction;
 | 
			
		||||
import net.minecraft.world.World;
 | 
			
		||||
import systems.brn.serverstorage.lib.ConnectionType;
 | 
			
		||||
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
 | 
			
		||||
public class ConnectedBlock extends SimplePolymerBlock {
 | 
			
		||||
 | 
			
		||||
    public static final EnumProperty<ConnectionType> NORTH = EnumProperty.of("north", ConnectionType.class);
 | 
			
		||||
@@ -23,6 +29,39 @@ public class ConnectedBlock extends SimplePolymerBlock {
 | 
			
		||||
    public static final EnumProperty<ConnectionType> UP = EnumProperty.of("up", ConnectionType.class);
 | 
			
		||||
    public static final EnumProperty<ConnectionType> DOWN = EnumProperty.of("down", ConnectionType.class);
 | 
			
		||||
 | 
			
		||||
    // Function to get Y-axis rotation for North, South, East, and West directions
 | 
			
		||||
    public static int getRotationFromDirection(Direction direction) {
 | 
			
		||||
        if (direction == Direction.EAST) {
 | 
			
		||||
            return 90;
 | 
			
		||||
        } else if (direction == Direction.SOUTH) {
 | 
			
		||||
            return 180;
 | 
			
		||||
        } else if (direction == Direction.WEST) {
 | 
			
		||||
            return 270;
 | 
			
		||||
        } else {
 | 
			
		||||
            return 0;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Function to get X-axis rotation for Up and Down directions
 | 
			
		||||
    public static int getXRotationFromDirection(Direction direction) {
 | 
			
		||||
        if (direction == Direction.UP) {
 | 
			
		||||
            return 270;
 | 
			
		||||
        } else if (direction == Direction.DOWN) {
 | 
			
		||||
            return 90;
 | 
			
		||||
        } else {
 | 
			
		||||
            return 0;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static HashMap<Direction, BlockState> generateRotations(Identifier identifier) {
 | 
			
		||||
        Identifier modelIdentifier = identifier.withPath("block/" + identifier.getPath());
 | 
			
		||||
        HashMap<Direction, BlockState> rotations = new HashMap<>();
 | 
			
		||||
        for (Direction direction : Direction.values()) {
 | 
			
		||||
            rotations.put(direction, PolymerBlockResourceUtils.requestBlock(BlockModelType.FULL_BLOCK, PolymerBlockModel.of(modelIdentifier, getXRotationFromDirection(direction), getRotationFromDirection(direction))));
 | 
			
		||||
        }
 | 
			
		||||
        return rotations;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setDefaultState() {
 | 
			
		||||
        setDefaultState(getStateManager().getDefaultState()
 | 
			
		||||
                .with(NORTH, ConnectionType.NONE)
 | 
			
		||||
@@ -66,9 +105,9 @@ public class ConnectedBlock extends SimplePolymerBlock {
 | 
			
		||||
            BlockEntity blockEntity = world.getBlockEntity(neighborPos);
 | 
			
		||||
            boolean isConnectedToInventory = blockEntity instanceof Inventory;
 | 
			
		||||
            ConnectionType connectionType = ConnectionType.NONE;
 | 
			
		||||
            if (isConnectedToBus){
 | 
			
		||||
            if (isConnectedToBus) {
 | 
			
		||||
                connectionType = ConnectionType.BUS;
 | 
			
		||||
            } else if (isConnectedToInventory){
 | 
			
		||||
            } else if (isConnectedToInventory) {
 | 
			
		||||
                connectionType = ConnectionType.INVENTORY;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,5 @@
 | 
			
		||||
package systems.brn.serverstorage.blocks;
 | 
			
		||||
 | 
			
		||||
import eu.pb4.polymer.blocks.api.BlockModelType;
 | 
			
		||||
import eu.pb4.polymer.blocks.api.PolymerBlockModel;
 | 
			
		||||
import eu.pb4.polymer.blocks.api.PolymerBlockResourceUtils;
 | 
			
		||||
import eu.pb4.polymer.blocks.api.PolymerTexturedBlock;
 | 
			
		||||
import eu.pb4.polymer.core.api.block.PolymerBlockUtils;
 | 
			
		||||
import net.fabricmc.fabric.api.event.player.UseBlockCallback;
 | 
			
		||||
@@ -27,24 +24,26 @@ import org.jetbrains.annotations.Nullable;
 | 
			
		||||
import systems.brn.serverstorage.blockentities.HardDriveContainerBlockEntity;
 | 
			
		||||
import systems.brn.serverstorage.lib.StorageNetwork;
 | 
			
		||||
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
 | 
			
		||||
import static systems.brn.serverstorage.ServerStorage.*;
 | 
			
		||||
 | 
			
		||||
public class HardDriveContainerBlock extends ConnectedBlock implements PolymerTexturedBlock, BlockEntityProvider {
 | 
			
		||||
 | 
			
		||||
    final Identifier identifier;
 | 
			
		||||
    public static final DirectionProperty FACING = FacingBlock.FACING;
 | 
			
		||||
    private final BlockState polymerBlockState;
 | 
			
		||||
    private final HashMap<Direction, BlockState> rotations;
 | 
			
		||||
 | 
			
		||||
    public HardDriveContainerBlock(AbstractBlock.Settings settings, Identifier identifier) {
 | 
			
		||||
        super(settings, Blocks.NOTE_BLOCK);
 | 
			
		||||
        this.identifier = identifier;
 | 
			
		||||
        this.setDefaultState(this.stateManager.getDefaultState().with(FACING, Direction.NORTH));
 | 
			
		||||
        this.polymerBlockState = PolymerBlockResourceUtils.requestBlock(BlockModelType.FULL_BLOCK, PolymerBlockModel.of(identifier.withPath("block/" + identifier.getPath())));
 | 
			
		||||
        this.rotations = generateRotations(identifier);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public BlockState getPlacementState(ItemPlacementContext ctx) {
 | 
			
		||||
        return this.getDefaultState().with(FACING, ctx.getHorizontalPlayerFacing().getOpposite());
 | 
			
		||||
        return this.getDefaultState().with(FACING, ctx.getPlayerLookDirection().getOpposite());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
@@ -55,7 +54,8 @@ public class HardDriveContainerBlock extends ConnectedBlock implements PolymerTe
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public BlockState getPolymerBlockState(BlockState state) {
 | 
			
		||||
        return this.polymerBlockState;
 | 
			
		||||
        Direction direction = state.get(FACING);
 | 
			
		||||
        return rotations.get(direction);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static void register() {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,5 @@
 | 
			
		||||
package systems.brn.serverstorage.blocks;
 | 
			
		||||
 | 
			
		||||
import eu.pb4.polymer.blocks.api.BlockModelType;
 | 
			
		||||
import eu.pb4.polymer.blocks.api.PolymerBlockModel;
 | 
			
		||||
import eu.pb4.polymer.blocks.api.PolymerBlockResourceUtils;
 | 
			
		||||
import eu.pb4.polymer.blocks.api.PolymerTexturedBlock;
 | 
			
		||||
import eu.pb4.polymer.core.api.block.PolymerBlockUtils;
 | 
			
		||||
import eu.pb4.sgui.api.elements.GuiElementBuilder;
 | 
			
		||||
@@ -35,24 +32,26 @@ import systems.brn.serverstorage.lib.PagedGui;
 | 
			
		||||
import systems.brn.serverstorage.screens.SearchScreen;
 | 
			
		||||
import systems.brn.serverstorage.screens.SettingsScreen;
 | 
			
		||||
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
 | 
			
		||||
import static systems.brn.serverstorage.ServerStorage.*;
 | 
			
		||||
import static systems.brn.serverstorage.lib.PagedGui.*;
 | 
			
		||||
 | 
			
		||||
public class InventoryInterfaceBlock extends ConnectedBlock implements PolymerTexturedBlock, BlockEntityProvider {
 | 
			
		||||
    final Identifier identifier;
 | 
			
		||||
    public static final DirectionProperty FACING = FacingBlock.FACING;
 | 
			
		||||
    private final BlockState polymerBlockState;
 | 
			
		||||
    private final HashMap<Direction, BlockState> rotations;
 | 
			
		||||
 | 
			
		||||
    public InventoryInterfaceBlock(Settings settings, Identifier identifier) {
 | 
			
		||||
        super(settings, Blocks.NOTE_BLOCK);
 | 
			
		||||
        this.identifier = identifier;
 | 
			
		||||
        this.setDefaultState(this.stateManager.getDefaultState().with(FACING, Direction.NORTH));
 | 
			
		||||
        this.polymerBlockState = PolymerBlockResourceUtils.requestBlock(BlockModelType.FULL_BLOCK, PolymerBlockModel.of(identifier.withPath("block/" + identifier.getPath())));
 | 
			
		||||
        this.rotations = generateRotations(identifier);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public BlockState getPlacementState(ItemPlacementContext ctx) {
 | 
			
		||||
        return this.getDefaultState().with(FACING, ctx.getHorizontalPlayerFacing().getOpposite());
 | 
			
		||||
        return this.getDefaultState().with(FACING, ctx.getPlayerLookDirection().getOpposite());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
@@ -63,7 +62,8 @@ public class InventoryInterfaceBlock extends ConnectedBlock implements PolymerTe
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public BlockState getPolymerBlockState(BlockState state) {
 | 
			
		||||
        return this.polymerBlockState;
 | 
			
		||||
        Direction direction = state.get(FACING);
 | 
			
		||||
        return rotations.get(direction);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static void register() {
 | 
			
		||||
@@ -150,7 +150,7 @@ public class InventoryInterfaceBlock extends ConnectedBlock implements PolymerTe
 | 
			
		||||
        Block block = state.getBlock();
 | 
			
		||||
 | 
			
		||||
        if (block instanceof InventoryInterfaceBlock) {
 | 
			
		||||
            if (!world.getGameRules().getBoolean(ServerStorage_Interface_Enable)){
 | 
			
		||||
            if (!world.getGameRules().getBoolean(ServerStorage_Interface_Enable)) {
 | 
			
		||||
                playerEntity.sendMessage(Text.translatable("message.serverstorage.block_disabled"), true);
 | 
			
		||||
                return ActionResult.PASS;
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,5 @@
 | 
			
		||||
package systems.brn.serverstorage.blocks;
 | 
			
		||||
 | 
			
		||||
import eu.pb4.polymer.blocks.api.BlockModelType;
 | 
			
		||||
import eu.pb4.polymer.blocks.api.PolymerBlockModel;
 | 
			
		||||
import eu.pb4.polymer.blocks.api.PolymerBlockResourceUtils;
 | 
			
		||||
import eu.pb4.polymer.blocks.api.PolymerTexturedBlock;
 | 
			
		||||
import eu.pb4.polymer.core.api.block.PolymerBlockUtils;
 | 
			
		||||
import net.fabricmc.fabric.api.event.player.UseBlockCallback;
 | 
			
		||||
@@ -34,6 +31,7 @@ import systems.brn.serverstorage.lib.WirelessTerminalComponents;
 | 
			
		||||
import systems.brn.serverstorage.screens.RadioBlockPlayerMangementScreen;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
 | 
			
		||||
@@ -43,18 +41,19 @@ import static systems.brn.serverstorage.lib.Util.removePosition;
 | 
			
		||||
public class RadioInterfaceBlock extends ConnectedBlock implements PolymerTexturedBlock, BlockEntityProvider {
 | 
			
		||||
    final Identifier identifier;
 | 
			
		||||
    public static final DirectionProperty FACING = FacingBlock.FACING;
 | 
			
		||||
    private final BlockState polymerBlockState;
 | 
			
		||||
    private final HashMap<Direction, BlockState> rotations;
 | 
			
		||||
 | 
			
		||||
    public RadioInterfaceBlock(Settings settings, Identifier identifier) {
 | 
			
		||||
        super(settings, Blocks.NOTE_BLOCK);
 | 
			
		||||
        this.identifier = identifier;
 | 
			
		||||
        this.setDefaultState(this.stateManager.getDefaultState().with(FACING, Direction.NORTH));
 | 
			
		||||
        this.polymerBlockState = PolymerBlockResourceUtils.requestBlock(BlockModelType.FULL_BLOCK, PolymerBlockModel.of(identifier.withPath("block/" + identifier.getPath())));
 | 
			
		||||
        this.rotations = generateRotations(identifier);
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public BlockState getPlacementState(ItemPlacementContext ctx) {
 | 
			
		||||
        return this.getDefaultState().with(FACING, ctx.getHorizontalPlayerFacing().getOpposite());
 | 
			
		||||
        return this.getDefaultState().with(FACING, ctx.getPlayerLookDirection().getOpposite());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
@@ -65,7 +64,8 @@ public class RadioInterfaceBlock extends ConnectedBlock implements PolymerTextur
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public BlockState getPolymerBlockState(BlockState state) {
 | 
			
		||||
        return this.polymerBlockState;
 | 
			
		||||
        Direction direction = state.get(FACING);
 | 
			
		||||
        return rotations.get(direction);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static void register() {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,5 @@
 | 
			
		||||
package systems.brn.serverstorage.blocks;
 | 
			
		||||
 | 
			
		||||
import eu.pb4.polymer.blocks.api.BlockModelType;
 | 
			
		||||
import eu.pb4.polymer.blocks.api.PolymerBlockModel;
 | 
			
		||||
import eu.pb4.polymer.blocks.api.PolymerBlockResourceUtils;
 | 
			
		||||
import eu.pb4.polymer.blocks.api.PolymerTexturedBlock;
 | 
			
		||||
import eu.pb4.polymer.core.api.block.PolymerBlockUtils;
 | 
			
		||||
import net.fabricmc.fabric.api.event.player.UseBlockCallback;
 | 
			
		||||
@@ -33,6 +30,7 @@ import org.jetbrains.annotations.Nullable;
 | 
			
		||||
import systems.brn.serverstorage.blockentities.StorageInterfaceBlockEntity;
 | 
			
		||||
import systems.brn.serverstorage.screens.StorageScreen;
 | 
			
		||||
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import static systems.brn.serverstorage.ServerStorage.*;
 | 
			
		||||
@@ -41,18 +39,18 @@ import static systems.brn.serverstorage.lib.Util.generateBookContent;
 | 
			
		||||
public class StorageInterfaceBlock extends ConnectedBlock implements PolymerTexturedBlock, BlockEntityProvider {
 | 
			
		||||
    final Identifier identifier;
 | 
			
		||||
    public static final DirectionProperty FACING = FacingBlock.FACING;
 | 
			
		||||
    private final BlockState polymerBlockState;
 | 
			
		||||
    private final HashMap<Direction, BlockState> rotations;
 | 
			
		||||
 | 
			
		||||
    public StorageInterfaceBlock(Settings settings, Identifier identifier) {
 | 
			
		||||
        super(settings, Blocks.NOTE_BLOCK);
 | 
			
		||||
        this.identifier = identifier;
 | 
			
		||||
        this.setDefaultState(this.stateManager.getDefaultState().with(FACING, Direction.NORTH));
 | 
			
		||||
        this.polymerBlockState = PolymerBlockResourceUtils.requestBlock(BlockModelType.FULL_BLOCK, PolymerBlockModel.of(identifier.withPath("block/" + identifier.getPath())));
 | 
			
		||||
        this.rotations = generateRotations(identifier);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public BlockState getPlacementState(ItemPlacementContext ctx) {
 | 
			
		||||
        return this.getDefaultState().with(FACING, ctx.getHorizontalPlayerFacing().getOpposite());
 | 
			
		||||
        return this.getDefaultState().with(FACING, ctx.getPlayerLookDirection().getOpposite());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
@@ -63,7 +61,8 @@ public class StorageInterfaceBlock extends ConnectedBlock implements PolymerText
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public BlockState getPolymerBlockState(BlockState state) {
 | 
			
		||||
        return this.polymerBlockState;
 | 
			
		||||
        Direction direction = state.get(FACING);
 | 
			
		||||
        return rotations.get(direction);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static void register() {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,32 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "multipart": [
 | 
			
		||||
    {
 | 
			
		||||
      "when": { "north": "none", "south": "none", "west": "none", "east": "none", "up": "none", "down": "none" },
 | 
			
		||||
      "apply": { "model": "serverstorage:block/bus_connector_blank" }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "when": { "north": "bus" },
 | 
			
		||||
      "apply": { "model": "serverstorage:block/bus_connector_bus_north" }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "when": { "south": "bus" },
 | 
			
		||||
      "apply": { "model": "serverstorage:block/bus_connector_bus_south" }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "when": { "west": "bus" },
 | 
			
		||||
      "apply": { "model": "serverstorage:block/bus_connector_bus_west" }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "when": { "east": "bus" },
 | 
			
		||||
      "apply": { "model": "serverstorage:block/bus_connector_bus_east" }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "when": { "up": "bus" },
 | 
			
		||||
      "apply": { "model": "serverstorage:block/bus_connector_bus_up" }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "when": { "down": "bus" },
 | 
			
		||||
      "apply": { "model": "serverstorage:block/bus_connector_bus_down" }
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
@@ -1,27 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "variants": {
 | 
			
		||||
    "facing=down": {
 | 
			
		||||
      "model": "serverstorage:block/drive_container",
 | 
			
		||||
      "x": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east": {
 | 
			
		||||
      "model": "serverstorage:block/drive_container",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north": {
 | 
			
		||||
      "model": "serverstorage:block/drive_container"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south": {
 | 
			
		||||
      "model": "serverstorage:block/drive_container",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=up": {
 | 
			
		||||
      "model": "serverstorage:block/drive_container",
 | 
			
		||||
      "x": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west": {
 | 
			
		||||
      "model": "serverstorage:block/drive_container",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,32 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "multipart": [
 | 
			
		||||
    {
 | 
			
		||||
      "when": { "north": "none", "south": "none", "west": "none", "east": "none", "up": "none", "down": "none" },
 | 
			
		||||
      "apply": { "model": "serverstorage:block/inventory_interface_blank" }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "when": { "north": "inventory" },
 | 
			
		||||
      "apply": { "model": "serverstorage:block/inventory_interface_inventory_north" }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "when": { "south": "inventory" },
 | 
			
		||||
      "apply": { "model": "serverstorage:block/inventory_interface_inventory_south" }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "when": { "west": "inventory" },
 | 
			
		||||
      "apply": { "model": "serverstorage:block/inventory_interface_inventory_west" }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "when": { "east": "inventory" },
 | 
			
		||||
      "apply": { "model": "serverstorage:block/inventory_interface_inventory_east" }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "when": { "up": "inventory" },
 | 
			
		||||
      "apply": { "model": "serverstorage:block/inventory_interface_inventory_up" }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "when": { "down": "inventory" },
 | 
			
		||||
      "apply": { "model": "serverstorage:block/inventory_interface_inventory_down" }
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
@@ -1,26 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "variants": {
 | 
			
		||||
    "facing=down": {
 | 
			
		||||
      "model": "serverstorage:block/storage",
 | 
			
		||||
      "x": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east": {
 | 
			
		||||
      "model": "serverstorage:block/storage",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north": {
 | 
			
		||||
      "model": "serverstorage:block/storage"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south": {
 | 
			
		||||
      "model": "serverstorage:block/storage",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=up": {
 | 
			
		||||
      "model": "serverstorage:block/storage"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west": {
 | 
			
		||||
      "model": "serverstorage:block/storage",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -34,6 +34,10 @@
 | 
			
		||||
  "item.serverstorage.module_inventory": "Inventory Module",
 | 
			
		||||
  "item.serverstorage.module_pagination": "Pagination Module",
 | 
			
		||||
  "item.serverstorage.module_transport": "Transport Module",
 | 
			
		||||
  "item.serverstorage.module_antenna": "Antenna Module",
 | 
			
		||||
  "item.serverstorage.module_radio": "Radio Module",
 | 
			
		||||
  "item.serverstorage.module_antenna_connector": "Antenna Connector Module",
 | 
			
		||||
  "item.serverstorage.module_modem": "MoDem Module",
 | 
			
		||||
  "item.serverstorage.module_netherite_upgrade": "Netherite Upgrade Module",
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "block/cube_all",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "all": "serverstorage:block/bus_connector_blank"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,6 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "block/cube_all",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "all": "serverstorage:block/bus_connector_blank"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,11 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "block/cube",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "down": "serverstorage:block/bus_connector_bus",
 | 
			
		||||
    "up": "serverstorage:block/bus_connector_blank",
 | 
			
		||||
    "north": "serverstorage:block/bus_connector_blank",
 | 
			
		||||
    "south": "serverstorage:block/bus_connector_blank",
 | 
			
		||||
    "west": "serverstorage:block/bus_connector_blank",
 | 
			
		||||
    "east": "serverstorage:block/bus_connector_blank"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,11 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "block/cube",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "down": "serverstorage:block/bus_connector_blank",
 | 
			
		||||
    "up": "serverstorage:block/bus_connector_blank",
 | 
			
		||||
    "north": "serverstorage:block/bus_connector_blank",
 | 
			
		||||
    "south": "serverstorage:block/bus_connector_blank",
 | 
			
		||||
    "west": "serverstorage:block/bus_connector_blank",
 | 
			
		||||
    "east": "serverstorage:block/bus_connector_bus"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,11 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "block/cube",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "down": "serverstorage:block/bus_connector_blank",
 | 
			
		||||
    "up": "serverstorage:block/bus_connector_blank",
 | 
			
		||||
    "north": "serverstorage:block/bus_connector_bus",
 | 
			
		||||
    "south": "serverstorage:block/bus_connector_blank",
 | 
			
		||||
    "west": "serverstorage:block/bus_connector_blank",
 | 
			
		||||
    "east": "serverstorage:block/bus_connector_blank"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,11 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "block/cube",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "down": "serverstorage:block/bus_connector_blank",
 | 
			
		||||
    "up": "serverstorage:block/bus_connector_blank",
 | 
			
		||||
    "north": "serverstorage:block/bus_connector_blank",
 | 
			
		||||
    "south": "serverstorage:block/bus_connector_bus",
 | 
			
		||||
    "west": "serverstorage:block/bus_connector_blank",
 | 
			
		||||
    "east": "serverstorage:block/bus_connector_blank"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,11 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "block/cube",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "down": "serverstorage:block/bus_connector_blank",
 | 
			
		||||
    "up": "serverstorage:block/bus_connector_bus",
 | 
			
		||||
    "north": "serverstorage:block/bus_connector_blank",
 | 
			
		||||
    "south": "serverstorage:block/bus_connector_blank",
 | 
			
		||||
    "west": "serverstorage:block/bus_connector_blank",
 | 
			
		||||
    "east": "serverstorage:block/bus_connector_blank"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,11 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "block/cube",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "down": "serverstorage:block/bus_connector_blank",
 | 
			
		||||
    "up": "serverstorage:block/bus_connector_blank",
 | 
			
		||||
    "north": "serverstorage:block/bus_connector_blank",
 | 
			
		||||
    "south": "serverstorage:block/bus_connector_blank",
 | 
			
		||||
    "west": "serverstorage:block/bus_connector_bus",
 | 
			
		||||
    "east": "serverstorage:block/bus_connector_blank"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,6 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "block/cube_all",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "all": "serverstorage:block/bus_connector_blank"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,7 +1,11 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "block/orientable_vertical",
 | 
			
		||||
  "parent": "block/orientable",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "front": "serverstorage:block/drive_container_front",
 | 
			
		||||
    "side": "serverstorage:block/drive_container_side"
 | 
			
		||||
    "side": "serverstorage:block/drive_container_side",
 | 
			
		||||
    "top": "serverstorage:block/drive_container_side",
 | 
			
		||||
    "east": "serverstorage:block/drive_container_side",
 | 
			
		||||
    "south": "serverstorage:block/drive_container_side",
 | 
			
		||||
    "west": "serverstorage:block/drive_container_side"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,6 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "block/cube_all",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "all": "serverstorage:block/inventory_interface_blank"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,11 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "block/cube",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "down": "serverstorage:block/inventory_interface_inventory",
 | 
			
		||||
    "up": "serverstorage:block/inventory_interface_blank",
 | 
			
		||||
    "north": "serverstorage:block/inventory_interface_blank",
 | 
			
		||||
    "south": "serverstorage:block/inventory_interface_blank",
 | 
			
		||||
    "west": "serverstorage:block/inventory_interface_blank",
 | 
			
		||||
    "east": "serverstorage:block/inventory_interface_blank"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,11 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "block/cube",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "down": "serverstorage:block/inventory_interface_blank",
 | 
			
		||||
    "up": "serverstorage:block/inventory_interface_blank",
 | 
			
		||||
    "north": "serverstorage:block/inventory_interface_blank",
 | 
			
		||||
    "south": "serverstorage:block/inventory_interface_blank",
 | 
			
		||||
    "west": "serverstorage:block/inventory_interface_blank",
 | 
			
		||||
    "east": "serverstorage:block/inventory_interface_inventory"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,11 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "block/cube",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "down": "serverstorage:block/inventory_interface_blank",
 | 
			
		||||
    "up": "serverstorage:block/inventory_interface_blank",
 | 
			
		||||
    "north": "serverstorage:block/inventory_interface_inventory",
 | 
			
		||||
    "south": "serverstorage:block/inventory_interface_blank",
 | 
			
		||||
    "west": "serverstorage:block/inventory_interface_blank",
 | 
			
		||||
    "east": "serverstorage:block/inventory_interface_blank"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,11 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "block/cube",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "down": "serverstorage:block/inventory_interface_blank",
 | 
			
		||||
    "up": "serverstorage:block/inventory_interface_blank",
 | 
			
		||||
    "north": "serverstorage:block/inventory_interface_blank",
 | 
			
		||||
    "south": "serverstorage:block/inventory_interface_inventory",
 | 
			
		||||
    "west": "serverstorage:block/inventory_interface_blank",
 | 
			
		||||
    "east": "serverstorage:block/inventory_interface_blank"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,11 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "block/cube",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "down": "serverstorage:block/inventory_interface_blank",
 | 
			
		||||
    "up": "serverstorage:block/inventory_interface_inventory",
 | 
			
		||||
    "north": "serverstorage:block/inventory_interface_blank",
 | 
			
		||||
    "south": "serverstorage:block/inventory_interface_blank",
 | 
			
		||||
    "west": "serverstorage:block/inventory_interface_blank",
 | 
			
		||||
    "east": "serverstorage:block/inventory_interface_blank"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,11 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "block/cube",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "down": "serverstorage:block/inventory_interface_blank",
 | 
			
		||||
    "up": "serverstorage:block/inventory_interface_blank",
 | 
			
		||||
    "north": "serverstorage:block/inventory_interface_blank",
 | 
			
		||||
    "south": "serverstorage:block/inventory_interface_blank",
 | 
			
		||||
    "west": "serverstorage:block/inventory_interface_inventory",
 | 
			
		||||
    "east": "serverstorage:block/inventory_interface_blank"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,11 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "block/orientable",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "front": "serverstorage:block/radio_interface_front",
 | 
			
		||||
    "side": "serverstorage:block/radio_interface_side",
 | 
			
		||||
    "top": "serverstorage:block/radio_interface_side",
 | 
			
		||||
    "east": "serverstorage:block/radio_interface_side",
 | 
			
		||||
    "south": "serverstorage:block/radio_interface_side",
 | 
			
		||||
    "west": "serverstorage:block/radio_interface_side"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,3 +1,3 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "serverstorage:block/bus_connector_blank"
 | 
			
		||||
  "parent": "serverstorage:block/bus_connector"
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "minecraft:item/handheld",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "layer0": "serverstorage:item/diamond_antenna"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "minecraft:item/handheld",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "layer0": "serverstorage:item/golden_antenna"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "minecraft:item/handheld",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "layer0": "serverstorage:item/iron_antenna"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "minecraft:item/handheld",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "layer0": "serverstorage:item/module_antenna"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "minecraft:item/handheld",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "layer0": "serverstorage:item/module_antenna_connector"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "minecraft:item/handheld",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "layer0": "serverstorage:item/module_modem"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "minecraft:item/handheld",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "layer0": "serverstorage:item/module_radio"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "minecraft:item/handheld",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "layer0": "serverstorage:item/netherite_antenna"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,3 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "serverstorage:block/radio_interface"
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "minecraft:item/handheld",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "layer0": "serverstorage:item/wireless_terminal"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
		 After Width: | Height: | Size: 421 B  | 
| 
		 After Width: | Height: | Size: 657 B  | 
| 
		 After Width: | Height: | Size: 180 B  | 
| 
		 After Width: | Height: | Size: 180 B  | 
| 
		 After Width: | Height: | Size: 180 B  | 
| 
		 After Width: | Height: | Size: 186 B  | 
| 
		 After Width: | Height: | Size: 204 B  | 
| 
		 After Width: | Height: | Size: 200 B  | 
| 
		 After Width: | Height: | Size: 201 B  | 
| 
		 After Width: | Height: | Size: 185 B  | 
| 
		 After Width: | Height: | Size: 670 B  | 
@@ -0,0 +1,18 @@
 | 
			
		||||
{
 | 
			
		||||
  "type": "minecraft:crafting_shaped",
 | 
			
		||||
  "category": "misc",
 | 
			
		||||
  "pattern": [
 | 
			
		||||
    " ##",
 | 
			
		||||
    "## ",
 | 
			
		||||
    "#  "
 | 
			
		||||
  ],
 | 
			
		||||
  "key": {
 | 
			
		||||
    "#": {
 | 
			
		||||
      "item": "minecraft:diamond"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  "result": {
 | 
			
		||||
    "id": "serverstorage:diamond_antenna",
 | 
			
		||||
    "count": 1
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,18 @@
 | 
			
		||||
{
 | 
			
		||||
  "type": "minecraft:crafting_shaped",
 | 
			
		||||
  "category": "misc",
 | 
			
		||||
  "pattern": [
 | 
			
		||||
    " ##",
 | 
			
		||||
    "## ",
 | 
			
		||||
    "#  "
 | 
			
		||||
  ],
 | 
			
		||||
  "key": {
 | 
			
		||||
    "#": {
 | 
			
		||||
      "item": "minecraft:gold_ingot"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  "result": {
 | 
			
		||||
    "id": "serverstorage:golden_antenna",
 | 
			
		||||
    "count": 1
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,18 @@
 | 
			
		||||
{
 | 
			
		||||
  "type": "minecraft:crafting_shaped",
 | 
			
		||||
  "category": "misc",
 | 
			
		||||
  "pattern": [
 | 
			
		||||
    " ##",
 | 
			
		||||
    "## ",
 | 
			
		||||
    "#  "
 | 
			
		||||
  ],
 | 
			
		||||
  "key": {
 | 
			
		||||
    "#": {
 | 
			
		||||
      "item": "minecraft:iron_ingot"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  "result": {
 | 
			
		||||
    "id": "serverstorage:iron_antenna",
 | 
			
		||||
    "count": 1
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,30 @@
 | 
			
		||||
{
 | 
			
		||||
  "type": "minecraft:crafting_shaped",
 | 
			
		||||
  "category": "misc",
 | 
			
		||||
  "pattern": [
 | 
			
		||||
    "RIR",
 | 
			
		||||
    "SCS",
 | 
			
		||||
    "GGG"
 | 
			
		||||
  ],
 | 
			
		||||
  "key": {
 | 
			
		||||
    "G": {
 | 
			
		||||
      "item": "minecraft:gold_nugget"
 | 
			
		||||
    },
 | 
			
		||||
    "R": {
 | 
			
		||||
      "item": "minecraft:iron_ingot"
 | 
			
		||||
    },
 | 
			
		||||
    "I": {
 | 
			
		||||
      "item": "minecraft:gold_ingot"
 | 
			
		||||
    },
 | 
			
		||||
    "C": {
 | 
			
		||||
      "item": "serverstorage:material_cpu"
 | 
			
		||||
    },
 | 
			
		||||
    "S": {
 | 
			
		||||
      "item": "serverstorage:material_pcb_substrate"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  "result": {
 | 
			
		||||
    "id": "serverstorage:module_antenna",
 | 
			
		||||
    "count": 1
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,27 @@
 | 
			
		||||
{
 | 
			
		||||
  "type": "minecraft:crafting_shaped",
 | 
			
		||||
  "category": "misc",
 | 
			
		||||
  "pattern": [
 | 
			
		||||
    "RGR",
 | 
			
		||||
    "SCS",
 | 
			
		||||
    "GGG"
 | 
			
		||||
  ],
 | 
			
		||||
  "key": {
 | 
			
		||||
    "G": {
 | 
			
		||||
      "item": "minecraft:gold_nugget"
 | 
			
		||||
    },
 | 
			
		||||
    "R": {
 | 
			
		||||
      "item": "minecraft:iron_ingot"
 | 
			
		||||
    },
 | 
			
		||||
    "C": {
 | 
			
		||||
      "item": "serverstorage:material_cpu"
 | 
			
		||||
    },
 | 
			
		||||
    "S": {
 | 
			
		||||
      "item": "serverstorage:material_pcb_substrate"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  "result": {
 | 
			
		||||
    "id": "serverstorage:module_antenna_connector",
 | 
			
		||||
    "count": 1
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,27 @@
 | 
			
		||||
{
 | 
			
		||||
  "type": "minecraft:crafting_shaped",
 | 
			
		||||
  "category": "misc",
 | 
			
		||||
  "pattern": [
 | 
			
		||||
    "ICI",
 | 
			
		||||
    "SCS",
 | 
			
		||||
    "GGG"
 | 
			
		||||
  ],
 | 
			
		||||
  "key": {
 | 
			
		||||
    "G": {
 | 
			
		||||
      "item": "minecraft:gold_nugget"
 | 
			
		||||
    },
 | 
			
		||||
    "I": {
 | 
			
		||||
      "item": "minecraft:gold_ingot"
 | 
			
		||||
    },
 | 
			
		||||
    "C": {
 | 
			
		||||
      "item": "serverstorage:material_cpu"
 | 
			
		||||
    },
 | 
			
		||||
    "S": {
 | 
			
		||||
      "item": "serverstorage:material_pcb_substrate"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  "result": {
 | 
			
		||||
    "id": "serverstorage:module_modem",
 | 
			
		||||
    "count": 1
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,27 @@
 | 
			
		||||
{
 | 
			
		||||
  "type": "minecraft:crafting_shaped",
 | 
			
		||||
  "category": "misc",
 | 
			
		||||
  "pattern": [
 | 
			
		||||
    "CIC",
 | 
			
		||||
    "SCS",
 | 
			
		||||
    "GGG"
 | 
			
		||||
  ],
 | 
			
		||||
  "key": {
 | 
			
		||||
    "G": {
 | 
			
		||||
      "item": "minecraft:gold_nugget"
 | 
			
		||||
    },
 | 
			
		||||
    "I": {
 | 
			
		||||
      "item": "minecraft:gold_ingot"
 | 
			
		||||
    },
 | 
			
		||||
    "C": {
 | 
			
		||||
      "item": "serverstorage:material_cpu"
 | 
			
		||||
    },
 | 
			
		||||
    "S": {
 | 
			
		||||
      "item": "serverstorage:material_pcb_substrate"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  "result": {
 | 
			
		||||
    "id": "serverstorage:module_radio",
 | 
			
		||||
    "count": 1
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,16 @@
 | 
			
		||||
{
 | 
			
		||||
  "type": "minecraft:smithing_transform",
 | 
			
		||||
  "addition": {
 | 
			
		||||
    "item": "minecraft:netherite_ingot"
 | 
			
		||||
  },
 | 
			
		||||
  "base": {
 | 
			
		||||
    "item": "serverstorage:diamond_antenna"
 | 
			
		||||
  },
 | 
			
		||||
  "result": {
 | 
			
		||||
    "count": 1,
 | 
			
		||||
    "id": "serverstorage:netherite_antenna"
 | 
			
		||||
  },
 | 
			
		||||
  "template": {
 | 
			
		||||
    "item": "serverstorage:module_netherite_upgrade"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,39 @@
 | 
			
		||||
{
 | 
			
		||||
  "type": "minecraft:crafting_shaped",
 | 
			
		||||
  "category": "misc",
 | 
			
		||||
  "pattern": [
 | 
			
		||||
    "CBH",
 | 
			
		||||
    "MUG",
 | 
			
		||||
    "MPF"
 | 
			
		||||
  ],
 | 
			
		||||
  "key": {
 | 
			
		||||
    "P": {
 | 
			
		||||
      "item": "serverstorage:material_pcb"
 | 
			
		||||
    },
 | 
			
		||||
    "U": {
 | 
			
		||||
      "item": "serverstorage:material_cpu"
 | 
			
		||||
    },
 | 
			
		||||
    "C": {
 | 
			
		||||
      "item": "serverstorage:module_radio"
 | 
			
		||||
    },
 | 
			
		||||
    "B": {
 | 
			
		||||
      "item": "serverstorage:module_bus"
 | 
			
		||||
    },
 | 
			
		||||
    "H": {
 | 
			
		||||
      "item": "serverstorage:module_antenna_connector"
 | 
			
		||||
    },
 | 
			
		||||
    "M": {
 | 
			
		||||
      "item": "serverstorage:module_modem"
 | 
			
		||||
    },
 | 
			
		||||
    "G": {
 | 
			
		||||
      "item": "serverstorage:module_configuration"
 | 
			
		||||
    },
 | 
			
		||||
    "F": {
 | 
			
		||||
      "item": "serverstorage:module_pagination"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  "result": {
 | 
			
		||||
    "id": "serverstorage:radio_interface",
 | 
			
		||||
    "count": 1
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,39 @@
 | 
			
		||||
{
 | 
			
		||||
  "type": "minecraft:crafting_shaped",
 | 
			
		||||
  "category": "misc",
 | 
			
		||||
  "pattern": [
 | 
			
		||||
    "AHM",
 | 
			
		||||
    "CGF",
 | 
			
		||||
    "UMP"
 | 
			
		||||
  ],
 | 
			
		||||
  "key": {
 | 
			
		||||
    "P": {
 | 
			
		||||
      "item": "serverstorage:material_pcb"
 | 
			
		||||
    },
 | 
			
		||||
    "U": {
 | 
			
		||||
      "item": "serverstorage:material_cpu"
 | 
			
		||||
    },
 | 
			
		||||
    "A": {
 | 
			
		||||
      "item": "serverstorage:module_antenna"
 | 
			
		||||
    },
 | 
			
		||||
    "C": {
 | 
			
		||||
      "item": "serverstorage:module_radio"
 | 
			
		||||
    },
 | 
			
		||||
    "H": {
 | 
			
		||||
      "item": "serverstorage:module_antenna_connector"
 | 
			
		||||
    },
 | 
			
		||||
    "M": {
 | 
			
		||||
      "item": "serverstorage:module_modem"
 | 
			
		||||
    },
 | 
			
		||||
    "G": {
 | 
			
		||||
      "item": "serverstorage:module_configuration"
 | 
			
		||||
    },
 | 
			
		||||
    "F": {
 | 
			
		||||
      "item": "serverstorage:module_pagination"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  "result": {
 | 
			
		||||
    "id": "serverstorage:wireless_terminal",
 | 
			
		||||
    "count": 1
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||