diff --git a/src/generated/resources/assets/create_connected/blockstates/linked_copycat_stone_button.json b/src/generated/resources/assets/create_connected/blockstates/linked_copycat_stone_button.json new file mode 100644 index 000000000..6dc360685 --- /dev/null +++ b/src/generated/resources/assets/create_connected/blockstates/linked_copycat_stone_button.json @@ -0,0 +1,729 @@ +{ + "multipart": [ + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered_locked", + "y": 180 + }, + "when": { + "face": "floor", + "facing": "north", + "locked": "true", + "powered": "true" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_locked", + "y": 180 + }, + "when": { + "face": "floor", + "facing": "north", + "locked": "true", + "powered": "false" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered", + "y": 180 + }, + "when": { + "face": "floor", + "facing": "north", + "locked": "false", + "powered": "true" + } + }, + { + "apply": { + "model": "minecraft:block/air" + }, + "when": { + "face": "floor", + "facing": "north" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block", + "y": 180 + }, + "when": { + "face": "floor", + "facing": "north", + "locked": "false", + "powered": "false" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered_locked", + "y": 360 + }, + "when": { + "face": "floor", + "facing": "south", + "locked": "true", + "powered": "true" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_locked", + "y": 360 + }, + "when": { + "face": "floor", + "facing": "south", + "locked": "true", + "powered": "false" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered", + "y": 360 + }, + "when": { + "face": "floor", + "facing": "south", + "locked": "false", + "powered": "true" + } + }, + { + "apply": { + "model": "minecraft:block/air", + "y": 180 + }, + "when": { + "face": "floor", + "facing": "south" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block", + "y": 360 + }, + "when": { + "face": "floor", + "facing": "south", + "locked": "false", + "powered": "false" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered_locked", + "y": 450 + }, + "when": { + "face": "floor", + "facing": "west", + "locked": "true", + "powered": "true" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_locked", + "y": 450 + }, + "when": { + "face": "floor", + "facing": "west", + "locked": "true", + "powered": "false" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered", + "y": 450 + }, + "when": { + "face": "floor", + "facing": "west", + "locked": "false", + "powered": "true" + } + }, + { + "apply": { + "model": "minecraft:block/air", + "y": 270 + }, + "when": { + "face": "floor", + "facing": "west" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block", + "y": 450 + }, + "when": { + "face": "floor", + "facing": "west", + "locked": "false", + "powered": "false" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered_locked", + "y": 270 + }, + "when": { + "face": "floor", + "facing": "east", + "locked": "true", + "powered": "true" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_locked", + "y": 270 + }, + "when": { + "face": "floor", + "facing": "east", + "locked": "true", + "powered": "false" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered", + "y": 270 + }, + "when": { + "face": "floor", + "facing": "east", + "locked": "false", + "powered": "true" + } + }, + { + "apply": { + "model": "minecraft:block/air", + "y": 90 + }, + "when": { + "face": "floor", + "facing": "east" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block", + "y": 270 + }, + "when": { + "face": "floor", + "facing": "east", + "locked": "false", + "powered": "false" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered_vertical_locked", + "x": 90 + }, + "when": { + "face": "wall", + "facing": "north", + "locked": "true", + "powered": "true" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_vertical_locked", + "x": 90 + }, + "when": { + "face": "wall", + "facing": "north", + "locked": "true", + "powered": "false" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered_vertical", + "x": 90 + }, + "when": { + "face": "wall", + "facing": "north", + "locked": "false", + "powered": "true" + } + }, + { + "apply": { + "model": "minecraft:block/air", + "x": 90 + }, + "when": { + "face": "wall", + "facing": "north" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_vertical", + "x": 90 + }, + "when": { + "face": "wall", + "facing": "north", + "locked": "false", + "powered": "false" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered_vertical_locked", + "x": 90, + "y": 180 + }, + "when": { + "face": "wall", + "facing": "south", + "locked": "true", + "powered": "true" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_vertical_locked", + "x": 90, + "y": 180 + }, + "when": { + "face": "wall", + "facing": "south", + "locked": "true", + "powered": "false" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered_vertical", + "x": 90, + "y": 180 + }, + "when": { + "face": "wall", + "facing": "south", + "locked": "false", + "powered": "true" + } + }, + { + "apply": { + "model": "minecraft:block/air", + "x": 90, + "y": 180 + }, + "when": { + "face": "wall", + "facing": "south" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_vertical", + "x": 90, + "y": 180 + }, + "when": { + "face": "wall", + "facing": "south", + "locked": "false", + "powered": "false" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered_vertical_locked", + "x": 90, + "y": 270 + }, + "when": { + "face": "wall", + "facing": "west", + "locked": "true", + "powered": "true" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_vertical_locked", + "x": 90, + "y": 270 + }, + "when": { + "face": "wall", + "facing": "west", + "locked": "true", + "powered": "false" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered_vertical", + "x": 90, + "y": 270 + }, + "when": { + "face": "wall", + "facing": "west", + "locked": "false", + "powered": "true" + } + }, + { + "apply": { + "model": "minecraft:block/air", + "x": 90, + "y": 270 + }, + "when": { + "face": "wall", + "facing": "west" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_vertical", + "x": 90, + "y": 270 + }, + "when": { + "face": "wall", + "facing": "west", + "locked": "false", + "powered": "false" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered_vertical_locked", + "x": 90, + "y": 90 + }, + "when": { + "face": "wall", + "facing": "east", + "locked": "true", + "powered": "true" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_vertical_locked", + "x": 90, + "y": 90 + }, + "when": { + "face": "wall", + "facing": "east", + "locked": "true", + "powered": "false" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered_vertical", + "x": 90, + "y": 90 + }, + "when": { + "face": "wall", + "facing": "east", + "locked": "false", + "powered": "true" + } + }, + { + "apply": { + "model": "minecraft:block/air", + "x": 90, + "y": 90 + }, + "when": { + "face": "wall", + "facing": "east" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_vertical", + "x": 90, + "y": 90 + }, + "when": { + "face": "wall", + "facing": "east", + "locked": "false", + "powered": "false" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered_locked", + "x": 180, + "y": 180 + }, + "when": { + "face": "ceiling", + "facing": "north", + "locked": "true", + "powered": "true" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_locked", + "x": 180, + "y": 180 + }, + "when": { + "face": "ceiling", + "facing": "north", + "locked": "true", + "powered": "false" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered", + "x": 180, + "y": 180 + }, + "when": { + "face": "ceiling", + "facing": "north", + "locked": "false", + "powered": "true" + } + }, + { + "apply": { + "model": "minecraft:block/air", + "x": 180, + "y": 180 + }, + "when": { + "face": "ceiling", + "facing": "north" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block", + "x": 180, + "y": 180 + }, + "when": { + "face": "ceiling", + "facing": "north", + "locked": "false", + "powered": "false" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered_locked", + "x": 180 + }, + "when": { + "face": "ceiling", + "facing": "south", + "locked": "true", + "powered": "true" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_locked", + "x": 180 + }, + "when": { + "face": "ceiling", + "facing": "south", + "locked": "true", + "powered": "false" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered", + "x": 180 + }, + "when": { + "face": "ceiling", + "facing": "south", + "locked": "false", + "powered": "true" + } + }, + { + "apply": { + "model": "minecraft:block/air", + "x": 180 + }, + "when": { + "face": "ceiling", + "facing": "south" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block", + "x": 180 + }, + "when": { + "face": "ceiling", + "facing": "south", + "locked": "false", + "powered": "false" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered_locked", + "x": 180, + "y": 90 + }, + "when": { + "face": "ceiling", + "facing": "west", + "locked": "true", + "powered": "true" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_locked", + "x": 180, + "y": 90 + }, + "when": { + "face": "ceiling", + "facing": "west", + "locked": "true", + "powered": "false" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered", + "x": 180, + "y": 90 + }, + "when": { + "face": "ceiling", + "facing": "west", + "locked": "false", + "powered": "true" + } + }, + { + "apply": { + "model": "minecraft:block/air", + "x": 180, + "y": 90 + }, + "when": { + "face": "ceiling", + "facing": "west" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block", + "x": 180, + "y": 90 + }, + "when": { + "face": "ceiling", + "facing": "west", + "locked": "false", + "powered": "false" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered_locked", + "x": 180, + "y": 270 + }, + "when": { + "face": "ceiling", + "facing": "east", + "locked": "true", + "powered": "true" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_locked", + "x": 180, + "y": 270 + }, + "when": { + "face": "ceiling", + "facing": "east", + "locked": "true", + "powered": "false" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered", + "x": 180, + "y": 270 + }, + "when": { + "face": "ceiling", + "facing": "east", + "locked": "false", + "powered": "true" + } + }, + { + "apply": { + "model": "minecraft:block/air", + "x": 180, + "y": 270 + }, + "when": { + "face": "ceiling", + "facing": "east" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block", + "x": 180, + "y": 270 + }, + "when": { + "face": "ceiling", + "facing": "east", + "locked": "false", + "powered": "false" + } + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/create_connected/blockstates/linked_copycat_wooden_button.json b/src/generated/resources/assets/create_connected/blockstates/linked_copycat_wooden_button.json new file mode 100644 index 000000000..6dc360685 --- /dev/null +++ b/src/generated/resources/assets/create_connected/blockstates/linked_copycat_wooden_button.json @@ -0,0 +1,729 @@ +{ + "multipart": [ + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered_locked", + "y": 180 + }, + "when": { + "face": "floor", + "facing": "north", + "locked": "true", + "powered": "true" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_locked", + "y": 180 + }, + "when": { + "face": "floor", + "facing": "north", + "locked": "true", + "powered": "false" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered", + "y": 180 + }, + "when": { + "face": "floor", + "facing": "north", + "locked": "false", + "powered": "true" + } + }, + { + "apply": { + "model": "minecraft:block/air" + }, + "when": { + "face": "floor", + "facing": "north" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block", + "y": 180 + }, + "when": { + "face": "floor", + "facing": "north", + "locked": "false", + "powered": "false" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered_locked", + "y": 360 + }, + "when": { + "face": "floor", + "facing": "south", + "locked": "true", + "powered": "true" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_locked", + "y": 360 + }, + "when": { + "face": "floor", + "facing": "south", + "locked": "true", + "powered": "false" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered", + "y": 360 + }, + "when": { + "face": "floor", + "facing": "south", + "locked": "false", + "powered": "true" + } + }, + { + "apply": { + "model": "minecraft:block/air", + "y": 180 + }, + "when": { + "face": "floor", + "facing": "south" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block", + "y": 360 + }, + "when": { + "face": "floor", + "facing": "south", + "locked": "false", + "powered": "false" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered_locked", + "y": 450 + }, + "when": { + "face": "floor", + "facing": "west", + "locked": "true", + "powered": "true" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_locked", + "y": 450 + }, + "when": { + "face": "floor", + "facing": "west", + "locked": "true", + "powered": "false" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered", + "y": 450 + }, + "when": { + "face": "floor", + "facing": "west", + "locked": "false", + "powered": "true" + } + }, + { + "apply": { + "model": "minecraft:block/air", + "y": 270 + }, + "when": { + "face": "floor", + "facing": "west" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block", + "y": 450 + }, + "when": { + "face": "floor", + "facing": "west", + "locked": "false", + "powered": "false" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered_locked", + "y": 270 + }, + "when": { + "face": "floor", + "facing": "east", + "locked": "true", + "powered": "true" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_locked", + "y": 270 + }, + "when": { + "face": "floor", + "facing": "east", + "locked": "true", + "powered": "false" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered", + "y": 270 + }, + "when": { + "face": "floor", + "facing": "east", + "locked": "false", + "powered": "true" + } + }, + { + "apply": { + "model": "minecraft:block/air", + "y": 90 + }, + "when": { + "face": "floor", + "facing": "east" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block", + "y": 270 + }, + "when": { + "face": "floor", + "facing": "east", + "locked": "false", + "powered": "false" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered_vertical_locked", + "x": 90 + }, + "when": { + "face": "wall", + "facing": "north", + "locked": "true", + "powered": "true" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_vertical_locked", + "x": 90 + }, + "when": { + "face": "wall", + "facing": "north", + "locked": "true", + "powered": "false" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered_vertical", + "x": 90 + }, + "when": { + "face": "wall", + "facing": "north", + "locked": "false", + "powered": "true" + } + }, + { + "apply": { + "model": "minecraft:block/air", + "x": 90 + }, + "when": { + "face": "wall", + "facing": "north" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_vertical", + "x": 90 + }, + "when": { + "face": "wall", + "facing": "north", + "locked": "false", + "powered": "false" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered_vertical_locked", + "x": 90, + "y": 180 + }, + "when": { + "face": "wall", + "facing": "south", + "locked": "true", + "powered": "true" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_vertical_locked", + "x": 90, + "y": 180 + }, + "when": { + "face": "wall", + "facing": "south", + "locked": "true", + "powered": "false" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered_vertical", + "x": 90, + "y": 180 + }, + "when": { + "face": "wall", + "facing": "south", + "locked": "false", + "powered": "true" + } + }, + { + "apply": { + "model": "minecraft:block/air", + "x": 90, + "y": 180 + }, + "when": { + "face": "wall", + "facing": "south" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_vertical", + "x": 90, + "y": 180 + }, + "when": { + "face": "wall", + "facing": "south", + "locked": "false", + "powered": "false" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered_vertical_locked", + "x": 90, + "y": 270 + }, + "when": { + "face": "wall", + "facing": "west", + "locked": "true", + "powered": "true" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_vertical_locked", + "x": 90, + "y": 270 + }, + "when": { + "face": "wall", + "facing": "west", + "locked": "true", + "powered": "false" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered_vertical", + "x": 90, + "y": 270 + }, + "when": { + "face": "wall", + "facing": "west", + "locked": "false", + "powered": "true" + } + }, + { + "apply": { + "model": "minecraft:block/air", + "x": 90, + "y": 270 + }, + "when": { + "face": "wall", + "facing": "west" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_vertical", + "x": 90, + "y": 270 + }, + "when": { + "face": "wall", + "facing": "west", + "locked": "false", + "powered": "false" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered_vertical_locked", + "x": 90, + "y": 90 + }, + "when": { + "face": "wall", + "facing": "east", + "locked": "true", + "powered": "true" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_vertical_locked", + "x": 90, + "y": 90 + }, + "when": { + "face": "wall", + "facing": "east", + "locked": "true", + "powered": "false" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered_vertical", + "x": 90, + "y": 90 + }, + "when": { + "face": "wall", + "facing": "east", + "locked": "false", + "powered": "true" + } + }, + { + "apply": { + "model": "minecraft:block/air", + "x": 90, + "y": 90 + }, + "when": { + "face": "wall", + "facing": "east" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_vertical", + "x": 90, + "y": 90 + }, + "when": { + "face": "wall", + "facing": "east", + "locked": "false", + "powered": "false" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered_locked", + "x": 180, + "y": 180 + }, + "when": { + "face": "ceiling", + "facing": "north", + "locked": "true", + "powered": "true" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_locked", + "x": 180, + "y": 180 + }, + "when": { + "face": "ceiling", + "facing": "north", + "locked": "true", + "powered": "false" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered", + "x": 180, + "y": 180 + }, + "when": { + "face": "ceiling", + "facing": "north", + "locked": "false", + "powered": "true" + } + }, + { + "apply": { + "model": "minecraft:block/air", + "x": 180, + "y": 180 + }, + "when": { + "face": "ceiling", + "facing": "north" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block", + "x": 180, + "y": 180 + }, + "when": { + "face": "ceiling", + "facing": "north", + "locked": "false", + "powered": "false" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered_locked", + "x": 180 + }, + "when": { + "face": "ceiling", + "facing": "south", + "locked": "true", + "powered": "true" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_locked", + "x": 180 + }, + "when": { + "face": "ceiling", + "facing": "south", + "locked": "true", + "powered": "false" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered", + "x": 180 + }, + "when": { + "face": "ceiling", + "facing": "south", + "locked": "false", + "powered": "true" + } + }, + { + "apply": { + "model": "minecraft:block/air", + "x": 180 + }, + "when": { + "face": "ceiling", + "facing": "south" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block", + "x": 180 + }, + "when": { + "face": "ceiling", + "facing": "south", + "locked": "false", + "powered": "false" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered_locked", + "x": 180, + "y": 90 + }, + "when": { + "face": "ceiling", + "facing": "west", + "locked": "true", + "powered": "true" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_locked", + "x": 180, + "y": 90 + }, + "when": { + "face": "ceiling", + "facing": "west", + "locked": "true", + "powered": "false" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered", + "x": 180, + "y": 90 + }, + "when": { + "face": "ceiling", + "facing": "west", + "locked": "false", + "powered": "true" + } + }, + { + "apply": { + "model": "minecraft:block/air", + "x": 180, + "y": 90 + }, + "when": { + "face": "ceiling", + "facing": "west" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block", + "x": 180, + "y": 90 + }, + "when": { + "face": "ceiling", + "facing": "west", + "locked": "false", + "powered": "false" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered_locked", + "x": 180, + "y": 270 + }, + "when": { + "face": "ceiling", + "facing": "east", + "locked": "true", + "powered": "true" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_locked", + "x": 180, + "y": 270 + }, + "when": { + "face": "ceiling", + "facing": "east", + "locked": "true", + "powered": "false" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block_powered", + "x": 180, + "y": 270 + }, + "when": { + "face": "ceiling", + "facing": "east", + "locked": "false", + "powered": "true" + } + }, + { + "apply": { + "model": "minecraft:block/air", + "x": 180, + "y": 270 + }, + "when": { + "face": "ceiling", + "facing": "east" + } + }, + { + "apply": { + "model": "create_connected:block/linked_transmitter/block", + "x": 180, + "y": 270 + }, + "when": { + "face": "ceiling", + "facing": "east", + "locked": "false", + "powered": "false" + } + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/create_connected/lang/en_ud.json b/src/generated/resources/assets/create_connected/lang/en_ud.json index 9632ac7d7..c359c3221 100644 --- a/src/generated/resources/assets/create_connected/lang/en_ud.json +++ b/src/generated/resources/assets/create_connected/lang/en_ud.json @@ -157,6 +157,8 @@ "block.create_connected.linked_bamboo_button": "uoʇʇnᗺ ooqɯɐᗺ pǝʞuıꞀ", "block.create_connected.linked_birch_button": "uoʇʇnᗺ ɥɔɹıᗺ pǝʞuıꞀ", "block.create_connected.linked_cherry_button": "uoʇʇnᗺ ʎɹɹǝɥƆ pǝʞuıꞀ", + "block.create_connected.linked_copycat_stone_button": "uoʇʇnᗺ ǝuoʇS ʇɐɔʎdoƆ pǝʞuıꞀ", + "block.create_connected.linked_copycat_wooden_button": "uoʇʇnᗺ uǝpooM ʇɐɔʎdoƆ pǝʞuıꞀ", "block.create_connected.linked_crimson_button": "uoʇʇnᗺ uosɯıɹƆ pǝʞuıꞀ", "block.create_connected.linked_dark_oak_button": "uoʇʇnᗺ ʞɐO ʞɹɐᗡ pǝʞuıꞀ", "block.create_connected.linked_jungle_button": "uoʇʇnᗺ ǝןbunſ pǝʞuıꞀ", diff --git a/src/generated/resources/assets/create_connected/lang/en_us.json b/src/generated/resources/assets/create_connected/lang/en_us.json index ea001e421..3e2044f86 100644 --- a/src/generated/resources/assets/create_connected/lang/en_us.json +++ b/src/generated/resources/assets/create_connected/lang/en_us.json @@ -157,6 +157,8 @@ "block.create_connected.linked_bamboo_button": "Linked Bamboo Button", "block.create_connected.linked_birch_button": "Linked Birch Button", "block.create_connected.linked_cherry_button": "Linked Cherry Button", + "block.create_connected.linked_copycat_stone_button": "Linked Copycat Stone Button", + "block.create_connected.linked_copycat_wooden_button": "Linked Copycat Wooden Button", "block.create_connected.linked_crimson_button": "Linked Crimson Button", "block.create_connected.linked_dark_oak_button": "Linked Dark Oak Button", "block.create_connected.linked_jungle_button": "Linked Jungle Button", diff --git a/src/generated/resources/data/create/tags/block/safe_nbt.json b/src/generated/resources/data/create/tags/block/safe_nbt.json index e4b5ddf97..05934099f 100644 --- a/src/generated/resources/data/create/tags/block/safe_nbt.json +++ b/src/generated/resources/data/create/tags/block/safe_nbt.json @@ -20,6 +20,14 @@ { "id": "create_connected:linked_throttle_lever", "required": false + }, + { + "id": "create_connected:linked_copycat_wooden_button", + "required": false + }, + { + "id": "create_connected:linked_copycat_stone_button", + "required": false } ] } \ No newline at end of file diff --git a/src/generated/resources/data/create_connected/loot_table/blocks/linked_copycat_stone_button.json b/src/generated/resources/data/create_connected/loot_table/blocks/linked_copycat_stone_button.json new file mode 100644 index 000000000..1aa4a7226 --- /dev/null +++ b/src/generated/resources/data/create_connected/loot_table/blocks/linked_copycat_stone_button.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:air" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "create_connected:blocks/linked_copycat_stone_button" +} \ No newline at end of file diff --git a/src/generated/resources/data/create_connected/loot_table/blocks/linked_copycat_wooden_button.json b/src/generated/resources/data/create_connected/loot_table/blocks/linked_copycat_wooden_button.json new file mode 100644 index 000000000..d6b185a38 --- /dev/null +++ b/src/generated/resources/data/create_connected/loot_table/blocks/linked_copycat_wooden_button.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:air" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "create_connected:blocks/linked_copycat_wooden_button" +} \ No newline at end of file diff --git a/src/main/java/com/hlysine/create_connected/compat/CopycatsCompatButtonRegistry.java b/src/main/java/com/hlysine/create_connected/compat/CopycatsCompatButtonRegistry.java new file mode 100644 index 000000000..dd3007022 --- /dev/null +++ b/src/main/java/com/hlysine/create_connected/compat/CopycatsCompatButtonRegistry.java @@ -0,0 +1,111 @@ +package com.hlysine.create_connected.compat; + +import com.copycatsplus.copycats.content.copycat.button.CopycatButtonModelCore; +import com.copycatsplus.copycats.foundation.copycat.model.CopycatModelCore; +import com.copycatsplus.copycats.foundation.copycat.model.neoforge.CopycatModelCoreImpl; +import com.hlysine.create_connected.CreateConnected; +import com.hlysine.create_connected.content.linkedtransmitter.*; +import com.hlysine.create_connected.datagen.CCBlockStateGen; +import com.hlysine.create_connected.registries.PreciseItemUseOverrides; +import com.simibubi.create.AllTags; +import com.simibubi.create.foundation.blockEntity.renderer.SmartBlockEntityRenderer; +import com.simibubi.create.foundation.data.CreateRegistrate; +import com.tterrag.registrate.util.entry.BlockEntityEntry; +import com.tterrag.registrate.util.entry.BlockEntry; +import com.tterrag.registrate.util.nullness.NonNullConsumer; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.block.model.BakedQuad; +import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.core.Direction; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.neoforged.neoforge.client.model.BakedModelWrapper; +import net.neoforged.neoforge.client.model.data.ModelData; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.List; +import java.util.function.Supplier; + +import static com.copycatsplus.copycats.CCBlocks.onClient; + +public class CopycatsCompatButtonRegistry { + private static final CreateRegistrate REGISTRATE = CreateConnected.getRegistrate(); + + public static final BlockEntry WOODEN_BUTTON = REGISTRATE + .block("linked_copycat_wooden_button", properties -> new LinkedCopycatButtonBlock(properties, com.copycatsplus.copycats.CCBlocks.COPYCAT_WOODEN_BUTTON)) + .initialProperties(() -> Blocks.OAK_BUTTON) + .tag(AllTags.AllBlockTags.SAFE_NBT.tag) + .addLayer(() -> RenderType::cutoutMipped) + .transform(LinkedTransmitterItem.register()) + .onRegister(onClient(() -> createBlockModel(CopycatButtonModelCore::new))) + .onRegister(PreciseItemUseOverrides::addBlock) + .blockstate(CCBlockStateGen.linkedLeverNoPower( + // no button blockstates from copycat+ + ResourceLocation.withDefaultNamespace("block/air") + )) + .asOptional() + .register(); + + public static final BlockEntry STONE_BUTTON = REGISTRATE + .block("linked_copycat_stone_button", properties -> new LinkedCopycatButtonBlock(properties, com.copycatsplus.copycats.CCBlocks.COPYCAT_STONE_BUTTON)) + .initialProperties(() -> Blocks.STONE_BUTTON) + .tag(AllTags.AllBlockTags.SAFE_NBT.tag) + .addLayer(() -> RenderType::cutoutMipped) + .transform(LinkedTransmitterItem.register()) + .onRegister(onClient(() -> createBlockModel(CopycatButtonModelCore::new))) + .onRegister(PreciseItemUseOverrides::addBlock) + .blockstate(CCBlockStateGen.linkedLeverNoPower( + // no button blockstates from copycat+ + ResourceLocation.withDefaultNamespace("block/air") + )) + .asOptional() + .register(); + + + public static final BlockEntityEntry LINKED_TRANSMITTER = REGISTRATE + .blockEntity("linked_copycat_button_transmitter", LinkedCopycatButtonBlockEntity::new) + .validBlock(CopycatsCompatButtonRegistry.WOODEN_BUTTON) + .validBlock(CopycatsCompatButtonRegistry.STONE_BUTTON) + .renderer(() -> SmartBlockEntityRenderer::new) + .register(); + + public static void register() { + } + + private static @NotNull NonNullConsumer createBlockModel(Supplier model) { + return CreateRegistrate.blockModel(() -> linkModel -> + new CombinedBakedModel(CopycatModelCoreImpl.createModel( + linkModel, model.get()), linkModel)); + } + + private static class CombinedBakedModel extends BakedModelWrapper { + private final BakedModel linkModel; + + public CombinedBakedModel(BakedModel baseModel, BakedModel linkModel) { + super(baseModel); + this.linkModel = linkModel; + } + + @Override + public List getQuads(@Nullable BlockState state, @Nullable Direction side, RandomSource rand) { + List baseQuads = super.getQuads(state, side, rand); + List linkQuads = this.linkModel.getQuads(state, side, rand); + baseQuads.addAll(linkQuads); + + return baseQuads; + } + + @Override + public @NotNull List getQuads(BlockState state, Direction side, @NotNull RandomSource rand, @NotNull ModelData data, RenderType renderType) { + List baseQuads = super.getQuads(state, side, rand, data, renderType); + List linkQuads = this.linkModel.getQuads(state, side, rand, data, renderType); + baseQuads.addAll(linkQuads); + + return baseQuads; + } + } +} diff --git a/src/main/java/com/hlysine/create_connected/content/linkedtransmitter/LinkedCopycatButtonBlock.java b/src/main/java/com/hlysine/create_connected/content/linkedtransmitter/LinkedCopycatButtonBlock.java new file mode 100644 index 000000000..9677bc5d0 --- /dev/null +++ b/src/main/java/com/hlysine/create_connected/content/linkedtransmitter/LinkedCopycatButtonBlock.java @@ -0,0 +1,223 @@ +package com.hlysine.create_connected.content.linkedtransmitter; + +import com.copycatsplus.copycats.content.copycat.button.CopycatButtonBlock; +import com.hlysine.create_connected.compat.CopycatsCompatButtonRegistry; +import com.hlysine.create_connected.registries.CCItems; +import com.simibubi.create.AllSoundEvents; +import com.simibubi.create.api.schematic.requirement.SpecialBlockItemRequirement; +import com.simibubi.create.content.equipment.wrench.IWrenchable; +import com.simibubi.create.content.schematics.requirement.ItemRequirement; +import com.simibubi.create.foundation.blockEntity.SmartBlockEntity; +import com.tterrag.registrate.util.nullness.NonNullSupplier; +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.ItemInteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.level.storage.loot.LootParams; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.ArrayList; +import java.util.List; + +public class LinkedCopycatButtonBlock extends CopycatButtonBlock implements SpecialBlockItemRequirement, IWrenchable, LinkedTransmitterBlock { + public static BooleanProperty LOCKED = BlockStateProperties.LOCKED; + public static final BooleanProperty POWERED = BlockStateProperties.POWERED; + public final NonNullSupplier baseSupplier; + + public LinkedCopycatButtonBlock(Properties pProperties, NonNullSupplier baseSupplier) { + super(baseSupplier.get().type, baseSupplier.get().ticksToStayPressed, pProperties); + this.baseSupplier = baseSupplier; + registerDefaultState(defaultBlockState().setValue(LOCKED, false)); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder pBuilder) { + super.createBlockStateDefinition(pBuilder.add(LOCKED)); + } + + @Override + public Block getBlock() { + return this; + } + + @Override + public Block getBase() { + return baseSupplier.get(); + } + + @Override + @NotNull + public ItemInteractionResult useItemOn(ItemStack stack, BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) { + if (isHittingBase(state, level, pos, hit)) + return super.useItemOn(stack, state, level, pos, player, hand, hit); + + return ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION; + } + + @Override + public void replaceBase(BlockState baseState, Level world, BlockPos pos) { + BlockEntity oldBE = world.getBlockEntity(pos); + if (oldBE == null) return; + CompoundTag tag = oldBE.saveWithFullMetadata(world.registryAccess()); + + BlockState newState = defaultBlockState() + .setValue(FACING, baseState.getValue(FACING)) + .setValue(FACE, baseState.getValue(FACE)) + .setValue(POWERED, false); + world.removeBlockEntity(pos); // prevent it from duping the consumed item + world.setBlock(pos, newState, Block.UPDATE_NEIGHBORS); + + BlockEntity newBE = world.getBlockEntity(pos); + if (!(newBE instanceof LinkedCopycatButtonBlockEntity linkedBE)) return; + linkedBE.loadWithComponents(tag, world.registryAccess()); + linkedBE.notifyUpdate(); + + AllSoundEvents.CONTROLLER_PUT.playOnServer(world, pos); + } + + @Override + public @NotNull VoxelShape getShape(@NotNull BlockState state, + @NotNull BlockGetter level, + @NotNull BlockPos pos, + @NotNull CollisionContext context) { + return Shapes.or(getTransmitterShape(state), super.getShape(state, level, pos, context)); + } + + @Override + public @NotNull List getDrops(@NotNull BlockState state, LootParams.@NotNull Builder builder) { + return getBase().defaultBlockState().getDrops(builder); + } + + @Override + public @NotNull InteractionResult useWithoutItem(@NotNull BlockState state, + @NotNull Level level, + @NotNull BlockPos pos, + @NotNull Player player, + @NotNull BlockHitResult hit) { + if (player.isSpectator()) + return InteractionResult.PASS; + + if (!isHittingBase(state, level, pos, hit)) + return LinkedTransmitterBlock.super.useTransmitter(state, level, pos, player); + + if (!player.isShiftKeyDown()) + return super.useWithoutItem(state, level, pos, player, hit); + + return InteractionResult.CONSUME; + } + + + @Override + public void onRemove(@NotNull BlockState state, @NotNull Level world, @NotNull BlockPos pos, @NotNull BlockState newState, boolean isMoving) { + if (state.is(newState.getBlock())) return; + if (isMoving) return; + if (!getBlockEntityOptional(world, pos).map(be -> ((LinkedCopycatButtonBlockEntity) be).containsBase).orElse(false)) return; + + Block.popResource(world, pos, new ItemStack(CCItems.LINKED_TRANSMITTER.get())); + getBase().defaultBlockState().onRemove(world, pos, newState, isMoving); + } + + @Override + public @NotNull InteractionResult onWrenched(BlockState state, UseOnContext context) { + Player player = context.getPlayer(); + if (!player.isCreative()) { + player.getInventory().placeItemBackInInventory(new ItemStack(CCItems.LINKED_TRANSMITTER.get())); + } + withBlockEntityDo(context.getLevel(), context.getClickedPos(), be -> { + if (be instanceof LinkedCopycatButtonBlockEntity linkedBE) + linkedBE.containsBase = false; + }); + replaceWithBase(state, context.getLevel(), context.getClickedPos()); + return InteractionResult.SUCCESS; + } + + public void replaceWithBase(BlockState oldState, Level world, BlockPos pos) { + AllSoundEvents.CONTROLLER_TAKE.playOnServer(world, pos); + + BlockEntity oldBE = world.getBlockEntity(pos); + if (!(oldBE instanceof LinkedCopycatButtonBlockEntity linkedBE)) return; + linkedBE.transmit(0); + + CompoundTag tag = oldBE.saveWithFullMetadata(world.registryAccess()); + + BlockState newState = getBase().defaultBlockState() + .setValue(FACING, oldState.getValue(FACING)) + .setValue(FACE, oldState.getValue(FACE)) + .setValue(POWERED, oldState.getValue(POWERED)); + world.setBlock(pos, newState, Block.UPDATE_NEIGHBORS); + + BlockEntity newBE = world.getBlockEntity(pos); + if (!(newBE instanceof SmartBlockEntity baseBE)) return; + baseBE.loadWithComponents(tag, world.registryAccess()); + world.sendBlockUpdated(pos, oldState, newState, Block.UPDATE_ALL); + super.checkPressed(world.getBlockState(pos), world, pos); + } + + @Override + protected void checkPressed(@NotNull BlockState state, @NotNull Level level, @NotNull BlockPos pos) { + super.checkPressed(state, level, pos); + updateTransmittedSignal(level, pos); + } + + @Override + public void press(@NotNull BlockState state, @NotNull Level level, @NotNull BlockPos pos, @Nullable Player player) { + super.press(state, level, pos, player); + updateTransmittedSignal(level, pos); + } + + public void updateTransmittedSignal(Level worldIn, BlockPos pos) { + if (worldIn.isClientSide) + return; + + BlockState state = worldIn.getBlockState(pos); + int power = state.getSignal(worldIn, pos, state.getValue(FACING)); + + withBlockEntityDo(worldIn, pos, + be -> + ((LinkedCopycatButtonBlockEntity) be).transmit(power)); + } + + @Override + public @NotNull ItemStack getCloneItemStack(@NotNull BlockState state, + @NotNull HitResult target, + @NotNull LevelReader world, + @NotNull BlockPos pos, + @NotNull Player player) { + if (isHittingBase(state, world, pos, target)) + return getBase().getCloneItemStack(state, target, world, pos, player); + return new ItemStack(CCItems.LINKED_TRANSMITTER.get()); + } + + @Override + public ItemRequirement getRequiredItems(BlockState state, BlockEntity be) { + ArrayList requiredItems = new ArrayList<>(); + requiredItems.add(new ItemStack(getBase())); + requiredItems.add(new ItemStack(CCItems.LINKED_TRANSMITTER.get())); + return new ItemRequirement(ItemRequirement.ItemUseType.CONSUME, requiredItems); + } + + @Override + public @NotNull BlockEntityType getBlockEntityType() { + return CopycatsCompatButtonRegistry.LINKED_TRANSMITTER.get(); + } +} diff --git a/src/main/java/com/hlysine/create_connected/content/linkedtransmitter/LinkedCopycatButtonBlockEntity.java b/src/main/java/com/hlysine/create_connected/content/linkedtransmitter/LinkedCopycatButtonBlockEntity.java new file mode 100644 index 000000000..a4639831b --- /dev/null +++ b/src/main/java/com/hlysine/create_connected/content/linkedtransmitter/LinkedCopycatButtonBlockEntity.java @@ -0,0 +1,71 @@ +package com.hlysine.create_connected.content.linkedtransmitter; + +import com.copycatsplus.copycats.foundation.copycat.CCCopycatBlockEntity; +import com.simibubi.create.content.redstone.link.LinkBehaviour; +import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour; +import com.simibubi.create.foundation.blockEntity.behaviour.ValueBoxTransform; +import net.minecraft.core.BlockPos; +import net.minecraft.core.HolderLookup; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import org.apache.commons.lang3.tuple.Pair; + +import java.util.List; + +public class LinkedCopycatButtonBlockEntity extends CCCopycatBlockEntity { + private int transmittedSignal = 0; + /** + * set to false if the module item is already returned to player via wrenching + */ + public boolean containsBase = true; + private LinkBehaviour link; + + public LinkedCopycatButtonBlockEntity(BlockEntityType type, BlockPos pos, BlockState state) { + super(type, pos, state); + } + + @Override + public void addBehaviours(List behaviours) { + super.addBehaviours(behaviours); + createLink(); + behaviours.add(link); + } + + protected void createLink() { + Pair slots = + ValueBoxTransform.Dual.makeSlots(LinkedTransmitterFrequencySlot::new); + link = LinkBehaviour.transmitter(this, slots, this::getSignal); + } + + @Override + public void onLoad() { + super.onLoad(); + super.initialize(); // this will load the behaviours properly since CCCopycatBlockEntity won't run initialize() automatically + transmit(getBlockState().getSignal(getLevel(), getBlockPos(), getBlockState().getValue(HorizontalDirectionalBlock.FACING))); + } + + public int getSignal() { + return transmittedSignal; + } + + public void transmit(int strength) { + transmittedSignal = strength; + if (link != null) + link.notifySignalChange(); + } + + @Override + public void write(CompoundTag tag, HolderLookup.Provider registries, boolean clientPacket) { + tag.putInt("Transmit", transmittedSignal); + super.write(tag, registries, clientPacket); + } + + @Override + public void read(CompoundTag tag, HolderLookup.Provider registries, boolean clientPacket) { + super.read(tag, registries, clientPacket); + if (level == null || level.isClientSide || !link.newPosition) + transmittedSignal = tag.getInt("Transmit"); + } +} diff --git a/src/main/java/com/hlysine/create_connected/registries/CCBlocks.java b/src/main/java/com/hlysine/create_connected/registries/CCBlocks.java index e5d7bd6ec..78614b20f 100644 --- a/src/main/java/com/hlysine/create_connected/registries/CCBlocks.java +++ b/src/main/java/com/hlysine/create_connected/registries/CCBlocks.java @@ -1,6 +1,7 @@ package com.hlysine.create_connected.registries; import com.hlysine.create_connected.CreateConnected; +import com.hlysine.create_connected.compat.CopycatsCompatButtonRegistry; import com.hlysine.create_connected.compat.DyeDepotCompat; import com.hlysine.create_connected.compat.Mods; import com.hlysine.create_connected.compat.SimCompatRegistry; @@ -1185,6 +1186,7 @@ public class CCBlocks { public static void register() { Mods.SIMULATED.executeIfInstalled(() -> SimCompatRegistry::register); + Mods.COPYCATS.executeIfInstalled(() -> CopycatsCompatButtonRegistry::register); } private static Function forBoolean(DataGenContext ctx, diff --git a/src/main/resources/META-INF/neoforge.mods.toml b/src/main/resources/META-INF/neoforge.mods.toml index 5ba97335f..089f79319 100644 --- a/src/main/resources/META-INF/neoforge.mods.toml +++ b/src/main/resources/META-INF/neoforge.mods.toml @@ -35,6 +35,13 @@ issueTrackerURL="https://github.com/hlysine/create_connected/issues" ordering="NONE" side="BOTH" +[[dependencies.${mod_id}]] + modId="copycats" + mandatory=false + type="optional" + ordering="AFTER" + side="BOTH" + [[mixins]] config="create_connected.mixins.json"