Skip to content

ComplexSignals (BLOCKCOMPLEXSIGNAL)

Description

This is a more flexible signal, it is more complex but lets you do way more with the signal than the BLOCKSIGNAL.
Signal documentation

Structure

Information regarding the structure

Multiple OBJs, Base and References can be used for single and multiple signals as well.
The following example show a few possibilities, but there are more constellations possible.

singlegroup.json
{
  "id": "simple-single-lamp", // (1)!
  "name": "Simple Single Lamp Signal", // (2)!
  "rotationSteps": 10, // (3)!
  "signals": { // (4)!
    "main_lamp": { // (5)!
      "groupName": "Main lamp", // (6)!
      "states": { // (7)!
        "off": { // (8)!
          "signalName": "Off", // (9)!
          "models": { // (10)!
            "singlelampsignal/singlelampsignal.obj": [ // (11)!
              {
                "textures": "off", // (12)!
                "item": { // (13)!
                  "DEFAULT": { // (14)!
                    "translation": [ // (15)!
                      0.625,
                      0.125,
                      0
                    ],
                    "rotation": [ // (16)!
                      0,
                      180,
                      0
                    ],
                    "scaling": [ // (17)!
                      0.8,
                      0.8,
                      0.8
                    ]
                  }
                },
                "block": { // (18)!
                  "translation": [ // (19)!
                    0.5,
                    0,
                    0.5
                  ],
                  "rotation": [ // (20)!
                    0,
                    180,
                    0
                  ],
                  "scaling": [ // (21)!
                    1,
                    1,
                    1
                  ]
                }
              }
            ]
          }
        },
        "white": {
          "signalName": "White",
          "models": {
            "singlelampsignal/singlelampsignal.obj": [
              {
                "textures": "white",
                "item": {
                  "DEFAULT": {
                    "translation": [
                      0.625,
                      0.125,
                      0
                    ],
                    "rotation": [
                      0,
                      180,
                      0
                    ],
                    "scaling": [
                      0.8,
                      0.8,
                      0.8
                    ]
                  }
                },
                "block": {
                  "translation": [
                    0.5,
                    0,
                    0.5
                  ],
                  "rotation": [
                    0,
                    180,
                    0
                  ],
                  "scaling": [
                    1,
                    1,
                    1
                  ]
                }
              }
            ]
          }
        },
        "red": {
          "signalName": "Red",
          "models": {
            "singlelampsignal/singlelampsignal.obj": [
              {
                "textures": "red",
                "item": { //
                  "DEFAULT": {
                    "translation": [
                      0.625,
                      0.125,
                      0
                    ],
                    "rotation": [
                      0,
                      180,
                      0
                    ],
                    "scaling": [
                      0.8,
                      0.8,
                      0.8
                    ]
                  }
                },
                "block": {
                  "translation": [
                    0.5,
                    0,
                    0.5
                  ],
                  "rotation": [
                    0,
                    180,
                    0
                  ],
                  "scaling": [
                    1,
                    1,
                    1
                  ]
                }
              }
            ]
          }
        }
      }
    }
  }
}
  1. The identifier of the block and item.

    Required field!

    Needs to be unique!
    If more than one block within the same contentpack has the same id, only one will be loaded.

    Should not be changed!
    Changing the id will break existing blocks.

  2. The name of the block and item.

    Required field!

    Can be changed later on.
    Does not have to be unique, although that helps.

  3. The steps in which the block can be rotated.

    Optional field.

    Default value: 10
    Allowed values: 10 - 90

    Can be changed later on.

  4. Includes all the groups your signal has.
    Groups are independent parts of your signal.
    One signalbox can only control one independent part.
    Groups do not interact with each other.

    Required field!
    Needs atleast one entry.

    Should be able to be changed later on. (Not tested!)

    Adding new groups is no issue.

    Removing groups may break existing blocks.

  5. A group that can be selected by a signalbox

    Required field!

    Should not be changed!

    Changing the group id will most likely break existing blocks.

  6. The name of this group

    Required field!

    Can be changed later on.

  7. The different states this group has

    Required field!
    Needs atleast one entry.

    The order of the states is important as they overwrite each other.

    The first state is the lowest and the last state the highest in priority.
    The first state will also be the default state for the item and for a newly placed block.
    The order can be changed for each placed block individually by clicking on it.

    Can be changed later on.

    Adding new states is no issue.

    Removing states may break existing blocks.

  8. The identifier of the state

    Required field!

    Should not be changed!

    Changing the state id will most likely break existing blocks.

  9. The name of the state

    Required field!

    Can be changed later on.

  10. List of all the OBJ files you want to use.

    Required field!

    Atleast one entry is required!

    In this example only a single obj file is used.
    Look at '+ multiple OBJs' for another example.

    Can be changed later on.

    This may cause the UniversalModCore cache to break.
    You can try to delete the /cache/landofsignals/ folder in your minecraft instance.

  11. The path to the OBJ you want to use.

    Required field!

    Path does not require /assets/landofsignals/.

    The name and content of the file can be changed later on.

    This may cause the UniversalModCore cache to break.
    You can try to delete the /cache/landofsignals/ folder in your minecraft instance.

  12. The name of the folder containing the correct textures for this OBJ and state.

    Optional field.

    Will use the textures within the same folder as the OBJ when not specified.

    The name and content of the file can be changed later on.

    This may cause the UniversalModCore cache to break.
    You can try to delete the /cache/landofsignals/ folder in your minecraft instance.

  13. Contains properties like translation, rotation and/or scaling for the item

    Optional field.

  14. Place where the item should be rendered.

    Optional field.

    Allowed properties

    DEFAULT
    THIRD_PERSON_LEFT_HAND
    THIRD_PERSON_RIGHT_HAND
    FIRST_PERSON_LEFT_HAND
    FIRST_PERSON_RIGHT_HAND
    HEAD
    GUI
    ENTITY
    FRAME

    Can be changed later on.

  15. The translation of the item.

    Optional field.

    Default value: 0.5, 0.5, 0.5

    Is affected by scaling as translation happens afterward.

    Affects rotation as translation happens beforehand.

    Can be changed later on.

  16. The rotation of the item.

    Optional field.

    Default value: 0, 0, 0

    Is affected by scaling and translation as rotation happens afterward.

    Can be changed later on.

  17. The scaling of the item.

    Optional field.

    Default value: 1, 1, 1

    Affects translation and rotation as scaling happens beforehand.

    Can be changed later on.

  18. Contains properties like translation, rotation and/or scaling for the block

    Optional field.

  19. The translation of the block.

    Optional field.

    Default value: 0.5, 0.5, 0.5

    Is affected by scaling as translation happens afterward.

    Affects rotation as translation happens beforehand.

    Can be changed later on.

    May screw up the positioning of existing blocks.

  20. The rotation of the block.

    Optional field.

    Default value: 0, 0, 0

    Is affected by scaling and translation as rotation happens afterward.

    Can be changed later on.

    May screw up the positioning of existing blocks.

  21. The scaling of the block.

    Optional field.

    Default value: 1, 1, 1

    Affects translation and rotation as scaling happens beforehand.

    Can be changed later on.

    May screw up the positioning of existing blocks.

singlegroup-ref.json
{
  "id": "simple-single-lamp", // (1)!
  "name": "Simple Single Lamp Signal", // (2)!
  "rotationSteps": 10, // (3)!
  "references": {
    "contentPackItemRefs": {
      "defaultItem": {
        "translation": [ // (15)!
          0.625,
          0.125,
          0
        ],
        "rotation": [ // (16)!
          0,
          180,
          0
        ],
        "scaling": [ // (17)!
          0.8,
          0.8,
          0.8
        ]
      }
    },
    "contentPackBlockRefs": {
      "defaultBlock": {
        "translation": [ // (19)!
          0.5,
          0,
          0.5
        ],
        "rotation": [ // (20)!
          0,
          180,
          0
        ],
        "scaling": [ // (21)!
          1,
          1,
          1
        ]
      }
    }
  },
  "signals": { // (4)!
    "main_lamp": { // (5)!
      "groupName": "Main lamp", // (6)!
      "states": { // (7)!
        "off": { // (8)!
          "signalName": "Off", // (9)!
          "models": { // (10)!
            "singlelampsignal/singlelampsignal.obj": [ // (11)!
              {
                "textures": "off", // (12)!
                "itemRefs": {
                  "DEFAULT": "defaultItem"
                },
                "blockRef": "defaultBlock"
              }
            ]
          }
        },
        "white": {
          "signalName": "White",
          "models": {
            "singlelampsignal/singlelampsignal.obj": [
              {
                "textures": "white",
                "itemRefs": {
                  "DEFAULT": "defaultItem"
                },
                "blockRef": "defaultBlock"
              }
            ]
          }
        },
        "red": {
          "signalName": "Red",
          "models": {
            "singlelampsignal/singlelampsignal.obj": [
              {
                "textures": "red",
                "itemRefs": {
                  "DEFAULT": "defaultItem"
                },
                "blockRef": "defaultBlock"
              }
            ]
          }
        }
      }
    }
  }
}
  1. The identifier of the block and item.

    Required field!

    Needs to be unique!
    If more than one block within the same contentpack has the same id, only one will be loaded.

    Should not be changed!
    Changing the id will break existing blocks.

  2. The name of the block and item.

    Required field!

    Can be changed later on.
    Does not have to be unique, although that helps.

  3. The steps in which the block can be rotated.

    Optional field.

    Default value: 10
    Allowed values: 10 - 90

    Can be changed later on.

  4. Includes all the groups your signal has.
    Groups are independent parts of your signal.
    One signalbox can only control one independent part.
    Groups do not interact with each other.

    Required field!
    Needs atleast one entry.

    Should be able to be changed later on. (Not tested!)

    Adding new groups is no issue.

    Removing groups may break existing blocks.

  5. A group that can be selected by a signalbox

    Required field!

    Should not be changed!

    Changing the group id will most likely break existing blocks.

  6. The name of this group

    Required field!

    Can be changed later on.

  7. The different states this group has

    Required field!
    Needs atleast one entry.

    The order of the states is important as they overwrite each other.

    The first state is the lowest and the last state the highest in priority.
    The first state will also be the default state for the item and for a newly placed block.
    The order can be changed for each placed block individually by clicking on it.

    Can be changed later on.

    Adding new states is no issue.

    Removing states may break existing blocks.

  8. The identifier of the state

    Required field!

    Should not be changed!

    Changing the state id will most likely break existing blocks.

  9. The name of the state

    Required field!

    Can be changed later on.

  10. List of all the OBJ files you want to use.

    Required field!

    Atleast one entry is required!

    In this example only a single obj file is used.
    Look at '+ multiple OBJs' for another example.

    Can be changed later on.

    This may cause the UniversalModCore cache to break.
    You can try to delete the /cache/landofsignals/ folder in your minecraft instance.

  11. The path to the OBJ you want to use.

    Required field!

    Path does not require /assets/landofsignals/.

    The name and content of the file can be changed later on.

    This may cause the UniversalModCore cache to break.
    You can try to delete the /cache/landofsignals/ folder in your minecraft instance.

  12. The name of the folder containing the correct textures for this OBJ and state.

    Optional field.

    Will use the textures within the same folder as the OBJ when not specified.

    The name and content of the file can be changed later on.

    This may cause the UniversalModCore cache to break.
    You can try to delete the /cache/landofsignals/ folder in your minecraft instance.

  13. Contains properties like translation, rotation and/or scaling for the item

    Optional field.

  14. Place where the item should be rendered.

    Optional field.

    Allowed properties

    DEFAULT
    THIRD_PERSON_LEFT_HAND
    THIRD_PERSON_RIGHT_HAND
    FIRST_PERSON_LEFT_HAND
    FIRST_PERSON_RIGHT_HAND
    HEAD
    GUI
    ENTITY
    FRAME

    Can be changed later on.

  15. The translation of the item.

    Optional field.

    Default value: 0.5, 0.5, 0.5

    Is affected by scaling as translation happens afterward.

    Affects rotation as translation happens beforehand.

    Can be changed later on.

  16. The rotation of the item.

    Optional field.

    Default value: 0, 0, 0

    Is affected by scaling and translation as rotation happens afterward.

    Can be changed later on.

  17. The scaling of the item.

    Optional field.

    Default value: 1, 1, 1

    Affects translation and rotation as scaling happens beforehand.

    Can be changed later on.

  18. Contains properties like translation, rotation and/or scaling for the block

    Optional field.

  19. The translation of the block.

    Optional field.

    Default value: 0.5, 0.5, 0.5

    Is affected by scaling as translation happens afterward.

    Affects rotation as translation happens beforehand.

    Can be changed later on.

    May screw up the positioning of existing blocks.

  20. The rotation of the block.

    Optional field.

    Default value: 0, 0, 0

    Is affected by scaling and translation as rotation happens afterward.

    Can be changed later on.

    May screw up the positioning of existing blocks.

  21. The scaling of the block.

    Optional field.

    Default value: 1, 1, 1

    Affects translation and rotation as scaling happens beforehand.

    Can be changed later on.

    May screw up the positioning of existing blocks.

  • Lorem ipsum
  • Lorem ipsum
  • Lorem ipsum
  • Lorem ipsum
  • Lorem ipsum

States

Implementation

Sorting, priorities and overwriting of states

Flares

  • Flares (optional, nice to have)


    If your model contains lamps or other parts that are supposed to glow, this is the right place.
    Flares are oriented to your models and light up when the right state is set.
    They can be added to signals, complex signals, deco/assets, signs and levers.

    Flare documentation