From 3092801a4bea3978eb01eee24b49895974c5673e Mon Sep 17 00:00:00 2001 From: Sammy Date: Sat, 8 Jul 2023 04:03:07 +0200 Subject: [PATCH] v1.5.0 backport to mc1.18.2 [Forge & Fabric] --- fabric/build.gradle | 120 ++---- fabric/gradle.properties | 43 +- .../cccbridge/BlockRegister.java | 45 -- .../tweaked_programs/cccbridge/CCCBridge.java | 54 +-- .../cccbridge/CCCBridgeClient.java | 12 +- .../cccbridge/CCCRegister.java | 75 ++++ .../cccbridge/CCCSoundEvents.java | 12 +- .../cc/tweaked_programs/cccbridge/Misc.java | 111 +++++ .../cccbridge/PeripheralProvider.java | 20 +- .../behaviour/LuaScrollValueBehaviour.java | 91 ++++ .../cccbridge/block/AnimatronicBlock.java | 53 +++ .../cccbridge/block/RedRouterBlock.java | 94 +++-- .../cccbridge/block/ScrollerBlock.java | 120 +++--- .../cccbridge/block/SourceBlock.java | 23 +- .../cccbridge/block/TargetBlock.java | 24 +- .../blockEntity/AnimatronicBlockEntity.java | 119 ++++++ .../blockEntity/PeripheralBlockEntity.java | 23 + .../blockEntity/RedRouterBlockEntity.java | 108 ++--- .../blockEntity/ScrollerBlockEntity.java | 119 +++--- .../blockEntity/SourceBlockEntity.java | 28 +- .../blockEntity/TargetBlockEntity.java | 37 +- .../AnimatronicBlockEntityRenderer.java | 33 ++ .../RedRouterBlockEntityRenderer.java | 105 +++++ .../display/SourceBlockDisplaySource.java | 32 +- .../display/TargetBlockDisplayTarget.java | 29 +- .../entity/animatronic/AnimatronicEntity.java | 242 +++++++++++ .../entity/animatronic/AnimatronicModel.java | 65 +++ .../animatronic/AnimatronicRenderer.java | 57 +++ .../peripherals/AnimatronicPeripheral.java | 234 +++++++++++ .../peripherals/RedRouterBlockPeripheral.java | 89 ++-- .../peripherals/ScrollerBlockPeripheral.java | 148 ++++--- .../peripherals/SourceBlockPeripheral.java | 60 +-- .../peripherals/TargetBlockPeripheral.java | 36 +- .../peripherals/TrainPeripheral.java | 193 --------- .../peripherals/TweakedPeripheral.java | 58 +++ .../blockstates/animatronic_block.json | 5 + .../blockstates/redrouter_block.json | 296 +++++++++---- .../cccbridge/blockstates/scroller_block.json | 24 +- .../main/resources/assets/cccbridge/icon.png | Bin 5722 -> 0 bytes .../resources/assets/cccbridge/iconHD.png | Bin 86976 -> 0 bytes .../assets/cccbridge/lang/en_us.json | 5 +- .../models/block/animatronic_block.json | 83 ++++ .../assets/cccbridge/models/block/base.json | 190 --------- .../models/block/locked_scroller_block.json | 156 ++++--- .../models/block/redrouter_block.json | 394 ++++++++---------- .../models/block/redrouter_face/0.json | 6 + .../models/block/redrouter_face/1.json | 3 +- .../models/block/redrouter_face/10.json | 3 +- .../models/block/redrouter_face/11.json | 3 +- .../models/block/redrouter_face/12.json | 3 +- .../models/block/redrouter_face/13.json | 3 +- .../models/block/redrouter_face/14.json | 3 +- .../models/block/redrouter_face/15.json | 3 +- .../models/block/redrouter_face/16.json | 3 +- .../models/block/redrouter_face/17.json | 6 + .../models/block/redrouter_face/2.json | 3 +- .../models/block/redrouter_face/3.json | 3 +- .../models/block/redrouter_face/4.json | 3 +- .../models/block/redrouter_face/5.json | 3 +- .../models/block/redrouter_face/6.json | 3 +- .../models/block/redrouter_face/7.json | 3 +- .../models/block/redrouter_face/8.json | 3 +- .../models/block/redrouter_face/9.json | 3 +- .../models/block/scroller_block.json | 132 ++++-- .../cccbridge/models/block/source_block.json | 169 +------- .../cccbridge/models/block/target_block.json | 229 +--------- .../cccbridge/models/block/wanze/base.json | 208 --------- .../cccbridge/models/block/wanze/gear.json | 119 ------ .../cccbridge/models/block/wanze/preview.json | 313 -------------- .../models/entity/animatronic.bbmodel | 1 + .../models/item/animatronic_block.json | 168 ++++++++ .../assets/cccbridge/models/item/wanze.json | 3 - .../textures/block/advanced_wheel.png | Bin 390 -> 0 bytes .../textures/block/animatronic_block.png | Bin 0 -> 637 bytes .../textures/block/redrouter/background.png | Bin 244 -> 372 bytes .../textures/block/redrouter/connector.png | Bin 217 -> 0 bytes .../textures/block/redrouter/face/0.png | Bin 0 -> 370 bytes .../textures/block/redrouter/face/1.png | Bin 182 -> 377 bytes .../textures/block/redrouter/face/10.png | Bin 181 -> 382 bytes .../textures/block/redrouter/face/11.png | Bin 183 -> 379 bytes .../textures/block/redrouter/face/12.png | Bin 192 -> 374 bytes .../textures/block/redrouter/face/13.png | Bin 190 -> 374 bytes .../textures/block/redrouter/face/14.png | Bin 180 -> 360 bytes .../textures/block/redrouter/face/15.png | Bin 201 -> 370 bytes .../textures/block/redrouter/face/16.png | Bin 188 -> 377 bytes .../textures/block/redrouter/face/2.png | Bin 196 -> 387 bytes .../textures/block/redrouter/face/3.png | Bin 184 -> 383 bytes .../textures/block/redrouter/face/4.png | Bin 177 -> 382 bytes .../textures/block/redrouter/face/5.png | Bin 169 -> 382 bytes .../textures/block/redrouter/face/6.png | Bin 469 -> 530 bytes .../textures/block/redrouter/face/7.png | Bin 182 -> 381 bytes .../textures/block/redrouter/face/8.png | Bin 171 -> 377 bytes .../textures/block/redrouter/face/9.png | Bin 177 -> 382 bytes .../block/redrouter/redrouter_front.png | Bin 242 -> 282 bytes .../block/redrouter/redrouter_side.png | Bin 331 -> 512 bytes .../block/redrouter/redrouter_top.png | Bin 226 -> 502 bytes .../textures/block/scroller/cage.png | Bin 246 -> 208 bytes .../textures/block/scroller/interface.png | Bin 464 -> 319 bytes .../block/scroller/scroller_front.png | Bin 303 -> 249 bytes .../textures/block/scroller/scroller_side.png | Bin 300 -> 233 bytes .../block/source_block_horizontal.png | Bin 0 -> 442 bytes .../block/source_block_horizontal.png.mcmeta | 6 + .../textures/block/source_block_side.png | Bin 342 -> 0 bytes .../block/source_target_block_vertical.png | Bin 0 -> 368 bytes .../cccbridge/textures/block/st_block_top.png | Bin 254 -> 0 bytes .../block/target_block_horizontal.png | Bin 0 -> 511 bytes .../textures/block/target_block_side.png | Bin 342 -> 0 bytes .../textures/block/wanze/wanze_side.png | Bin 260 -> 0 bytes .../textures/block/wanze/wanze_top.png | Bin 251 -> 0 bytes .../textures/entity/animatronic/body.png | Bin 0 -> 700 bytes .../entity/animatronic/face_creepy.png | Bin 0 -> 1930 bytes .../entity/animatronic/face_happy.png | Bin 0 -> 192 bytes .../entity/animatronic/face_normal.png | Bin 0 -> 191 bytes .../entity/animatronic/face_question.png | Bin 0 -> 191 bytes .../textures/entity/animatronic/face_sad.png | Bin 0 -> 194 bytes .../gui/advancements/backgrounds/luarocks.png | Bin 0 -> 247 bytes .../textures/painting/funny_redrouters.png | Bin 0 -> 1263 bytes .../advancements/place_animatronic.json | 21 + .../advancements/place_redrouter.json | 6 +- .../loot_tables/blocks/animatronic_block.json | 14 + .../cccbridge/recipes/animatronic_block.json | 26 ++ .../cccbridge/recipes/scroller_block.json | 20 +- .../data/cccbridge/recipes/source_block.json | 25 +- .../lua/rom/autorun/cccbridge.lua | 2 + .../computercraft/lua/rom/cccbridge_motd.txt | 9 + .../minecraft/tags/blocks/mineable/axe.json | 6 - .../tags/blocks/mineable/pickaxe.json | 4 +- .../tags/blocks/needs_stone_tool.json | 7 - .../tags/painting_variant/placeable.json | 6 + fabric/src/main/resources/fabric.mod.json | 27 +- fabric/src/main/resources/icon.png | Bin 0 -> 11139 bytes fabric/src/main/resources/iconHD.png | Bin 0 -> 124807 bytes forge/build.gradle | 27 +- forge/gradle.properties | 20 +- .../tweaked_programs/cccbridge/CCCBridge.java | 42 +- .../{BlockRegister.java => CCCRegister.java} | 49 ++- .../cccbridge/CCCSoundEvents.java | 7 +- .../cc/tweaked_programs/cccbridge/Misc.java | 110 +++++ .../cccbridge/PeripheralProvider.java | 18 +- .../behaviour/LuaScrollValueBehaviour.java | 93 +++++ .../cccbridge/block/AnimatronicBlock.java | 53 +++ .../cccbridge/block/RedRouterBlock.java | 45 +- .../cccbridge/block/ScrollerBlock.java | 45 +- .../cccbridge/block/SourceBlock.java | 2 +- .../cccbridge/block/TargetBlock.java | 2 +- .../blockEntity/AnimatronicBlockEntity.java | 119 ++++++ .../blockEntity/PeripheralBlockEntity.java | 23 + .../blockEntity/RedRouterBlockEntity.java | 36 +- .../blockEntity/ScrollerBlockEntity.java | 89 ++-- .../blockEntity/SourceBlockEntity.java | 18 +- .../blockEntity/TargetBlockEntity.java | 18 +- .../AnimatronicBlockEntityRenderer.java | 32 ++ .../RedRouterBlockEntityRenderer.java | 105 +++++ .../display/SourceBlockDisplaySource.java | 27 +- .../display/TargetBlockDisplayTarget.java | 17 +- .../entity/animatronic/AnimatronicEntity.java | 242 +++++++++++ .../entity/animatronic/AnimatronicModel.java | 65 +++ .../animatronic/AnimatronicRenderer.java | 57 +++ .../peripherals/AnimatronicPeripheral.java | 234 +++++++++++ .../peripherals/RedRouterBlockPeripheral.java | 87 ++-- .../peripherals/ScrollerBlockPeripheral.java | 140 ++++--- .../peripherals/SourceBlockPeripheral.java | 60 +-- .../SpeedControllerPeripheral.java | 71 ---- .../peripherals/TargetBlockPeripheral.java | 32 +- .../peripherals/TrainPeripheral.java | 192 --------- .../peripherals/TweakedPeripheral.java | 58 +++ forge/src/main/resources/META-INF/mods.toml | 34 +- .../blockstates/animatronic_block.json | 5 + .../blockstates/redrouter_block.json | 296 +++++++++---- .../cccbridge/blockstates/scroller_block.json | 24 +- .../main/resources/assets/cccbridge/icon.png | Bin 5722 -> 0 bytes .../resources/assets/cccbridge/iconHD.png | Bin 86976 -> 0 bytes .../assets/cccbridge/lang/en_us.json | 5 +- .../models/block/animatronic_block.json | 83 ++++ .../assets/cccbridge/models/block/base.json | 190 --------- .../models/block/locked_scroller_block.json | 156 ++++--- .../models/block/redrouter_block.json | 394 ++++++++---------- .../models/block/redrouter_face/0.json | 6 + .../models/block/redrouter_face/1.json | 3 +- .../models/block/redrouter_face/10.json | 3 +- .../models/block/redrouter_face/11.json | 3 +- .../models/block/redrouter_face/12.json | 3 +- .../models/block/redrouter_face/13.json | 3 +- .../models/block/redrouter_face/14.json | 3 +- .../models/block/redrouter_face/15.json | 3 +- .../models/block/redrouter_face/16.json | 3 +- .../models/block/redrouter_face/17.json | 6 + .../models/block/redrouter_face/2.json | 3 +- .../models/block/redrouter_face/3.json | 3 +- .../models/block/redrouter_face/4.json | 3 +- .../models/block/redrouter_face/5.json | 3 +- .../models/block/redrouter_face/6.json | 3 +- .../models/block/redrouter_face/7.json | 3 +- .../models/block/redrouter_face/8.json | 3 +- .../models/block/redrouter_face/9.json | 3 +- .../models/block/scroller_block.json | 132 ++++-- .../cccbridge/models/block/source_block.json | 169 +------- .../cccbridge/models/block/target_block.json | 229 +--------- .../models/entity/animatronic.bbmodel | 1 + .../models/item/animatronic_block.json | 168 ++++++++ .../textures/block/animatronic_block.png | Bin 0 -> 637 bytes .../textures/block/redrouter/background.png | Bin 244 -> 372 bytes .../textures/block/redrouter/connector.png | Bin 217 -> 0 bytes .../textures/block/redrouter/face/0.png | Bin 0 -> 370 bytes .../textures/block/redrouter/face/1.png | Bin 182 -> 377 bytes .../textures/block/redrouter/face/10.png | Bin 181 -> 382 bytes .../textures/block/redrouter/face/11.png | Bin 183 -> 379 bytes .../textures/block/redrouter/face/12.png | Bin 192 -> 374 bytes .../textures/block/redrouter/face/13.png | Bin 190 -> 374 bytes .../textures/block/redrouter/face/14.png | Bin 180 -> 360 bytes .../textures/block/redrouter/face/15.png | Bin 201 -> 370 bytes .../textures/block/redrouter/face/16.png | Bin 188 -> 377 bytes .../textures/block/redrouter/face/2.png | Bin 196 -> 387 bytes .../textures/block/redrouter/face/3.png | Bin 184 -> 383 bytes .../textures/block/redrouter/face/4.png | Bin 177 -> 382 bytes .../textures/block/redrouter/face/5.png | Bin 169 -> 382 bytes .../textures/block/redrouter/face/6.png | Bin 469 -> 530 bytes .../textures/block/redrouter/face/7.png | Bin 182 -> 381 bytes .../textures/block/redrouter/face/8.png | Bin 171 -> 377 bytes .../textures/block/redrouter/face/9.png | Bin 177 -> 382 bytes .../block/redrouter/redrouter_front.png | Bin 242 -> 282 bytes .../block/redrouter/redrouter_side.png | Bin 331 -> 512 bytes .../block/redrouter/redrouter_top.png | Bin 226 -> 502 bytes .../textures/block/scroller/cage.png | Bin 246 -> 208 bytes .../textures/block/scroller/interface.png | Bin 464 -> 319 bytes .../block/scroller/scroller_front.png | Bin 303 -> 249 bytes .../textures/block/scroller/scroller_side.png | Bin 300 -> 233 bytes .../block/source_block_horizontal.png | Bin 0 -> 442 bytes .../block/source_block_horizontal.png.mcmeta | 6 + .../textures/block/source_block_side.png | Bin 342 -> 0 bytes .../block/source_target_block_vertical.png | Bin 0 -> 368 bytes .../cccbridge/textures/block/st_block_top.png | Bin 254 -> 0 bytes .../block/target_block_horizontal.png | Bin 0 -> 511 bytes .../textures/block/target_block_side.png | Bin 342 -> 0 bytes .../textures/entity/animatronic/body.png | Bin 0 -> 700 bytes .../entity/animatronic/face_creepy.png | Bin 0 -> 1930 bytes .../entity/animatronic/face_happy.png | Bin 0 -> 192 bytes .../entity/animatronic/face_normal.png | Bin 0 -> 191 bytes .../entity/animatronic/face_question.png | Bin 0 -> 191 bytes .../textures/entity/animatronic/face_sad.png | Bin 0 -> 194 bytes .../gui/advancements/backgrounds/luarocks.png | Bin 0 -> 247 bytes .../textures/painting/funny_redrouters.png | Bin 0 -> 1263 bytes .../advancements/place_animatronic.json | 21 + .../advancements/place_redrouter.json | 6 +- .../loot_tables/blocks/animatronic_block.json | 14 + .../cccbridge/recipes/animatronic_block.json | 26 ++ .../cccbridge/recipes/scroller_block.json | 20 +- .../data/cccbridge/recipes/source_block.json | 25 +- .../lua/rom/autorun/cccbridge.lua | 2 + .../computercraft/lua/rom/cccbridge_motd.txt | 9 + .../minecraft/tags/blocks/mineable/axe.json | 6 - .../tags/blocks/mineable/pickaxe.json | 4 +- .../tags/blocks/needs_stone_tool.json | 7 - .../tags/painting_variant/placeable.json | 6 + forge/src/main/resources/icon.png | Bin 5722 -> 11139 bytes forge/src/main/resources/iconHD.png | Bin 86976 -> 124807 bytes 256 files changed, 5537 insertions(+), 4242 deletions(-) delete mode 100644 fabric/src/main/java/cc/tweaked_programs/cccbridge/BlockRegister.java create mode 100644 fabric/src/main/java/cc/tweaked_programs/cccbridge/CCCRegister.java create mode 100644 fabric/src/main/java/cc/tweaked_programs/cccbridge/Misc.java create mode 100644 fabric/src/main/java/cc/tweaked_programs/cccbridge/behaviour/LuaScrollValueBehaviour.java create mode 100644 fabric/src/main/java/cc/tweaked_programs/cccbridge/block/AnimatronicBlock.java create mode 100644 fabric/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/AnimatronicBlockEntity.java create mode 100644 fabric/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/PeripheralBlockEntity.java create mode 100644 fabric/src/main/java/cc/tweaked_programs/cccbridge/blockEntityRenderer/AnimatronicBlockEntityRenderer.java create mode 100644 fabric/src/main/java/cc/tweaked_programs/cccbridge/blockEntityRenderer/RedRouterBlockEntityRenderer.java create mode 100644 fabric/src/main/java/cc/tweaked_programs/cccbridge/entity/animatronic/AnimatronicEntity.java create mode 100644 fabric/src/main/java/cc/tweaked_programs/cccbridge/entity/animatronic/AnimatronicModel.java create mode 100644 fabric/src/main/java/cc/tweaked_programs/cccbridge/entity/animatronic/AnimatronicRenderer.java create mode 100644 fabric/src/main/java/cc/tweaked_programs/cccbridge/peripherals/AnimatronicPeripheral.java delete mode 100644 fabric/src/main/java/cc/tweaked_programs/cccbridge/peripherals/TrainPeripheral.java create mode 100644 fabric/src/main/java/cc/tweaked_programs/cccbridge/peripherals/TweakedPeripheral.java create mode 100644 fabric/src/main/resources/assets/cccbridge/blockstates/animatronic_block.json delete mode 100644 fabric/src/main/resources/assets/cccbridge/icon.png delete mode 100644 fabric/src/main/resources/assets/cccbridge/iconHD.png create mode 100644 fabric/src/main/resources/assets/cccbridge/models/block/animatronic_block.json delete mode 100644 fabric/src/main/resources/assets/cccbridge/models/block/base.json create mode 100644 fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/0.json create mode 100644 fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/17.json delete mode 100644 fabric/src/main/resources/assets/cccbridge/models/block/wanze/base.json delete mode 100644 fabric/src/main/resources/assets/cccbridge/models/block/wanze/gear.json delete mode 100644 fabric/src/main/resources/assets/cccbridge/models/block/wanze/preview.json create mode 100644 fabric/src/main/resources/assets/cccbridge/models/entity/animatronic.bbmodel create mode 100644 fabric/src/main/resources/assets/cccbridge/models/item/animatronic_block.json delete mode 100644 fabric/src/main/resources/assets/cccbridge/models/item/wanze.json delete mode 100644 fabric/src/main/resources/assets/cccbridge/textures/block/advanced_wheel.png create mode 100644 fabric/src/main/resources/assets/cccbridge/textures/block/animatronic_block.png delete mode 100644 fabric/src/main/resources/assets/cccbridge/textures/block/redrouter/connector.png create mode 100644 fabric/src/main/resources/assets/cccbridge/textures/block/redrouter/face/0.png create mode 100644 fabric/src/main/resources/assets/cccbridge/textures/block/source_block_horizontal.png create mode 100644 fabric/src/main/resources/assets/cccbridge/textures/block/source_block_horizontal.png.mcmeta delete mode 100644 fabric/src/main/resources/assets/cccbridge/textures/block/source_block_side.png create mode 100644 fabric/src/main/resources/assets/cccbridge/textures/block/source_target_block_vertical.png delete mode 100644 fabric/src/main/resources/assets/cccbridge/textures/block/st_block_top.png create mode 100644 fabric/src/main/resources/assets/cccbridge/textures/block/target_block_horizontal.png delete mode 100644 fabric/src/main/resources/assets/cccbridge/textures/block/target_block_side.png delete mode 100644 fabric/src/main/resources/assets/cccbridge/textures/block/wanze/wanze_side.png delete mode 100644 fabric/src/main/resources/assets/cccbridge/textures/block/wanze/wanze_top.png create mode 100644 fabric/src/main/resources/assets/cccbridge/textures/entity/animatronic/body.png create mode 100644 fabric/src/main/resources/assets/cccbridge/textures/entity/animatronic/face_creepy.png create mode 100644 fabric/src/main/resources/assets/cccbridge/textures/entity/animatronic/face_happy.png create mode 100644 fabric/src/main/resources/assets/cccbridge/textures/entity/animatronic/face_normal.png create mode 100644 fabric/src/main/resources/assets/cccbridge/textures/entity/animatronic/face_question.png create mode 100644 fabric/src/main/resources/assets/cccbridge/textures/entity/animatronic/face_sad.png create mode 100644 fabric/src/main/resources/assets/cccbridge/textures/gui/advancements/backgrounds/luarocks.png create mode 100644 fabric/src/main/resources/assets/cccbridge/textures/painting/funny_redrouters.png create mode 100644 fabric/src/main/resources/data/cccbridge/advancements/place_animatronic.json create mode 100644 fabric/src/main/resources/data/cccbridge/loot_tables/blocks/animatronic_block.json create mode 100644 fabric/src/main/resources/data/cccbridge/recipes/animatronic_block.json create mode 100644 fabric/src/main/resources/data/computercraft/lua/rom/autorun/cccbridge.lua create mode 100644 fabric/src/main/resources/data/computercraft/lua/rom/cccbridge_motd.txt delete mode 100644 fabric/src/main/resources/data/minecraft/tags/blocks/mineable/axe.json delete mode 100644 fabric/src/main/resources/data/minecraft/tags/blocks/needs_stone_tool.json create mode 100644 fabric/src/main/resources/data/minecraft/tags/painting_variant/placeable.json create mode 100644 fabric/src/main/resources/icon.png create mode 100644 fabric/src/main/resources/iconHD.png rename forge/src/main/java/cc/tweaked_programs/cccbridge/{BlockRegister.java => CCCRegister.java} (53%) create mode 100644 forge/src/main/java/cc/tweaked_programs/cccbridge/Misc.java create mode 100644 forge/src/main/java/cc/tweaked_programs/cccbridge/behaviour/LuaScrollValueBehaviour.java create mode 100644 forge/src/main/java/cc/tweaked_programs/cccbridge/block/AnimatronicBlock.java create mode 100644 forge/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/AnimatronicBlockEntity.java create mode 100644 forge/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/PeripheralBlockEntity.java create mode 100644 forge/src/main/java/cc/tweaked_programs/cccbridge/blockEntityRenderer/AnimatronicBlockEntityRenderer.java create mode 100644 forge/src/main/java/cc/tweaked_programs/cccbridge/blockEntityRenderer/RedRouterBlockEntityRenderer.java create mode 100644 forge/src/main/java/cc/tweaked_programs/cccbridge/entity/animatronic/AnimatronicEntity.java create mode 100644 forge/src/main/java/cc/tweaked_programs/cccbridge/entity/animatronic/AnimatronicModel.java create mode 100644 forge/src/main/java/cc/tweaked_programs/cccbridge/entity/animatronic/AnimatronicRenderer.java create mode 100644 forge/src/main/java/cc/tweaked_programs/cccbridge/peripherals/AnimatronicPeripheral.java delete mode 100644 forge/src/main/java/cc/tweaked_programs/cccbridge/peripherals/SpeedControllerPeripheral.java delete mode 100644 forge/src/main/java/cc/tweaked_programs/cccbridge/peripherals/TrainPeripheral.java create mode 100644 forge/src/main/java/cc/tweaked_programs/cccbridge/peripherals/TweakedPeripheral.java create mode 100644 forge/src/main/resources/assets/cccbridge/blockstates/animatronic_block.json delete mode 100644 forge/src/main/resources/assets/cccbridge/icon.png delete mode 100644 forge/src/main/resources/assets/cccbridge/iconHD.png create mode 100644 forge/src/main/resources/assets/cccbridge/models/block/animatronic_block.json delete mode 100644 forge/src/main/resources/assets/cccbridge/models/block/base.json create mode 100644 forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/0.json create mode 100644 forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/17.json create mode 100644 forge/src/main/resources/assets/cccbridge/models/entity/animatronic.bbmodel create mode 100644 forge/src/main/resources/assets/cccbridge/models/item/animatronic_block.json create mode 100644 forge/src/main/resources/assets/cccbridge/textures/block/animatronic_block.png delete mode 100644 forge/src/main/resources/assets/cccbridge/textures/block/redrouter/connector.png create mode 100644 forge/src/main/resources/assets/cccbridge/textures/block/redrouter/face/0.png create mode 100644 forge/src/main/resources/assets/cccbridge/textures/block/source_block_horizontal.png create mode 100644 forge/src/main/resources/assets/cccbridge/textures/block/source_block_horizontal.png.mcmeta delete mode 100644 forge/src/main/resources/assets/cccbridge/textures/block/source_block_side.png create mode 100644 forge/src/main/resources/assets/cccbridge/textures/block/source_target_block_vertical.png delete mode 100644 forge/src/main/resources/assets/cccbridge/textures/block/st_block_top.png create mode 100644 forge/src/main/resources/assets/cccbridge/textures/block/target_block_horizontal.png delete mode 100644 forge/src/main/resources/assets/cccbridge/textures/block/target_block_side.png create mode 100644 forge/src/main/resources/assets/cccbridge/textures/entity/animatronic/body.png create mode 100644 forge/src/main/resources/assets/cccbridge/textures/entity/animatronic/face_creepy.png create mode 100644 forge/src/main/resources/assets/cccbridge/textures/entity/animatronic/face_happy.png create mode 100644 forge/src/main/resources/assets/cccbridge/textures/entity/animatronic/face_normal.png create mode 100644 forge/src/main/resources/assets/cccbridge/textures/entity/animatronic/face_question.png create mode 100644 forge/src/main/resources/assets/cccbridge/textures/entity/animatronic/face_sad.png create mode 100644 forge/src/main/resources/assets/cccbridge/textures/gui/advancements/backgrounds/luarocks.png create mode 100644 forge/src/main/resources/assets/cccbridge/textures/painting/funny_redrouters.png create mode 100644 forge/src/main/resources/data/cccbridge/advancements/place_animatronic.json create mode 100644 forge/src/main/resources/data/cccbridge/loot_tables/blocks/animatronic_block.json create mode 100644 forge/src/main/resources/data/cccbridge/recipes/animatronic_block.json create mode 100644 forge/src/main/resources/data/computercraft/lua/rom/autorun/cccbridge.lua create mode 100644 forge/src/main/resources/data/computercraft/lua/rom/cccbridge_motd.txt delete mode 100644 forge/src/main/resources/data/minecraft/tags/blocks/mineable/axe.json delete mode 100644 forge/src/main/resources/data/minecraft/tags/blocks/needs_stone_tool.json create mode 100644 forge/src/main/resources/data/minecraft/tags/painting_variant/placeable.json diff --git a/fabric/build.gradle b/fabric/build.gradle index 7923a99..f5cc870 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -1,50 +1,48 @@ plugins { id 'fabric-loom' version '0.12-SNAPSHOT' + id "io.github.p03w.machete" version "1.+" id 'maven-publish' } sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 -archivesBaseName = project.archives_base_name -version = project.mod_version +archivesBaseName = "${archives_base_name}-mc${mc_version}-${modloader}" +version = "v${mod_version}" group = project.maven_group repositories { mavenLocal() mavenCentral() - maven { - name "SquidDev" - url "https://squiddev.cc/maven" - } - maven { url 'https://jitpack.io' } - maven { url "https://maven.shedaniel.me/" } - maven { - // Location of the maven for vazkii's mods - name 'blamejared' - url 'https://maven.blamejared.com' - } + + maven { url = 'https://maven.parchmentmc.org' } + + maven { url = "https://squiddev.cc/maven/" } + maven { url = "https://maven.shedaniel.me/" } + maven { url = "https://maven.blamejared.com" } // Location of the maven for vazkii's mods + + maven { url = "https://jitpack.io/" } // CC:R, Mixin Extras, fabric ASM maven { url = "https://api.modrinth.com/maven" } // LazyDFU, Suggestion Tweaker - maven { url = "https://maven.terraformersmc.com/releases/" } // Mod Menu, EMI - maven { url = "https://maven.shedaniel.me/" } // Cloth Config, REI maven { url = "https://mvn.devos.one/snapshots/" } // Create, Porting Lib, Forge Tags, Milk Lib maven { url = "https://cursemaven.com" } // Forge Config API Port maven { url = "https://maven.tterrag.com/" } // Registrate and Flywheel - maven { url = "https://maven.cafeteria.dev" } // Fake Player API maven { url = "https://maven.jamieswhiteshirt.com/libs-release" } // Reach Entity Attributes - maven { url = "https://jitpack.io/" } // Mixin Extras, fabric ASM + + maven { url = "https://maven.terraformersmc.com/releases/" } // Modmenu } dependencies { // dev environment - minecraft "com.mojang:minecraft:${project.minecraft_version}" - mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2" + minecraft "com.mojang:minecraft:${project.mc_version}" + mappings loom.layered() { + officialMojangMappings() + parchment("org.parchmentmc.data:parchment-${project.mc_version}:${project.parchment_version}@zip") + } modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" - modLocalRuntime("maven.modrinth:lazydfu:0.1.2") // lazydfu - improves start times - modLocalRuntime("maven.modrinth:suggestion-tweaker:${project.suggestion_tweaker_version}") // suggestion tweaker - dev QOL, improves command suggestions - modLocalRuntime("me.shedaniel.cloth:cloth-config-fabric:${project.cloth_config_version}") { exclude(group: "net.fabricmc.fabric-api") } // required for suggestion tweaker and REI - modLocalRuntime("com.terraformersmc:modmenu:${project.modmenu_version}") { exclude group: "net.fabricmc"; exclude group: "net.fabricmc.fabric-api" } // always good to have + + // dependencies we dont use nowerdays HAHAHAHAHAHA + //modImplementation("net.fabricmc.fabric-api:fabric-api:${project.fabric_version}") // recipe viewers modRuntimeOnly("dev.architectury:architectury-fabric:${project.architectury_version}") // for REI @@ -62,81 +60,59 @@ dependencies { println("unknown recipe viewer: $recipeViewer") } + modLocalRuntime("maven.modrinth:lazydfu:0.1.2") // lazydfu - improves start times + modLocalRuntime("maven.modrinth:suggestion-tweaker:${project.suggestion_tweaker_version}") // suggestion tweaker - dev QOL, improves command suggestions + modLocalRuntime("me.shedaniel.cloth:cloth-config-fabric:${project.cloth_config_version}") { exclude(group: "net.fabricmc.fabric-api") } // required for suggestion tweaker and REI + modLocalRuntime("com.terraformersmc:modmenu:${project.modmenu_version}") { exclude group: "net.fabricmc"; exclude group: "net.fabricmc.fabric-api" } // always good to have + // used to prevent forge config api port from complaining modImplementation("com.github.AlphaMode:fakeconfig:master-SNAPSHOT") { exclude(group: "net.fabricmc.fabric-api") } modImplementation("com.github.AlphaMode:fakeconfigtoml:master-SNAPSHOT") { exclude(group: "net.fabricmc.fabric-api") } - // create setup - modImplementation("com.simibubi:Create:${project.create_version}") { transitive = false } - modImplementation("io.github.fabricators_of_create:Porting-Lib:${project.port_lib_version}+${project.minecraft_version}-dev.${project.port_lib_hash}") + // Create + modImplementation("com.simibubi.create:create-fabric-${project.mc_version}:${project.create_version}+mc${project.mc_version}") + modImplementation("io.github.fabricators_of_create:Porting-Lib:$project.port_lib_version+$project.mc_version") modImplementation("me.alphamode:ForgeTags:${project.forge_tags_version}") - modImplementation(include("com.electronwill.night-config:core:${project.night_config_core_version}")) - modImplementation(include("com.electronwill.night-config:toml:${project.night_config_toml_version}")) modImplementation("curse.maven:forge-config-api-port-fabric-547434:${project.config_api_id}") { transitive = false } modImplementation("com.tterrag.registrate:Registrate:${project.registrate_version}") - modImplementation("com.jozufozu.flywheel:flywheel-fabric-1.18.2:${project.flywheel_version}") + modImplementation("com.jozufozu.flywheel:flywheel-fabric-${project.mc_version}:${project.flywheel_version}") modImplementation("com.jamieswhiteshirt:reach-entity-attributes:${project.reach_entity_attributes_version}") - modImplementation("dev.cafeteria:fake-player-api:${project.fake_player_api_version}") modImplementation("io.github.tropheusj:milk-lib:${project.milk_lib_version}") - implementation("com.google.code.findbugs:jsr305:${project.jsr305_version}") // CC:R setup - modImplementation("com.github.cc-tweaked:cc-restitched:${project.cc_version}") - - // dependencies - modImplementation("net.fabricmc.fabric-api:fabric-api:${project.fabric_version}") - - - - - - - - - - - // To change the versions see the gradle.properties file - minecraft "com.mojang:minecraft:${project.minecraft_version}" - mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2" - modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" - - - - modApi "com.github.cc-tweaked:cc-restitched:${project.cc_version}" - - // create setup - modImplementation("com.simibubi:Create:${project.create_version}") { transitive = false } - - modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" + modImplementation("com.github.cc-tweaked:cc-restitched:v${project.mc_version}-${project.cc_version}-ccr") } processResources { inputs.property "version", project.version filesMatching("fabric.mod.json") { - expand "version": project.version + expand(project.properties) } } tasks.withType(JavaCompile).configureEach { - // Minecraft 1.18 (1.18-pre2) upwards uses Java 17. it.options.release = 17 -} - -java { - // Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task - // if it is present. - // If you remove this line, sources will not be generated. - withSourcesJar() + options.compilerArgs <<"-Xlint:deprecation" } jar { from("LICENSE") { rename { "${it}_${project.archivesBaseName}"} } + manifest { + attributes([ + "Specification-Title" : "${project.archives_base_name}", + "Specification-Vendor" : "${project.maven_group}", + "Specification-Version" : "1", + "Implementation-Title" : project.name, + "Implementation-Version" : project.mod_version, + "Implementation-Vendor" : "${project.maven_group}", + "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ") + ]) + } } -// configure the maven publication publishing { publications { mavenJava(MavenPublication) { @@ -144,11 +120,5 @@ publishing { } } - // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. - repositories { - // Add repositories to publish to here. - // Notice: This block does NOT have the same function as the block in the top level. - // The repositories here will be used for publishing your artifact, not for - // retrieving dependencies. - } + repositories {} } diff --git a/fabric/gradle.properties b/fabric/gradle.properties index f596dc9..9d8790f 100644 --- a/fabric/gradle.properties +++ b/fabric/gradle.properties @@ -1,43 +1,44 @@ # Done to increase the memory available to gradle. org.gradle.jvmargs=-Xmx2G +# Description +copyright_year=2023 +license=Apache-2.0 +modloader=fabric + # Fabric Properties # check these on https://fabricmc.net/develop -minecraft_version=1.18.2 -yarn_mappings=1.18.2+build.3 +mc_version=1.18.2 +parchment_version = 2022.11.06 loader_version=0.14.8 # Mod Properties -mod_version = 1.3.1 +mod_version = 1.5.0 maven_group = cc.tweaked_programs archives_base_name = cccbridge # Dependencies -fabric_version=0.57.0+1.18.2 -cc_version=v1.18.2-1.100.5-ccr +fabric_version=0.67.0+1.18.2 +cc_version=1.100.5 # Create setup -# https://modrinth.com/mod/create-fabric -create_version = 0.5.0c-691 +create_version=0.5.1-b-build.1078 +create_version_production=0.5.1-b + +flywheel_version=0.6.8.a-36 +reach_entity_attributes_version=2.1.1 +registrate_version=MC1.18.2-1.1.3 +forge_tags_version=2.1 +milk_lib_version=0.3.2 +port_lib_version=1.2.1031-beta -# https://github.com/Fabricators-of-Create/Create/blob/mc1.18/fabric/dev/gradle.properties config_api_id = 3671141 -forge_config_api_port_version = 3.2.0 -fake_player_api_version = 0.3.0 -flywheel_version = 0.6.4-30 -reach_entity_attributes_version = 2.1.1 -registrate_version = MC1.18.2-1.1.3 -forge_tags_version = 2.1 -milk_lib_version = 0.3.2 -port_lib_version = 1.2.421-beta -port_lib_hash = b8d195a -night_config_core_version = 3.6.3 -night_config_toml_version = 3.6.3 -jsr305_version = 3.0.2 +night_config_core_version = 3.6.6 +night_config_toml_version = 3.6.6 # dev env mods # https://modrinth.com/mod/modmenu -modmenu_version = 3.2.2 +modmenu_version = 3.2.4 # https://modrinth.com/mod/suggestion-tweaker suggestion_tweaker_version = 1.18.x-1.2.0 # https://modrinth.com/mod/cloth-config diff --git a/fabric/src/main/java/cc/tweaked_programs/cccbridge/BlockRegister.java b/fabric/src/main/java/cc/tweaked_programs/cccbridge/BlockRegister.java deleted file mode 100644 index d8f4ef0..0000000 --- a/fabric/src/main/java/cc/tweaked_programs/cccbridge/BlockRegister.java +++ /dev/null @@ -1,45 +0,0 @@ -package cc.tweaked_programs.cccbridge; - -import net.fabricmc.fabric.api.item.v1.FabricItemSettings; -import net.fabricmc.fabric.api.object.builder.v1.block.entity.FabricBlockEntityTypeBuilder; -import net.minecraft.block.Block; -import net.minecraft.block.entity.BlockEntity; -import net.minecraft.block.entity.BlockEntityType; -import net.minecraft.item.BlockItem; -import net.minecraft.item.Item; -import net.minecraft.item.ItemGroup; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; - -import java.util.HashMap; -import java.util.Map; - -public class BlockRegister { - private static final Map blockEntitys = new HashMap(); - private static final Map blocks = new HashMap(); - private static final Map items = new HashMap(); - - private static ItemGroup group = ItemGroup.REDSTONE; - - - public static void registerBlockEntity(String id, FabricBlockEntityTypeBuilder.Factory factory, Block block) { - blockEntitys.put(id, - Registry.register(Registry.BLOCK_ENTITY_TYPE, new Identifier(CCCBridge.MOD_ID, id + "_entity"), FabricBlockEntityTypeBuilder.create(factory, block).build(null)) - ); - blocks.put(id, block); - - Item item = new BlockItem(block, new FabricItemSettings().group(group)); - items.put(id, item); - Registry.register(Registry.BLOCK, new Identifier(CCCBridge.MOD_ID, id), block); - Registry.register(Registry.ITEM, new Identifier(CCCBridge.MOD_ID, id), item); - } - - public static BlockEntityType getBlockEntityType(String id) { - return blockEntitys.get(id); - } - - public static Block getBlock(String id) { - return blocks.get(id); - } - -} diff --git a/fabric/src/main/java/cc/tweaked_programs/cccbridge/CCCBridge.java b/fabric/src/main/java/cc/tweaked_programs/cccbridge/CCCBridge.java index ad5671f..59dfca8 100644 --- a/fabric/src/main/java/cc/tweaked_programs/cccbridge/CCCBridge.java +++ b/fabric/src/main/java/cc/tweaked_programs/cccbridge/CCCBridge.java @@ -1,44 +1,46 @@ package cc.tweaked_programs.cccbridge; -import cc.tweaked_programs.cccbridge.block.RedRouterBlock; -import cc.tweaked_programs.cccbridge.block.ScrollerBlock; -import cc.tweaked_programs.cccbridge.blockEntity.RedRouterBlockEntity; -import cc.tweaked_programs.cccbridge.block.SourceBlock; -import cc.tweaked_programs.cccbridge.blockEntity.ScrollerBlockEntity; +import cc.tweaked_programs.cccbridge.block.*; +import cc.tweaked_programs.cccbridge.blockEntity.*; import cc.tweaked_programs.cccbridge.display.SourceBlockDisplaySource; -import cc.tweaked_programs.cccbridge.blockEntity.SourceBlockEntity; -import cc.tweaked_programs.cccbridge.block.TargetBlock; import cc.tweaked_programs.cccbridge.display.TargetBlockDisplayTarget; -import cc.tweaked_programs.cccbridge.blockEntity.TargetBlockEntity; -import com.simibubi.create.content.logistics.block.display.AllDisplayBehaviours; +import cc.tweaked_programs.cccbridge.entity.animatronic.AnimatronicEntity; +import cc.tweaked_programs.cccbridge.entity.animatronic.AnimatronicModel; +import cc.tweaked_programs.cccbridge.entity.animatronic.AnimatronicRenderer; +import com.simibubi.create.content.redstone.displayLink.AllDisplayBehaviours; import dan200.computercraft.api.ComputerCraftAPI; -import dan200.computercraft.api.peripheral.IPeripheralProvider; import net.fabricmc.api.ModInitializer; -import net.minecraft.sound.SoundEvent; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import net.fabricmc.fabric.api.object.builder.v1.entity.FabricEntityTypeBuilder; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.EntityDimensions; +import net.minecraft.world.entity.MobCategory; +import net.minecraft.world.entity.decoration.Motive; public class CCCBridge implements ModInitializer { public static final String MOD_ID = "cccbridge"; - public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID); - - public static final IPeripheralProvider peripheralProvider = new PeripheralProvider(); + //public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID); @Override public void onInitialize() { - BlockRegister.registerBlockEntity("source_block", SourceBlockEntity::new, new SourceBlock()); - AllDisplayBehaviours.assignTile(AllDisplayBehaviours.register(new Identifier(MOD_ID, "source_block_display_source"), new SourceBlockDisplaySource()), BlockRegister.getBlockEntityType("source_block")); + // Block (-entities) + CCCRegister.registerBlockEntity("source_block", SourceBlockEntity::new, new SourceBlock()); + CCCRegister.registerBlockEntity("target_block", TargetBlockEntity::new, new TargetBlock()); - BlockRegister.registerBlockEntity("target_block", TargetBlockEntity::new, new TargetBlock()); - AllDisplayBehaviours.assignTile(AllDisplayBehaviours.register(new Identifier(MOD_ID, "target_block_display_source"), new TargetBlockDisplayTarget()), BlockRegister.getBlockEntityType("target_block")); + CCCRegister.registerBlockEntity("redrouter_block", RedRouterBlockEntity::new, new RedRouterBlock()); + CCCRegister.registerBlockEntity("scroller_block", ScrollerBlockEntity::new, new ScrollerBlock()); + CCCRegister.registerBlockEntity("animatronic_block", AnimatronicBlockEntity::new, new AnimatronicBlock()); - BlockRegister.registerBlockEntity("redrouter_block", RedRouterBlockEntity::new, new RedRouterBlock()); - BlockRegister.registerBlockEntity("scroller_block", ScrollerBlockEntity::new, new ScrollerBlock()); + // Entities + CCCRegister.registerEntity("animatronic", FabricEntityTypeBuilder.create(MobCategory.MISC, AnimatronicEntity::new).dimensions(EntityDimensions.fixed(0.6F, 1.8F)).build(), AnimatronicRenderer::new, AnimatronicModel.LAYER_LOCATION, AnimatronicModel::createBodyLayer); - CCCSoundEvents.init(); + // Create Display Stuff + AllDisplayBehaviours.assignBlockEntity(AllDisplayBehaviours.register(new ResourceLocation(MOD_ID, "source_block_display_source"), new SourceBlockDisplaySource()), CCCRegister.getBlockEntityType("source_block")); + AllDisplayBehaviours.assignBlockEntity(AllDisplayBehaviours.register(new ResourceLocation(MOD_ID, "target_block_display_target"), new TargetBlockDisplayTarget()), CCCRegister.getBlockEntityType("target_block")); - ComputerCraftAPI.registerPeripheralProvider(peripheralProvider); + // Misc + Registry.register(Registry.MOTIVE, new ResourceLocation(MOD_ID, "funny_redrouters"), new Motive(32,16)); + CCCSoundEvents.init(); + ComputerCraftAPI.registerPeripheralProvider(new PeripheralProvider()); } } diff --git a/fabric/src/main/java/cc/tweaked_programs/cccbridge/CCCBridgeClient.java b/fabric/src/main/java/cc/tweaked_programs/cccbridge/CCCBridgeClient.java index 1d9d6ab..7718130 100644 --- a/fabric/src/main/java/cc/tweaked_programs/cccbridge/CCCBridgeClient.java +++ b/fabric/src/main/java/cc/tweaked_programs/cccbridge/CCCBridgeClient.java @@ -1,13 +1,17 @@ package cc.tweaked_programs.cccbridge; +import cc.tweaked_programs.cccbridge.blockEntity.AnimatronicBlockEntity; +import cc.tweaked_programs.cccbridge.blockEntity.RedRouterBlockEntity; +import cc.tweaked_programs.cccbridge.blockEntityRenderer.AnimatronicBlockEntityRenderer; +import cc.tweaked_programs.cccbridge.blockEntityRenderer.RedRouterBlockEntityRenderer; import net.fabricmc.api.ClientModInitializer; -import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap; -import net.minecraft.client.render.RenderLayer; +import net.fabricmc.fabric.api.client.rendering.v1.BlockEntityRendererRegistry; +import net.minecraft.world.level.block.entity.BlockEntityType; public class CCCBridgeClient implements ClientModInitializer { @Override public void onInitializeClient() { - BlockRenderLayerMap.INSTANCE.putBlock(BlockRegister.getBlock("redrouter_block"), RenderLayer.getCutout()); - BlockRenderLayerMap.INSTANCE.putBlock(BlockRegister.getBlock("scroller_block"), RenderLayer.getCutout()); + BlockEntityRendererRegistry.register((BlockEntityType)CCCRegister.getBlockEntityType("animatronic_block"), AnimatronicBlockEntityRenderer::new); + BlockEntityRendererRegistry.register((BlockEntityType)CCCRegister.getBlockEntityType("redrouter_block"), RedRouterBlockEntityRenderer::new); } } diff --git a/fabric/src/main/java/cc/tweaked_programs/cccbridge/CCCRegister.java b/fabric/src/main/java/cc/tweaked_programs/cccbridge/CCCRegister.java new file mode 100644 index 0000000..aac9ce7 --- /dev/null +++ b/fabric/src/main/java/cc/tweaked_programs/cccbridge/CCCRegister.java @@ -0,0 +1,75 @@ +package cc.tweaked_programs.cccbridge; + +import net.fabricmc.fabric.api.client.rendering.v1.EntityModelLayerRegistry; +import net.fabricmc.fabric.api.client.rendering.v1.EntityRendererRegistry; +import net.fabricmc.fabric.api.item.v1.FabricItemSettings; +import net.fabricmc.fabric.api.object.builder.v1.block.entity.FabricBlockEntityTypeBuilder; +import net.minecraft.client.model.geom.ModelLayerLocation; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.Item; +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.phys.shapes.VoxelShape; + +import javax.annotation.Nullable; +import java.util.HashMap; +import java.util.Map; + +public class CCCRegister { + private static final Map> blockEntities = new HashMap<>(); + private static final Map blocks = new HashMap<>(); + private static final Map items = new HashMap<>(); + private static final Map> entities = new HashMap<>(); + + private static final CreativeModeTab group = CreativeModeTab.TAB_REDSTONE; + + + public static VoxelShape newBox(float p1, float p2, float p3, float p4, float p5, float p6) { + return Block.box(p1*16,p2*16,p3*16,p4*16,p5*16,p6*16); + } + + public static void registerBlockEntity(String id, FabricBlockEntityTypeBuilder.Factory factory, Block block) { + blockEntities.put(id, + Registry.register(Registry.BLOCK_ENTITY_TYPE, new ResourceLocation(CCCBridge.MOD_ID, id + "_entity"), FabricBlockEntityTypeBuilder.create(factory, block).build(null)) + ); + blocks.put(id, block); + + Item item = new BlockItem(block, new FabricItemSettings().group(group)); + items.put(id, item); + Registry.register(Registry.BLOCK, new ResourceLocation(CCCBridge.MOD_ID, id), block); + Registry.register(Registry.ITEM, new ResourceLocation(CCCBridge.MOD_ID, id), item); + } + + public static > void registerEntity(String id, EntityType entitytype, R renderer, ModelLayerLocation layerLocation, EntityModelLayerRegistry.TexturedModelDataProvider createBodyLayer) { + EntityType registeredEntityType = Registry.register(Registry.ENTITY_TYPE, new ResourceLocation(CCCBridge.MOD_ID, id), entitytype); + + EntityRendererRegistry.register(registeredEntityType, renderer); + EntityModelLayerRegistry.registerModelLayer(layerLocation, createBodyLayer); + + entities.put(id, registeredEntityType); + } + + public static BlockEntityType getBlockEntityType(String id) { + return blockEntities.get(id); + } + + public static EntityType getEntityType(String id) { + return entities.get(id); + } + + @Nullable + public static Block getBlock(String id) { + return blocks.get(id); + } + + public static ResourceLocation getEntityTypeId(String id) { + return new ResourceLocation(CCCBridge.MOD_ID, id); + } +} diff --git a/fabric/src/main/java/cc/tweaked_programs/cccbridge/CCCSoundEvents.java b/fabric/src/main/java/cc/tweaked_programs/cccbridge/CCCSoundEvents.java index 6cbe56f..72a4b6a 100644 --- a/fabric/src/main/java/cc/tweaked_programs/cccbridge/CCCSoundEvents.java +++ b/fabric/src/main/java/cc/tweaked_programs/cccbridge/CCCSoundEvents.java @@ -1,28 +1,28 @@ package cc.tweaked_programs.cccbridge; -import net.minecraft.sound.SoundEvent; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvent; import java.util.HashMap; import java.util.Map; public class CCCSoundEvents { - public static final Map entries = new HashMap<>(); + public static final Map entries = new HashMap<>(); public static final SoundEvent CAGE_LOCK = create("cage_lock"), CAGE_UNLOCK = create("cage_unlock"); public static SoundEvent create(String path) { - Identifier id = new Identifier(CCCBridge.MOD_ID, path); + ResourceLocation id = new ResourceLocation(CCCBridge.MOD_ID, path); SoundEvent sound = new SoundEvent(id); entries.put(id, sound); return sound; } public static void init() { - for (Identifier id : entries.keySet()) + for (ResourceLocation id : entries.keySet()) Registry.register(Registry.SOUND_EVENT, id, entries.get(id)); } } diff --git a/fabric/src/main/java/cc/tweaked_programs/cccbridge/Misc.java b/fabric/src/main/java/cc/tweaked_programs/cccbridge/Misc.java new file mode 100644 index 0000000..69d25f7 --- /dev/null +++ b/fabric/src/main/java/cc/tweaked_programs/cccbridge/Misc.java @@ -0,0 +1,111 @@ +package cc.tweaked_programs.cccbridge; + +import net.minecraft.client.renderer.LightTexture; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.TextComponent; + +import java.util.Random; + +public class Misc { + private static final char[] charsetMC = { + // Lower CP437 characters + 0x0020, 0x263A, 0x263B, 0x2665, 0x2666, 0x2663, 0x2660, 0x25CF, 0x25CB, 0x0020, 0x0020, 0x2642, 0x2640, 0x0020, 0x266A, 0x266C, + 0x25B6, 0x25C0, 0x2195, 0x203C, 0x00B6, 0x2591, 0x25AC, 0x21A8, 0x2B06, 0x2B07, 0x27A1, 0x2B05, 0x221F, 0x29FA, 0x25B2, 0x25BC, + // ASCII characters + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x2592, + // Drawing chars + 0x2800, 0x2801, 0x2808, 0x2809, 0x2802, 0x2803, 0x280A, 0x280B, 0x2810, 0x2811, 0x2818, 0x2819, 0x2812, 0x2813, 0x281A, 0x281B, + 0x2804, 0x2805, 0x280C, 0x280D, 0x2806, 0x2807, 0x280E, 0x280F, 0x2814, 0x2815, 0x281C, 0x281D, 0x2816, 0x2817, 0x281E, 0x281F, + // ISO-8859-1 characters + 0x2593, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x2588, 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, + 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, + 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, + 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF, + 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, + 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF + }; + + public static MutableComponent toMCTxt(String line) { + StringBuilder mcTxt = new StringBuilder(); + + for (char c : line.toCharArray()) { + if (c > 255) + mcTxt.append('?'); + else if (c == 223) // ß + mcTxt.append((char)0x1E9E); + else + mcTxt.append(charsetMC[c]); + } + + return new TextComponent("").append(mcTxt.toString()); + } + + public static String toCCTxt(String line) { + StringBuilder ccTxt = new StringBuilder(); + + for (char c : line.toCharArray()) { + char index = findCharIndex(c); + + ccTxt.append((index > 255) ? '?' : index); + } + + return ccTxt.toString(); + } + + private static char findCharIndex(char c) { + if (c == ' ') // Because we replace some non-printable chars with a space, we have to add this if-clause here. + return c; + + for (int i=0; i be.fireUpdateValueEvent()); + onlyActiveWhen(() -> (be.getLevel() != null && !(be.getLevel().getBlockState(be.getBlockPos()).getValue(BlockStateProperties.LOCKED)))); + value = 0; + hasMinus = false; + between(-15,15); + } + + @Override + public void write(CompoundTag nbt, boolean clientPacket) { + nbt.putInt("ScrollValue", value); + nbt.putBoolean("ScrollMinus", hasMinus); + nbt.putInt("ScrollLimit", max); + super.write(nbt, clientPacket); + } + + @Override + public void read(CompoundTag nbt, boolean clientPacket) { + value = nbt.getInt("ScrollValue"); + hasMinus = nbt.getBoolean("ScrollMinus"); + int limit = nbt.getInt("ScrollLimit"); + between(-limit, limit); + super.read(nbt, clientPacket); + } + + public void between(int limit) { + between(-limit, limit); + blockEntity.setChanged(); + blockEntity.sendData(); + } + + public void setHasMinus(boolean state) { + hasMinus = state; + blockEntity.setChanged(); + blockEntity.sendData(); + } + + public int getMax() { + return max; + } + + public boolean hasMinus() { + return hasMinus; + } + + @Override + public ValueSettingsBoard createBoard(Player player, BlockHitResult hitResult) { + List rows; + if (hasMinus) + rows = ImmutableList.of( + Components.translatable("cccbridge.general.unit.scroller.negative"), + Components.translatable("cccbridge.general.unit.scroller.positive") + ); + else + rows = ImmutableList.of( + Components.translatable("cccbridge.general.unit.scroller") + ); + + return new ValueSettingsBoard(label, max, 5, rows, + new ValueSettingsFormatter(ValueSettingsBehaviour.ValueSettings::format)); + } + + @Override + public void setValueSettings(Player player, ValueSettingsBehaviour.ValueSettings valueSetting, boolean ctrlDown) { + if (valueSetting.equals(getValueSettings())) + return; + setValue(hasMinus && valueSetting.row() == 0 ? -valueSetting.value() : valueSetting.value()); + playFeedbackSound(this); + } +} diff --git a/fabric/src/main/java/cc/tweaked_programs/cccbridge/block/AnimatronicBlock.java b/fabric/src/main/java/cc/tweaked_programs/cccbridge/block/AnimatronicBlock.java new file mode 100644 index 0000000..e53c022 --- /dev/null +++ b/fabric/src/main/java/cc/tweaked_programs/cccbridge/block/AnimatronicBlock.java @@ -0,0 +1,53 @@ +package cc.tweaked_programs.cccbridge.block; + +import cc.tweaked_programs.cccbridge.blockEntity.AnimatronicBlockEntity; +import net.minecraft.core.BlockPos; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.EntityBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.Material; +import net.minecraft.world.phys.shapes.BooleanOp; +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; + +public class AnimatronicBlock extends Block implements EntityBlock { + public AnimatronicBlock() { + super(Properties.of(Material.METAL).strength(1.3f).sound(SoundType.CHAIN)); + } + + @Nullable + @Override + public BlockEntity newBlockEntity(@NotNull BlockPos pos, @NotNull BlockState state) { + return new AnimatronicBlockEntity(pos, state); + } + + @Override + public @NotNull VoxelShape getShape(@NotNull BlockState state, @NotNull BlockGetter view, @NotNull BlockPos pos, @NotNull CollisionContext ctx) { + return Shapes.join(Block.box(7.5, 2, 7.5, 8.5, 16, 8.5), Block.box(2, 0, 2, 14, 2, 14), BooleanOp.OR); + } + + @Override + public void setPlacedBy(Level level, BlockPos pos, BlockState state, LivingEntity placer, ItemStack stack) { + BlockEntity blockentity = level.getBlockEntity(pos); + if (!(blockentity instanceof AnimatronicBlockEntity animatronicBlockEntity)) + return; + + float rotation = (float) Mth.floor((Mth.wrapDegrees(placer.yRotO) + 22.5F) / 45.0F) * 45.0F; + animatronicBlockEntity.forceBodyPose(0F, rotation, 0F); + animatronicBlockEntity.setBodyPose(15F, rotation, 0F); + animatronicBlockEntity.setHeadPose(20F, 0F, 0F); + animatronicBlockEntity.setRightArmPose(-15F, 0F, 0F); + animatronicBlockEntity.setLeftArmPose(-15F, 0F, 0F); + animatronicBlockEntity.setChanged(); + } +} diff --git a/fabric/src/main/java/cc/tweaked_programs/cccbridge/block/RedRouterBlock.java b/fabric/src/main/java/cc/tweaked_programs/cccbridge/block/RedRouterBlock.java index cfc1748..3cb2262 100644 --- a/fabric/src/main/java/cc/tweaked_programs/cccbridge/block/RedRouterBlock.java +++ b/fabric/src/main/java/cc/tweaked_programs/cccbridge/block/RedRouterBlock.java @@ -1,45 +1,71 @@ package cc.tweaked_programs.cccbridge.block; -import cc.tweaked_programs.cccbridge.BlockRegister; +import cc.tweaked_programs.cccbridge.CCCRegister; +import cc.tweaked_programs.cccbridge.Misc; import cc.tweaked_programs.cccbridge.blockEntity.RedRouterBlockEntity; -import com.simibubi.create.content.contraptions.wrench.IWrenchable; -import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; -import net.minecraft.block.*; -import net.minecraft.block.entity.BlockEntity; -import net.minecraft.block.entity.BlockEntityTicker; -import net.minecraft.block.entity.BlockEntityType; -import net.minecraft.item.ItemPlacementContext; -import net.minecraft.item.ItemUsageContext; -import net.minecraft.sound.BlockSoundGroup; -import net.minecraft.state.StateManager; -import net.minecraft.state.property.Properties; -import net.minecraft.util.ActionResult; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; -import net.minecraft.world.BlockView; -import net.minecraft.world.World; +import com.simibubi.create.content.equipment.wrench.IWrenchable; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.EntityBlock; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +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.IntegerProperty; +import net.minecraft.world.level.material.Material; +import org.jetbrains.annotations.NotNull; + +public class RedRouterBlock extends HorizontalDirectionalBlock implements EntityBlock, IWrenchable { + public static final IntegerProperty FACE = IntegerProperty.create("face", 0, 16); -public class RedRouterBlock extends HorizontalFacingBlock implements BlockEntityProvider, IWrenchable { public RedRouterBlock() { - super(FabricBlockSettings.of(Material.STONE).strength(1.3f).sounds(BlockSoundGroup.STONE)); - setDefaultState(this.stateManager.getDefaultState().with(Properties.HORIZONTAL_FACING, Direction.NORTH)); + super(Properties.of(Material.STONE).strength(1.3f).sound(SoundType.STONE).noOcclusion()); + registerDefaultState(this.stateDefinition.any() + .setValue(BlockStateProperties.HORIZONTAL_FACING, Direction.NORTH) + .setValue(FACE, 0) + ); } @Override - protected void appendProperties(StateManager.Builder stateManager) { - stateManager.add(Properties.HORIZONTAL_FACING); + protected void createBlockStateDefinition(StateDefinition.Builder stateManager) { + stateManager + .add(BlockStateProperties.HORIZONTAL_FACING) + .add(FACE); } @Override - public BlockEntity createBlockEntity(BlockPos pos, BlockState state) { + public void neighborChanged(BlockState state, Level level, BlockPos pos, Block block, BlockPos fromPos, boolean pIsMoving) { + if (!level.isClientSide) { + BlockEntity be = level.getBlockEntity(pos); + if (!(be instanceof RedRouterBlockEntity rbe)) + return; + RedRouterBlockEntity.updateInputs(level, pos, rbe); + rbe.setChanged(); + } + } + + @Override + public BlockEntity newBlockEntity(@NotNull BlockPos pos, @NotNull BlockState state) { return new RedRouterBlockEntity(pos, state); } - public boolean emitsRedstonePower(BlockState state) { + @Override + public boolean isSignalSource(@NotNull BlockState state) { return true; } - public int getWeakRedstonePower(BlockState state, BlockView world, BlockPos pos, Direction dir) { + @Override + public int getSignal(@NotNull BlockState state, BlockGetter world, @NotNull BlockPos pos, @NotNull Direction dir) { BlockEntity block = world.getBlockEntity(pos); if (!(block instanceof RedRouterBlockEntity redrouter)) return 0; @@ -47,12 +73,12 @@ public int getWeakRedstonePower(BlockState state, BlockView world, BlockPos pos, } @Override - public ActionResult onWrenched(BlockState state, ItemUsageContext context) { - BlockEntity tileentity = context.getWorld().getBlockEntity(context.getBlockPos()); + public InteractionResult onWrenched(BlockState state, UseOnContext context) { + BlockEntity tileentity = context.getLevel().getBlockEntity(context.getClickedPos()); if (!(tileentity instanceof RedRouterBlockEntity redrouter)) - return ActionResult.FAIL; + return InteractionResult.FAIL; - if (context.getSide().getId() < 2) { + if (context.getClickedFace().get3DDataValue() < 2) { int north = redrouter.getPower(Direction.NORTH); int east = redrouter.getPower(Direction.EAST); int south = redrouter.getPower(Direction.SOUTH); @@ -68,12 +94,14 @@ public ActionResult onWrenched(BlockState state, ItemUsageContext context) { } @Override - public BlockEntityTicker getTicker(World world, BlockState state, BlockEntityType type) { - return BlockRegister.getBlockEntityType("redrouter_block") == type ? RedRouterBlockEntity::tick : null; + public BlockEntityTicker getTicker(Level world, BlockState state, BlockEntityType type) { + return CCCRegister.getBlockEntityType("redrouter_block") == type ? RedRouterBlockEntity::tick : null; } @Override - public BlockState getPlacementState(ItemPlacementContext ctx) { - return this.getDefaultState().with(Properties.HORIZONTAL_FACING, ctx.getPlayerFacing().getOpposite()); + public BlockState getStateForPlacement(BlockPlaceContext ctx) { + return this.defaultBlockState() + .setValue(BlockStateProperties.HORIZONTAL_FACING, ctx.getHorizontalDirection().getOpposite()) + .setValue(FACE, (ctx.getLevel().isClientSide) ? 0 : Misc.randomFace()); } } \ No newline at end of file diff --git a/fabric/src/main/java/cc/tweaked_programs/cccbridge/block/ScrollerBlock.java b/fabric/src/main/java/cc/tweaked_programs/cccbridge/block/ScrollerBlock.java index 356a392..0d810dd 100644 --- a/fabric/src/main/java/cc/tweaked_programs/cccbridge/block/ScrollerBlock.java +++ b/fabric/src/main/java/cc/tweaked_programs/cccbridge/block/ScrollerBlock.java @@ -1,90 +1,90 @@ package cc.tweaked_programs.cccbridge.block; -import cc.tweaked_programs.cccbridge.BlockRegister; -import cc.tweaked_programs.cccbridge.blockEntity.RedRouterBlockEntity; +import cc.tweaked_programs.cccbridge.CCCRegister; import cc.tweaked_programs.cccbridge.blockEntity.ScrollerBlockEntity; -import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; -import net.minecraft.block.*; -import net.minecraft.block.entity.BlockEntity; -import net.minecraft.block.entity.BlockEntityTicker; -import net.minecraft.block.entity.BlockEntityType; -import net.minecraft.fluid.FluidState; -import net.minecraft.fluid.Fluids; -import net.minecraft.item.ItemPlacementContext; -import net.minecraft.sound.BlockSoundGroup; -import net.minecraft.state.StateManager; -import net.minecraft.state.property.Properties; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.util.shape.VoxelShapes; -import net.minecraft.world.BlockView; -import net.minecraft.world.World; -import net.minecraft.world.WorldAccess; +import dan200.computercraft.shared.util.WaterloggableHelpers; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.block.*; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockBehaviour; +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.material.FluidState; +import net.minecraft.world.level.material.Material; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; +import org.jetbrains.annotations.NotNull; -public class ScrollerBlock extends FacingBlock implements BlockEntityProvider, Waterloggable { +import javax.annotation.Nonnull; + +import static dan200.computercraft.shared.util.WaterloggableHelpers.getFluidStateForPlacement; + +public class ScrollerBlock extends DirectionalBlock implements EntityBlock, SimpleWaterloggedBlock { public ScrollerBlock() { - super(FabricBlockSettings.of(Material.WOOD).strength(1.0f).sounds(BlockSoundGroup.WOOD)); - setDefaultState(this.stateManager.getDefaultState() - .with(Properties.FACING, Direction.NORTH) - .with(Properties.WATERLOGGED, false) - .with(Properties.LOCKED, false)); + super(BlockBehaviour.Properties.of(Material.METAL).strength(1.0f).sound(SoundType.METAL)); + registerDefaultState(this.stateDefinition.any() + .setValue(BlockStateProperties.FACING, Direction.NORTH) + .setValue(BlockStateProperties.WATERLOGGED, false) + .setValue(BlockStateProperties.LOCKED, false)); } @Override - protected void appendProperties(StateManager.Builder stateManager) { - stateManager.add(Properties.FACING, Properties.WATERLOGGED, Properties.LOCKED); + protected void createBlockStateDefinition(StateDefinition.Builder stateManager) { + stateManager.add(BlockStateProperties.FACING, BlockStateProperties.WATERLOGGED, BlockStateProperties.LOCKED); } @Override - public BlockEntity createBlockEntity(BlockPos pos, BlockState state) { + public BlockEntity newBlockEntity(@NotNull BlockPos pos, @NotNull BlockState state) { return new ScrollerBlockEntity(pos, state); } @Override - public VoxelShape getOutlineShape(BlockState state, BlockView view, BlockPos pos, ShapeContext ctx) { - Direction dir = state.get(FACING); - switch(dir) { - case SOUTH: - return VoxelShapes.cuboid(0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.125f); - case NORTH: - return VoxelShapes.cuboid(0.0f, 0.0f, 1-0.125f, 1.0f, 1.0f, 1.0f); - case WEST: - return VoxelShapes.cuboid(1-0.125f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f); - case EAST: - return VoxelShapes.cuboid(0.0f, 0.0f, 0.0f, 0.125f, 1.0f, 1.0f); - case UP: - return VoxelShapes.cuboid(0.0f, 0.0f, 0.0f, 1.0f, 0.125f, 1.0f); - case DOWN: - return VoxelShapes.cuboid(0.0f, 1-0.125f, 0.0f, 1.0f, 1.0f, 1.0f); - default: - return VoxelShapes.fullCube(); - } + public @NotNull FluidState getFluidState(@Nonnull BlockState state) + { + return WaterloggableHelpers.getFluidState(state); } @Override - public FluidState getFluidState(BlockState state) { - return state.get(Properties.WATERLOGGED) ? Fluids.WATER.getStill(false) : super.getFluidState(state); + public @NotNull BlockState updateShape(@Nonnull BlockState state, @Nonnull Direction side, @Nonnull BlockState otherState, @Nonnull LevelAccessor world, @Nonnull BlockPos pos, @Nonnull BlockPos otherPos ) { + WaterloggableHelpers.updateShape( state, world, pos ); + return state; } @Override - public BlockState getStateForNeighborUpdate(BlockState state, Direction direction, BlockState neighborState, WorldAccess world, BlockPos pos, BlockPos neighborPos) { - if (state.get(Properties.WATERLOGGED)) - world.createAndScheduleFluidTick(pos, Fluids.WATER, Fluids.WATER.getTickRate(world)); + public @NotNull VoxelShape getShape(BlockState state, BlockGetter view, BlockPos pos, CollisionContext ctx) { + return switch (state.getValue(FACING)) { + case SOUTH -> newBox(0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.125f); + case NORTH -> newBox(0.0f, 0.0f, 1 - 0.125f, 1.0f, 1.0f, 1.0f); + case WEST -> newBox(1 - 0.125f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f); + case EAST -> newBox(0.0f, 0.0f, 0.0f, 0.125f, 1.0f, 1.0f); + case UP -> newBox(0.0f, 0.0f, 0.0f, 1.0f, 0.125f, 1.0f); + case DOWN -> newBox(0.0f, 1 - 0.125f, 0.0f, 1.0f, 1.0f, 1.0f); + default -> newBox(0, 0, 0, 1, 1, 1); + }; + } - return super.getStateForNeighborUpdate(state, direction, neighborState, world, pos, neighborPos); + private static VoxelShape newBox(float p1, float p2, float p3, float p4, float p5, float p6) { + return Block.box(p1*16,p2*16,p3*16,p4*16,p5*16,p6*16); } @Override - public BlockEntityTicker getTicker(World world, BlockState state, BlockEntityType type) { - return BlockRegister.getBlockEntityType("scroller_block") == type ? ScrollerBlockEntity::tick : null; + public BlockEntityTicker getTicker(@NotNull Level world, @NotNull BlockState state, @NotNull BlockEntityType type) { + return CCCRegister.getBlockEntityType("scroller_block") == type ? ScrollerBlockEntity::tick : null; } @Override - public BlockState getPlacementState(ItemPlacementContext ctx) { - return this.getDefaultState() - .with(Properties.FACING, ctx.getSide()) - .with(Properties.WATERLOGGED,ctx.getWorld().getFluidState(ctx.getBlockPos()).getFluid() == Fluids.WATER) - .with(Properties.LOCKED, false); + public BlockState getStateForPlacement(BlockPlaceContext ctx) { + return this.defaultBlockState() + .setValue(BlockStateProperties.FACING, ctx.getClickedFace()) + .setValue(BlockStateProperties.WATERLOGGED, getFluidStateForPlacement(ctx)) + .setValue(BlockStateProperties.LOCKED, false); } } diff --git a/fabric/src/main/java/cc/tweaked_programs/cccbridge/block/SourceBlock.java b/fabric/src/main/java/cc/tweaked_programs/cccbridge/block/SourceBlock.java index 1acbb3e..e36aa8f 100644 --- a/fabric/src/main/java/cc/tweaked_programs/cccbridge/block/SourceBlock.java +++ b/fabric/src/main/java/cc/tweaked_programs/cccbridge/block/SourceBlock.java @@ -1,22 +1,23 @@ package cc.tweaked_programs.cccbridge.block; import cc.tweaked_programs.cccbridge.blockEntity.SourceBlockEntity; -import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; -import net.minecraft.block.Block; -import net.minecraft.block.BlockEntityProvider; -import net.minecraft.block.BlockState; -import net.minecraft.block.Material; -import net.minecraft.block.entity.BlockEntity; -import net.minecraft.sound.BlockSoundGroup; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.EntityBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.Material; +import org.jetbrains.annotations.Nullable; -public class SourceBlock extends Block implements BlockEntityProvider { +public class SourceBlock extends Block implements EntityBlock { public SourceBlock() { - super(FabricBlockSettings.of(Material.METAL).strength(2.0f).sounds(BlockSoundGroup.COPPER)); + super(Properties.of(Material.METAL).strength(3.0f).sound(SoundType.METAL)); } + @Nullable @Override - public BlockEntity createBlockEntity(BlockPos pos, BlockState state) { + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { return new SourceBlockEntity(pos, state); } } diff --git a/fabric/src/main/java/cc/tweaked_programs/cccbridge/block/TargetBlock.java b/fabric/src/main/java/cc/tweaked_programs/cccbridge/block/TargetBlock.java index afe2e8d..6e80d20 100644 --- a/fabric/src/main/java/cc/tweaked_programs/cccbridge/block/TargetBlock.java +++ b/fabric/src/main/java/cc/tweaked_programs/cccbridge/block/TargetBlock.java @@ -1,22 +1,24 @@ package cc.tweaked_programs.cccbridge.block; import cc.tweaked_programs.cccbridge.blockEntity.TargetBlockEntity; -import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; -import net.minecraft.block.Block; -import net.minecraft.block.BlockEntityProvider; -import net.minecraft.block.BlockState; -import net.minecraft.block.Material; -import net.minecraft.block.entity.BlockEntity; -import net.minecraft.sound.BlockSoundGroup; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.EntityBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.Material; +import org.jetbrains.annotations.Nullable; -public class TargetBlock extends Block implements BlockEntityProvider { +public class TargetBlock extends Block implements EntityBlock { public TargetBlock() { - super(FabricBlockSettings.of(Material.METAL).strength(2.0f).sounds(BlockSoundGroup.COPPER)); + super(BlockBehaviour.Properties.of(Material.METAL).strength(3.0f).sound(SoundType.METAL)); } + @Nullable @Override - public BlockEntity createBlockEntity(BlockPos pos, BlockState state) { + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { return new TargetBlockEntity(pos, state); } } diff --git a/fabric/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/AnimatronicBlockEntity.java b/fabric/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/AnimatronicBlockEntity.java new file mode 100644 index 0000000..03ca6f7 --- /dev/null +++ b/fabric/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/AnimatronicBlockEntity.java @@ -0,0 +1,119 @@ +package cc.tweaked_programs.cccbridge.blockEntity; + +import cc.tweaked_programs.cccbridge.CCCRegister; +import cc.tweaked_programs.cccbridge.entity.animatronic.AnimatronicEntity; +import cc.tweaked_programs.cccbridge.peripherals.AnimatronicPeripheral; +import dan200.computercraft.api.peripheral.IPeripheral; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.Rotations; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.Objects; + +public class AnimatronicBlockEntity extends BlockEntity implements PeripheralBlockEntity { + private AnimatronicPeripheral peripheral; + private AnimatronicEntity animatronic; + + public AnimatronicBlockEntity(BlockPos pos, BlockState blockState) { + super(CCCRegister.getBlockEntityType("animatronic_block"), pos, blockState); + } + + public Rotations getRightArmPose() { + return getAnimatronic().getDestinationRightArmPose(); + } + + public Rotations getLeftArmPose() { + return getAnimatronic().getDestinationLeftArmPose(); + } + + public Rotations getBodyPose() { + return getAnimatronic().getDestinationBodyPose(); + } + + public Rotations getHeadPose() { + return getAnimatronic().getDestinationHeadPose(); + } + + public void setRightArmPose(float x, float y, float z) { + getAnimatronic().setRightArmPose(new Rotations(x, y, z)); + } + + public void setLeftArmPose(float x, float y, float z) { + getAnimatronic().setLeftArmPose(new Rotations(x, y, z)); + } + + public void setBodyPose(float x, float y, float z) { + getAnimatronic().setBodyPose(new Rotations(x, y, z)); + } + + public void setHeadPose(float x, float y, float z) { + getAnimatronic().setHeadPose(new Rotations(x, y, z)); + } + + public void forceBodyPose(float x, float y, float z) { + getAnimatronic().forceBodyPose(new Rotations(x, y, z)); + } + + @Override + @Nullable + public IPeripheral getPeripheral(@NotNull Direction side) { + if (side.getName().equals(Direction.DOWN.getName())) { + if (peripheral == null) + peripheral = new AnimatronicPeripheral(this); + return peripheral; + } + return null; + } + + public AnimatronicEntity getAnimatronic() { + if (animatronic == null) + this.animatronic = new AnimatronicEntity(CCCRegister.getEntityType("animatronic"), getLevel()); + + if (getLevel() != null) + animatronic.level = getLevel(); + + return animatronic; + } + + @Override + public void load(@NotNull CompoundTag nbt) { + getAnimatronic().read(nbt); + super.load(nbt); + } + + @Override + public void saveAdditional(@NotNull CompoundTag nbt) { + getAnimatronic().add(nbt); + super.saveAdditional(nbt); + } + + @Override + public void setChanged() { + super.setChanged(); + if (level != null && this.hasLevel() && !level.isClientSide) + level.sendBlockUpdated(this.getBlockPos(), this.getBlockState(), this.getBlockState(), Block.UPDATE_ALL); + } + @Nullable + @Override + public Packet getUpdatePacket() { + return ClientboundBlockEntityDataPacket.create(this); + } + + @Override + public @NotNull CompoundTag getUpdateTag() { + return saveWithoutMetadata(); + } + + public void setFace(String face) { + getAnimatronic().setFace(face); + } +} diff --git a/fabric/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/PeripheralBlockEntity.java b/fabric/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/PeripheralBlockEntity.java new file mode 100644 index 0000000..1fd0b76 --- /dev/null +++ b/fabric/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/PeripheralBlockEntity.java @@ -0,0 +1,23 @@ +package cc.tweaked_programs.cccbridge.blockEntity; + +import dan200.computercraft.api.peripheral.IPeripheral; +import net.minecraft.core.Direction; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +/** + * This interface is used to give TileEntities the ability to provide its Peripheral. + * By implementing this, it can be made sure that the object has this ability for sure. + * + * @version 1.0 + */ +public interface PeripheralBlockEntity { + /** + * Returns a peripheral. Can be null, if the TileEntity rejects the request. + * + * @param side From which side is the block called? + * @return null or Peripheral for the TileEntity. + */ + @Nullable + IPeripheral getPeripheral(@NotNull Direction side); +} diff --git a/fabric/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/RedRouterBlockEntity.java b/fabric/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/RedRouterBlockEntity.java index 7563b44..583c2aa 100644 --- a/fabric/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/RedRouterBlockEntity.java +++ b/fabric/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/RedRouterBlockEntity.java @@ -1,36 +1,37 @@ package cc.tweaked_programs.cccbridge.blockEntity; -import cc.tweaked_programs.cccbridge.BlockRegister; -import cc.tweaked_programs.cccbridge.CCCBridge; +import cc.tweaked_programs.cccbridge.CCCRegister; +import cc.tweaked_programs.cccbridge.block.RedRouterBlock; import cc.tweaked_programs.cccbridge.peripherals.RedRouterBlockPeripheral; import dan200.computercraft.api.peripheral.IPeripheral; -import dan200.computercraft.api.peripheral.IPeripheralTile; -import net.minecraft.block.BlockState; -import net.minecraft.block.entity.BlockEntity; -import net.minecraft.nbt.NbtCompound; -import net.minecraft.network.Packet; -import net.minecraft.network.listener.ClientPlayPacketListener; -import net.minecraft.network.packet.s2c.play.BlockEntityUpdateS2CPacket; -import net.minecraft.state.property.Properties; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; -import net.minecraft.world.World; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.HashMap; import java.util.Map; +import java.util.Objects; -public class RedRouterBlockEntity extends BlockEntity implements IPeripheralTile { - private HashMap outputDir = new HashMap<>(); - private HashMap inputDir = new HashMap<>(); - private RedRouterBlockPeripheral peripheral; +public class RedRouterBlockEntity extends BlockEntity implements PeripheralBlockEntity { + private final HashMap outputDir = new HashMap<>(); + private final HashMap inputDir = new HashMap<>(); private boolean blockupdate = false; + private boolean newInputs = false; + private RedRouterBlockPeripheral peripheral; private Direction facing; public RedRouterBlockEntity(BlockPos pos, BlockState state) { - super(BlockRegister.getBlockEntityType("redrouter_block"), pos, state); - facing = state.get(Properties.HORIZONTAL_FACING); + super(CCCRegister.getBlockEntityType("redrouter_block"), pos, state); + facing = state.getValue(BlockStateProperties.HORIZONTAL_FACING); outputDir.put("up", 0); outputDir.put("down", 0); outputDir.put("north", 0); @@ -46,28 +47,34 @@ public RedRouterBlockEntity(BlockPos pos, BlockState state) { inputDir.put("west", 0); } - public static void tick(World world, BlockPos blockPos, BlockState state, BlockEntity be) { + public static void tick(Level world, BlockPos blockPos, BlockState state, BlockEntity be) { if (!(be instanceof RedRouterBlockEntity redrouter)) return; - if (state.get(Properties.HORIZONTAL_FACING) != redrouter.facing) { + + if (state.getValue(BlockStateProperties.HORIZONTAL_FACING) != redrouter.facing) { redrouter.blockupdate = true; - //redrouter.facing = state.get(Properties.HORIZONTAL_FACING); + redrouter.facing = state.getValue(BlockStateProperties.HORIZONTAL_FACING); } if (redrouter.blockupdate) { - world.updateNeighbors(be.getPos(), world.getBlockState(be.getPos()) - .getBlock()); + world.updateNeighborsAt(be.getBlockPos(), world.getBlockState(be.getBlockPos()).getBlock()); redrouter.blockupdate = false; } - updateInputs(world, blockPos, redrouter); + updateInputs(world, blockPos, redrouter); + + if (redrouter.newInputs && redrouter.peripheral != null) { + redrouter.peripheral.sendEvent(RedRouterBlockPeripheral.REDSTONE_EVENT); + redrouter.newInputs = false; + } } - private static void updateInputs(World world, BlockPos blockPos, RedRouterBlockEntity redrouter) { + public static void updateInputs(Level world, BlockPos blockPos, RedRouterBlockEntity redrouter) { for (Map.Entry entry : redrouter.inputDir.entrySet()) { String side = entry.getKey(); Direction dir = Direction.byName(side).getOpposite(); - BlockPos offsetPos = blockPos.offset(dir); + BlockPos offsetPos = blockPos.relative(dir); BlockState block = world.getBlockState(offsetPos); - int power = block.getBlock().getWeakRedstonePower(block, world, offsetPos, dir); + + int power = block.getBlock().getSignal(block, world, offsetPos, dir); redrouter.inputDir.put(side, power); } } @@ -79,17 +86,10 @@ public Direction getFacing() { return facing; } - @Override - public IPeripheral getPeripheral(@NotNull Direction side) { - if (peripheral == null) - peripheral = new RedRouterBlockPeripheral(this); - return peripheral; - } - public int getRedstoneInput(Direction side) { int value = 0; try { - value = inputDir.get(side.asString()); + value = inputDir.get(side.getName()); } catch (NullPointerException e) { } return value; @@ -97,19 +97,21 @@ public int getRedstoneInput(Direction side) { public int getPower(Direction side) { int value = 0; - try { value = outputDir.get(side.asString()); - } catch (NullPointerException e) { CCCBridge.LOGGER.warn(e.getMessage()); } + try { + value = outputDir.get(side.getName()); + } catch (NullPointerException e) { + } return value; } public void setPower(String side, int power) { outputDir.put(side, power); - markDirty(); + setChanged(); } @Override - public void readNbt(NbtCompound nbt) { - super.readNbt(nbt); + public void load(@NotNull CompoundTag nbt) { + super.load(nbt); for (Map.Entry entry : outputDir.entrySet()) { String side = entry.getKey(); outputDir.put(side, nbt.getInt(side)); @@ -117,26 +119,32 @@ public void readNbt(NbtCompound nbt) { } @Override - public void writeNbt(NbtCompound nbt) { + public void saveAdditional(@NotNull CompoundTag nbt) { for (Map.Entry entry : outputDir.entrySet()) nbt.putInt(entry.getKey(), entry.getValue()); - super.writeNbt(nbt); + super.saveAdditional(nbt); } @Override - public void markDirty() { - super.markDirty(); + public void setChanged() { + super.setChanged(); blockupdate = true; } @Nullable @Override - public Packet toUpdatePacket() { - return BlockEntityUpdateS2CPacket.create(this); + public Packet getUpdatePacket() { + return ClientboundBlockEntityDataPacket.create(this); } @Override - public NbtCompound toInitialChunkDataNbt() { - return createNbt(); + public @NotNull CompoundTag getUpdateTag() { + return saveWithoutMetadata(); + } + + public IPeripheral getPeripheral(@NotNull Direction side) { + if (peripheral == null) + peripheral = new RedRouterBlockPeripheral(this); + return peripheral; } -} +} \ No newline at end of file diff --git a/fabric/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/ScrollerBlockEntity.java b/fabric/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/ScrollerBlockEntity.java index a03933b..48cc0ff 100644 --- a/fabric/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/ScrollerBlockEntity.java +++ b/fabric/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/ScrollerBlockEntity.java @@ -1,74 +1,76 @@ package cc.tweaked_programs.cccbridge.blockEntity; -import cc.tweaked_programs.cccbridge.BlockRegister; +import cc.tweaked_programs.cccbridge.CCCRegister; import cc.tweaked_programs.cccbridge.CCCSoundEvents; +import cc.tweaked_programs.cccbridge.behaviour.LuaScrollValueBehaviour; import cc.tweaked_programs.cccbridge.peripherals.ScrollerBlockPeripheral; import com.simibubi.create.AllSoundEvents; -import com.simibubi.create.foundation.tileEntity.SmartTileEntity; -import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; -import com.simibubi.create.foundation.tileEntity.behaviour.ValueBoxTransform; -import com.simibubi.create.foundation.tileEntity.behaviour.scrollvalue.ScrollValueBehaviour; +import com.simibubi.create.foundation.blockEntity.SmartBlockEntity; +import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour; +import com.simibubi.create.foundation.blockEntity.behaviour.ValueBoxTransform; import com.simibubi.create.foundation.utility.VecHelper; import dan200.computercraft.api.peripheral.IPeripheral; -import dan200.computercraft.api.peripheral.IPeripheralTile; -import net.minecraft.block.BlockState; -import net.minecraft.block.entity.BlockEntity; -import net.minecraft.sound.SoundCategory; -import net.minecraft.state.property.Properties; -import net.minecraft.text.TranslatableText; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.World; -import org.jetbrains.annotations.NotNull; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.phys.Vec3; import org.jetbrains.annotations.Nullable; import java.util.List; -public class ScrollerBlockEntity extends SmartTileEntity implements IPeripheralTile { + +public class ScrollerBlockEntity extends SmartBlockEntity implements PeripheralBlockEntity { private ScrollerBlockPeripheral peripheral; private boolean locked = false; private boolean updateLock = false; private boolean playTickSound = false; + private LuaScrollValueBehaviour scroller; public ScrollerBlockEntity(BlockPos pos, BlockState state) { - super(BlockRegister.getBlockEntityType("scroller_block"), pos, state); + super(CCCRegister.getBlockEntityType("scroller_block"), pos, state); } - @Override - public IPeripheral getPeripheral(@NotNull Direction side) { - if (side == this.getCachedState().get(Properties.FACING).getOpposite()) { + public IPeripheral getPeripheral(@Nullable Direction side) { + if (side == this.getBlockState().getValue(BlockStateProperties.FACING).getOpposite() || side == null) { if (peripheral == null) - peripheral = new ScrollerBlockPeripheral(this, this.getWorld()); + peripheral = new ScrollerBlockPeripheral(this); return peripheral; } return null; } public void setLock(boolean state) { locked = state; updateLock = true; } - public void playTickSound() { playTickSound = true; } - @Nullable - public ScrollValueBehaviour getBehaviour() { - TileEntityBehaviour behaviour = getBehaviour(ScrollValueBehaviour.TYPE); - if (behaviour instanceof ScrollValueBehaviour scrollValueBehaviour) - return scrollValueBehaviour; - return null; + public int getValue() { + return scroller.getValue(); + } + + public void setValue(int value) { + scroller.setValue(value); } - public static void tick(World world, BlockPos blockPos, BlockState state, BlockEntity be) { + public void fireUpdateValueEvent() { + if (peripheral != null) + peripheral.sendEvent("scroller_changed", scroller.getValue()); + } + + public static void tick(Level world, BlockPos blockPos, BlockState state, BlockEntity be) { if (!(be instanceof ScrollerBlockEntity scroller)) return; - if (scroller.updateLock && state.get(Properties.LOCKED) != scroller.locked) { + if (scroller.updateLock && state.getValue(BlockStateProperties.LOCKED) != scroller.locked) { world.playSound( null, blockPos, scroller.locked ? CCCSoundEvents.CAGE_LOCK : CCCSoundEvents.CAGE_UNLOCK, - SoundCategory.BLOCKS, + SoundSource.BLOCKS, 1.0f, 1.5f); - world.setBlockState(blockPos, state.with(Properties.LOCKED, scroller.locked)); + world.setBlock(blockPos, state.setValue(BlockStateProperties.LOCKED, scroller.locked), 19); // 19 = BLOCK_UPDATE_FLAGS scroller.updateLock = false; } if (scroller.playTickSound) { @@ -76,49 +78,46 @@ public static void tick(World world, BlockPos blockPos, BlockState state, BlockE null, blockPos, AllSoundEvents.SCROLL_VALUE.getMainEvent(), - SoundCategory.BLOCKS, + SoundSource.BLOCKS, 0.25f, 1.5f); scroller.playTickSound = false; } - - scroller.tick(); } @Override - public void addBehaviours(List behaviours) { - ScrollValueBehaviour scroller = new ScrollValueBehaviour(getCachedState().getBlock().getName(), this, new ControllerValueBoxTransform()) - .between(-150, 150) - .moveText(new Vec3d(9, 0, 10)) - .withUnit(i -> new TranslatableText("cccbridge.general.unit.scroller")) - .withCallback(i -> { if (this.peripheral != null) peripheral.newValue(i); }) - .interactiveWhen(playerEntity -> !(playerEntity.getWorld().getBlockState(this.getPos()).get(Properties.LOCKED))) - .withStepFunction(context -> context.shift ? 1 : 10) - .withFormatter(i -> { - StringBuilder number = new StringBuilder(String.valueOf(i)); - if (i <= -10 || i >= 10) - number.insert(number.length()-1,'.'); - else - number.insert( (i>=0) ? 0 : 1, "0."); - return number.toString(); - }); - scroller.value = 0; + public void addBehaviours(List behaviours) { + if (scroller == null) { + scroller = new LuaScrollValueBehaviour(this, new ControllerValueBoxTransform()); + } behaviours.add(scroller); } + public int getLimit() { + return scroller.getMax(); + } + + public void setLimit(int limit) { + scroller.between(limit); + } + + public boolean hasMinus() { + return scroller.hasMinus(); + } + + public void toggleMinusSpectrum(boolean state) { + scroller.setHasMinus(state); + } + private static class ControllerValueBoxTransform extends ValueBoxTransform.Sided { @Override - protected Vec3d getSouthLocation() { - return VecHelper.voxelSpace(8, 8, 0); + protected Vec3 getSouthLocation() { + return VecHelper.voxelSpace(8D, 8D, 0.01D); } @Override - protected boolean isSideActive(BlockState state, Direction direction) { return state.get(Properties.FACING) == direction; } + protected boolean isSideActive(BlockState state, Direction direction) { return state.getValue(BlockStateProperties.FACING) == direction; } - @Override - protected float getScale() { - return 0.5f; - } } } diff --git a/fabric/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/SourceBlockEntity.java b/fabric/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/SourceBlockEntity.java index 0e848b5..1420700 100644 --- a/fabric/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/SourceBlockEntity.java +++ b/fabric/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/SourceBlockEntity.java @@ -1,39 +1,27 @@ package cc.tweaked_programs.cccbridge.blockEntity; -import cc.tweaked_programs.cccbridge.BlockRegister; +import cc.tweaked_programs.cccbridge.CCCRegister; import cc.tweaked_programs.cccbridge.peripherals.SourceBlockPeripheral; import dan200.computercraft.api.peripheral.IPeripheral; -import dan200.computercraft.api.peripheral.IPeripheralTile; -import net.minecraft.block.BlockState; -import net.minecraft.block.entity.BlockEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; -import org.jetbrains.annotations.NotNull; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; import org.jetbrains.annotations.Nullable; -import java.util.List; - -public class SourceBlockEntity extends BlockEntity implements IPeripheralTile { +public class SourceBlockEntity extends BlockEntity implements PeripheralBlockEntity { private SourceBlockPeripheral peripheral; public SourceBlockEntity(BlockPos pos, BlockState state) { - super(BlockRegister.getBlockEntityType("source_block"), pos, state); + super(CCCRegister.getBlockEntityType("source_block"), pos, state); } - @Override - public IPeripheral getPeripheral(@NotNull Direction side) { + public IPeripheral getPeripheral(@Nullable Direction side) { if (peripheral == null) peripheral = new SourceBlockPeripheral(this); return peripheral; } - @Nullable - public List getContent() { - if (peripheral == null) - return null; - return peripheral.getContent(); - } - public void setSize(int width, int height) { if (peripheral != null) peripheral.setSize(width, height); diff --git a/fabric/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/TargetBlockEntity.java b/fabric/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/TargetBlockEntity.java index 61295f0..07b801a 100644 --- a/fabric/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/TargetBlockEntity.java +++ b/fabric/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/TargetBlockEntity.java @@ -1,29 +1,21 @@ package cc.tweaked_programs.cccbridge.blockEntity; -import cc.tweaked_programs.cccbridge.BlockRegister; +import cc.tweaked_programs.cccbridge.CCCRegister; import cc.tweaked_programs.cccbridge.peripherals.TargetBlockPeripheral; import dan200.computercraft.api.peripheral.IPeripheral; -import dan200.computercraft.api.peripheral.IPeripheralTile; -import net.minecraft.block.BlockState; -import net.minecraft.block.entity.BlockEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; import org.jetbrains.annotations.NotNull; import java.util.List; -public class TargetBlockEntity extends BlockEntity implements IPeripheralTile { +public class TargetBlockEntity extends BlockEntity implements PeripheralBlockEntity { private TargetBlockPeripheral peripheral; public TargetBlockEntity(BlockPos pos, BlockState state) { - super(BlockRegister.getBlockEntityType("target_block"), pos, state); - } - - @Override - public IPeripheral getPeripheral(@NotNull Direction side) { - if (peripheral == null) - peripheral = new TargetBlockPeripheral(this); - return peripheral; + super(CCCRegister.getBlockEntityType("target_block"), pos, state); } public void updateContent(int offset, List content) { @@ -31,20 +23,19 @@ public void updateContent(int offset, List content) { return; int height = getHeight(); int i = 0; - String dot = Character.toString(183); for (String line : content) { - if (i < height) { - // Replace chars that exist in C and can't be displayed in CC: - line = line.replaceAll("\u2588", "="); - line = line.replaceAll("\u2592", "-"); - line = line.replaceAll("\u2591", dot); - + if (i < height) peripheral.replaceLine(offset + i, line); - } i++; } } + public IPeripheral getPeripheral(@NotNull Direction side) { + if (peripheral == null) + peripheral = new TargetBlockPeripheral(this); + return peripheral; + } + public int getWidth() { if (peripheral == null) return 1; diff --git a/fabric/src/main/java/cc/tweaked_programs/cccbridge/blockEntityRenderer/AnimatronicBlockEntityRenderer.java b/fabric/src/main/java/cc/tweaked_programs/cccbridge/blockEntityRenderer/AnimatronicBlockEntityRenderer.java new file mode 100644 index 0000000..f3b256f --- /dev/null +++ b/fabric/src/main/java/cc/tweaked_programs/cccbridge/blockEntityRenderer/AnimatronicBlockEntityRenderer.java @@ -0,0 +1,33 @@ +package cc.tweaked_programs.cccbridge.blockEntityRenderer; + +import cc.tweaked_programs.cccbridge.blockEntity.AnimatronicBlockEntity; +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; +import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; +import net.minecraft.client.renderer.entity.EntityRenderDispatcher; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.block.entity.BlockEntity; +import org.jetbrains.annotations.NotNull; + +public class AnimatronicBlockEntityRenderer implements BlockEntityRenderer { + private final EntityRenderDispatcher entityRenderer; + private static final float scale = 1F/32F*(32F-4F); + + public AnimatronicBlockEntityRenderer(BlockEntityRendererProvider.Context context) { + this.entityRenderer = Minecraft.getInstance().getEntityRenderDispatcher(); + } + + @Override + public void render(@NotNull AnimatronicBlockEntity blockEntity, float partialTick, @NotNull PoseStack poseStack, @NotNull MultiBufferSource bufferSource, int packedLight, int packedOverlay) { + poseStack.pushPose(); + + poseStack.scale(scale, scale, scale); + + Entity entity = blockEntity.getAnimatronic(); + this.entityRenderer.render(entity, 0.575D, 0.15D, 0.575D, 0.0F, partialTick, poseStack, bufferSource, packedLight); + + poseStack.popPose(); + } +} diff --git a/fabric/src/main/java/cc/tweaked_programs/cccbridge/blockEntityRenderer/RedRouterBlockEntityRenderer.java b/fabric/src/main/java/cc/tweaked_programs/cccbridge/blockEntityRenderer/RedRouterBlockEntityRenderer.java new file mode 100644 index 0000000..ecc46a1 --- /dev/null +++ b/fabric/src/main/java/cc/tweaked_programs/cccbridge/blockEntityRenderer/RedRouterBlockEntityRenderer.java @@ -0,0 +1,105 @@ +package cc.tweaked_programs.cccbridge.blockEntityRenderer; + +import cc.tweaked_programs.cccbridge.CCCBridge; +import cc.tweaked_programs.cccbridge.Misc; +import cc.tweaked_programs.cccbridge.block.RedRouterBlock; +import cc.tweaked_programs.cccbridge.blockEntity.RedRouterBlockEntity; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.math.Vector3f; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; +import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.core.Direction; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.inventory.InventoryMenu; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; + +import java.util.HashMap; +import java.util.Map; + + +public class RedRouterBlockEntityRenderer implements BlockEntityRenderer { + private final Map FACE_TEXTURE; + public RedRouterBlockEntityRenderer(BlockEntityRendererProvider.Context context) { + Map faces = new HashMap<>(); + for (int i=0; i<=16; i++) { + faces.put(i, new ResourceLocation(CCCBridge.MOD_ID, "block/redrouter/face/"+i)); + } + FACE_TEXTURE = faces; + } + + @Override + public void render(RedRouterBlockEntity blockEntity, float partialTick, PoseStack poseStack, MultiBufferSource bufferSource, int packedLight, int packedOverlay) { + BlockState block = blockEntity.getBlockState(); + VertexConsumer buffer = bufferSource.getBuffer(RenderType.cutout()); + int flickering = Misc.flickering(); + + poseStack.pushPose(); + + // Rotate + poseStack.translate(0.5D, 0.5D, 0.5D); + if (block.hasProperty(BlockStateProperties.HORIZONTAL_FACING)) + poseStack.mulPose(Vector3f.YP.rotationDegrees(getDir(block.getValue(BlockStateProperties.HORIZONTAL_FACING)))); + poseStack.translate(-0.5D, -0.5D, -0.5D); + + int id = 0; + if (block.hasProperty(RedRouterBlock.FACE)) + id = block.getValue(RedRouterBlock.FACE); + + TextureAtlasSprite sprite = Minecraft.getInstance().getTextureAtlas(InventoryMenu.BLOCK_ATLAS).apply(getFace(id)); + int sprite_size = sprite.getWidth(); + + poseStack.translate(0D, 0D, 2D/16D-0.01); + + buffer.vertex(poseStack.last().pose(), 0 ,0 ,0) + .color(0.7F, 0.7F, 0.7F, 1.0F) + .uv(sprite.getU(sprite_size), sprite.getV(sprite_size)) + .overlayCoords(OverlayTexture.NO_OVERLAY) + .uv2(flickering) + .normal(poseStack.last().normal(), 0, 0, 0).endVertex(); + + buffer.vertex(poseStack.last().pose(), 0 ,1 ,0) + .color(0.7F, 0.7F, 0.7F, 1.0F) + .uv(sprite.getU(sprite_size), sprite.getV(0)) + .overlayCoords(OverlayTexture.NO_OVERLAY) + .uv2(flickering) + .normal(poseStack.last().normal(), 0, 0, 0).endVertex(); + + buffer.vertex(poseStack.last().pose(), 1 ,1 ,0) + .color(0.7F, 0.7F, 0.7F, 1.0F) + .uv(sprite.getU(0), sprite.getV(0)) + .overlayCoords(OverlayTexture.NO_OVERLAY) + .uv2(flickering) + .normal(poseStack.last().normal(), 0, 0, 0).endVertex(); + + buffer.vertex(poseStack.last().pose(), 1 ,0 ,0) + .color(0.7F, 0.7F, 0.7F, 1.0F) + .uv(sprite.getU(0), sprite.getV(sprite_size)) + .overlayCoords(OverlayTexture.NO_OVERLAY) + .uv2(flickering) + .normal(poseStack.last().normal(), 0, 0, 0).endVertex(); + + poseStack.popPose(); + } + + public ResourceLocation getFace(int id) { + return (id >= 1 && id <= 16) ? FACE_TEXTURE.get(id) : FACE_TEXTURE.get(0); + } + + public int getDir(Direction dir) { + return switch(dir) { + case NORTH -> 0; + case EAST -> 270; + case SOUTH -> 180; + case WEST -> 90; + default -> 0; + }; + } +} diff --git a/fabric/src/main/java/cc/tweaked_programs/cccbridge/display/SourceBlockDisplaySource.java b/fabric/src/main/java/cc/tweaked_programs/cccbridge/display/SourceBlockDisplaySource.java index 09198e5..2151a9c 100644 --- a/fabric/src/main/java/cc/tweaked_programs/cccbridge/display/SourceBlockDisplaySource.java +++ b/fabric/src/main/java/cc/tweaked_programs/cccbridge/display/SourceBlockDisplaySource.java @@ -1,32 +1,42 @@ package cc.tweaked_programs.cccbridge.display; import cc.tweaked_programs.cccbridge.blockEntity.SourceBlockEntity; -import com.simibubi.create.content.logistics.block.display.DisplayLinkContext; -import com.simibubi.create.content.logistics.block.display.source.DisplaySource; -import com.simibubi.create.content.logistics.block.display.target.DisplayTargetStats; -import net.minecraft.block.entity.BlockEntity; -import net.minecraft.text.MutableText; -import net.minecraft.text.TranslatableText; +import cc.tweaked_programs.cccbridge.Misc; +import cc.tweaked_programs.cccbridge.peripherals.SourceBlockPeripheral; +import com.simibubi.create.content.redstone.displayLink.DisplayLinkContext; +import com.simibubi.create.content.redstone.displayLink.source.DisplaySource; +import com.simibubi.create.content.redstone.displayLink.target.DisplayTargetStats; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.world.level.block.entity.BlockEntity; import java.util.LinkedList; import java.util.List; public class SourceBlockDisplaySource extends DisplaySource { @Override - public List provideText(DisplayLinkContext context, DisplayTargetStats stats) { - BlockEntity block = context.getSourceTE(); + public List provideText(DisplayLinkContext context, DisplayTargetStats stats) { + BlockEntity block = context.getSourceBlockEntity(); + if (!(block instanceof SourceBlockEntity sourceBlock)) return EMPTY; + if (!(sourceBlock.getPeripheral(null) instanceof SourceBlockPeripheral peripheral)) + return EMPTY; + sourceBlock.setSize(stats.maxColumns(), stats.maxRows()); - List data = sourceBlock.getContent(); + List data = peripheral.getContent(); if (data == null) return EMPTY; - List content = new LinkedList<>(); + List content = new LinkedList<>(); for (String line : data) - content.add(new TranslatableText("").append(line)); + content.add(Misc.toMCTxt(line)); return content; } + + @Override + public int getPassiveRefreshTicks() { + return 20; + } } \ No newline at end of file diff --git a/fabric/src/main/java/cc/tweaked_programs/cccbridge/display/TargetBlockDisplayTarget.java b/fabric/src/main/java/cc/tweaked_programs/cccbridge/display/TargetBlockDisplayTarget.java index 002fc07..4df4acc 100644 --- a/fabric/src/main/java/cc/tweaked_programs/cccbridge/display/TargetBlockDisplayTarget.java +++ b/fabric/src/main/java/cc/tweaked_programs/cccbridge/display/TargetBlockDisplayTarget.java @@ -1,28 +1,29 @@ package cc.tweaked_programs.cccbridge.display; +import cc.tweaked_programs.cccbridge.Misc; import cc.tweaked_programs.cccbridge.blockEntity.TargetBlockEntity; -import com.simibubi.create.content.logistics.block.display.DisplayLinkContext; -import com.simibubi.create.content.logistics.block.display.target.DisplayBoardTarget; -import com.simibubi.create.content.logistics.block.display.target.DisplayTargetStats; -import net.minecraft.block.entity.BlockEntity; -import net.minecraft.text.MutableText; +import com.simibubi.create.content.redstone.displayLink.DisplayLinkContext; +import com.simibubi.create.content.redstone.displayLink.target.DisplayBoardTarget; +import com.simibubi.create.content.redstone.displayLink.target.DisplayTargetStats; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.world.level.block.entity.BlockEntity; import java.util.LinkedList; import java.util.List; public class TargetBlockDisplayTarget extends DisplayBoardTarget { @Override - public void acceptFlapText(int line, List> text, DisplayLinkContext context) { - BlockEntity block = context.getTargetTE(); + public void acceptFlapText(int line, List> text, DisplayLinkContext context) { + BlockEntity block = context.getTargetBlockEntity(); if (!(block instanceof TargetBlockEntity targetBlock)) return; List content = new LinkedList<>(); - for (List c : text) { - String parts = ""; - for (MutableText sLine : c) - parts = parts + sLine.getString() + " "; - content.add(parts); + for (List c : text) { + StringBuilder parts = new StringBuilder(); + for (MutableComponent sLine : c) + parts.append(sLine.getString()).append(" "); + content.add(Misc.toCCTxt(parts.toString())); } targetBlock.updateContent(line, content); @@ -30,10 +31,10 @@ public void acceptFlapText(int line, List> text, DisplayLinkCo @Override public DisplayTargetStats provideStats(DisplayLinkContext context) { - BlockEntity block = context.getTargetTE(); + BlockEntity block = context.getTargetBlockEntity(); if (!(block instanceof TargetBlockEntity targetBlock)) return new DisplayTargetStats(24, 1, this); return new DisplayTargetStats(24, targetBlock.getWidth(), this); } -} +} \ No newline at end of file diff --git a/fabric/src/main/java/cc/tweaked_programs/cccbridge/entity/animatronic/AnimatronicEntity.java b/fabric/src/main/java/cc/tweaked_programs/cccbridge/entity/animatronic/AnimatronicEntity.java new file mode 100644 index 0000000..c346f6c --- /dev/null +++ b/fabric/src/main/java/cc/tweaked_programs/cccbridge/entity/animatronic/AnimatronicEntity.java @@ -0,0 +1,242 @@ +package cc.tweaked_programs.cccbridge.entity.animatronic; + +import cc.tweaked_programs.cccbridge.Misc; +import net.minecraft.core.Rotations; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.ListTag; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientboundAddEntityPacket; +import net.minecraft.network.syncher.EntityDataAccessor; +import net.minecraft.network.syncher.EntityDataSerializers; +import net.minecraft.network.syncher.SynchedEntityData; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.Level; +import org.jetbrains.annotations.NotNull; + +import java.util.Optional; + +public class AnimatronicEntity extends Entity { + private static final Rotations DEFAULT_HEAD_POSE = new Rotations(0.0F, 0.0F, 0.0F); + private static final Rotations DEFAULT_BODY_POSE = new Rotations(0.0F, 0.0F, 0.0F); + private static final Rotations DEFAULT_LEFT_ARM_POSE = new Rotations(0.0F, 0.0F, 0.0F); + private static final Rotations DEFAULT_RIGHT_ARM_POSE = new Rotations(0.0F, 0.0F, 0.0F); + + public static final EntityDataAccessor DATA_HEAD_POSE = SynchedEntityData.defineId(AnimatronicEntity.class, EntityDataSerializers.ROTATIONS); + public static final EntityDataAccessor DATA_BODY_POSE = SynchedEntityData.defineId(AnimatronicEntity.class, EntityDataSerializers.ROTATIONS); + public static final EntityDataAccessor DATA_LEFT_ARM_POSE = SynchedEntityData.defineId(AnimatronicEntity.class, EntityDataSerializers.ROTATIONS); + public static final EntityDataAccessor DATA_RIGHT_ARM_POSE = SynchedEntityData.defineId(AnimatronicEntity.class, EntityDataSerializers.ROTATIONS); + public static final EntityDataAccessor DATA_FACE = SynchedEntityData.defineId(AnimatronicEntity.class, EntityDataSerializers.STRING); + + + private Rotations headPose = new Rotations(DEFAULT_HEAD_POSE.getX(), DEFAULT_HEAD_POSE.getY(), DEFAULT_HEAD_POSE.getZ()); + private Rotations bodyPose = new Rotations(DEFAULT_BODY_POSE.getX(), DEFAULT_BODY_POSE.getY(), DEFAULT_BODY_POSE.getZ()); + private Rotations leftArmPose = new Rotations(DEFAULT_LEFT_ARM_POSE.getX(), DEFAULT_LEFT_ARM_POSE.getY(), DEFAULT_LEFT_ARM_POSE.getZ()); + private Rotations rightArmPose = new Rotations(DEFAULT_RIGHT_ARM_POSE.getX(), DEFAULT_RIGHT_ARM_POSE.getY(), DEFAULT_RIGHT_ARM_POSE.getZ()); + + private Rotations current_headPose = new Rotations(DEFAULT_HEAD_POSE.getX(), DEFAULT_HEAD_POSE.getY(), DEFAULT_HEAD_POSE.getZ()); + private Rotations current_bodyPose = new Rotations(DEFAULT_BODY_POSE.getX(), DEFAULT_BODY_POSE.getY(), DEFAULT_BODY_POSE.getZ()); + private Rotations current_leftArmPose = new Rotations(DEFAULT_LEFT_ARM_POSE.getX(), DEFAULT_LEFT_ARM_POSE.getY(), DEFAULT_LEFT_ARM_POSE.getZ()); + private Rotations current_rightArmPose = new Rotations(DEFAULT_RIGHT_ARM_POSE.getX(), DEFAULT_RIGHT_ARM_POSE.getY(), DEFAULT_RIGHT_ARM_POSE.getZ()); + + private Rotations start_headPose = new Rotations(DEFAULT_HEAD_POSE.getX(), DEFAULT_HEAD_POSE.getY(), DEFAULT_HEAD_POSE.getZ()); + private Rotations start_bodyPose = new Rotations(DEFAULT_BODY_POSE.getX(), DEFAULT_BODY_POSE.getY(), DEFAULT_BODY_POSE.getZ()); + private Rotations start_leftArmPose = new Rotations(DEFAULT_LEFT_ARM_POSE.getX(), DEFAULT_LEFT_ARM_POSE.getY(), DEFAULT_LEFT_ARM_POSE.getZ()); + private Rotations start_rightArmPose = new Rotations(DEFAULT_RIGHT_ARM_POSE.getX(), DEFAULT_RIGHT_ARM_POSE.getY(), DEFAULT_RIGHT_ARM_POSE.getZ()); + + private boolean isMoving; + private double step; + private long start_animation; + + private String face; + + public AnimatronicEntity(EntityType entityType, Level level) { + super(entityType, level); + isMoving = true; + step = 0.0; + face = "normal"; + start_animation = 0; + } + + public void updateCurrentPoses(float partialTicks) { + step = (level.getGameTime()-start_animation+partialTicks) * (0.0175*6); + + current_headPose = updatePose(start_headPose, getDestinationHeadPose()); + current_bodyPose = updatePose(start_bodyPose, getDestinationBodyPose()); + current_leftArmPose = updatePose(start_leftArmPose, getDestinationLeftArmPose()); + current_rightArmPose = updatePose(start_rightArmPose, getDestinationRightArmPose()); + + if (step >= 1) { + isMoving = false; + current_headPose = getDestinationHeadPose(); + current_bodyPose = getDestinationBodyPose(); + current_leftArmPose = getDestinationLeftArmPose(); + current_rightArmPose = getDestinationRightArmPose(); + } + } + + private Rotations updatePose(Rotations start, Rotations destination) { + float x = Misc.updateMovement(start.getX(), destination.getX(), step); + float y = Misc.updateMovement(start.getY(), destination.getY(), step); + float z = Misc.updateMovement(start.getZ(), destination.getZ(), step); + return new Rotations(x, y, z); + } + + public boolean isMoving() { + return isMoving; + } + + public void startAnimation() { + // onLoad level is null; skip animation + if (level == null) { + current_headPose = getDestinationHeadPose(); + current_bodyPose = getDestinationBodyPose(); + current_leftArmPose = getDestinationLeftArmPose(); + current_rightArmPose = getRightArmPose(); + return; + } + + if (!level.isClientSide) + return; + + start_animation = level.getGameTime(); + start_headPose = current_headPose; + start_bodyPose = current_bodyPose; + start_leftArmPose = current_leftArmPose; + start_rightArmPose = current_rightArmPose; + isMoving = true; + step = 0.0; + } + + public ResourceLocation getFace() { + if (this.entityData.get(DATA_FACE) == null) + return AnimatronicRenderer.TEXTURE_FACE_NORMAL; + + return switch (this.entityData.get(DATA_FACE)) { + case "normal" -> AnimatronicRenderer.TEXTURE_FACE_NORMAL; + case "happy" -> AnimatronicRenderer.TEXTURE_FACE_HAPPY; + case "question" -> AnimatronicRenderer.TEXTURE_FACE_QUESTION; + case "sad" -> AnimatronicRenderer.TEXTURE_FACE_SAD; + + default -> AnimatronicRenderer.TEXTURE_FACE_NORMAL; + }; + } + + public void setFace(String face) { + this.entityData.set(DATA_FACE, face); + } + + public void setRightArmPose(Rotations rotations) { + this.entityData.set(DATA_RIGHT_ARM_POSE, rotations); + } + + public void setLeftArmPose(Rotations rotations) { + this.entityData.set(DATA_LEFT_ARM_POSE, rotations); + } + + public void setBodyPose(Rotations rotations) { + this.entityData.set(DATA_BODY_POSE, rotations); + } + + public void forceBodyPose(Rotations rotations) { + setBodyPose(rotations); + current_bodyPose = rotations; + } + + + public void setHeadPose(Rotations rotations) { + this.entityData.set(DATA_HEAD_POSE, rotations); + + } + + public Rotations getRightArmPose() { + return current_rightArmPose; + } + + public Rotations getLeftArmPose() { + return current_leftArmPose; + } + + public Rotations getBodyPose() { + return current_bodyPose; + } + + public Rotations getHeadPose() { + return current_headPose; + } + + public Rotations getDestinationHeadPose() { + return Optional.ofNullable(this.entityData.get(DATA_HEAD_POSE)).orElse(DEFAULT_HEAD_POSE); + } + + public Rotations getDestinationBodyPose() { + return Optional.ofNullable(this.entityData.get(DATA_BODY_POSE)).orElse(DEFAULT_BODY_POSE); + } + + public Rotations getDestinationLeftArmPose() { + return Optional.ofNullable(this.entityData.get(DATA_LEFT_ARM_POSE)).orElse(DEFAULT_LEFT_ARM_POSE); + } + + public Rotations getDestinationRightArmPose() { + return Optional.ofNullable(this.entityData.get(DATA_RIGHT_ARM_POSE)).orElse(DEFAULT_RIGHT_ARM_POSE); + } + + + public void read(CompoundTag nbt) { + readAdditionalSaveData(nbt); + } + + public void add(CompoundTag nbt) { + addAdditionalSaveData(nbt); + } + + @Override + protected void readAdditionalSaveData(CompoundTag nbt) { + ListTag ltHead = nbt.getList("headPose", 5); + this.setHeadPose(ltHead.isEmpty() ? DEFAULT_HEAD_POSE : new Rotations(ltHead)); + + ListTag ltBody = nbt.getList("bodyPose", 5); + this.setBodyPose(ltBody.isEmpty() ? DEFAULT_HEAD_POSE : new Rotations(ltBody)); + + ListTag ltLeftArm = nbt.getList("leftArmPose", 5); + this.setLeftArmPose(ltLeftArm.isEmpty() ? DEFAULT_HEAD_POSE : new Rotations(ltLeftArm)); + + ListTag ltArmPose = nbt.getList("rightArmPose", 5); + this.setRightArmPose(ltArmPose.isEmpty() ? DEFAULT_HEAD_POSE : new Rotations(ltArmPose)); + + setFace(nbt.getString("face")); + + startAnimation(); + } + + @Override + protected void addAdditionalSaveData(CompoundTag nbt) { + nbt.put("headPose", getDestinationHeadPose().save()); + nbt.put("bodyPose", getDestinationBodyPose().save()); + nbt.put("leftArmPose", getDestinationLeftArmPose().save()); + nbt.put("rightArmPose", getDestinationRightArmPose().save()); + if (this.entityData.get(DATA_FACE) != null) + nbt.putString("face", this.entityData.get(DATA_FACE)); + } + + @Override + protected void defineSynchedData() { + this.entityData.define(DATA_HEAD_POSE, headPose); + this.entityData.define(DATA_BODY_POSE, bodyPose); + this.entityData.define(DATA_LEFT_ARM_POSE, leftArmPose); + this.entityData.define(DATA_RIGHT_ARM_POSE, rightArmPose); + this.entityData.define(DATA_FACE, face); + } + + @Override + public @NotNull Packet getAddEntityPacket() { + return new ClientboundAddEntityPacket(this); + } + + @Override + public void onSyncedDataUpdated(EntityDataAccessor key) { + super.onSyncedDataUpdated(key); + startAnimation(); + } +} diff --git a/fabric/src/main/java/cc/tweaked_programs/cccbridge/entity/animatronic/AnimatronicModel.java b/fabric/src/main/java/cc/tweaked_programs/cccbridge/entity/animatronic/AnimatronicModel.java new file mode 100644 index 0000000..04b31d9 --- /dev/null +++ b/fabric/src/main/java/cc/tweaked_programs/cccbridge/entity/animatronic/AnimatronicModel.java @@ -0,0 +1,65 @@ +package cc.tweaked_programs.cccbridge.entity.animatronic; + +import cc.tweaked_programs.cccbridge.CCCRegister; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.model.EntityModel; +import net.minecraft.client.model.geom.ModelLayerLocation; +import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.client.model.geom.PartPose; +import net.minecraft.client.model.geom.builders.*; +import org.jetbrains.annotations.NotNull; + +public class AnimatronicModel extends EntityModel { + public static final ModelLayerLocation LAYER_LOCATION = new ModelLayerLocation(CCCRegister.getEntityTypeId("animatronic"), "main"); + private static final float awesomeFactor = ((float)Math.PI / 180F); + private final ModelPart root; + + public AnimatronicModel(ModelPart root) { + this.root = root.getChild("root"); + } + + public static LayerDefinition createBodyLayer() { + MeshDefinition meshdefinition = new MeshDefinition(); + PartDefinition partdefinition = meshdefinition.getRoot(); + + PartDefinition root = partdefinition.addOrReplaceChild("root", CubeListBuilder.create().texOffs(8, 32).addBox(-1.0F, -6.0F, -3.5F, 2.0F, 2.0F, 2.0F, new CubeDeformation(0.0F)) + .texOffs(0, 20).addBox(-3.0F, -4.0F, -4.5F, 6.0F, 8.0F, 4.0F, new CubeDeformation(0.0F)) + .texOffs(26, 20).addBox(-6.0F, -2.5F, -3.0F, 12.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 10.0F, 0.0F)); + + PartDefinition head = root.addOrReplaceChild("head", CubeListBuilder.create().texOffs(0, 0).addBox(-5.0F, -9.0F, -5.0F, 10.0F, 10.0F, 10.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, -6.0F, -2.5F)); + + PartDefinition rightarm = root.addOrReplaceChild("rightarm", CubeListBuilder.create().texOffs(0, 32).addBox(-1.0F, -2.0F, -1.0F, 2.0F, 12.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offset(-6.0F, -2.0F, -2.5F)); + + PartDefinition leftarm = root.addOrReplaceChild("leftarm", CubeListBuilder.create().texOffs(20, 20).addBox(-1.0F, -2.0F, -1.0F, 2.0F, 12.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offset(6.0F, -2.0F, -2.5F)); + + return LayerDefinition.create(meshdefinition, 64, 64); + } + + @Override + public void setupAnim(T entity, float limbSwing, float limbSwingAmount, float partialTicks, float netHeadYaw, float headPitch) { + if (entity.isMoving()) + entity.updateCurrentPoses(partialTicks); + + this.root.getChild("head").xRot = entity.getHeadPose().getX() * awesomeFactor; + this.root.getChild("head").yRot = entity.getHeadPose().getY() * awesomeFactor; + this.root.getChild("head").zRot = entity.getHeadPose().getZ() * awesomeFactor; + + this.root.yRot = entity.getBodyPose().getY() * awesomeFactor; + this.root.xRot = entity.getBodyPose().getX() * awesomeFactor; + this.root.zRot = entity.getBodyPose().getZ() * awesomeFactor; + + this.root.getChild("leftarm").xRot = entity.getLeftArmPose().getX() * awesomeFactor; + this.root.getChild("leftarm").yRot = entity.getLeftArmPose().getY() * awesomeFactor; + this.root.getChild("leftarm").zRot = entity.getLeftArmPose().getZ() * awesomeFactor; + + this.root.getChild("rightarm").xRot = entity.getRightArmPose().getX() * awesomeFactor; + this.root.getChild("rightarm").yRot = entity.getRightArmPose().getY() * awesomeFactor; + this.root.getChild("rightarm").zRot = entity.getRightArmPose().getZ() * awesomeFactor; + } + + @Override + public void renderToBuffer(@NotNull PoseStack poseStack, @NotNull VertexConsumer vertexConsumer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) { + root.render(poseStack, vertexConsumer, packedLight, packedOverlay, red, green, blue, alpha); + } +} \ No newline at end of file diff --git a/fabric/src/main/java/cc/tweaked_programs/cccbridge/entity/animatronic/AnimatronicRenderer.java b/fabric/src/main/java/cc/tweaked_programs/cccbridge/entity/animatronic/AnimatronicRenderer.java new file mode 100644 index 0000000..499f11b --- /dev/null +++ b/fabric/src/main/java/cc/tweaked_programs/cccbridge/entity/animatronic/AnimatronicRenderer.java @@ -0,0 +1,57 @@ +package cc.tweaked_programs.cccbridge.entity.animatronic; + +import cc.tweaked_programs.cccbridge.CCCBridge; +import cc.tweaked_programs.cccbridge.Misc; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.entity.EntityRenderer; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.resources.ResourceLocation; +import org.jetbrains.annotations.NotNull; + +public class AnimatronicRenderer extends EntityRenderer { + public static final ResourceLocation TEXTURE_BODY = new ResourceLocation(CCCBridge.MOD_ID, "textures/entity/animatronic/body.png"); + + public static final ResourceLocation TEXTURE_FACE_NORMAL = new ResourceLocation(CCCBridge.MOD_ID, "textures/entity/animatronic/face_normal.png"); + public static final ResourceLocation TEXTURE_FACE_HAPPY = new ResourceLocation(CCCBridge.MOD_ID, "textures/entity/animatronic/face_happy.png"); + public static final ResourceLocation TEXTURE_FACE_QUESTION = new ResourceLocation(CCCBridge.MOD_ID, "textures/entity/animatronic/face_question.png"); + public static final ResourceLocation TEXTURE_FACE_SAD = new ResourceLocation(CCCBridge.MOD_ID, "textures/entity/animatronic/face_sad.png"); + + public static final ResourceLocation TEXTURE_FACE_CURSED = new ResourceLocation(CCCBridge.MOD_ID, "textures/entity/animatronic/face_creepy.png"); + + private final AnimatronicModel model; + + public AnimatronicRenderer(EntityRendererProvider.Context context) { + super(context); + this.model = new AnimatronicModel<>(context.bakeLayer(AnimatronicModel.LAYER_LOCATION)); + } + + @Override + public @NotNull ResourceLocation getTextureLocation(@NotNull AnimatronicEntity entity) { + return TEXTURE_BODY; + } + + @Override + public void render(@NotNull AnimatronicEntity entity, float yaw, float tickDelta, PoseStack poseStack, MultiBufferSource multiBufferSource, int light) { + // Setup + poseStack.pushPose(); + poseStack.scale(-1.0F, -1.0F, 1.0F); + poseStack.translate(0.0F, -1.5F, 0.0F); + + this.model.setupAnim(entity, 0.0F, 0.0F, tickDelta, 0.0F, 0.0F); + + // Render model + VertexConsumer vertexConsumer = multiBufferSource.getBuffer(this.model.renderType(TEXTURE_BODY)); + this.model.renderToBuffer(poseStack, vertexConsumer, light, OverlayTexture.NO_OVERLAY, 1.0F, 1.0F, 1.0F, 1.0F); + + // Eyes + vertexConsumer = multiBufferSource.getBuffer(this.model.renderType(Misc.rareCreepiness() ? TEXTURE_FACE_CURSED : entity.getFace())); + this.model.renderToBuffer(poseStack, vertexConsumer, Misc.flickering(), OverlayTexture.NO_OVERLAY, 1.0F, 1.0F, 1.0F, 1.0F); + + // Checkout + poseStack.popPose(); + super.render(entity, yaw, tickDelta, poseStack, multiBufferSource, light); + } +} \ No newline at end of file diff --git a/fabric/src/main/java/cc/tweaked_programs/cccbridge/peripherals/AnimatronicPeripheral.java b/fabric/src/main/java/cc/tweaked_programs/cccbridge/peripherals/AnimatronicPeripheral.java new file mode 100644 index 0000000..3c2c115 --- /dev/null +++ b/fabric/src/main/java/cc/tweaked_programs/cccbridge/peripherals/AnimatronicPeripheral.java @@ -0,0 +1,234 @@ +package cc.tweaked_programs.cccbridge.peripherals; + +import cc.tweaked_programs.cccbridge.blockEntity.AnimatronicBlockEntity; +import dan200.computercraft.api.lua.LuaException; +import dan200.computercraft.api.lua.LuaFunction; +import dan200.computercraft.api.lua.MethodResult; +import net.minecraft.core.Rotations; +import net.minecraft.util.Mth; + +/** + * This peripheral is used by the Animatronic. It is an electronic puppet that can be positioned however needed. + * Neat for decoration purposes! A bit rusty, however. + * + * @version 1.1 + */ +public class AnimatronicPeripheral extends TweakedPeripheral { + private float[] headRot; + private float[] bodyRot; + private float[] leftArmRot; + private float[] rightArmRot; + + public AnimatronicPeripheral(AnimatronicBlockEntity blockEntity) { + super("animatronic", blockEntity); + + headRot = new float[]{0,0,0}; + bodyRot = new float[]{0,0,0}; + leftArmRot = new float[]{0,0,0}; + rightArmRot = new float[]{0,0,0}; + } + + /** + * Changes the face of the Animatronic. + * + * @param face The new face. Must be either 'normal', 'happy', 'question' or 'sad'. + * + * @throws LuaException Whenever the given string is not one of those types. + */ + @LuaFunction + public final void setFace(String face) throws LuaException { + if (face.equals("normal") || face.equals("happy") || face.equals("question") || face.equals("sad")) { + AnimatronicBlockEntity be = super.getTarget(); + if (be != null) { + be.setFace(face); + be.setChanged(); + } + } else throw new LuaException("Given string must be either 'normal', 'happy', 'question' or 'sad'"); + } + + /** + * Pushes the stored rotation values to the Animatronic. + * After pushing them, the rotations get reset to 0 everywhere. + */ + @LuaFunction + public final void push() { + AnimatronicBlockEntity be = super.getTarget(); + if (be != null) { + be.setHeadPose(headRot[0], headRot[1], headRot[2]); + be.setBodyPose(bodyRot[0], bodyRot[1], bodyRot[2]); + be.setLeftArmPose(leftArmRot[0], leftArmRot[1], leftArmRot[2]); + be.setRightArmPose(rightArmRot[0], rightArmRot[1], rightArmRot[2]); + be.setChanged(); + } + + headRot = new float[]{0,0,0}; + bodyRot = new float[]{0,0,0}; + leftArmRot = new float[]{0,0,0}; + rightArmRot = new float[]{0,0,0}; + } + + /** + * Sets the head rotation. + * Can only be set within the bounds -180° to 180° for `X`, `Y` and `Z`. + * + * @param x The X rotation. + * @param y The Y rotation. + * @param z The Z rotation. + */ + @LuaFunction + public final void setHeadRot(double x, double y, double z) { + x = Mth.clamp(x, -180D, 180D); + y = Mth.clamp(y, -180D, 180D); + z = Mth.clamp(z, -180D, 180D); + headRot = new float[]{(float)x, (float)y, (float)z}; + } + + /** + * Sets the body rotation. + * Can only be set within the bounds -180° to 180° for `Y` and `Z`; + * > Note: `X` can be set within 360°. + * + * @param x The X rotation. + * @param y The Y rotation. + * @param z The Z rotation. + */ + @LuaFunction + public final void setBodyRot(double x, double y, double z) { + x = Mth.clamp(x, -360D, 360D); + y = Mth.clamp(y, -180D, 180D); + z = Mth.clamp(z, -180D, 180D); + bodyRot = new float[]{(float)x, (float)y, (float)z}; + } + + /** + * Sets the left arm rotation. + * Can only be set within the bounds -180° to 180° for `X`, `Y` and `Z`. + * + * @param x The X rotation. + * @param y The Y rotation. + * @param z The Z rotation. + */ + @LuaFunction + public final void setLeftArmRot(double x, double y, double z) { + x = Mth.clamp(x, -180, 180); + y = Mth.clamp(y, -180, 180); + z = Mth.clamp(z, -180, 180); + leftArmRot = new float[]{(float)x, (float)y, (float)z}; + } + + /** + * Sets the right arm rotation. + * Can only be set within the bounds -180° to 180° for `X`, `Y` and `Z`. + * + * @param x The X rotation. + * @param y The Y rotation. + * @param z The Z rotation. + */ + @LuaFunction + public final void setRightArmRot(double x, double y, double z) { + x = Mth.clamp(x, -180, 180); + y = Mth.clamp(y, -180, 180); + z = Mth.clamp(z, -180, 180); + rightArmRot = new float[]{(float)x, (float)y, (float)z}; + } + + /** + * Returns the current stored head rotation. + * + * @return Head rotation: table.unpack{X, Y, Z}. + */ + @LuaFunction + public final MethodResult getStoredHeadRot() { + return MethodResult.of((double)headRot[0], (double)headRot[1], (double)headRot[2]); + } + + /** + * Returns the current stored body rotation. + * + * @return Body rotation: table.unpack{X, Y, Z}. + */ + @LuaFunction + public final MethodResult getStoredBodyRot() { + return MethodResult.of((double)bodyRot[0], (double)bodyRot[1], (double)bodyRot[2]); + } + + /** + * Returns the current stored left arm rotation. + * + * @return Left arm rotation: table.unpack{X, Y, Z}. + */ + @LuaFunction + public final MethodResult getStoredLeftArmRot() { + return MethodResult.of((double)leftArmRot[0], (double)leftArmRot[1], (double)leftArmRot[2]); + } + + /** + * Returns the current stored right arm rotation. + * + * @return Right arm rotation: table.unpack{X, Y, Z}. + */ + @LuaFunction + public final MethodResult getStoredRightArmRot() { + return MethodResult.of((double)rightArmRot[0], (double)rightArmRot[1], (double)rightArmRot[2]); + } + + /** + * Returns the head rotation of the Animatronic. + * + * @return Head rotation: table.unpack{X, Y, Z}. + */ + @LuaFunction + public final MethodResult getAppliedHeadRot() { + AnimatronicBlockEntity be = super.getTarget(); + if (be != null) { + Rotations rot = be.getHeadPose(); + return MethodResult.of((double)rot.getX(), (double)rot.getY(), (double)rot.getZ()); + } + return MethodResult.of(0F, 0F, 0F); + } + + /** + * Returns the body rotation of the Animatronic. + * + * @return Body rotation: table.unpack{X, Y, Z}. + */ + @LuaFunction + public final MethodResult getAppliedBodyRot() { + AnimatronicBlockEntity be = super.getTarget(); + if (be != null) { + Rotations rot = be.getBodyPose(); + return MethodResult.of((double)rot.getX(), (double)rot.getY(), (double)rot.getZ()); + } + return MethodResult.of(0F, 0F, 0F); + } + + /** + * Returns the left arm rotation of the Animatronic. + * + * @return Left arm rotation: table.unpack{X, Y, Z}. + */ + @LuaFunction + public final MethodResult getAppliedLeftArmRot() { + AnimatronicBlockEntity be = super.getTarget(); + if (be != null) { + Rotations rot = be.getLeftArmPose(); + return MethodResult.of((double)rot.getX(), (double)rot.getY(), (double)rot.getZ()); + } + return MethodResult.of(0F, 0F, 0F); + } + + /** + * Returns the right arm rotation of the Animatronic. + * + * @return Right arm rotation: table.unpack{X, Y, Z}. + */ + @LuaFunction + public final MethodResult getAppliedRightArmRot() { + AnimatronicBlockEntity be = super.getTarget(); + if (be != null) { + Rotations rot = be.getRightArmPose(); + return MethodResult.of((double)rot.getX(), (double)rot.getY(), (double)rot.getZ()); + } + return MethodResult.of(0F, 0F, 0F); + } +} diff --git a/fabric/src/main/java/cc/tweaked_programs/cccbridge/peripherals/RedRouterBlockPeripheral.java b/fabric/src/main/java/cc/tweaked_programs/cccbridge/peripherals/RedRouterBlockPeripheral.java index ba6424c..72a5491 100644 --- a/fabric/src/main/java/cc/tweaked_programs/cccbridge/peripherals/RedRouterBlockPeripheral.java +++ b/fabric/src/main/java/cc/tweaked_programs/cccbridge/peripherals/RedRouterBlockPeripheral.java @@ -3,36 +3,43 @@ import cc.tweaked_programs.cccbridge.blockEntity.RedRouterBlockEntity; import dan200.computercraft.api.lua.LuaException; import dan200.computercraft.api.lua.LuaFunction; -import dan200.computercraft.api.peripheral.IPeripheral; +import dan200.computercraft.api.peripheral.IComputerAccess; import dan200.computercraft.core.computer.ComputerSide; -import net.minecraft.util.math.Direction; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import net.minecraft.core.Direction; -public class RedRouterBlockPeripheral implements IPeripheral { - private final RedRouterBlockEntity redrouter_be; +import java.util.LinkedList; +import java.util.List; - public RedRouterBlockPeripheral(RedRouterBlockEntity redrouter_block_entity) { - this.redrouter_be = redrouter_block_entity; - } +/** + * This peripheral is used by the RedRouter. It works very similar to the Redstone API. + * + * @version 1.1 + */ +public class RedRouterBlockPeripheral extends TweakedPeripheral { + public static final String REDSTONE_EVENT = "redstone"; + private final List pcs = new LinkedList<>(); - @NotNull - @Override - public String getType() { - return "redrouter"; + public RedRouterBlockPeripheral(RedRouterBlockEntity blockentity) { + super("redrouter", blockentity); } public Direction getActualSide(ComputerSide side) { - Direction facing = redrouter_be.getFacing(); - return switch (side.getName()) { - case ("front") -> facing.getOpposite(); - case ("back") -> facing; - case ("left") -> facing.rotateYClockwise(); - case ("right") -> facing.rotateYCounterclockwise(); - case ("top") -> Direction.DOWN; - case ("bottom") -> Direction.UP; - default -> Direction.NORTH; - }; + RedRouterBlockEntity be = getTarget(); + + if (be != null) { + Direction facing = getTarget().getFacing(); + return switch (side.getName()) { + case ("front") -> facing.getOpposite(); + case ("back") -> facing; + case ("left") -> facing.getClockWise(); + case ("right") -> facing.getCounterClockWise(); + case ("top") -> Direction.DOWN; + case ("bottom") -> Direction.UP; + default -> Direction.NORTH; + }; + } + + return Direction.NORTH; } /** @@ -43,7 +50,9 @@ public Direction getActualSide(ComputerSide side) { */ @LuaFunction public final void setOutput(ComputerSide side, boolean on) { - redrouter_be.setPower(getActualSide(side).getName(), on ? 15 : 0); + RedRouterBlockEntity be = getTarget(); + if (be != null) + be.setPower(getActualSide(side).getName(), on ? 15 : 0); } /** @@ -55,7 +64,11 @@ public final void setOutput(ComputerSide side, boolean on) { */ @LuaFunction public final boolean getOutput(ComputerSide side) { - return redrouter_be.getPower(getActualSide(side)) > 0; + RedRouterBlockEntity be = getTarget(); + if (be != null) + return be.getPower(getActualSide(side)) > 0; + + return false; } /** @@ -66,7 +79,11 @@ public final boolean getOutput(ComputerSide side) { */ @LuaFunction public final boolean getInput(ComputerSide side) { - return redrouter_be.getRedstoneInput(getActualSide(side)) > 0; + RedRouterBlockEntity be = getTarget(); + if (be != null) + return be.getRedstoneInput(getActualSide(side)) > 0; + + return false; } /** @@ -79,7 +96,10 @@ public final boolean getInput(ComputerSide side) { @LuaFunction({"setAnalogOutput", "setAnalogueOutput"}) public final void setAnalogOutput(ComputerSide side, int value) throws LuaException { if (value < 0 || value > 15) throw new LuaException("Expected number in range 0-15"); - redrouter_be.setPower(getActualSide(side).getName(), value); + RedRouterBlockEntity be = getTarget(); + + if (be != null) + be.setPower(getActualSide(side).getName(), value); } /** @@ -91,7 +111,11 @@ public final void setAnalogOutput(ComputerSide side, int value) throws LuaExcept */ @LuaFunction({"getAnalogOutput", "getAnalogueOutput"}) public final int getAnalogOutput(ComputerSide side) { - return redrouter_be.getPower(getActualSide(side)); + RedRouterBlockEntity be = getTarget(); + if (be != null) + return be.getPower(getActualSide(side)); + + return 0; } /** @@ -102,11 +126,10 @@ public final int getAnalogOutput(ComputerSide side) { */ @LuaFunction({"getAnalogInput", "getAnalogueInput"}) public final int getAnalogInput(ComputerSide side) { - return redrouter_be.getRedstoneInput(getActualSide(side)); - } + RedRouterBlockEntity be = getTarget(); + if (be != null) + return be.getRedstoneInput(getActualSide(side)); - @Override - public boolean equals(@Nullable IPeripheral other) { - return this == other || other instanceof RedRouterBlockPeripheral redrouter && redrouter.redrouter_be == redrouter_be; + return 0; } } diff --git a/fabric/src/main/java/cc/tweaked_programs/cccbridge/peripherals/ScrollerBlockPeripheral.java b/fabric/src/main/java/cc/tweaked_programs/cccbridge/peripherals/ScrollerBlockPeripheral.java index 8aa173b..6ac0456 100644 --- a/fabric/src/main/java/cc/tweaked_programs/cccbridge/peripherals/ScrollerBlockPeripheral.java +++ b/fabric/src/main/java/cc/tweaked_programs/cccbridge/peripherals/ScrollerBlockPeripheral.java @@ -1,52 +1,37 @@ package cc.tweaked_programs.cccbridge.peripherals; import cc.tweaked_programs.cccbridge.blockEntity.ScrollerBlockEntity; -import com.simibubi.create.foundation.tileEntity.behaviour.scrollvalue.ScrollValueBehaviour; import dan200.computercraft.api.lua.LuaFunction; -import dan200.computercraft.api.peripheral.IComputerAccess; -import dan200.computercraft.api.peripheral.IPeripheral; -import net.minecraft.state.property.Properties; -import net.minecraft.world.World; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import javax.annotation.Nonnull; -import java.util.LinkedList; -import java.util.List; - -public class ScrollerBlockPeripheral implements IPeripheral { - private final ScrollerBlockEntity scroller; - private final World level; - private final List pcs = new LinkedList<>(); - - public ScrollerBlockPeripheral(ScrollerBlockEntity block_entity, World level) { - this.scroller = block_entity; - this.level = level; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; + +/** + * This peripheral is used by the Scroller Pane. It allows to interact with its valued that the player can manipulate + * (as long as this peripheral allows though, as it call lock it for outside interactions) + * + * @version 2.0 + */ +public class ScrollerBlockPeripheral extends TweakedPeripheral { + + public ScrollerBlockPeripheral(ScrollerBlockEntity blockentity) { + super("scroller", blockentity); } - @Override - public void attach(@Nonnull IComputerAccess computer) { - pcs.add(computer); - } - - @Override - public void detach(@Nonnull IComputerAccess computer) { - pcs.removeIf(p -> (p.getID() == computer.getID())); - } - - public void newValue(int value) { - for (IComputerAccess pc : pcs) - pc.queueEvent("scroller_changed", pc.getAttachmentName(), (double)(value/10)); - } - - /** * Returns whether the Scroller Pane is locked or not. * @return The state */ @LuaFunction public final boolean isLocked() { - return level.getBlockState(scroller.getPos()).get(Properties.LOCKED); + ScrollerBlockEntity be = getTarget(); + if (be != null) { + Level level = getTarget().getLevel(); + + if (level != null) + return level.getBlockState(be.getBlockPos()).getValue(BlockStateProperties.LOCKED); + } + + return false; } /** @@ -54,45 +39,88 @@ public final boolean isLocked() { * @param state Sate for lock */ @LuaFunction - public final void setLock(boolean state) { scroller.setLock(state); } + public final void setLock(boolean state) { + ScrollerBlockEntity be = getTarget(); + if (be != null) + be.setLock(state); + } /** - * Returns the current value of the Scroller Pane. - * @return Value (-15.0 - 15.0) + * Returns the selected value of the Scroller Pane. + * + * @return The selected value. */ @LuaFunction - public final double getValue() { - ScrollValueBehaviour scrollValueBehaviour = scroller.getBehaviour(); - if (scrollValueBehaviour == null) return 0.0; + public final int getValue() { + ScrollerBlockEntity be = getTarget(); + if (be != null) + return be.getValue(); - return (double)scrollValueBehaviour.getValue()/10; + return 0; } /** - * Sets a new value for the Scroller Pane - * @param value The new value (Must be in between -15.0 - 15.0) + * Changes the selected value. + * @param value The new value to select. */ @LuaFunction - public final void setValue(double value) { - ScrollValueBehaviour scrollValueBehaviour = scroller.getBehaviour(); - if (scrollValueBehaviour == null) return; + public final void setValue(int value) { + ScrollerBlockEntity be = getTarget(); + if (be != null) + be.setValue(value); + } - if (value > 15) value = 15; - else if (value < -15) value = -15; + /** + * Returns the limit relative to zero. + * E.g. 15 for from 0 to 15. + * + * @return The limit. + */ + @LuaFunction + public final int getLimit() { + ScrollerBlockEntity be = getTarget(); + if (be != null) + return be.getLimit(); - scrollValueBehaviour.setValue((int)(value*10)); - scroller.playTickSound(); + return 0; } + /** + * Returns whenever the Scroller Pane has the minus spectrum enabled. + * + * @return true for when the minus spectrum is enabled, and false for the opposite. + */ + @LuaFunction + public final boolean hasMinusSpectrum() { + ScrollerBlockEntity be = getTarget(); + if (be != null) + return be.hasMinus(); + + return false; + } - @NotNull - @Override - public String getType() { - return "scroller"; + /** + * Enables or disables the minus spectrum. + * + * @param state true for enabled minus spectrum, false for the opposite. + */ + @LuaFunction + public final void toggleMinusSpectrum(boolean state) { + ScrollerBlockEntity be = getTarget(); + if (be != null) + be.toggleMinusSpectrum(state); } - @Override - public boolean equals(@Nullable IPeripheral other) { - return this == other || other instanceof ScrollerBlockPeripheral s && s.scroller == scroller; + /** + * Sets a new limit relative to zero. + * If minus spectrum enabled, the limit then gets mirrored to the minus spectrum too. + * + * @param limit The new limit. + */ + @LuaFunction + public final void setLimit(int limit) { + ScrollerBlockEntity be = getTarget(); + if (be != null) + be.setLimit(limit); } } diff --git a/fabric/src/main/java/cc/tweaked_programs/cccbridge/peripherals/SourceBlockPeripheral.java b/fabric/src/main/java/cc/tweaked_programs/cccbridge/peripherals/SourceBlockPeripheral.java index 33d073c..b7b66c3 100644 --- a/fabric/src/main/java/cc/tweaked_programs/cccbridge/peripherals/SourceBlockPeripheral.java +++ b/fabric/src/main/java/cc/tweaked_programs/cccbridge/peripherals/SourceBlockPeripheral.java @@ -11,31 +11,21 @@ import org.jetbrains.annotations.Nullable; import javax.annotation.Nonnull; +import javax.xml.transform.Source; import java.util.LinkedList; import java.util.List; -public class SourceBlockPeripheral implements IPeripheral { - private final SourceBlockEntity source_block_entity; +/** + * This peripheral is used by the Source Block. It is used to give some kind of Create Display Targets data. + * The peripheral acts similar to a normal Terminal, with some implementations from the Window API and other limitations like no control over the colors. + * + * @version 1.1 + */ +public class SourceBlockPeripheral extends TweakedPeripheral { private final Terminal term = new Terminal(4, 2); - private final List pcs = new LinkedList<>(); - public SourceBlockPeripheral(SourceBlockEntity source_block_entity) { - this.source_block_entity = source_block_entity; - } - - @Override - public void attach(@Nonnull IComputerAccess computer) { - pcs.add(computer); - } - - @Override - public void detach(@Nonnull IComputerAccess computer) { - pcs.removeIf(p -> (p.getID() == computer.getID())); - } - - public void resize() { - for (IComputerAccess pc : pcs) - pc.queueEvent("monitor_resize", pc.getAttachmentName()); + public SourceBlockPeripheral(SourceBlockEntity blockentity) { + super("create_source", blockentity); } public void setSize(int width, int height) { @@ -43,24 +33,14 @@ public void setSize(int width, int height) { int oldH = term.getHeight(); if (!(oldW != width || oldH != height)) return; term.resize(width, height); - resize(); + super.sendEvent("monitor_resize"); } public List getContent() { List content = new LinkedList<>(); - // Replace chars that exist in CC and can't be displayed in C: - for (int i = 0; i < term.getHeight(); i++) { - String line = term.getLine(i).toString(); - for (int j = 0; j < line.length(); j++) { - char ch = line.charAt(j); - - // Printable chars in byte range - if (ch < 32 || (ch > 126 && ch < 161)) - line = line.substring(0, j) + '?' + line.substring(j + 1); - } - content.add(line); - } + for (int i = 0; i < term.getHeight(); i++) + content.add( term.getLine(i).toString()); return content; } @@ -148,16 +128,4 @@ public final Object[] getCursorPos() { public final Object[] getSize() { return new Object[]{term.getWidth(), term.getHeight()}; } - - - @NotNull - @Override - public String getType() { - return "create_source"; - } - - @Override - public boolean equals(@Nullable IPeripheral other) { - return this == other || other instanceof SourceBlockPeripheral source && source.source_block_entity == source_block_entity; - } -} +} \ No newline at end of file diff --git a/fabric/src/main/java/cc/tweaked_programs/cccbridge/peripherals/TargetBlockPeripheral.java b/fabric/src/main/java/cc/tweaked_programs/cccbridge/peripherals/TargetBlockPeripheral.java index 209c49f..043713f 100644 --- a/fabric/src/main/java/cc/tweaked_programs/cccbridge/peripherals/TargetBlockPeripheral.java +++ b/fabric/src/main/java/cc/tweaked_programs/cccbridge/peripherals/TargetBlockPeripheral.java @@ -9,13 +9,16 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -public class TargetBlockPeripheral implements IPeripheral { - private final TargetBlockEntity target_block_entity; +/** + * This peripheral is used by the Target Block. It is used to get data from Create Display Sources. The data has to be synced by the BlockEntity. + * + * @version 1.1 + */ +public class TargetBlockPeripheral extends TweakedPeripheral { private final Terminal term = new Terminal(32, 24); - - public TargetBlockPeripheral(TargetBlockEntity target_block_entity) { - this.target_block_entity = target_block_entity; + public TargetBlockPeripheral(TargetBlockEntity blockentity) { + super("create_target", blockentity); } public void replaceLine(int y, String line) { @@ -30,6 +33,10 @@ public int getWidth() { return term.getWidth(); } + public int getHeight() { + return term.getHeight(); + } + /** * Sets the new width of the display. Cannot be larger than 164 chars. * @@ -42,10 +49,6 @@ public final void setWidth(int width) throws LuaException { term.resize(width, 16); } - public int getHeight() { - return term.getHeight(); - } - /** * Clears the whole screen. */ @@ -72,7 +75,7 @@ public final void clearLine(int y) { * * @param y The y position on the display. * @return The string from the given Y position. - * @throws LuaException When given number is not in range 1-[terminal height]. + * @throws LuaException When given number is not in range 1-[terminal height] */ @LuaFunction public final String getLine(int y) throws LuaException { @@ -91,15 +94,4 @@ public final String getLine(int y) throws LuaException { public final Object[] getSize() { return new Object[]{term.getWidth(), term.getHeight()}; } - - @NotNull - @Override - public String getType() { - return "create_target"; - } - - @Override - public boolean equals(@Nullable IPeripheral other) { - return this == other || other instanceof TargetBlockPeripheral target && target.target_block_entity == target_block_entity; - } -} +} \ No newline at end of file diff --git a/fabric/src/main/java/cc/tweaked_programs/cccbridge/peripherals/TrainPeripheral.java b/fabric/src/main/java/cc/tweaked_programs/cccbridge/peripherals/TrainPeripheral.java deleted file mode 100644 index 9a44946..0000000 --- a/fabric/src/main/java/cc/tweaked_programs/cccbridge/peripherals/TrainPeripheral.java +++ /dev/null @@ -1,193 +0,0 @@ -package cc.tweaked_programs.cccbridge.peripherals; - -import com.mojang.authlib.GameProfile; -import com.simibubi.create.Create; -import com.simibubi.create.content.logistics.trains.GraphLocation; -import com.simibubi.create.content.logistics.trains.entity.Train; -import com.simibubi.create.content.logistics.trains.management.edgePoint.station.GlobalStation; -import com.simibubi.create.content.logistics.trains.management.edgePoint.station.StationTileEntity; -import com.simibubi.create.content.logistics.trains.management.edgePoint.station.TrainEditPacket.TrainEditReturnPacket; -import com.simibubi.create.content.logistics.trains.management.schedule.Schedule; -import com.simibubi.create.foundation.networking.AllPackets; -import dan200.computercraft.api.lua.LuaFunction; -import dan200.computercraft.api.lua.MethodResult; -import dan200.computercraft.api.peripheral.IComputerAccess; -import dan200.computercraft.api.peripheral.IPeripheral; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.text.Text; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; -import net.minecraft.world.World; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import javax.annotation.Nonnull; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; -import java.util.UUID; - -public class TrainPeripheral implements IPeripheral { - private static Schedule schedule; - private final World level; - private final StationTileEntity station; - - public TrainPeripheral(@NotNull BlockPos pos, World level) { - this.level = level; - station = (StationTileEntity) level.getBlockEntity(pos); - } - - - @NotNull - @Override - public String getType() { - return "train_station"; - } - - /** - * Assembles a train. - * - * @return Whether it was successful or not with a message. - */ - @LuaFunction - public final MethodResult assemble() { - if (station.getStation().getPresentTrain() != null) { - return MethodResult.of(false, "There is a assembled Train"); - } - if (station.tryEnterAssemblyMode()) { - station.assemble(UUID.fromString("069a79f4-44e9-4726-a5be-fca90e38aaf5")); - station.tick(); - if (this.schedule == null) { - return MethodResult.of(false, "No Schedule saved"); - } - station.getStation().getPresentTrain().runtime.setSchedule(this.schedule, true); - this.schedule = null; - return MethodResult.of(true, "Train assembled"); - } - return MethodResult.of(false, "Can't assemble Train"); - } - - /** - * Disassembles a train. - * - * @return Whether it was successful or not with a message. - */ - @LuaFunction - public final MethodResult disassemble() { - if (station.getStation().getPresentTrain() == null) { - return MethodResult.of(false, "there is no Train"); - } - if (station.getStation().getPresentTrain().canDisassemble()) { - Direction direction = station.getAssemblyDirection(); - BlockPos position = station.edgePoint.getGlobalPosition().up(); - this.schedule = station.getStation().getPresentTrain().runtime.getSchedule(); - ServerPlayerEntity player = new ServerPlayerEntity(level.getServer(), level.getServer().getOverworld(), new GameProfile(UUID.fromString("069a79f4-44e9-4726-a5be-fca90e38aaf5"), "Notch")); - station.getStation().getPresentTrain().disassemble(player, direction, position); - return MethodResult.of(true, "Train disassembled"); - } - return MethodResult.of(false, "Can't disassemble Train"); - } - - /** - * Returns the current station name. - * - * @return Name of station. - */ - @LuaFunction - public String getStationName() { - return station.getStation().name; - } - - /** - * Returns the current trains name. - * - * @return Name of train. - */ - @LuaFunction - public String getTrainName() { - return Objects.requireNonNull(station.getStation().getPresentTrain()).name.getString(); - } - - /** - * Sets the stations name - * - * @param name The new name. - * @return Whether it was successful or not. - */ - @LuaFunction - public final boolean setStationName(@NotNull String name) { - GlobalStation station2 = station.getStation(); - GraphLocation graphLocation = station.edgePoint.determineGraphLocation(); - if (station2 != null && graphLocation != null) { - station2.name = name; - Create.RAILWAYS.sync.pointAdded(graphLocation.graph, station2); - Create.RAILWAYS.markTracksDirty(); - station.notifyUpdate(); - return true; - } - //AllPackets.channel.sendToServer(StationEditPacket.configure(station.getBlockPos(),false,name)); - return false; - } - - /** - * Sets the current trains name. - * - * @param name The new name. - * @return Whether it was successful or not with a message. - */ - @LuaFunction - public final MethodResult setTrainName(@NotNull String name) { - if (station.getStation().getPresentTrain() == null) { - return MethodResult.of(false, "There is no train to set the name of"); - } - Train train = station.getStation().getPresentTrain(); - Train Train = Create.RAILWAYS.sided(level).trains.get(train.id); - if (Train == null) { - return MethodResult.of(false, "Train not found"); - } - if (!name.isBlank()) { - Train.name = Text.of(name); - station.tick(); - AllPackets.channel.sendToClientsInServer(new TrainEditReturnPacket(train.id, name, Train.icon.getId()), level.getServer()); - return MethodResult.of(true, "Train name set to " + name); - } - //AllPackets.channel.sendToServer(new TrainEditPacket(train.id, name, train.icon.getId())); - return MethodResult.of(false, "Train name cannot be blank"); - } - - /** - * Gets the number of Bogeys attached to the current train. - * - * @return The number of Bogeys. - */ - @LuaFunction - public int getBogeys() { - if (station.getStation().getPresentTrain() == null) { - return 0; - } - return station.getStation().getPresentTrain().carriages.size(); - } - - /** - * Returns boolean whether a train os present or not. - * - * @return Whether it was successful or not. - */ - @LuaFunction - public boolean getPresentTrain() { - return station.getStation().getPresentTrain() != null; - } - - /** - * Clears the schedule saved in the station. - */ - @LuaFunction - public void clearSchedule() { - this.schedule = null; - } - - @Override - public boolean equals(@Nullable IPeripheral iPeripheral) { - return this == iPeripheral; - } -} \ No newline at end of file diff --git a/fabric/src/main/java/cc/tweaked_programs/cccbridge/peripherals/TweakedPeripheral.java b/fabric/src/main/java/cc/tweaked_programs/cccbridge/peripherals/TweakedPeripheral.java new file mode 100644 index 0000000..258e453 --- /dev/null +++ b/fabric/src/main/java/cc/tweaked_programs/cccbridge/peripherals/TweakedPeripheral.java @@ -0,0 +1,58 @@ +package cc.tweaked_programs.cccbridge.peripherals; + +import dan200.computercraft.api.peripheral.IComputerAccess; +import dan200.computercraft.api.peripheral.IPeripheral; +import net.minecraft.world.level.block.entity.BlockEntity; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import javax.annotation.Nonnull; +import java.util.LinkedList; +import java.util.List; + +/** + * I did not steal the name from Create. I swear! + * No seriously! + */ +abstract class TweakedPeripheral implements IPeripheral { + private final String type; + private final BE blockEntity; + private final List computers = new LinkedList<>(); + + public TweakedPeripheral(String type, @Nullable BE blockEntity) { + this.type = type; + this.blockEntity = blockEntity; + } + + public void sendEvent(@Nonnull String event, @Nullable Object... arguments) { + for (IComputerAccess pc : computers) + pc.queueEvent(event, pc.getAttachmentName(), arguments); + } + + @Override + public void attach(@Nonnull IComputerAccess computer) { + computers.add(computer); + } + + @Override + public void detach(@Nonnull IComputerAccess computer) { + computers.removeIf(p -> (p.getID() == computer.getID())); + } + + @NotNull + @Override + public String getType() { + return type; + } + + @Nullable + @Override + public BE getTarget() { + return blockEntity; + } + + @Override + public boolean equals(@Nullable IPeripheral other) { + return other == this && other.getType().equals(type) && other.getTarget() == this.getTarget(); + } +} diff --git a/fabric/src/main/resources/assets/cccbridge/blockstates/animatronic_block.json b/fabric/src/main/resources/assets/cccbridge/blockstates/animatronic_block.json new file mode 100644 index 0000000..ca39b68 --- /dev/null +++ b/fabric/src/main/resources/assets/cccbridge/blockstates/animatronic_block.json @@ -0,0 +1,5 @@ +{ + "variants": { + "": { "model": "cccbridge:block/animatronic_block" } + } +} \ No newline at end of file diff --git a/fabric/src/main/resources/assets/cccbridge/blockstates/redrouter_block.json b/fabric/src/main/resources/assets/cccbridge/blockstates/redrouter_block.json index 073fb2f..cab483b 100644 --- a/fabric/src/main/resources/assets/cccbridge/blockstates/redrouter_block.json +++ b/fabric/src/main/resources/assets/cccbridge/blockstates/redrouter_block.json @@ -1,76 +1,224 @@ { - "variants": { - "facing=north": [ - { "model": "cccbridge:block/redrouter_face/1", "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/2", "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/3", "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/4", "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/5", "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/6", "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/7", "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/8", "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/9", "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/10", "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/11", "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/12", "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/13", "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/14", "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/15", "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/16", "uvlock": true } - ], - "facing=east": [ - { "model": "cccbridge:block/redrouter_face/1", "y": 90, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/2", "y": 90, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/3", "y": 90, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/4", "y": 90, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/5", "y": 90, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/6", "y": 90, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/7", "y": 90, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/8", "y": 90, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/9", "y": 90, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/10", "y": 90, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/11", "y": 90, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/12", "y": 90, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/13", "y": 90, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/14", "y": 90, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/15", "y": 90, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/16", "y": 90, "uvlock": true } - ], - "facing=south": [ - { "model": "cccbridge:block/redrouter_face/1", "y": 180, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/2", "y": 180, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/3", "y": 180, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/4", "y": 180, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/5", "y": 180, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/6", "y": 180, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/7", "y": 180, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/8", "y": 180, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/9", "y": 180, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/10", "y": 180, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/11", "y": 180, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/12", "y": 180, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/13", "y": 180, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/14", "y": 180, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/15", "y": 180, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/16", "y": 180, "uvlock": true } - ], - "facing=west": [ - { "model": "cccbridge:block/redrouter_face/1", "y": 270, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/2", "y": 270, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/3", "y": 270, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/4", "y": 270, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/5", "y": 270, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/6", "y": 270, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/7", "y": 270, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/8", "y": 270, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/9", "y": 270, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/10", "y": 270, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/11", "y": 270, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/12", "y": 270, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/13", "y": 270, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/14", "y": 270, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/15", "y": 270, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/16", "y": 270, "uvlock": true } - ] - } + "multipart": [ + { "when": { "facing": "north", "face": 0 }, + "apply": { "model": "cccbridge:block/redrouter_face/0", "uvlock": false } + }, + { "when": { "facing": "east", "face": 0 }, + "apply": { "model": "cccbridge:block/redrouter_face/0", "y": 90, "uvlock": false } + }, + { "when": { "facing": "south", "face": 0 }, + "apply": { "model": "cccbridge:block/redrouter_face/0", "y": 180, "uvlock": false } + }, + { "when": { "facing": "west", "face": 0 }, + "apply": { "model": "cccbridge:block/redrouter_face/0", "y": 270, "uvlock": false } + }, + + { "when": { "facing": "north", "face": 1 }, + "apply": { "model": "cccbridge:block/redrouter_face/1", "uvlock": false } + }, + { "when": { "facing": "east", "face": 1 }, + "apply": { "model": "cccbridge:block/redrouter_face/1", "y": 90, "uvlock": false } + }, + { "when": { "facing": "south", "face": 1 }, + "apply": { "model": "cccbridge:block/redrouter_face/1", "y": 180, "uvlock": false } + }, + { "when": { "facing": "west", "face": 1 }, + "apply": { "model": "cccbridge:block/redrouter_face/1", "y": 270, "uvlock": false } + }, + + { "when": { "facing": "north", "face": 2 }, + "apply": { "model": "cccbridge:block/redrouter_face/2", "uvlock": false } + }, + { "when": { "facing": "east", "face": 2 }, + "apply": { "model": "cccbridge:block/redrouter_face/2", "y": 90, "uvlock": false } + }, + { "when": { "facing": "south", "face": 2 }, + "apply": { "model": "cccbridge:block/redrouter_face/2", "y": 180, "uvlock": false } + }, + { "when": { "facing": "west", "face": 2 }, + "apply": { "model": "cccbridge:block/redrouter_face/2", "y": 270, "uvlock": false } + }, + + { "when": { "facing": "north", "face": 3 }, + "apply": { "model": "cccbridge:block/redrouter_face/3", "uvlock": false } + }, + { "when": { "facing": "east", "face": 3 }, + "apply": { "model": "cccbridge:block/redrouter_face/3", "y": 90, "uvlock": false } + }, + { "when": { "facing": "south", "face": 3 }, + "apply": { "model": "cccbridge:block/redrouter_face/3", "y": 180, "uvlock": false } + }, + { "when": { "facing": "west", "face": 3 }, + "apply": { "model": "cccbridge:block/redrouter_face/3", "y": 270, "uvlock": false } + }, + + { "when": { "facing": "north", "face": 4 }, + "apply": { "model": "cccbridge:block/redrouter_face/4", "uvlock": false } + }, + { "when": { "facing": "east", "face": 4 }, + "apply": { "model": "cccbridge:block/redrouter_face/4", "y": 90, "uvlock": false } + }, + { "when": { "facing": "south", "face": 4 }, + "apply": { "model": "cccbridge:block/redrouter_face/4", "y": 180, "uvlock": false } + }, + { "when": { "facing": "west", "face": 4 }, + "apply": { "model": "cccbridge:block/redrouter_face/4", "y": 270, "uvlock": false } + }, + + { "when": { "facing": "north", "face": 5 }, + "apply": { "model": "cccbridge:block/redrouter_face/5", "uvlock": false } + }, + { "when": { "facing": "east", "face": 5 }, + "apply": { "model": "cccbridge:block/redrouter_face/5", "y": 90, "uvlock": false } + }, + { "when": { "facing": "south", "face": 5 }, + "apply": { "model": "cccbridge:block/redrouter_face/5", "y": 180, "uvlock": false } + }, + { "when": { "facing": "west", "face": 5 }, + "apply": { "model": "cccbridge:block/redrouter_face/5", "y": 270, "uvlock": false } + }, + + { "when": { "facing": "north", "face": 6 }, + "apply": { "model": "cccbridge:block/redrouter_face/6", "uvlock": false } + }, + { "when": { "facing": "east", "face": 6 }, + "apply": { "model": "cccbridge:block/redrouter_face/6", "y": 90, "uvlock": false } + }, + { "when": { "facing": "south", "face": 6 }, + "apply": { "model": "cccbridge:block/redrouter_face/6", "y": 180, "uvlock": false } + }, + { "when": { "facing": "west", "face": 6 }, + "apply": { "model": "cccbridge:block/redrouter_face/6", "y": 270, "uvlock": false } + }, + + { "when": { "facing": "north", "face": 7 }, + "apply": { "model": "cccbridge:block/redrouter_face/7", "uvlock": false } + }, + { "when": { "facing": "east", "face": 7 }, + "apply": { "model": "cccbridge:block/redrouter_face/7", "y": 90, "uvlock": false } + }, + { "when": { "facing": "south", "face": 7 }, + "apply": { "model": "cccbridge:block/redrouter_face/7", "y": 180, "uvlock": false } + }, + { "when": { "facing": "west", "face": 7 }, + "apply": { "model": "cccbridge:block/redrouter_face/7", "y": 270, "uvlock": false } + }, + + { "when": { "facing": "north", "face": 8 }, + "apply": { "model": "cccbridge:block/redrouter_face/8", "uvlock": false } + }, + { "when": { "facing": "east", "face": 8 }, + "apply": { "model": "cccbridge:block/redrouter_face/8", "y": 90, "uvlock": false } + }, + { "when": { "facing": "south", "face": 8 }, + "apply": { "model": "cccbridge:block/redrouter_face/8", "y": 180, "uvlock": false } + }, + { "when": { "facing": "west", "face": 8 }, + "apply": { "model": "cccbridge:block/redrouter_face/8", "y": 270, "uvlock": false } + }, + + { "when": { "facing": "north", "face": 9 }, + "apply": { "model": "cccbridge:block/redrouter_face/9", "uvlock": false } + }, + { "when": { "facing": "east", "face": 9 }, + "apply": { "model": "cccbridge:block/redrouter_face/9", "y": 90, "uvlock": false } + }, + { "when": { "facing": "south", "face": 9 }, + "apply": { "model": "cccbridge:block/redrouter_face/9", "y": 180, "uvlock": false } + }, + { "when": { "facing": "west", "face": 9 }, + "apply": { "model": "cccbridge:block/redrouter_face/9", "y": 270, "uvlock": false } + }, + + { "when": { "facing": "north", "face": 10 }, + "apply": { "model": "cccbridge:block/redrouter_face/10", "uvlock": false } + }, + { "when": { "facing": "east", "face": 10 }, + "apply": { "model": "cccbridge:block/redrouter_face/10", "y": 90, "uvlock": false } + }, + { "when": { "facing": "south", "face": 10 }, + "apply": { "model": "cccbridge:block/redrouter_face/10", "y": 180, "uvlock": false } + }, + { "when": { "facing": "west", "face": 10 }, + "apply": { "model": "cccbridge:block/redrouter_face/10", "y": 270, "uvlock": false } + }, + + { "when": { "facing": "north", "face": 11 }, + "apply": { "model": "cccbridge:block/redrouter_face/11", "uvlock": false } + }, + { "when": { "facing": "east", "face": 11 }, + "apply": { "model": "cccbridge:block/redrouter_face/11", "y": 90, "uvlock": false } + }, + { "when": { "facing": "south", "face": 11 }, + "apply": { "model": "cccbridge:block/redrouter_face/11", "y": 180, "uvlock": false } + }, + { "when": { "facing": "west", "face": 11 }, + "apply": { "model": "cccbridge:block/redrouter_face/11", "y": 270, "uvlock": false } + }, + + { "when": { "facing": "north", "face": 12 }, + "apply": { "model": "cccbridge:block/redrouter_face/12", "uvlock": false } + }, + { "when": { "facing": "east", "face": 12 }, + "apply": { "model": "cccbridge:block/redrouter_face/12", "y": 90, "uvlock": false } + }, + { "when": { "facing": "south", "face": 12 }, + "apply": { "model": "cccbridge:block/redrouter_face/12", "y": 180, "uvlock": false } + }, + { "when": { "facing": "west", "face": 12 }, + "apply": { "model": "cccbridge:block/redrouter_face/12", "y": 270, "uvlock": false } + }, + + { "when": { "facing": "north", "face": 13 }, + "apply": { "model": "cccbridge:block/redrouter_face/13", "uvlock": false } + }, + { "when": { "facing": "east", "face": 13 }, + "apply": { "model": "cccbridge:block/redrouter_face/13", "y": 90, "uvlock": false } + }, + { "when": { "facing": "south", "face": 13 }, + "apply": { "model": "cccbridge:block/redrouter_face/13", "y": 180, "uvlock": false } + }, + { "when": { "facing": "west", "face": 13 }, + "apply": { "model": "cccbridge:block/redrouter_face/13", "y": 270, "uvlock": false } + }, + + { "when": { "facing": "north", "face": 14 }, + "apply": { "model": "cccbridge:block/redrouter_face/14", "uvlock": false } + }, + { "when": { "facing": "east", "face": 14 }, + "apply": { "model": "cccbridge:block/redrouter_face/14", "y": 90, "uvlock": false } + }, + { "when": { "facing": "south", "face": 14 }, + "apply": { "model": "cccbridge:block/redrouter_face/14", "y": 180, "uvlock": false } + }, + { "when": { "facing": "west", "face": 14 }, + "apply": { "model": "cccbridge:block/redrouter_face/14", "y": 270, "uvlock": false } + }, + + { "when": { "facing": "north", "face": 15 }, + "apply": { "model": "cccbridge:block/redrouter_face/15", "uvlock": false } + }, + { "when": { "facing": "east", "face": 15 }, + "apply": { "model": "cccbridge:block/redrouter_face/15", "y": 90, "uvlock": false } + }, + { "when": { "facing": "south", "face": 15 }, + "apply": { "model": "cccbridge:block/redrouter_face/15", "y": 180, "uvlock": false } + }, + { "when": { "facing": "west", "face": 15 }, + "apply": { "model": "cccbridge:block/redrouter_face/15", "y": 270, "uvlock": false } + }, + + { "when": { "facing": "north", "face": 16 }, + "apply": { "model": "cccbridge:block/redrouter_face/16", "uvlock": false } + }, + { "when": { "facing": "east", "face": 16 }, + "apply": { "model": "cccbridge:block/redrouter_face/16", "y": 90, "uvlock": false } + }, + { "when": { "facing": "south", "face": 16 }, + "apply": { "model": "cccbridge:block/redrouter_face/16", "y": 180, "uvlock": false } + }, + { "when": { "facing": "west", "face": 16 }, + "apply": { "model": "cccbridge:block/redrouter_face/16", "y": 270, "uvlock": false } + } + ] } \ No newline at end of file diff --git a/fabric/src/main/resources/assets/cccbridge/blockstates/scroller_block.json b/fabric/src/main/resources/assets/cccbridge/blockstates/scroller_block.json index 7d729fa..ea82087 100644 --- a/fabric/src/main/resources/assets/cccbridge/blockstates/scroller_block.json +++ b/fabric/src/main/resources/assets/cccbridge/blockstates/scroller_block.json @@ -1,41 +1,41 @@ { "multipart": [ { "when": { "facing": "north", "locked": "false" }, - "apply": { "model": "cccbridge:block/scroller_block", "uvlock": true } + "apply": { "model": "cccbridge:block/scroller_block", "uvlock": false } }, { "when": { "facing": "east", "locked": "false" }, - "apply": { "model": "cccbridge:block/scroller_block", "y": 90, "uvlock": true } + "apply": { "model": "cccbridge:block/scroller_block", "y": 90, "uvlock": false } }, { "when": { "facing": "south", "locked": "false" }, - "apply": { "model": "cccbridge:block/scroller_block", "y": 180, "uvlock": true } + "apply": { "model": "cccbridge:block/scroller_block", "y": 180, "uvlock": false } }, { "when": { "facing": "west", "locked": "false" }, - "apply": { "model": "cccbridge:block/scroller_block", "y": 270, "uvlock": true } + "apply": { "model": "cccbridge:block/scroller_block", "y": 270, "uvlock": false } }, { "when": { "facing": "up", "locked": "false" }, - "apply": { "model": "cccbridge:block/scroller_block", "x": -90, "uvlock": true } + "apply": { "model": "cccbridge:block/scroller_block", "x": -90, "y": 180, "uvlock": false } }, { "when": { "facing": "down", "locked": "false" }, - "apply": { "model": "cccbridge:block/scroller_block", "x": 90, "uvlock": true } + "apply": { "model": "cccbridge:block/scroller_block", "x": 90, "y": 180, "uvlock": false } }, { "when": { "facing": "north", "locked": "true" }, - "apply": { "model": "cccbridge:block/locked_scroller_block", "uvlock": true } + "apply": { "model": "cccbridge:block/locked_scroller_block", "uvlock": false } }, { "when": { "facing": "east", "locked": "true" }, - "apply": { "model": "cccbridge:block/locked_scroller_block", "y": 90, "uvlock": true } + "apply": { "model": "cccbridge:block/locked_scroller_block", "y": 90, "uvlock": false } }, { "when": { "facing": "south", "locked": "true" }, - "apply": { "model": "cccbridge:block/locked_scroller_block", "y": 180, "uvlock": true } + "apply": { "model": "cccbridge:block/locked_scroller_block", "y": 180, "uvlock": false } }, { "when": { "facing": "west", "locked": "true" }, - "apply": { "model": "cccbridge:block/locked_scroller_block", "y": 270, "uvlock": true } + "apply": { "model": "cccbridge:block/locked_scroller_block", "y": 270, "uvlock": false } }, { "when": { "facing": "up", "locked": "true" }, - "apply": { "model": "cccbridge:block/locked_scroller_block", "x": -90, "uvlock": true } + "apply": { "model": "cccbridge:block/locked_scroller_block", "x": -90, "uvlock": false } }, { "when": { "facing": "down", "locked": "true" }, - "apply": { "model": "cccbridge:block/locked_scroller_block", "x": 90, "uvlock": true } + "apply": { "model": "cccbridge:block/locked_scroller_block", "x": 90, "uvlock": false } } ] } \ No newline at end of file diff --git a/fabric/src/main/resources/assets/cccbridge/icon.png b/fabric/src/main/resources/assets/cccbridge/icon.png deleted file mode 100644 index 94d4e3ea0317e44339b8596bfde5f6ca629cc2b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5722 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 M07*qoM6N<$f@!eVHvj+t diff --git a/fabric/src/main/resources/assets/cccbridge/iconHD.png b/fabric/src/main/resources/assets/cccbridge/iconHD.png deleted file mode 100644 index ef649784d4dc194dc2ed180b6574ad7ead16f094..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86976 zcmZ6zbySp5*Ec+rgwiDqA~BRmNDVNAbPO;C=lnV5*42m}HVtEwpKfcP}mRfZqvSRg649Ad)Y)KUj_LUj7AvZjh>q za&RBBtvSM+hc=m9*IWgy4SEA~{I zDd5(PZ2X;#-eeyaK0m0@_}nOxP&p1>UJf(VVo30d%NKufxn{`e?53JcwO^pc@lvpM5tHQ}&V~WIc=z?gp>GNMGWN0PqiZ0{dY48Lm z>{)|Ac6d7YiB&6eIthPP-Lnk3@XgQyb2PeDB3QOqX^V%6_%~I9n zVc*$Pk9k|utS6m6<}R(#N(s5uP`clJAP|g&tQZ8cveSZX3Wkg!de_2x`;@|p?RdlZ zmzM&U-!Bjtlitr)CaVL1F!*vrAl4!xOVy+e|KV7V_{BqZx#Gv=bB4wEw76|t)Kx_vWiDrzIe�z7TN-S(jq%8 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 LvSf|;yWsx^R~%f? diff --git a/fabric/src/main/resources/assets/cccbridge/lang/en_us.json b/fabric/src/main/resources/assets/cccbridge/lang/en_us.json index 33508b9..945fc94 100644 --- a/fabric/src/main/resources/assets/cccbridge/lang/en_us.json +++ b/fabric/src/main/resources/assets/cccbridge/lang/en_us.json @@ -3,10 +3,13 @@ "block.cccbridge.target_block": "Target Block", "block.cccbridge.redrouter_block": "RedRouter Block", "block.cccbridge.scroller_block": "Scroller Pane", + "block.cccbridge.animatronic_block": "Animatronic", "cccbridge.display_source.source_block_display_source": "Given data from computer", - "cccbridge.general.unit.scroller": "Small Lua Number", + "cccbridge.general.unit.scroller": "Lua Number", + "cccbridge.general.unit.scroller.positive": "Lua Num. +", + "cccbridge.general.unit.scroller.negative": "Lua Num. -", "subtitles.cccbridge.cage_lock": "Scroller locked", "subtitles.cccbridge.cage_unlock": "Scroller unlocked" diff --git a/fabric/src/main/resources/assets/cccbridge/models/block/animatronic_block.json b/fabric/src/main/resources/assets/cccbridge/models/block/animatronic_block.json new file mode 100644 index 0000000..a1388d0 --- /dev/null +++ b/fabric/src/main/resources/assets/cccbridge/models/block/animatronic_block.json @@ -0,0 +1,83 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [32, 32], + "textures": { + "0": "cccbridge:block/animatronic_block", + "particle": "cccbridge:block/animatronic_block" + }, + "elements": [ + { + "name": "base", + "from": [7.5, 2, 7.5], + "to": [8.5, 16, 8.5], + "faces": { + "north": {"uv": [6, 4, 6.5, 11], "texture": "#0"}, + "east": {"uv": [6.5, 4, 7, 11], "texture": "#0"}, + "south": {"uv": [7, 4, 7.5, 11], "texture": "#0"}, + "west": {"uv": [7.5, 4, 8, 11], "texture": "#0"}, + "up": {"uv": [8.5, 4.5, 8, 4], "texture": "#0"}, + "down": {"uv": [8.5, 4.5, 8, 5], "texture": "#0"} + } + }, + { + "name": "stick", + "from": [2, 0, 2], + "to": [14, 2, 14], + "faces": { + "north": {"uv": [6, 0, 12, 1], "texture": "#0"}, + "east": {"uv": [6, 1, 12, 2], "texture": "#0"}, + "south": {"uv": [6, 2, 12, 3], "texture": "#0"}, + "west": {"uv": [6, 3, 12, 4], "texture": "#0"}, + "up": {"uv": [6, 6, 0, 0], "texture": "#0"}, + "down": {"uv": [6, 6, 0, 12], "texture": "#0"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [69, 0, 0], + "translation": [0, 0.75, 1.25], + "scale": [0.3, 0.3, 0.3] + }, + "thirdperson_lefthand": { + "rotation": [69, 0, 0], + "translation": [0, 0.75, 1.25], + "scale": [0.3, 0.3, 0.3] + }, + "firstperson_righthand": { + "rotation": [0, -180, 0], + "translation": [1, 1, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 89, 0], + "translation": [1, 1, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 4, 0], + "scale": [0.3, 0.3, 0.3] + }, + "gui": { + "rotation": [-175.21, -45.54, 179.37], + "translation": [0, -2, 0], + "scale": [0.6, 0.6, 0.6] + }, + "head": { + "rotation": [-150, 70, -3], + "translation": [-2.5, 8, 5.75] + }, + "fixed": { + "translation": [0, -3, 0], + "scale": [0.6, 0.6, 0.6] + } + }, + "groups": [ + { + "name": "VoxelShapes", + "origin": [0, 0, 0], + "color": 0, + "children": [0, 1] + } + ] +} \ No newline at end of file diff --git a/fabric/src/main/resources/assets/cccbridge/models/block/base.json b/fabric/src/main/resources/assets/cccbridge/models/block/base.json deleted file mode 100644 index b970fb2..0000000 --- a/fabric/src/main/resources/assets/cccbridge/models/block/base.json +++ /dev/null @@ -1,190 +0,0 @@ -{ - "credit": "By Sammy.K via Blockbench", - "parent": "block/block", - "textures": { - "0": "cccbridge:block/st_block_top", - "particle": "cccbridge:block/st_block_top" - }, - "elements": [ - { - "name": "body", - "from": [1, 1, 1], - "to": [15, 15, 15], - "faces": { - "north": {"uv": [1, 1, 15, 15], "texture": "#0", "cullface": "north"}, - "east": {"uv": [1, 1, 15, 15], "texture": "#0", "cullface": "east"}, - "south": {"uv": [1, 1, 15, 15], "texture": "#0", "cullface": "south"}, - "west": {"uv": [1, 1, 15, 15], "texture": "#0", "cullface": "west"}, - "up": {"uv": [1, 1, 15, 15], "texture": "#0"}, - "down": {"uv": [1, 1, 15, 15], "texture": "#0"} - } - }, - { - "name": "vertical-ne", - "from": [15, 0, 0], - "to": [16, 16, 1], - "faces": { - "north": {"uv": [0, 0, 1, 16], "texture": "#0"}, - "east": {"uv": [15, 0, 16, 16], "texture": "#0"}, - "south": {"uv": [15, 0, 16, 16], "texture": "#0"}, - "west": {"uv": [0, 0, 1, 16], "texture": "#0"}, - "up": {"uv": [15, 0, 16, 1], "texture": "#0"}, - "down": {"uv": [0, 0, 1, 1], "texture": "#0"} - } - }, - { - "name": "vertical-es", - "from": [15, 0, 15], - "to": [16, 16, 16], - "faces": { - "north": {"uv": [0, 0, 1, 16], "texture": "#0"}, - "east": {"uv": [0, 0, 1, 16], "texture": "#0"}, - "south": {"uv": [15, 0, 16, 16], "texture": "#0"}, - "west": {"uv": [15, 0, 16, 16], "texture": "#0"}, - "up": {"uv": [15, 15, 16, 16], "texture": "#0"}, - "down": {"uv": [0, 15, 1, 16], "texture": "#0"} - } - }, - { - "name": "vertical-sw", - "from": [0, 0, 15], - "to": [1, 16, 16], - "faces": { - "north": {"uv": [15, 0, 16, 16], "texture": "#0"}, - "east": {"uv": [0, 0, 1, 16], "texture": "#0"}, - "south": {"uv": [0, 0, 1, 16], "texture": "#0"}, - "west": {"uv": [15, 0, 16, 16], "texture": "#0"}, - "up": {"uv": [0, 15, 1, 16], "texture": "#0"}, - "down": {"uv": [15, 15, 16, 16], "texture": "#0"} - } - }, - { - "name": "vertical-wn", - "from": [0, 0, 0], - "to": [1, 16, 1], - "faces": { - "north": {"uv": [15, 0, 16, 16], "texture": "#0"}, - "east": {"uv": [15, 0, 16, 16], "texture": "#0"}, - "south": {"uv": [0, 0, 1, 16], "texture": "#0"}, - "west": {"uv": [0, 0, 1, 16], "texture": "#0"}, - "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, - "down": {"uv": [15, 0, 16, 1], "texture": "#0"} - } - }, - { - "name": "side-upper-n", - "from": [1, 15, 0], - "to": [15, 16, 1], - "faces": { - "north": {"uv": [1, 0, 15, 1], "texture": "#0"}, - "east": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "south": {"uv": [1, 0, 15, 1], "texture": "#0"}, - "west": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "up": {"uv": [1, 0, 15, 1], "texture": "#0"}, - "down": {"uv": [1, 0, 15, 1], "rotation": 180, "texture": "#0"} - } - }, - { - "name": "side-upper-s", - "from": [1, 15, 15], - "to": [15, 16, 16], - "faces": { - "north": {"uv": [1, 15, 15, 16], "rotation": 180, "texture": "#0"}, - "east": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "south": {"uv": [1, 0, 15, 1], "texture": "#0"}, - "west": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "up": {"uv": [1, 15, 15, 16], "texture": "#0"}, - "down": {"uv": [1, 0, 15, 1], "texture": "#0"} - } - }, - { - "name": "side-upper-w", - "from": [0, 15, 1], - "to": [1, 16, 15], - "faces": { - "north": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "east": {"uv": [0, 1, 1, 15], "rotation": 90, "texture": "#0"}, - "south": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "west": {"uv": [1, 0, 15, 1], "texture": "#0"}, - "up": {"uv": [0, 1, 1, 15], "texture": "#0"}, - "down": {"uv": [1, 0, 15, 1], "rotation": 270, "texture": "#0"} - } - }, - { - "name": "side-upper-e", - "from": [15, 15, 1], - "to": [16, 16, 15], - "faces": { - "north": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "east": {"uv": [1, 0, 15, 1], "texture": "#0"}, - "south": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "west": {"uv": [15, 1, 16, 15], "rotation": 270, "texture": "#0"}, - "up": {"uv": [15, 1, 16, 15], "texture": "#0"}, - "down": {"uv": [1, 0, 15, 1], "rotation": 90, "texture": "#0"} - } - }, - { - "name": "side-lower-w", - "from": [0, 0, 1], - "to": [1, 1, 15], - "faces": { - "north": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "east": {"uv": [15, 1, 16, 15], "rotation": 270, "texture": "#0"}, - "south": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "west": {"uv": [1, 15, 15, 16], "texture": "#0"}, - "up": {"uv": [1, 15, 15, 16], "rotation": 90, "texture": "#0"}, - "down": {"uv": [15, 1, 16, 15], "texture": "#0"} - } - }, - { - "name": "side-lower-s", - "from": [1, 0, 15], - "to": [15, 1, 16], - "faces": { - "north": {"uv": [1, 15, 15, 16], "texture": "#0"}, - "east": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "south": {"uv": [1, 15, 15, 16], "texture": "#0"}, - "west": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "up": {"uv": [1, 15, 15, 16], "texture": "#0"}, - "down": {"uv": [1, 15, 15, 16], "texture": "#0"} - } - }, - { - "name": "side-lower-e", - "from": [15, 0, 1], - "to": [16, 1, 15], - "faces": { - "north": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "east": {"uv": [1, 15, 15, 16], "texture": "#0"}, - "south": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "west": {"uv": [0, 1, 1, 15], "rotation": 90, "texture": "#0"}, - "up": {"uv": [1, 15, 15, 16], "rotation": 270, "texture": "#0"}, - "down": {"uv": [0, 1, 1, 15], "texture": "#0"} - } - }, - { - "name": "side-lower-n", - "from": [1, 0, 0], - "to": [15, 1, 1], - "faces": { - "north": {"uv": [1, 15, 15, 16], "texture": "#0"}, - "east": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "south": {"uv": [1, 15, 15, 16], "texture": "#0"}, - "west": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "up": {"uv": [1, 15, 15, 16], "rotation": 180, "texture": "#0"}, - "down": {"uv": [1, 0, 15, 1], "texture": "#0"} - } - } - ], - "groups": [ - 0, - { - "name": "frame", - "origin": [0, 0, 0], - "color": 0, - "nbt": "{}", - "armAnimationEnabled": false, - "children": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] - } - ] -} \ No newline at end of file diff --git a/fabric/src/main/resources/assets/cccbridge/models/block/locked_scroller_block.json b/fabric/src/main/resources/assets/cccbridge/models/block/locked_scroller_block.json index 1d0f7fb..cc4bb2c 100644 --- a/fabric/src/main/resources/assets/cccbridge/models/block/locked_scroller_block.json +++ b/fabric/src/main/resources/assets/cccbridge/models/block/locked_scroller_block.json @@ -1,6 +1,7 @@ { "credit": "By Sammy.K via Blockbench", "parent": "block/block", + "render_type": "cutout", "textures": { "0": "cccbridge:block/scroller/scroller_side", "1": "cccbridge:block/scroller/scroller_front", @@ -10,16 +11,35 @@ }, "elements": [ { - "name": "body", - "from": [0, 0, 15], - "to": [16, 16, 16], + "name": "cage", + "from": [4, 4, 15], + "to": [12, 12, 16], "faces": { - "north": {"uv": [0, 0, 16, 16], "texture": "#1", "cullface": "north"}, - "east": {"uv": [15, 0, 16, 16], "texture": "#0", "cullface": "east"}, - "south": {"uv": [0, 0, 16, 16], "texture": "#0", "cullface": "south"}, - "west": {"uv": [0, 0, 1, 16], "texture": "#0", "cullface": "west"}, - "up": {"uv": [0, 0, 16, 1], "texture": "#0"}, - "down": {"uv": [0, 15, 16, 16], "texture": "#0"} + "north": {"uv": [3, 3, 13, 13], "texture": "#3"}, + "east": {"uv": [3, 3, 4, 13], "texture": "#3"}, + "west": {"uv": [12, 3, 13, 13], "texture": "#3"}, + "up": {"uv": [3, 3, 13, 4], "texture": "#3"}, + "down": {"uv": [3, 12, 13, 13], "texture": "#3"} + } + }, + { + "name": "interface", + "from": [3, 3, 15.95], + "to": [13, 13, 16], + "faces": { + "north": {"uv": [3, 3, 13, 13], "texture": "#2"}, + "south": {"uv": [3, 3, 13, 13], "texture": "#0"} + } + }, + { + "name": "side-upper-n", + "from": [1, 15, 14], + "to": [15, 16, 15], + "faces": { + "north": {"uv": [1, 0, 15, 1], "texture": "#1"}, + "south": {"uv": [0, 0, 0, 0], "texture": "#1"}, + "up": {"uv": [15, 0, 1, 1], "texture": "#1"}, + "down": {"uv": [1, 0, 15, 1], "rotation": 180, "texture": "#1"} } }, { @@ -27,11 +47,12 @@ "from": [15, 0, 14], "to": [16, 16, 15], "faces": { - "north": {"uv": [0, 0, 1, 16], "texture": "#0"}, - "east": {"uv": [15, 0, 16, 16], "texture": "#0"}, - "west": {"uv": [0, 0, 1, 16], "texture": "#0"}, - "up": {"uv": [15, 0, 16, 1], "texture": "#0"}, - "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + "north": {"uv": [0, 0, 1, 16], "texture": "#1"}, + "east": {"uv": [0, 0, 1, 16], "texture": "#1"}, + "south": {"uv": [0, 0, 0, 0], "texture": "#1"}, + "west": {"uv": [0, 0, 1, 16], "texture": "#1"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#1"}, + "down": {"uv": [0, 15, 1, 16], "texture": "#1"} } }, { @@ -39,59 +60,71 @@ "from": [0, 0, 14], "to": [1, 16, 15], "faces": { - "north": {"uv": [15, 0, 16, 16], "texture": "#0"}, - "east": {"uv": [15, 0, 16, 16], "texture": "#0"}, - "west": {"uv": [0, 0, 1, 16], "texture": "#0"}, - "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, - "down": {"uv": [15, 0, 16, 1], "texture": "#0"} + "north": {"uv": [15, 0, 16, 16], "texture": "#1"}, + "east": {"uv": [15, 0, 16, 16], "texture": "#1"}, + "south": {"uv": [0, 0, 0, 0], "texture": "#1"}, + "west": {"uv": [15, 0, 16, 16], "texture": "#1"}, + "up": {"uv": [15, 0, 16, 1], "texture": "#1"}, + "down": {"uv": [15, 15, 16, 16], "texture": "#1"} } }, { - "name": "side-upper-n", - "from": [1, 15, 14], - "to": [15, 16, 15], + "name": "side-lower-n", + "from": [1, 0, 14], + "to": [15, 1, 15], "faces": { - "north": {"uv": [1, 0, 15, 1], "texture": "#0"}, - "east": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "west": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "up": {"uv": [1, 0, 15, 1], "texture": "#0"}, - "down": {"uv": [1, 0, 15, 1], "rotation": 180, "texture": "#0"} + "north": {"uv": [1, 15, 15, 16], "texture": "#1"}, + "south": {"uv": [0, 0, 0, 0], "texture": "#1"}, + "up": {"uv": [1, 15, 15, 16], "rotation": 180, "texture": "#1"}, + "down": {"uv": [15, 15, 1, 16], "texture": "#1"} } }, { - "name": "side-lower-n", - "from": [1, 0, 14], - "to": [15, 1, 15], + "name": "top", + "from": [0, 13, 15], + "to": [16, 16, 16], "faces": { - "north": {"uv": [1, 15, 15, 16], "texture": "#0"}, - "east": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "west": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "up": {"uv": [1, 15, 15, 16], "rotation": 180, "texture": "#0"}, - "down": {"uv": [1, 0, 15, 1], "texture": "#0"} + "north": {"uv": [0, 0, 16, 3], "texture": "#0"}, + "east": {"uv": [15, 0, 16, 3], "texture": "#0"}, + "south": {"uv": [0, 0, 16, 3], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "up": {"uv": [0, 0, 16, 1], "texture": "#0"}, + "down": {"uv": [0, 2, 16, 3], "texture": "#0"} } }, { - "name": "interface", - "from": [3, 3, 15.9], - "to": [13, 13, 14.91], + "name": "east", + "from": [13, 3, 15], + "to": [16, 13, 16], "faces": { - "north": {"uv": [3, 3, 13, 13], "texture": "#2"}, - "east": {"uv": [3, 3, 2, 13], "texture": "#2"}, - "west": {"uv": [13, 3, 14, 13], "texture": "#2"}, - "up": {"uv": [3, 2, 13, 3], "rotation": 180, "texture": "#2"}, - "down": {"uv": [3, 13, 13, 14], "texture": "#2"} + "north": {"uv": [0, 3, 3, 13], "texture": "#0"}, + "east": {"uv": [15, 3, 16, 13], "texture": "#0"}, + "south": {"uv": [13, 3, 16, 13], "texture": "#0"}, + "west": {"uv": [2, 3, 3, 13], "texture": "#0"} } }, { - "name": "cage", - "from": [4, 4, 15], - "to": [12, 12, 16], + "name": "bottom", + "from": [0, 0, 15], + "to": [16, 3, 16], "faces": { - "north": {"uv": [3, 3, 13, 13], "texture": "#3"}, - "east": {"uv": [3, 3, 4, 13], "texture": "#3"}, - "west": {"uv": [12, 3, 13, 13], "texture": "#3"}, - "up": {"uv": [3, 3, 13, 4], "texture": "#3"}, - "down": {"uv": [3, 12, 13, 13], "texture": "#3"} + "north": {"uv": [0, 13, 16, 16], "texture": "#0"}, + "east": {"uv": [15, 13, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 13, 16, 16], "texture": "#0"}, + "west": {"uv": [0, 13, 1, 16], "texture": "#0"}, + "up": {"uv": [0, 13, 16, 14], "texture": "#0"}, + "down": {"uv": [0, 15, 16, 16], "texture": "#0"} + } + }, + { + "name": "west", + "from": [0, 3, 15], + "to": [3, 13, 16], + "faces": { + "north": {"uv": [13, 3, 16, 13], "texture": "#0"}, + "east": {"uv": [13, 3, 14, 13], "texture": "#0"}, + "south": {"uv": [0, 3, 3, 13], "texture": "#0"}, + "west": {"uv": [0, 3, 1, 13], "texture": "#0"} } } ], @@ -108,13 +141,13 @@ }, "firstperson_righthand": { "rotation": [-13, 155, 0], - "translation": [-3, 2.5, 5.75], - "scale": [0.4, 0.4, 0.4] + "translation": [-3.75, 2.5, 5.75], + "scale": [0.3, 0.3, 0.3] }, "firstperson_lefthand": { "rotation": [-13, 155, 0], - "translation": [-3, 2.5, 5.75], - "scale": [0.4, 0.4, 0.4] + "translation": [-3.25, 2.5, 5.75], + "scale": [0.3, 0.3, 0.3] }, "ground": { "rotation": [90, 0, 0], @@ -136,15 +169,18 @@ }, "groups": [ 0, + 1, { "name": "frame", "origin": [0, 0, 0], "color": 0, - "nbt": "{}", - "armAnimationEnabled": false, - "children": [1, 2, 3, 4] + "children": [2, 3, 4, 5] }, - 5, - 6 + { + "name": "base", + "origin": [0, 0, 0], + "color": 0, + "children": [6, 7, 8, 9] + } ] } \ No newline at end of file diff --git a/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_block.json b/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_block.json index 34f3fd1..bf43356 100644 --- a/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_block.json +++ b/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_block.json @@ -1,99 +1,20 @@ { "credit": "By Sammy.K via Blockbench", - "parent": "cccbridge:block/base", + "render_type": "cutout", "textures": { - "2": "cccbridge:block/redrouter/background", "3": "cccbridge:block/redrouter/redrouter_side", "4": "cccbridge:block/redrouter/redrouter_top", "5": "cccbridge:block/redrouter/redrouter_front", - "6": "cccbridge:block/redrouter/connector", - "particle": "cccbridge:block/redrouter/background", - "face": "cccbridge:block/redrouter/face/1" + "6": "cccbridge:block/redrouter/background", + "particle": "cccbridge:block/redrouter/background" }, "elements": [ - { - "name": "background", - "from": [2, 2, 2], - "to": [14, 14, 2], - "faces": { - "north": {"uv": [2, 2, 14, 14], "texture": "#2"} - } - }, - { - "name": "face", - "from": [0, 0, 1.9], - "to": [16, 16, 1.9], - "faces": { - "north": {"uv": [0, 0, 16, 16], "texture": "#face"} - } - }, - { - "name": "east", - "from": [15, 5, 5], - "to": [14.5, 11, 11], - "faces": { - "north": {"uv": [11, 5, 12, 11], "texture": "#6"}, - "east": {"uv": [5, 5, 11, 11], "texture": "#6"}, - "south": {"uv": [4, 5, 5, 11], "texture": "#6"}, - "up": {"uv": [5, 4, 11, 5], "rotation": 270, "texture": "#6"}, - "down": {"uv": [5, 11, 11, 12], "rotation": 90, "texture": "#6"} - } - }, - { - "name": "west", - "from": [1.5, 5, 5], - "to": [1, 11, 11], - "faces": { - "north": {"uv": [4, 5, 5, 11], "texture": "#6"}, - "south": {"uv": [11, 5, 12, 11], "texture": "#6"}, - "west": {"uv": [5, 5, 11, 11], "texture": "#6"}, - "up": {"uv": [5, 4, 11, 5], "rotation": 90, "texture": "#6"}, - "down": {"uv": [5, 11, 11, 12], "rotation": 270, "texture": "#6"} - } - }, - { - "name": "south", - "from": [5, 5, 15], - "to": [11, 11, 14.5], - "rotation": {"angle": 0, "axis": "y", "origin": [15, 8, 20]}, - "faces": { - "east": {"uv": [11, 5, 12, 11], "texture": "#6"}, - "south": {"uv": [5, 5, 11, 11], "texture": "#6"}, - "west": {"uv": [4, 5, 5, 11], "texture": "#6"}, - "up": {"uv": [5, 4, 11, 5], "texture": "#6"}, - "down": {"uv": [5, 11, 11, 12], "texture": "#6"} - } - }, - { - "name": "upper", - "from": [5, 15, 5], - "to": [11, 14.5, 11], - "faces": { - "north": {"uv": [5, 4, 11, 5], "rotation": 180, "texture": "#6"}, - "east": {"uv": [11, 5, 12, 11], "rotation": 90, "texture": "#6"}, - "south": {"uv": [5, 11, 11, 12], "texture": "#6"}, - "west": {"uv": [4, 5, 5, 11], "rotation": 270, "texture": "#6"}, - "up": {"uv": [5, 5, 11, 11], "texture": "#6"} - } - }, - { - "name": "lower", - "from": [5, 1.5, 5], - "to": [11, 1, 11], - "faces": { - "north": {"uv": [5, 11, 11, 12], "rotation": 180, "texture": "#6"}, - "east": {"uv": [11, 5, 12, 11], "rotation": 270, "texture": "#6"}, - "south": {"uv": [5, 4, 11, 5], "texture": "#6"}, - "west": {"uv": [4, 5, 5, 11], "rotation": 90, "texture": "#6"}, - "down": {"uv": [5, 5, 11, 11], "texture": "#6"} - } - }, { "name": "left", "from": [2, 4, 1], "to": [2, 12, 2], "faces": { - "east": {"uv": [14, 4, 15, 12], "texture": "#2"} + "east": {"uv": [14, 4, 15, 12], "texture": "#6"} } }, { @@ -101,7 +22,7 @@ "from": [14, 4, 1], "to": [14, 12, 2], "faces": { - "west": {"uv": [1, 4, 2, 12], "texture": "#2"} + "west": {"uv": [1, 4, 2, 12], "texture": "#6"} } }, { @@ -109,7 +30,7 @@ "from": [4, 2, 1], "to": [12, 2, 2], "faces": { - "up": {"uv": [4, 14, 12, 15], "texture": "#2"} + "up": {"uv": [4, 14, 12, 15], "texture": "#6"} } }, { @@ -117,7 +38,7 @@ "from": [4, 14, 1], "to": [12, 14, 2], "faces": { - "down": {"uv": [4, 1, 12, 2], "texture": "#2"} + "down": {"uv": [4, 1, 12, 2], "texture": "#6"} } }, { @@ -125,8 +46,8 @@ "from": [3, 13, 1], "to": [4, 14, 2], "faces": { - "east": {"uv": [12, 2, 13, 3], "texture": "#2"}, - "down": {"uv": [12, 2, 13, 3], "texture": "#2"} + "east": {"uv": [12, 2, 13, 3], "texture": "#6"}, + "down": {"uv": [12, 2, 13, 3], "texture": "#6"} } }, { @@ -134,8 +55,8 @@ "from": [12, 13, 1], "to": [13, 14, 2], "faces": { - "west": {"uv": [3, 2, 4, 3], "texture": "#2"}, - "down": {"uv": [3, 2, 4, 3], "texture": "#2"} + "west": {"uv": [3, 2, 4, 3], "texture": "#6"}, + "down": {"uv": [3, 2, 4, 3], "texture": "#6"} } }, { @@ -143,8 +64,8 @@ "from": [3, 2, 1], "to": [4, 3, 2], "faces": { - "east": {"uv": [12, 13, 13, 14], "texture": "#2"}, - "up": {"uv": [12, 13, 13, 14], "texture": "#2"} + "east": {"uv": [12, 13, 13, 14], "texture": "#6"}, + "up": {"uv": [12, 13, 13, 14], "texture": "#6"} } }, { @@ -152,8 +73,8 @@ "from": [12, 2, 1], "to": [13, 3, 2], "faces": { - "west": {"uv": [3, 13, 4, 14], "texture": "#2"}, - "up": {"uv": [3, 13, 4, 14], "texture": "#2"} + "west": {"uv": [3, 13, 4, 14], "texture": "#6"}, + "up": {"uv": [3, 13, 4, 14], "texture": "#6"} } }, { @@ -161,8 +82,8 @@ "from": [2, 3, 1], "to": [3, 4, 2], "faces": { - "east": {"uv": [13, 12, 14, 13], "texture": "#2"}, - "up": {"uv": [13, 12, 14, 13], "texture": "#2"} + "east": {"uv": [13, 12, 14, 13], "texture": "#6"}, + "up": {"uv": [13, 12, 14, 13], "texture": "#6"} } }, { @@ -170,8 +91,8 @@ "from": [13, 3, 1], "to": [14, 4, 2], "faces": { - "west": {"uv": [2, 12, 3, 13], "texture": "#2"}, - "up": {"uv": [2, 12, 3, 13], "texture": "#2"} + "west": {"uv": [2, 12, 3, 13], "texture": "#6"}, + "up": {"uv": [2, 12, 3, 13], "texture": "#6"} } }, { @@ -179,8 +100,8 @@ "from": [13, 12, 1], "to": [14, 13, 2], "faces": { - "west": {"uv": [3, 2, 4, 3], "texture": "#2"}, - "down": {"uv": [2, 3, 3, 4], "texture": "#2"} + "west": {"uv": [3, 2, 4, 3], "texture": "#6"}, + "down": {"uv": [2, 3, 3, 4], "texture": "#6"} } }, { @@ -188,216 +109,231 @@ "from": [2, 12, 1], "to": [3, 13, 2], "faces": { - "east": {"uv": [13, 3, 14, 4], "texture": "#2"}, - "down": {"uv": [13, 3, 14, 4], "texture": "#2"} + "east": {"uv": [13, 3, 14, 4], "texture": "#6"}, + "down": {"uv": [13, 3, 14, 4], "texture": "#6"} } }, { "name": "body", - "from": [1, 1, 1], - "to": [15, 15, 15], + "from": [0, 0, 2], + "to": [16, 16, 16], "faces": { - "north": {"uv": [1, 1, 15, 15], "texture": "#5", "cullface": "north"}, - "east": {"uv": [1, 1, 15, 15], "texture": "#3", "cullface": "east"}, - "south": {"uv": [1, 1, 15, 15], "texture": "#3", "cullface": "south"}, - "west": {"uv": [1, 1, 15, 15], "texture": "#3", "cullface": "west"}, - "up": {"uv": [1, 1, 15, 15], "texture": "#4"}, - "down": {"uv": [1, 1, 15, 15], "texture": "#4"} + "east": {"uv": [0, 0, 15, 16], "texture": "#3", "cullface": "east"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#3", "cullface": "south"}, + "west": {"uv": [1, 0, 16, 16], "texture": "#3", "cullface": "west"}, + "up": {"uv": [0, 1, 16, 16], "texture": "#4"}, + "down": {"uv": [0, 0, 16, 15], "texture": "#4"} } }, { "name": "vertical-ne", "from": [15, 0, 0], - "to": [16, 16, 1], + "to": [16, 16, 2], "faces": { "north": {"uv": [0, 0, 1, 16], "texture": "#3"}, - "east": {"uv": [15, 0, 16, 16], "texture": "#3"}, + "east": {"uv": [14, 0, 16, 16], "texture": "#3"}, "south": {"uv": [15, 0, 16, 16], "texture": "#3"}, - "west": {"uv": [0, 0, 1, 16], "texture": "#3"}, - "up": {"uv": [15, 0, 16, 1], "texture": "#3"}, - "down": {"uv": [0, 0, 1, 1], "texture": "#3"} - } - }, - { - "name": "vertical-es", - "from": [15, 0, 15], - "to": [16, 16, 16], - "faces": { - "north": {"uv": [0, 0, 1, 16], "texture": "#3"}, - "east": {"uv": [0, 0, 1, 16], "texture": "#3"}, - "south": {"uv": [15, 0, 16, 16], "texture": "#3"}, - "west": {"uv": [15, 0, 16, 16], "texture": "#3"}, - "up": {"uv": [15, 15, 16, 16], "texture": "#3"}, - "down": {"uv": [0, 15, 1, 16], "texture": "#3"} - } - }, - { - "name": "vertical-sw", - "from": [0, 0, 15], - "to": [1, 16, 16], - "faces": { - "north": {"uv": [15, 0, 16, 16], "texture": "#3"}, - "east": {"uv": [0, 0, 1, 16], "texture": "#3"}, - "south": {"uv": [0, 0, 1, 16], "texture": "#3"}, - "west": {"uv": [15, 0, 16, 16], "texture": "#3"}, - "up": {"uv": [0, 15, 1, 16], "texture": "#3"}, - "down": {"uv": [15, 15, 16, 16], "texture": "#3"} + "west": {"uv": [0, 0, 2, 16], "texture": "#3"}, + "up": {"uv": [15, 0, 16, 2], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#3"} } }, { "name": "vertical-wn", "from": [0, 0, 0], - "to": [1, 16, 1], + "to": [1, 16, 2], "faces": { "north": {"uv": [15, 0, 16, 16], "texture": "#3"}, - "east": {"uv": [15, 0, 16, 16], "texture": "#3"}, + "east": {"uv": [14, 0, 16, 16], "texture": "#3"}, "south": {"uv": [0, 0, 1, 16], "texture": "#3"}, - "west": {"uv": [0, 0, 1, 16], "texture": "#3"}, - "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, - "down": {"uv": [15, 0, 16, 1], "texture": "#3"} + "west": {"uv": [0, 0, 2, 16], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "down": {"uv": [15, 0, 16, 2], "texture": "#3"} } }, { "name": "side-upper-n", "from": [1, 15, 0], - "to": [15, 16, 1], + "to": [15, 16, 2], "faces": { "north": {"uv": [1, 0, 15, 1], "texture": "#3"}, "east": {"uv": [0, 0, 0, 0], "texture": "#3"}, "south": {"uv": [1, 0, 15, 1], "texture": "#3"}, "west": {"uv": [0, 0, 0, 0], "texture": "#3"}, - "up": {"uv": [1, 0, 15, 1], "texture": "#3"}, - "down": {"uv": [1, 0, 15, 1], "rotation": 180, "texture": "#3"} + "up": {"uv": [1, 0, 15, 2], "texture": "#3"}, + "down": {"uv": [1, 0, 15, 2], "rotation": 180, "texture": "#3"} } }, { - "name": "side-upper-s", - "from": [1, 15, 15], - "to": [15, 16, 16], + "name": "side-lower-n", + "from": [1, 0, 0], + "to": [15, 1, 2], "faces": { - "north": {"uv": [1, 15, 15, 16], "rotation": 180, "texture": "#3"}, + "north": {"uv": [1, 15, 15, 16], "texture": "#3"}, "east": {"uv": [0, 0, 0, 0], "texture": "#3"}, - "south": {"uv": [1, 0, 15, 1], "texture": "#3"}, + "south": {"uv": [1, 15, 15, 16], "texture": "#3"}, "west": {"uv": [0, 0, 0, 0], "texture": "#3"}, - "up": {"uv": [1, 15, 15, 16], "texture": "#3"}, - "down": {"uv": [1, 0, 15, 1], "texture": "#3"} + "up": {"uv": [1, 14, 15, 16], "rotation": 180, "texture": "#3"}, + "down": {"uv": [1, 2, 15, 0], "texture": "#3"} } }, { - "name": "side-upper-w", - "from": [0, 15, 1], - "to": [1, 16, 15], + "name": "bottom", + "from": [1, 1, 1], + "to": [15, 2, 1], "faces": { - "north": {"uv": [0, 0, 0, 0], "texture": "#3"}, - "east": {"uv": [0, 1, 1, 15], "rotation": 90, "texture": "#3"}, - "south": {"uv": [0, 0, 0, 0], "texture": "#3"}, - "west": {"uv": [1, 0, 15, 1], "texture": "#3"}, - "up": {"uv": [0, 1, 1, 15], "texture": "#3"}, - "down": {"uv": [1, 0, 15, 1], "rotation": 270, "texture": "#3"} + "north": {"uv": [1, 14, 15, 15], "texture": "#5"} } }, { - "name": "side-upper-e", - "from": [15, 15, 1], - "to": [16, 16, 15], + "name": "bottom3", + "from": [12, 2, 1], + "to": [15, 3, 1], "faces": { - "north": {"uv": [0, 0, 0, 0], "texture": "#3"}, - "east": {"uv": [1, 0, 15, 1], "texture": "#3"}, - "south": {"uv": [0, 0, 0, 0], "texture": "#3"}, - "west": {"uv": [15, 1, 16, 15], "rotation": 270, "texture": "#3"}, - "up": {"uv": [15, 1, 16, 15], "texture": "#3"}, - "down": {"uv": [1, 0, 15, 1], "rotation": 90, "texture": "#3"} + "north": {"uv": [1, 13, 4, 14], "texture": "#5"} } }, { - "name": "side-lower-w", - "from": [0, 0, 1], - "to": [1, 1, 15], + "name": "bottom4", + "from": [1, 2, 1], + "to": [4, 3, 1], "faces": { - "north": {"uv": [0, 0, 0, 0], "texture": "#3"}, - "east": {"uv": [15, 1, 16, 15], "rotation": 270, "texture": "#3"}, - "south": {"uv": [0, 0, 0, 0], "texture": "#3"}, - "west": {"uv": [1, 15, 15, 16], "texture": "#3"}, - "up": {"uv": [1, 15, 15, 16], "rotation": 90, "texture": "#3"}, - "down": {"uv": [15, 1, 16, 15], "texture": "#3"} + "north": {"uv": [12, 13, 15, 14], "texture": "#5"} } }, { - "name": "side-lower-s", - "from": [1, 0, 15], - "to": [15, 1, 16], + "name": "bottom2", + "from": [1, 3, 1], + "to": [3, 4, 1], "faces": { - "north": {"uv": [1, 15, 15, 16], "texture": "#3"}, - "east": {"uv": [0, 0, 0, 0], "texture": "#3"}, - "south": {"uv": [1, 15, 15, 16], "texture": "#3"}, - "west": {"uv": [0, 0, 0, 0], "texture": "#3"}, - "up": {"uv": [1, 15, 15, 16], "texture": "#3"}, - "down": {"uv": [1, 15, 15, 16], "texture": "#3"} + "north": {"uv": [13, 12, 15, 13], "texture": "#5"} } }, { - "name": "side-lower-e", - "from": [15, 0, 1], - "to": [16, 1, 15], + "name": "bottom1", + "from": [13, 3, 1], + "to": [15, 4, 1], "faces": { - "north": {"uv": [0, 0, 0, 0], "texture": "#3"}, - "east": {"uv": [1, 15, 15, 16], "texture": "#3"}, - "south": {"uv": [0, 0, 0, 0], "texture": "#3"}, - "west": {"uv": [0, 1, 1, 15], "rotation": 90, "texture": "#3"}, - "up": {"uv": [1, 15, 15, 16], "rotation": 270, "texture": "#3"}, - "down": {"uv": [0, 1, 1, 15], "texture": "#3"} + "north": {"uv": [1, 12, 3, 13], "texture": "#5"} } }, { - "name": "side-lower-n", - "from": [1, 0, 0], - "to": [15, 1, 1], + "name": "top5", + "from": [1, 12, 1], + "to": [3, 13, 1], "faces": { - "north": {"uv": [1, 15, 15, 16], "texture": "#3"}, - "east": {"uv": [0, 0, 0, 0], "texture": "#3"}, - "south": {"uv": [1, 15, 15, 16], "texture": "#3"}, - "west": {"uv": [0, 0, 0, 0], "texture": "#3"}, - "up": {"uv": [1, 15, 15, 16], "rotation": 180, "texture": "#3"}, - "down": {"uv": [1, 0, 15, 1], "texture": "#3"} + "north": {"uv": [13, 3, 15, 4], "texture": "#5"} + } + }, + { + "name": "top4", + "from": [13, 12, 1], + "to": [15, 13, 1], + "faces": { + "north": {"uv": [1, 3, 3, 4], "texture": "#5"} + } + }, + { + "name": "left", + "from": [14, 4, 1], + "to": [15, 12, 1], + "faces": { + "north": {"uv": [1, 4, 2, 12], "texture": "#5"} + } + }, + { + "name": "right", + "from": [1, 4, 1], + "to": [2, 12, 1], + "faces": { + "north": {"uv": [14, 4, 15, 12], "texture": "#5"} + } + }, + { + "name": "top1", + "from": [12, 13, 1], + "to": [15, 14, 1], + "faces": { + "north": {"uv": [1, 2, 4, 3], "texture": "#5"} + } + }, + { + "name": "top", + "from": [1, 14, 1], + "to": [15, 15, 1], + "faces": { + "north": {"uv": [1, 1, 15, 2], "texture": "#5"} + } + }, + { + "name": "top2", + "from": [1, 13, 1], + "to": [4, 14, 1], + "faces": { + "north": {"uv": [12, 2, 15, 3], "texture": "#5"} + } + }, + { + "name": "face", + "from": [2, 2, 1.9], + "to": [14, 14, 2.9], + "faces": { + "north": {"uv": [2, 2, 14, 14], "texture": "#6"} } } ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + }, "groups": [ - 0, - 1, - { - "name": "connector", - "origin": [8, 8, 8], - "color": 0, - "nbt": "{}", - "armAnimationEnabled": false, - "children": [2, 3, 4, 5, 6] - }, { "name": "screen", "origin": [0, 0, 0], "color": 0, - "nbt": "{}", - "armAnimationEnabled": false, - "children": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18] + "children": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] }, { "name": "base", "origin": [0, 0, 0], "color": 0, - "nbt": "{}", - "armAnimationEnabled": false, "children": [ - 19, + 12, { "name": "frame", "origin": [0, 0, 0], "color": 0, - "nbt": "{}", - "armAnimationEnabled": false, - "children": [20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31] + "children": [13, 14, 15, 16] } ] + }, + { + "name": "face", + "origin": [0, 0, 0], + "color": 0, + "children": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29] } ] } \ No newline at end of file diff --git a/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/0.json b/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/0.json new file mode 100644 index 0000000..cc7cd95 --- /dev/null +++ b/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/0.json @@ -0,0 +1,6 @@ +{ + "parent": "cccbridge:block/redrouter_block", + "textures": { + "6": "cccbridge:block/redrouter/face/0" + } +} \ No newline at end of file diff --git a/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/1.json b/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/1.json index d1c714c..ed11a1e 100644 --- a/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/1.json +++ b/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/1.json @@ -1,7 +1,6 @@ { - "credit": "By Sammy.K", "parent": "cccbridge:block/redrouter_block", "textures": { - "face": "cccbridge:block/redrouter/face/1" + "6": "cccbridge:block/redrouter/face/1" } } \ No newline at end of file diff --git a/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/10.json b/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/10.json index 6aae1ef..b7b9686 100644 --- a/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/10.json +++ b/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/10.json @@ -1,7 +1,6 @@ { - "credit": "By Sammy.K", "parent": "cccbridge:block/redrouter_block", "textures": { - "face": "cccbridge:block/redrouter/face/10" + "6": "cccbridge:block/redrouter/face/10" } } \ No newline at end of file diff --git a/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/11.json b/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/11.json index 08591ae..f0858c8 100644 --- a/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/11.json +++ b/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/11.json @@ -1,7 +1,6 @@ { - "credit": "By Sammy.K", "parent": "cccbridge:block/redrouter_block", "textures": { - "face": "cccbridge:block/redrouter/face/11" + "6": "cccbridge:block/redrouter/face/11" } } \ No newline at end of file diff --git a/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/12.json b/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/12.json index 05437ec..fceec2f 100644 --- a/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/12.json +++ b/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/12.json @@ -1,7 +1,6 @@ { - "credit": "By Sammy.K", "parent": "cccbridge:block/redrouter_block", "textures": { - "face": "cccbridge:block/redrouter/face/12" + "6": "cccbridge:block/redrouter/face/12" } } \ No newline at end of file diff --git a/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/13.json b/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/13.json index 465f705..a0de071 100644 --- a/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/13.json +++ b/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/13.json @@ -1,7 +1,6 @@ { - "credit": "By Sammy.K", "parent": "cccbridge:block/redrouter_block", "textures": { - "face": "cccbridge:block/redrouter/face/13" + "6": "cccbridge:block/redrouter/face/13" } } \ No newline at end of file diff --git a/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/14.json b/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/14.json index 2db3c16..5440d8d 100644 --- a/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/14.json +++ b/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/14.json @@ -1,7 +1,6 @@ { - "credit": "By Sammy.K", "parent": "cccbridge:block/redrouter_block", "textures": { - "face": "cccbridge:block/redrouter/face/14" + "6": "cccbridge:block/redrouter/face/14" } } \ No newline at end of file diff --git a/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/15.json b/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/15.json index e4ef49d..39e51fd 100644 --- a/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/15.json +++ b/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/15.json @@ -1,7 +1,6 @@ { - "credit": "By Sammy.K", "parent": "cccbridge:block/redrouter_block", "textures": { - "face": "cccbridge:block/redrouter/face/15" + "6": "cccbridge:block/redrouter/face/15" } } \ No newline at end of file diff --git a/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/16.json b/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/16.json index d527088..88ab691 100644 --- a/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/16.json +++ b/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/16.json @@ -1,7 +1,6 @@ { - "credit": "By Sammy.K", "parent": "cccbridge:block/redrouter_block", "textures": { - "face": "cccbridge:block/redrouter/face/16" + "6": "cccbridge:block/redrouter/face/16" } } \ No newline at end of file diff --git a/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/17.json b/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/17.json new file mode 100644 index 0000000..b2a180c --- /dev/null +++ b/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/17.json @@ -0,0 +1,6 @@ +{ + "parent": "cccbridge:block/redrouter_block", + "textures": { + "6": "cccbridge:block/redrouter/face/17" + } +} \ No newline at end of file diff --git a/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/2.json b/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/2.json index ea94735..f77b43c 100644 --- a/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/2.json +++ b/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/2.json @@ -1,7 +1,6 @@ { - "credit": "By Sammy.K", "parent": "cccbridge:block/redrouter_block", "textures": { - "face": "cccbridge:block/redrouter/face/2" + "6": "cccbridge:block/redrouter/face/2" } } \ No newline at end of file diff --git a/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/3.json b/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/3.json index 9f96761..fb6c51c 100644 --- a/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/3.json +++ b/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/3.json @@ -1,7 +1,6 @@ { - "credit": "By Sammy.K", "parent": "cccbridge:block/redrouter_block", "textures": { - "face": "cccbridge:block/redrouter/face/3" + "6": "cccbridge:block/redrouter/face/3" } } \ No newline at end of file diff --git a/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/4.json b/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/4.json index eed2224..21b0148 100644 --- a/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/4.json +++ b/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/4.json @@ -1,7 +1,6 @@ { - "credit": "By Sammy.K", "parent": "cccbridge:block/redrouter_block", "textures": { - "face": "cccbridge:block/redrouter/face/4" + "6": "cccbridge:block/redrouter/face/4" } } \ No newline at end of file diff --git a/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/5.json b/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/5.json index ccfd448..44bb23d 100644 --- a/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/5.json +++ b/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/5.json @@ -1,7 +1,6 @@ { - "credit": "By Sammy.K", "parent": "cccbridge:block/redrouter_block", "textures": { - "face": "cccbridge:block/redrouter/face/5" + "6": "cccbridge:block/redrouter/face/5" } } \ No newline at end of file diff --git a/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/6.json b/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/6.json index d81e5d8..fa5cabc 100644 --- a/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/6.json +++ b/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/6.json @@ -1,7 +1,6 @@ { - "credit": "By Sammy.K", "parent": "cccbridge:block/redrouter_block", "textures": { - "face": "cccbridge:block/redrouter/face/6" + "6": "cccbridge:block/redrouter/face/6" } } \ No newline at end of file diff --git a/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/7.json b/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/7.json index 0ec8f5f..1b371f5 100644 --- a/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/7.json +++ b/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/7.json @@ -1,7 +1,6 @@ { - "credit": "By Sammy.K", "parent": "cccbridge:block/redrouter_block", "textures": { - "face": "cccbridge:block/redrouter/face/7" + "6": "cccbridge:block/redrouter/face/7" } } \ No newline at end of file diff --git a/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/8.json b/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/8.json index 44d429b..f6097be 100644 --- a/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/8.json +++ b/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/8.json @@ -1,7 +1,6 @@ { - "credit": "By Sammy.K", "parent": "cccbridge:block/redrouter_block", "textures": { - "face": "cccbridge:block/redrouter/face/8" + "6": "cccbridge:block/redrouter/face/8" } } \ No newline at end of file diff --git a/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/9.json b/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/9.json index d8b508d..d67b7ed 100644 --- a/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/9.json +++ b/fabric/src/main/resources/assets/cccbridge/models/block/redrouter_face/9.json @@ -1,7 +1,6 @@ { - "credit": "By Sammy.K", "parent": "cccbridge:block/redrouter_block", "textures": { - "face": "cccbridge:block/redrouter/face/9" + "6": "cccbridge:block/redrouter/face/9" } } \ No newline at end of file diff --git a/fabric/src/main/resources/assets/cccbridge/models/block/scroller_block.json b/fabric/src/main/resources/assets/cccbridge/models/block/scroller_block.json index ee6ec66..cc01eef 100644 --- a/fabric/src/main/resources/assets/cccbridge/models/block/scroller_block.json +++ b/fabric/src/main/resources/assets/cccbridge/models/block/scroller_block.json @@ -1,6 +1,7 @@ { "credit": "By Sammy.K via Blockbench", "parent": "block/block", + "render_type": "cutout", "textures": { "0": "cccbridge:block/scroller/scroller_side", "1": "cccbridge:block/scroller/scroller_front", @@ -8,29 +9,17 @@ "particle": "cccbridge:block/scroller/scroller_side" }, "elements": [ - { - "name": "body", - "from": [0, 0, 15], - "to": [16, 16, 16], - "faces": { - "north": {"uv": [0, 0, 16, 16], "texture": "#1", "cullface": "north"}, - "east": {"uv": [15, 0, 16, 16], "texture": "#0", "cullface": "east"}, - "south": {"uv": [0, 0, 16, 16], "texture": "#0", "cullface": "south"}, - "west": {"uv": [0, 0, 1, 16], "texture": "#0", "cullface": "west"}, - "up": {"uv": [0, 0, 16, 1], "texture": "#0"}, - "down": {"uv": [0, 15, 16, 16], "texture": "#0"} - } - }, { "name": "vertical-ne", "from": [15, 0, 14], "to": [16, 16, 15], "faces": { - "north": {"uv": [0, 0, 1, 16], "texture": "#0"}, - "east": {"uv": [15, 0, 16, 16], "texture": "#0"}, - "west": {"uv": [0, 0, 1, 16], "texture": "#0"}, - "up": {"uv": [15, 0, 16, 1], "texture": "#0"}, - "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + "north": {"uv": [0, 0, 1, 16], "texture": "#1"}, + "east": {"uv": [0, 0, 1, 16], "texture": "#1"}, + "south": {"uv": [0, 0, 0, 0], "texture": "#1"}, + "west": {"uv": [0, 0, 1, 16], "texture": "#1"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#1"}, + "down": {"uv": [0, 15, 1, 16], "texture": "#1"} } }, { @@ -38,11 +27,12 @@ "from": [0, 0, 14], "to": [1, 16, 15], "faces": { - "north": {"uv": [15, 0, 16, 16], "texture": "#0"}, - "east": {"uv": [15, 0, 16, 16], "texture": "#0"}, - "west": {"uv": [0, 0, 1, 16], "texture": "#0"}, - "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, - "down": {"uv": [15, 0, 16, 1], "texture": "#0"} + "north": {"uv": [15, 0, 16, 16], "texture": "#1"}, + "east": {"uv": [15, 0, 16, 16], "texture": "#1"}, + "south": {"uv": [0, 0, 0, 0], "texture": "#1"}, + "west": {"uv": [15, 0, 16, 16], "texture": "#1"}, + "up": {"uv": [15, 0, 16, 1], "texture": "#1"}, + "down": {"uv": [15, 15, 16, 16], "texture": "#1"} } }, { @@ -50,11 +40,12 @@ "from": [1, 15, 14], "to": [15, 16, 15], "faces": { - "north": {"uv": [1, 0, 15, 1], "texture": "#0"}, - "east": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "west": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "up": {"uv": [1, 0, 15, 1], "texture": "#0"}, - "down": {"uv": [1, 0, 15, 1], "rotation": 180, "texture": "#0"} + "north": {"uv": [1, 0, 15, 1], "texture": "#1"}, + "east": {"uv": [0, 0, 0, 0], "texture": "#1"}, + "south": {"uv": [0, 0, 0, 0], "texture": "#1"}, + "west": {"uv": [0, 0, 0, 0], "texture": "#1"}, + "up": {"uv": [15, 0, 1, 1], "texture": "#1"}, + "down": {"uv": [15, 0, 1, 1], "texture": "#1"} } }, { @@ -62,24 +53,74 @@ "from": [1, 0, 14], "to": [15, 1, 15], "faces": { - "north": {"uv": [1, 15, 15, 16], "texture": "#0"}, - "east": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "west": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "up": {"uv": [1, 15, 15, 16], "rotation": 180, "texture": "#0"}, - "down": {"uv": [1, 0, 15, 1], "texture": "#0"} + "north": {"uv": [1, 15, 15, 16], "texture": "#1"}, + "east": {"uv": [0, 0, 0, 0], "texture": "#1"}, + "south": {"uv": [0, 0, 0, 0], "texture": "#1"}, + "west": {"uv": [0, 0, 0, 0], "texture": "#1"}, + "up": {"uv": [15, 15, 1, 16], "texture": "#1"}, + "down": {"uv": [15, 15, 1, 16], "texture": "#1"} } }, { "name": "interface", - "from": [3, 3, 15.9], - "to": [13, 13, 14.91], + "from": [3, 3, 15.95], + "to": [13, 13, 16], "faces": { "north": {"uv": [3, 3, 13, 13], "texture": "#2"}, "east": {"uv": [3, 3, 2, 13], "texture": "#2"}, + "south": {"uv": [3, 3, 13, 13], "texture": "#0"}, "west": {"uv": [13, 3, 14, 13], "texture": "#2"}, "up": {"uv": [3, 2, 13, 3], "rotation": 180, "texture": "#2"}, "down": {"uv": [3, 13, 13, 14], "texture": "#2"} } + }, + { + "name": "bottom", + "from": [0, 0, 15], + "to": [16, 3, 16], + "faces": { + "north": {"uv": [0, 13, 16, 16], "texture": "#1"}, + "east": {"uv": [15, 13, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 13, 16, 16], "texture": "#0"}, + "west": {"uv": [0, 13, 1, 16], "texture": "#0"}, + "up": {"uv": [0, 13, 16, 14], "texture": "#2"}, + "down": {"uv": [0, 15, 16, 16], "texture": "#0"} + } + }, + { + "name": "top", + "from": [0, 13, 15], + "to": [16, 16, 16], + "faces": { + "north": {"uv": [0, 0, 16, 3], "texture": "#1"}, + "east": {"uv": [15, 0, 16, 3], "texture": "#0"}, + "south": {"uv": [0, 0, 16, 3], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "up": {"uv": [0, 0, 16, 1], "texture": "#0"}, + "down": {"uv": [0, 2, 16, 3], "texture": "#2"} + } + }, + { + "name": "east", + "from": [13, 3, 15], + "to": [16, 13, 16], + "faces": { + "north": {"uv": [0, 3, 3, 13], "texture": "#1"}, + "east": {"uv": [15, 3, 16, 13], "texture": "#0"}, + "south": {"uv": [13, 3, 16, 13], "texture": "#0"}, + "west": {"uv": [2, 3, 3, 13], "texture": "#2"} + } + }, + { + "name": "west", + "from": [0, 3, 15], + "to": [3, 13, 16], + "faces": { + "north": {"uv": [13, 3, 16, 13], "texture": "#1"}, + "east": {"uv": [13, 3, 14, 13], "texture": "#2"}, + "south": {"uv": [0, 3, 3, 13], "texture": "#0"}, + "west": {"uv": [0, 3, 1, 13], "texture": "#0"} + } } ], "display": { @@ -95,13 +136,13 @@ }, "firstperson_righthand": { "rotation": [-13, 155, 0], - "translation": [-3, 2.5, 5.75], - "scale": [0.4, 0.4, 0.4] + "translation": [-3.25, 2.5, 5.75], + "scale": [0.3, 0.3, 0.3] }, "firstperson_lefthand": { "rotation": [-13, 155, 0], - "translation": [-3, 2.5, 5.75], - "scale": [0.4, 0.4, 0.4] + "translation": [-3.25, 2.5, 5.75], + "scale": [0.3, 0.3, 0.3] }, "ground": { "rotation": [90, 0, 0], @@ -122,15 +163,18 @@ } }, "groups": [ - 0, { "name": "frame", "origin": [0, 0, 0], "color": 0, - "nbt": "{}", - "armAnimationEnabled": false, - "children": [1, 2, 3, 4] + "children": [0, 1, 2, 3] }, - 5 + 4, + { + "name": "base", + "origin": [0, 0, 0], + "color": 0, + "children": [5, 6, 7, 8] + } ] } \ No newline at end of file diff --git a/fabric/src/main/resources/assets/cccbridge/models/block/source_block.json b/fabric/src/main/resources/assets/cccbridge/models/block/source_block.json index c561ed7..e079d00 100644 --- a/fabric/src/main/resources/assets/cccbridge/models/block/source_block.json +++ b/fabric/src/main/resources/assets/cccbridge/models/block/source_block.json @@ -1,161 +1,12 @@ { - "credit": "By Sammy.K via Blockbench", - "parent": "minecraft:block/block", + "parent": "minecraft:block/cube", "textures": { - "0": "cccbridge:block/source_block_side", - "1": "cccbridge:block/st_block_top", - "particle": "cccbridge:block/source_block_side" - }, - "elements": [ - { - "name": "base", - "from": [1, 1, 1], - "to": [15, 15, 15], - "faces": { - "north": {"uv": [1, 1, 15, 15], "texture": "#0"}, - "east": {"uv": [1, 1, 15, 15], "texture": "#0"}, - "south": {"uv": [1, 1, 15, 15], "texture": "#0"}, - "west": {"uv": [1, 1, 15, 15], "texture": "#0"} - } - }, - { - "name": "sw", - "from": [0, 1, 15], - "to": [1, 15, 16], - "faces": { - "north": {"uv": [15, 1, 16, 15], "texture": "#0"}, - "east": {"uv": [0, 1, 1, 15], "texture": "#0"}, - "south": {"uv": [0, 1, 1, 15], "texture": "#0"}, - "west": {"uv": [15, 1, 16, 15], "texture": "#0"} - } - }, - { - "name": "ew", - "from": [15, 1, 15], - "to": [16, 15, 16], - "faces": { - "north": {"uv": [0, 1, 1, 15], "texture": "#0"}, - "east": {"uv": [0, 1, 1, 15], "texture": "#0"}, - "south": {"uv": [15, 1, 16, 15], "texture": "#0"}, - "west": {"uv": [15, 1, 16, 15], "texture": "#0"} - } - }, - { - "name": "wn", - "from": [0, 1, 0], - "to": [1, 15, 1], - "faces": { - "north": {"uv": [15, 1, 16, 15], "texture": "#0"}, - "east": {"uv": [0, 0, 1, 14], "texture": "#0"}, - "south": {"uv": [0, 1, 1, 15], "texture": "#0"}, - "west": {"uv": [15, 1, 16, 15], "texture": "#0"} - } - }, - { - "name": "ne", - "from": [15, 1, 0], - "to": [16, 15, 1], - "faces": { - "north": {"uv": [0, 1, 1, 15], "texture": "#0"}, - "east": {"uv": [15, 1, 16, 15], "texture": "#0"}, - "south": {"uv": [15, 1, 16, 15], "texture": "#0"}, - "west": {"uv": [0, 1, 1, 15], "texture": "#0"} - } - }, - { - "name": "top", - "from": [0, 15, 0], - "to": [16, 16, 16], - "faces": { - "north": {"uv": [0, 0, 16, 1], "texture": "#0"}, - "east": {"uv": [0, 0, 16, 1], "texture": "#0"}, - "south": {"uv": [0, 0, 16, 1], "texture": "#0"}, - "west": {"uv": [0, 0, 16, 1], "texture": "#0"}, - "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, - "down": {"uv": [0, 0, 16, 16], "texture": "#0"} - } - }, - { - "name": "bottom", - "from": [0, 0, 0], - "to": [16, 1, 16], - "faces": { - "north": {"uv": [0, 15, 16, 16], "texture": "#0"}, - "east": {"uv": [0, 15, 16, 16], "texture": "#0"}, - "south": {"uv": [0, 15, 16, 16], "texture": "#0"}, - "west": {"uv": [0, 15, 16, 16], "texture": "#0"}, - "up": {"uv": [0, 0, 16, 16], "texture": "#0"}, - "down": {"uv": [0, 0, 16, 16], "texture": "#1"} - } - }, - { - "name": "west", - "from": [0, 4, 4], - "to": [1, 12, 12], - "faces": { - "north": {"uv": [4, 4, 5, 12], "texture": "#0"}, - "south": {"uv": [11, 4, 12, 12], "texture": "#0"}, - "west": {"uv": [4, 4, 12, 12], "texture": "#0"}, - "up": {"uv": [4, 4, 12, 5], "rotation": 90, "texture": "#0"}, - "down": {"uv": [4, 11, 12, 12], "rotation": 270, "texture": "#0"} - } - }, - { - "name": "north", - "from": [4, 4, 0], - "to": [12, 12, 1], - "faces": { - "north": {"uv": [4, 4, 12, 12], "texture": "#0"}, - "east": {"uv": [4, 4, 5, 12], "texture": "#0"}, - "west": {"uv": [11, 4, 12, 12], "texture": "#0"}, - "up": {"uv": [4, 4, 12, 5], "rotation": 180, "texture": "#0"}, - "down": {"uv": [4, 11, 12, 12], "rotation": 180, "texture": "#0"} - } - }, - { - "name": "east", - "from": [15, 4, 4], - "to": [16, 12, 12], - "faces": { - "north": {"uv": [11, 4, 12, 12], "texture": "#0"}, - "east": {"uv": [4, 4, 12, 12], "texture": "#0"}, - "south": {"uv": [4, 4, 5, 12], "texture": "#0"}, - "up": {"uv": [4, 4, 12, 5], "rotation": 270, "texture": "#0"}, - "down": {"uv": [4, 11, 12, 12], "rotation": 90, "texture": "#0"} - } - }, - { - "name": "south", - "from": [4, 4, 15], - "to": [12, 12, 16], - "faces": { - "east": {"uv": [11, 4, 12, 12], "texture": "#0"}, - "south": {"uv": [4, 4, 12, 12], "texture": "#0"}, - "west": {"uv": [4, 4, 5, 12], "texture": "#0"}, - "up": {"uv": [4, 4, 12, 5], "texture": "#0"}, - "down": {"uv": [4, 11, 12, 12], "texture": "#0"} - } - } - ], - "groups": [ - 0, - { - "name": "frame", - "origin": [0, 0, 0], - "color": 0, - "children": [1, 2, 3, 4] - }, - { - "name": "plates", - "origin": [0, 0, 0], - "color": 0, - "children": [5, 6] - }, - { - "name": "connections", - "origin": [0, 0, 0], - "color": 0, - "children": [7, 8, 9, 10] - } - ] -} \ No newline at end of file + "down": "cccbridge:block/source_target_block_vertical", + "east": "cccbridge:block/source_block_horizontal", + "north": "cccbridge:block/source_block_horizontal", + "particle": "cccbridge:block/source_block_horizontal", + "south": "cccbridge:block/source_block_horizontal", + "up": "cccbridge:block/source_target_block_vertical", + "west": "cccbridge:block/source_block_horizontal" + } + } \ No newline at end of file diff --git a/fabric/src/main/resources/assets/cccbridge/models/block/target_block.json b/fabric/src/main/resources/assets/cccbridge/models/block/target_block.json index 23b3944..6986e88 100644 --- a/fabric/src/main/resources/assets/cccbridge/models/block/target_block.json +++ b/fabric/src/main/resources/assets/cccbridge/models/block/target_block.json @@ -1,221 +1,12 @@ { - "credit": "By Sammy.K via Blockbench", - "parent": "minecraft:block/block", + "parent": "minecraft:block/cube", "textures": { - "0": "cccbridge:block/target_block_side", - "1": "cccbridge:block/st_block_top", - "particle": "cccbridge:block/target_block_side" - }, - "elements": [ - { - "name": "sw", - "from": [0, 1, 15], - "to": [1, 15, 16], - "faces": { - "north": {"uv": [15, 1, 16, 15], "texture": "#0"}, - "east": {"uv": [0, 1, 1, 15], "texture": "#0"}, - "south": {"uv": [0, 1, 1, 15], "texture": "#0"}, - "west": {"uv": [15, 1, 16, 15], "texture": "#0"} - } - }, - { - "name": "ew", - "from": [15, 1, 15], - "to": [16, 15, 16], - "faces": { - "north": {"uv": [0, 1, 1, 15], "texture": "#0"}, - "east": {"uv": [0, 1, 1, 15], "texture": "#0"}, - "south": {"uv": [15, 1, 16, 15], "texture": "#0"}, - "west": {"uv": [15, 1, 16, 15], "texture": "#0"} - } - }, - { - "name": "wn", - "from": [0, 1, 0], - "to": [1, 15, 1], - "faces": { - "north": {"uv": [15, 1, 16, 15], "texture": "#0"}, - "east": {"uv": [0, 0, 1, 14], "texture": "#0"}, - "south": {"uv": [0, 1, 1, 15], "texture": "#0"}, - "west": {"uv": [15, 1, 16, 15], "texture": "#0"} - } - }, - { - "name": "ne", - "from": [15, 1, 0], - "to": [16, 15, 1], - "faces": { - "north": {"uv": [0, 1, 1, 15], "texture": "#0"}, - "east": {"uv": [15, 1, 16, 15], "texture": "#0"}, - "south": {"uv": [15, 1, 16, 15], "texture": "#0"}, - "west": {"uv": [0, 1, 1, 15], "texture": "#0"} - } - }, - { - "name": "top", - "from": [0, 15, 0], - "to": [16, 16, 16], - "faces": { - "north": {"uv": [0, 0, 16, 1], "texture": "#0"}, - "east": {"uv": [0, 0, 16, 1], "texture": "#0"}, - "south": {"uv": [0, 0, 16, 1], "texture": "#0"}, - "west": {"uv": [0, 0, 16, 1], "texture": "#0"}, - "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, - "down": {"uv": [0, 0, 16, 16], "texture": "#0"} - } - }, - { - "name": "bottom", - "from": [0, 0, 0], - "to": [16, 1, 16], - "faces": { - "north": {"uv": [0, 15, 16, 16], "texture": "#0"}, - "east": {"uv": [0, 15, 16, 16], "texture": "#0"}, - "south": {"uv": [0, 15, 16, 16], "texture": "#0"}, - "west": {"uv": [0, 15, 16, 16], "texture": "#0"}, - "up": {"uv": [0, 0, 16, 16], "texture": "#0"}, - "down": {"uv": [0, 0, 16, 16], "texture": "#1"} - } - }, - { - "name": "west", - "from": [2, 12, 12], - "to": [1, 4, 4], - "faces": { - "north": {"uv": [3, 4, 4, 12], "texture": "#0"}, - "south": {"uv": [12, 4, 13, 12], "texture": "#0"}, - "west": {"uv": [4, 4, 12, 12], "texture": "#0"}, - "up": {"uv": [4, 3, 12, 4], "rotation": 90, "texture": "#0"}, - "down": {"uv": [4, 12, 12, 13], "rotation": 270, "texture": "#0"} - } - }, - { - "name": "north", - "from": [12, 12, 2], - "to": [4, 4, 1], - "faces": { - "north": {"uv": [4, 4, 12, 12], "texture": "#0"}, - "east": {"uv": [3, 4, 4, 12], "texture": "#0"}, - "west": {"uv": [12, 4, 13, 12], "texture": "#0"}, - "up": {"uv": [4, 3, 12, 4], "rotation": 180, "texture": "#0"}, - "down": {"uv": [4, 12, 12, 13], "rotation": 180, "texture": "#0"} - } - }, - { - "name": "east", - "from": [15, 12, 12], - "to": [14, 4, 4], - "faces": { - "north": {"uv": [12, 4, 13, 12], "texture": "#0"}, - "east": {"uv": [4, 4, 12, 12], "texture": "#0"}, - "south": {"uv": [3, 4, 4, 12], "texture": "#0"}, - "up": {"uv": [4, 3, 12, 4], "rotation": 270, "texture": "#0"}, - "down": {"uv": [4, 12, 12, 13], "rotation": 90, "texture": "#0"} - } - }, - { - "name": "south", - "from": [12, 12, 15], - "to": [4, 4, 14], - "faces": { - "east": {"uv": [12, 4, 13, 12], "texture": "#0"}, - "south": {"uv": [4, 4, 12, 12], "texture": "#0"}, - "west": {"uv": [3, 4, 4, 12], "texture": "#0"}, - "up": {"uv": [4, 3, 12, 4], "texture": "#0"}, - "down": {"uv": [4, 12, 12, 13], "texture": "#0"} - } - }, - { - "name": "bottom", - "from": [1, 1, 1], - "to": [15, 4, 15], - "faces": { - "north": {"uv": [1, 12, 15, 15], "texture": "#0"}, - "east": {"uv": [1, 12, 15, 15], "texture": "#0"}, - "south": {"uv": [1, 12, 15, 15], "texture": "#0"}, - "west": {"uv": [1, 12, 15, 15], "texture": "#0"} - } - }, - { - "name": "top", - "from": [1, 12, 1], - "to": [15, 15, 15], - "faces": { - "north": {"uv": [1, 1, 15, 4], "texture": "#0"}, - "east": {"uv": [1, 1, 15, 4], "texture": "#0"}, - "south": {"uv": [1, 1, 15, 4], "texture": "#0"}, - "west": {"uv": [1, 1, 15, 4], "texture": "#0"} - } - }, - { - "name": "wn", - "from": [1, 4, 1], - "to": [4, 12, 4], - "faces": { - "north": {"uv": [12, 4, 15, 12], "texture": "#0"}, - "west": {"uv": [1, 4, 4, 12], "texture": "#0"} - } - }, - { - "name": "ne", - "from": [12, 4, 1], - "to": [15, 12, 4], - "faces": { - "north": {"uv": [1, 4, 4, 12], "texture": "#0"}, - "east": {"uv": [12, 4, 15, 12], "texture": "#0"} - } - }, - { - "name": "es", - "from": [12, 4, 12], - "to": [15, 12, 15], - "faces": { - "east": {"uv": [1, 4, 4, 12], "texture": "#0"}, - "south": {"uv": [12, 4, 15, 12], "texture": "#0"} - } - }, - { - "name": "sw", - "from": [1, 4, 12], - "to": [4, 12, 15], - "faces": { - "south": {"uv": [1, 4, 4, 12], "texture": "#0"}, - "west": {"uv": [12, 4, 15, 12], "texture": "#0"} - } - } - ], - "groups": [ - { - "name": "frame", - "origin": [0, 0, 0], - "color": 0, - "nbt": "{}", - "armAnimationEnabled": false, - "children": [0, 1, 2, 3] - }, - { - "name": "plates", - "origin": [0, 0, 0], - "color": 0, - "nbt": "{}", - "armAnimationEnabled": false, - "children": [4, 5] - }, - { - "name": "connections", - "origin": [0, 0, 0], - "color": 0, - "nbt": "{}", - "armAnimationEnabled": false, - "children": [6, 7, 8, 9] - }, - { - "name": "group", - "origin": [0, 0, 0], - "color": 0, - "nbt": "{}", - "armAnimationEnabled": false, - "children": [10, 11, 12, 13, 14, 15] - } - ] -} \ No newline at end of file + "down": "cccbridge:block/source_target_block_vertical", + "east": "cccbridge:block/target_block_horizontal", + "north": "cccbridge:block/target_block_horizontal", + "particle": "cccbridge:block/target_block_horizontal", + "south": "cccbridge:block/target_block_horizontal", + "up": "cccbridge:block/source_target_block_vertical", + "west": "cccbridge:block/target_block_horizontal" + } + } \ No newline at end of file diff --git a/fabric/src/main/resources/assets/cccbridge/models/block/wanze/base.json b/fabric/src/main/resources/assets/cccbridge/models/block/wanze/base.json deleted file mode 100644 index 02d9f53..0000000 --- a/fabric/src/main/resources/assets/cccbridge/models/block/wanze/base.json +++ /dev/null @@ -1,208 +0,0 @@ -{ - "credit": "By Sammy.K via Blockbench", - "textures": { - "0": "cccbridge:block/wanze/wanze_side", - "4": "cccbridge:block/wanze/wanze_top", - "particle": "cccbridge:block/wanze/wanze_side" - }, - "elements": [ - { - "name": "lower", - "from": [1, 1, 1], - "to": [15, 5, 15], - "faces": { - "north": {"uv": [1, 11, 15, 15], "texture": "#0"}, - "east": {"uv": [1, 11, 15, 15], "texture": "#0"}, - "south": {"uv": [1, 11, 15, 15], "texture": "#0"}, - "west": {"uv": [1, 11, 15, 15], "texture": "#0"}, - "up": {"uv": [1, 1, 15, 15], "texture": "#4"}, - "down": {"uv": [1, 1, 15, 15], "texture": "#4"} - } - }, - { - "name": "upper", - "from": [1, 11, 1], - "to": [15, 15, 15], - "faces": { - "north": {"uv": [1, 1, 15, 5], "texture": "#0"}, - "east": {"uv": [1, 1, 15, 5], "texture": "#0"}, - "south": {"uv": [1, 1, 15, 5], "texture": "#0"}, - "west": {"uv": [1, 1, 15, 5], "texture": "#0"}, - "up": {"uv": [1, 1, 15, 15], "texture": "#4"}, - "down": {"uv": [1, 1, 15, 15], "texture": "#4"} - } - }, - { - "name": "vertical-ne", - "from": [15, 0, 0], - "to": [16, 16, 1], - "faces": { - "north": {"uv": [0, 0, 1, 16], "texture": "#0"}, - "east": {"uv": [15, 0, 16, 16], "texture": "#0"}, - "south": {"uv": [15, 0, 16, 16], "texture": "#0"}, - "west": {"uv": [0, 0, 1, 16], "texture": "#0"}, - "up": {"uv": [15, 0, 16, 1], "texture": "#0"}, - "down": {"uv": [0, 0, 1, 1], "texture": "#0"} - } - }, - { - "name": "vertical-es", - "from": [15, 0, 15], - "to": [16, 16, 16], - "faces": { - "north": {"uv": [0, 0, 1, 16], "texture": "#0"}, - "east": {"uv": [0, 0, 1, 16], "texture": "#0"}, - "south": {"uv": [15, 0, 16, 16], "texture": "#0"}, - "west": {"uv": [15, 0, 16, 16], "texture": "#0"}, - "up": {"uv": [15, 15, 16, 16], "texture": "#0"}, - "down": {"uv": [0, 15, 1, 16], "texture": "#0"} - } - }, - { - "name": "vertical-sw", - "from": [0, 0, 15], - "to": [1, 16, 16], - "faces": { - "north": {"uv": [15, 0, 16, 16], "texture": "#0"}, - "east": {"uv": [0, 0, 1, 16], "texture": "#0"}, - "south": {"uv": [0, 0, 1, 16], "texture": "#0"}, - "west": {"uv": [15, 0, 16, 16], "texture": "#0"}, - "up": {"uv": [0, 15, 1, 16], "texture": "#0"}, - "down": {"uv": [15, 15, 16, 16], "texture": "#0"} - } - }, - { - "name": "vertical-wn", - "from": [0, 0, 0], - "to": [1, 16, 1], - "faces": { - "north": {"uv": [15, 0, 16, 16], "texture": "#0"}, - "east": {"uv": [15, 0, 16, 16], "texture": "#0"}, - "south": {"uv": [0, 0, 1, 16], "texture": "#0"}, - "west": {"uv": [0, 0, 1, 16], "texture": "#0"}, - "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, - "down": {"uv": [15, 0, 16, 1], "texture": "#0"} - } - }, - { - "name": "side-upper-n", - "from": [1, 15, 0], - "to": [15, 16, 1], - "faces": { - "north": {"uv": [1, 0, 15, 1], "texture": "#0"}, - "east": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "south": {"uv": [1, 0, 15, 1], "texture": "#0"}, - "west": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "up": {"uv": [1, 0, 15, 1], "texture": "#0"}, - "down": {"uv": [1, 0, 15, 1], "rotation": 180, "texture": "#0"} - } - }, - { - "name": "side-upper-s", - "from": [1, 15, 15], - "to": [15, 16, 16], - "faces": { - "north": {"uv": [1, 15, 15, 16], "rotation": 180, "texture": "#0"}, - "east": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "south": {"uv": [1, 0, 15, 1], "texture": "#0"}, - "west": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "up": {"uv": [1, 15, 15, 16], "texture": "#0"}, - "down": {"uv": [1, 0, 15, 1], "texture": "#0"} - } - }, - { - "name": "side-upper-w", - "from": [0, 15, 1], - "to": [1, 16, 15], - "faces": { - "north": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "east": {"uv": [0, 1, 1, 15], "rotation": 90, "texture": "#0"}, - "south": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "west": {"uv": [1, 0, 15, 1], "texture": "#0"}, - "up": {"uv": [0, 1, 1, 15], "texture": "#0"}, - "down": {"uv": [1, 0, 15, 1], "rotation": 270, "texture": "#0"} - } - }, - { - "name": "side-upper-e", - "from": [15, 15, 1], - "to": [16, 16, 15], - "faces": { - "north": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "east": {"uv": [1, 0, 15, 1], "texture": "#0"}, - "south": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "west": {"uv": [15, 1, 16, 15], "rotation": 270, "texture": "#0"}, - "up": {"uv": [15, 1, 16, 15], "texture": "#0"}, - "down": {"uv": [1, 0, 15, 1], "rotation": 90, "texture": "#0"} - } - }, - { - "name": "side-lower-w", - "from": [0, 0, 1], - "to": [1, 1, 15], - "faces": { - "north": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "east": {"uv": [15, 1, 16, 15], "rotation": 270, "texture": "#0"}, - "south": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "west": {"uv": [1, 15, 15, 16], "texture": "#0"}, - "up": {"uv": [1, 15, 15, 16], "rotation": 90, "texture": "#0"}, - "down": {"uv": [15, 1, 16, 15], "texture": "#0"} - } - }, - { - "name": "side-lower-s", - "from": [1, 0, 15], - "to": [15, 1, 16], - "faces": { - "north": {"uv": [1, 15, 15, 16], "texture": "#0"}, - "east": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "south": {"uv": [1, 15, 15, 16], "texture": "#0"}, - "west": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "up": {"uv": [1, 15, 15, 16], "texture": "#0"}, - "down": {"uv": [1, 15, 15, 16], "texture": "#0"} - } - }, - { - "name": "side-lower-e", - "from": [15, 0, 1], - "to": [16, 1, 15], - "faces": { - "north": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "east": {"uv": [1, 15, 15, 16], "texture": "#0"}, - "south": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "west": {"uv": [0, 1, 1, 15], "rotation": 90, "texture": "#0"}, - "up": {"uv": [1, 15, 15, 16], "rotation": 270, "texture": "#0"}, - "down": {"uv": [0, 1, 1, 15], "texture": "#0"} - } - }, - { - "name": "side-lower-n", - "from": [1, 0, 0], - "to": [15, 1, 1], - "faces": { - "north": {"uv": [1, 15, 15, 16], "texture": "#0"}, - "east": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "south": {"uv": [1, 15, 15, 16], "texture": "#0"}, - "west": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "up": {"uv": [1, 15, 15, 16], "rotation": 180, "texture": "#0"}, - "down": {"uv": [1, 0, 15, 1], "texture": "#0"} - } - } - ], - "groups": [ - { - "name": "gear", - "origin": [8, 8, 8], - "color": 0, - "children": [] - }, - 0, - 1, - { - "name": "frame", - "origin": [0, 0, 0], - "color": 0, - "children": [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13] - } - ] -} \ No newline at end of file diff --git a/fabric/src/main/resources/assets/cccbridge/models/block/wanze/gear.json b/fabric/src/main/resources/assets/cccbridge/models/block/wanze/gear.json deleted file mode 100644 index a341e0d..0000000 --- a/fabric/src/main/resources/assets/cccbridge/models/block/wanze/gear.json +++ /dev/null @@ -1,119 +0,0 @@ -{ - "credit": "By Sammy.K via Blockbench", - "textures": { - "1": "cccbridge:block/advanced_wheel", - "2": "create:block/axis", - "3": "create:block/axis_top", - "particle": "cccbridge:block/wanze/wanze_side" - }, - "elements": [ - { - "name": "shaft", - "from": [6, 0, 6], - "to": [10, 16, 10], - "faces": { - "north": {"uv": [6, 0, 10, 16], "texture": "#2"}, - "east": {"uv": [6, 0, 10, 16], "texture": "#2"}, - "south": {"uv": [6, 0, 10, 16], "texture": "#2"}, - "west": {"uv": [6, 0, 10, 16], "texture": "#2"}, - "up": {"uv": [6, 6, 10, 10], "texture": "#3"}, - "down": {"uv": [6, 6, 10, 10], "texture": "#3"} - } - }, - { - "name": "ne-sw", - "from": [-1, 6.5, 6.5], - "to": [17, 9.5, 9.5], - "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, - "faces": { - "north": {"uv": [0, 10, 9, 11.5], "texture": "#1"}, - "east": {"uv": [9, 10, 10.5, 11.5], "texture": "#1"}, - "south": {"uv": [0, 10, 9, 11.5], "texture": "#1"}, - "west": {"uv": [9, 10, 10.5, 11.5], "texture": "#1"}, - "up": {"uv": [6, 3, 15, 4.5], "texture": "#1"}, - "down": {"uv": [6, 3, 15, 4.5], "rotation": 180, "texture": "#1"} - } - }, - { - "name": "ow", - "from": [-1, 6.5, 6.5], - "to": [17, 9.5, 9.5], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, - "faces": { - "north": {"uv": [0, 10, 9, 11.5], "texture": "#1"}, - "east": {"uv": [9, 10, 10.5, 11.5], "texture": "#1"}, - "south": {"uv": [0, 10, 9, 11.5], "texture": "#1"}, - "west": {"uv": [9, 10, 10.5, 11.5], "texture": "#1"}, - "up": {"uv": [6, 3, 15, 4.5], "texture": "#1"}, - "down": {"uv": [6, 3, 15, 4.5], "rotation": 180, "texture": "#1"} - } - }, - { - "name": "nw-se", - "from": [-1, 6.5, 6.5], - "to": [17, 9.5, 9.5], - "rotation": {"angle": -45, "axis": "y", "origin": [8, 8, 8]}, - "faces": { - "north": {"uv": [0, 10, 9, 11.5], "texture": "#1"}, - "east": {"uv": [9, 10, 10.5, 11.5], "texture": "#1"}, - "south": {"uv": [0, 10, 9, 11.5], "texture": "#1"}, - "west": {"uv": [9, 10, 10.5, 11.5], "texture": "#1"}, - "up": {"uv": [6, 3, 15, 4.5], "texture": "#1"}, - "down": {"uv": [6, 3, 15, 4.5], "rotation": 180, "texture": "#1"} - } - }, - { - "name": "ns", - "from": [6.5, 6.5, -1], - "to": [9.5, 9.5, 17], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, - "faces": { - "north": {"uv": [9, 10, 10.5, 11.5], "texture": "#1"}, - "east": {"uv": [0, 10, 9, 11.5], "texture": "#1"}, - "south": {"uv": [9, 10, 10.5, 11.5], "texture": "#1"}, - "west": {"uv": [0, 10, 9, 11.5], "texture": "#1"}, - "up": {"uv": [6, 3, 15, 4.5], "rotation": 90, "texture": "#1"}, - "down": {"uv": [6, 3, 15, 4.5], "rotation": 90, "texture": "#1"} - } - }, - { - "name": "inner", - "from": [2, 6.75, 2], - "to": [14, 9.25, 14], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, - "faces": { - "north": {"uv": [0, 6.5, 6, 8], "texture": "#1"}, - "east": {"uv": [0, 6.5, 6, 8], "texture": "#1"}, - "south": {"uv": [0, 6.5, 6, 8], "texture": "#1"}, - "west": {"uv": [0, 6.5, 6, 8], "texture": "#1"}, - "up": {"uv": [0, 0, 6, 6], "texture": "#1"}, - "down": {"uv": [0, 0, 6, 6], "texture": "#1"} - } - }, - { - "name": "outer", - "from": [4, 6, 4], - "to": [12, 10, 12], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, - "faces": { - "north": {"uv": [0, 6, 6, 6.5], "texture": "#1"}, - "east": {"uv": [0, 6, 6, 6.5], "texture": "#1"}, - "south": {"uv": [0, 6, 6, 6.5], "texture": "#1"}, - "west": {"uv": [0, 6, 6, 6.5], "texture": "#1"}, - "up": {"uv": [1, 1, 5, 5], "texture": "#1"}, - "down": {"uv": [1, 1, 5, 5], "texture": "#1"} - } - } - ], - "groups": [ - 0, - { - "name": "gear", - "origin": [8, 8, 8], - "color": 0, - "nbt": "{}", - "armAnimationEnabled": false, - "children": [1, 2, 3, 4, 5, 6] - } - ] -} \ No newline at end of file diff --git a/fabric/src/main/resources/assets/cccbridge/models/block/wanze/preview.json b/fabric/src/main/resources/assets/cccbridge/models/block/wanze/preview.json deleted file mode 100644 index 3552660..0000000 --- a/fabric/src/main/resources/assets/cccbridge/models/block/wanze/preview.json +++ /dev/null @@ -1,313 +0,0 @@ -{ - "credit": "By Sammy.K via Blockbench", - "textures": { - "0": "cccbridge:block/wanze/wanze_side", - "1": "cccbridge:block/advanced_wheel", - "2": "create:block/axis", - "3": "create:block/axis_top", - "4": "cccbridge:block/wanze/wanze_top", - "particle": "cccbridge:block/wanze/wanze_side" - }, - "elements": [ - { - "name": "shaft", - "from": [6, 0, 6], - "to": [10, 16, 10], - "faces": { - "north": {"uv": [6, 0, 10, 16], "texture": "#2"}, - "east": {"uv": [6, 0, 10, 16], "texture": "#2"}, - "south": {"uv": [6, 0, 10, 16], "texture": "#2"}, - "west": {"uv": [6, 0, 10, 16], "texture": "#2"}, - "up": {"uv": [6, 6, 10, 10], "texture": "#3"}, - "down": {"uv": [6, 6, 10, 10], "texture": "#3"} - } - }, - { - "name": "ne-sw", - "from": [-1, 6.5, 6.5], - "to": [17, 9.5, 9.5], - "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, - "faces": { - "north": {"uv": [0, 10, 9, 11.5], "texture": "#1"}, - "east": {"uv": [9, 10, 10.5, 11.5], "texture": "#1"}, - "south": {"uv": [0, 10, 9, 11.5], "texture": "#1"}, - "west": {"uv": [9, 10, 10.5, 11.5], "texture": "#1"}, - "up": {"uv": [6, 3, 15, 4.5], "texture": "#1"}, - "down": {"uv": [6, 3, 15, 4.5], "rotation": 180, "texture": "#1"} - } - }, - { - "name": "ow", - "from": [-1, 6.5, 6.5], - "to": [17, 9.5, 9.5], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, - "faces": { - "north": {"uv": [0, 10, 9, 11.5], "texture": "#1"}, - "east": {"uv": [9, 10, 10.5, 11.5], "texture": "#1"}, - "south": {"uv": [0, 10, 9, 11.5], "texture": "#1"}, - "west": {"uv": [9, 10, 10.5, 11.5], "texture": "#1"}, - "up": {"uv": [6, 3, 15, 4.5], "texture": "#1"}, - "down": {"uv": [6, 3, 15, 4.5], "rotation": 180, "texture": "#1"} - } - }, - { - "name": "nw-se", - "from": [-1, 6.5, 6.5], - "to": [17, 9.5, 9.5], - "rotation": {"angle": -45, "axis": "y", "origin": [8, 8, 8]}, - "faces": { - "north": {"uv": [0, 10, 9, 11.5], "texture": "#1"}, - "east": {"uv": [9, 10, 10.5, 11.5], "texture": "#1"}, - "south": {"uv": [0, 10, 9, 11.5], "texture": "#1"}, - "west": {"uv": [9, 10, 10.5, 11.5], "texture": "#1"}, - "up": {"uv": [6, 3, 15, 4.5], "texture": "#1"}, - "down": {"uv": [6, 3, 15, 4.5], "rotation": 180, "texture": "#1"} - } - }, - { - "name": "ns", - "from": [6.5, 6.5, -1], - "to": [9.5, 9.5, 17], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, - "faces": { - "north": {"uv": [9, 10, 10.5, 11.5], "texture": "#1"}, - "east": {"uv": [0, 10, 9, 11.5], "texture": "#1"}, - "south": {"uv": [9, 10, 10.5, 11.5], "texture": "#1"}, - "west": {"uv": [0, 10, 9, 11.5], "texture": "#1"}, - "up": {"uv": [6, 3, 15, 4.5], "rotation": 90, "texture": "#1"}, - "down": {"uv": [6, 3, 15, 4.5], "rotation": 90, "texture": "#1"} - } - }, - { - "name": "inner", - "from": [2, 6.75, 2], - "to": [14, 9.25, 14], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, - "faces": { - "north": {"uv": [0, 6.5, 6, 8], "texture": "#1"}, - "east": {"uv": [0, 6.5, 6, 8], "texture": "#1"}, - "south": {"uv": [0, 6.5, 6, 8], "texture": "#1"}, - "west": {"uv": [0, 6.5, 6, 8], "texture": "#1"}, - "up": {"uv": [0, 0, 6, 6], "texture": "#1"}, - "down": {"uv": [0, 0, 6, 6], "texture": "#1"} - } - }, - { - "name": "outer", - "from": [4, 6, 4], - "to": [12, 10, 12], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, - "faces": { - "north": {"uv": [0, 6, 6, 6.5], "texture": "#1"}, - "east": {"uv": [0, 6, 6, 6.5], "texture": "#1"}, - "south": {"uv": [0, 6, 6, 6.5], "texture": "#1"}, - "west": {"uv": [0, 6, 6, 6.5], "texture": "#1"}, - "up": {"uv": [1, 1, 5, 5], "texture": "#1"}, - "down": {"uv": [1, 1, 5, 5], "texture": "#1"} - } - }, - { - "name": "lower", - "from": [1, 1, 1], - "to": [15, 5, 15], - "faces": { - "north": {"uv": [1, 11, 15, 15], "texture": "#0"}, - "east": {"uv": [1, 11, 15, 15], "texture": "#0"}, - "south": {"uv": [1, 11, 15, 15], "texture": "#0"}, - "west": {"uv": [1, 11, 15, 15], "texture": "#0"}, - "up": {"uv": [1, 1, 15, 15], "texture": "#4"}, - "down": {"uv": [1, 1, 15, 15], "texture": "#4"} - } - }, - { - "name": "upper", - "from": [1, 11, 1], - "to": [15, 15, 15], - "faces": { - "north": {"uv": [1, 1, 15, 5], "texture": "#0"}, - "east": {"uv": [1, 1, 15, 5], "texture": "#0"}, - "south": {"uv": [1, 1, 15, 5], "texture": "#0"}, - "west": {"uv": [1, 1, 15, 5], "texture": "#0"}, - "up": {"uv": [1, 1, 15, 15], "texture": "#4"}, - "down": {"uv": [1, 1, 15, 15], "texture": "#4"} - } - }, - { - "name": "vertical-ne", - "from": [15, 0, 0], - "to": [16, 16, 1], - "faces": { - "north": {"uv": [0, 0, 1, 16], "texture": "#0"}, - "east": {"uv": [15, 0, 16, 16], "texture": "#0"}, - "south": {"uv": [15, 0, 16, 16], "texture": "#0"}, - "west": {"uv": [0, 0, 1, 16], "texture": "#0"}, - "up": {"uv": [15, 0, 16, 1], "texture": "#0"}, - "down": {"uv": [0, 0, 1, 1], "texture": "#0"} - } - }, - { - "name": "vertical-es", - "from": [15, 0, 15], - "to": [16, 16, 16], - "faces": { - "north": {"uv": [0, 0, 1, 16], "texture": "#0"}, - "east": {"uv": [0, 0, 1, 16], "texture": "#0"}, - "south": {"uv": [15, 0, 16, 16], "texture": "#0"}, - "west": {"uv": [15, 0, 16, 16], "texture": "#0"}, - "up": {"uv": [15, 15, 16, 16], "texture": "#0"}, - "down": {"uv": [0, 15, 1, 16], "texture": "#0"} - } - }, - { - "name": "vertical-sw", - "from": [0, 0, 15], - "to": [1, 16, 16], - "faces": { - "north": {"uv": [15, 0, 16, 16], "texture": "#0"}, - "east": {"uv": [0, 0, 1, 16], "texture": "#0"}, - "south": {"uv": [0, 0, 1, 16], "texture": "#0"}, - "west": {"uv": [15, 0, 16, 16], "texture": "#0"}, - "up": {"uv": [0, 15, 1, 16], "texture": "#0"}, - "down": {"uv": [15, 15, 16, 16], "texture": "#0"} - } - }, - { - "name": "vertical-wn", - "from": [0, 0, 0], - "to": [1, 16, 1], - "faces": { - "north": {"uv": [15, 0, 16, 16], "texture": "#0"}, - "east": {"uv": [15, 0, 16, 16], "texture": "#0"}, - "south": {"uv": [0, 0, 1, 16], "texture": "#0"}, - "west": {"uv": [0, 0, 1, 16], "texture": "#0"}, - "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, - "down": {"uv": [15, 0, 16, 1], "texture": "#0"} - } - }, - { - "name": "side-upper-n", - "from": [1, 15, 0], - "to": [15, 16, 1], - "faces": { - "north": {"uv": [1, 0, 15, 1], "texture": "#0"}, - "east": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "south": {"uv": [1, 0, 15, 1], "texture": "#0"}, - "west": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "up": {"uv": [1, 0, 15, 1], "texture": "#0"}, - "down": {"uv": [1, 0, 15, 1], "rotation": 180, "texture": "#0"} - } - }, - { - "name": "side-upper-s", - "from": [1, 15, 15], - "to": [15, 16, 16], - "faces": { - "north": {"uv": [1, 15, 15, 16], "rotation": 180, "texture": "#0"}, - "east": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "south": {"uv": [1, 0, 15, 1], "texture": "#0"}, - "west": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "up": {"uv": [1, 15, 15, 16], "texture": "#0"}, - "down": {"uv": [1, 0, 15, 1], "texture": "#0"} - } - }, - { - "name": "side-upper-w", - "from": [0, 15, 1], - "to": [1, 16, 15], - "faces": { - "north": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "east": {"uv": [0, 1, 1, 15], "rotation": 90, "texture": "#0"}, - "south": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "west": {"uv": [1, 0, 15, 1], "texture": "#0"}, - "up": {"uv": [0, 1, 1, 15], "texture": "#0"}, - "down": {"uv": [1, 0, 15, 1], "rotation": 270, "texture": "#0"} - } - }, - { - "name": "side-upper-e", - "from": [15, 15, 1], - "to": [16, 16, 15], - "faces": { - "north": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "east": {"uv": [1, 0, 15, 1], "texture": "#0"}, - "south": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "west": {"uv": [15, 1, 16, 15], "rotation": 270, "texture": "#0"}, - "up": {"uv": [15, 1, 16, 15], "texture": "#0"}, - "down": {"uv": [1, 0, 15, 1], "rotation": 90, "texture": "#0"} - } - }, - { - "name": "side-lower-w", - "from": [0, 0, 1], - "to": [1, 1, 15], - "faces": { - "north": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "east": {"uv": [15, 1, 16, 15], "rotation": 270, "texture": "#0"}, - "south": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "west": {"uv": [1, 15, 15, 16], "texture": "#0"}, - "up": {"uv": [1, 15, 15, 16], "rotation": 90, "texture": "#0"}, - "down": {"uv": [15, 1, 16, 15], "texture": "#0"} - } - }, - { - "name": "side-lower-s", - "from": [1, 0, 15], - "to": [15, 1, 16], - "faces": { - "north": {"uv": [1, 15, 15, 16], "texture": "#0"}, - "east": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "south": {"uv": [1, 15, 15, 16], "texture": "#0"}, - "west": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "up": {"uv": [1, 15, 15, 16], "texture": "#0"}, - "down": {"uv": [1, 15, 15, 16], "texture": "#0"} - } - }, - { - "name": "side-lower-e", - "from": [15, 0, 1], - "to": [16, 1, 15], - "faces": { - "north": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "east": {"uv": [1, 15, 15, 16], "texture": "#0"}, - "south": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "west": {"uv": [0, 1, 1, 15], "rotation": 90, "texture": "#0"}, - "up": {"uv": [1, 15, 15, 16], "rotation": 270, "texture": "#0"}, - "down": {"uv": [0, 1, 1, 15], "texture": "#0"} - } - }, - { - "name": "side-lower-n", - "from": [1, 0, 0], - "to": [15, 1, 1], - "faces": { - "north": {"uv": [1, 15, 15, 16], "texture": "#0"}, - "east": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "south": {"uv": [1, 15, 15, 16], "texture": "#0"}, - "west": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "up": {"uv": [1, 15, 15, 16], "rotation": 180, "texture": "#0"}, - "down": {"uv": [1, 0, 15, 1], "texture": "#0"} - } - } - ], - "groups": [ - 0, - { - "name": "gear", - "origin": [8, 8, 8], - "color": 0, - "nbt": "{}", - "armAnimationEnabled": false, - "children": [1, 2, 3, 4, 5, 6] - }, - 7, - 8, - { - "name": "frame", - "origin": [0, 0, 0], - "color": 0, - "nbt": "{}", - "armAnimationEnabled": false, - "children": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] - } - ] -} \ No newline at end of file diff --git a/fabric/src/main/resources/assets/cccbridge/models/entity/animatronic.bbmodel b/fabric/src/main/resources/assets/cccbridge/models/entity/animatronic.bbmodel new file mode 100644 index 0000000..0536de5 --- /dev/null +++ b/fabric/src/main/resources/assets/cccbridge/models/entity/animatronic.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.5","model_format":"modded_entity","box_uv":true},"name":"animatronic","model_identifier":"animatronic","modded_entity_version":"1.17","modded_entity_flip_y":true,"visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"unhandled_root_fields":{},"resolution":{"width":64,"height":64},"elements":[{"name":"head","box_uv":true,"rescale":false,"locked":false,"from":[-5,19,-7.500000000000002],"to":[5,29,2.5000000000000004],"autouv":0,"color":0,"origin":[0,6,-2.4999999999999996],"faces":{"north":{"uv":[10.000000000000002,10.000000000000002,20,20],"texture":0},"east":{"uv":[0,10.000000000000002,10.000000000000002,20],"texture":0},"south":{"uv":[30.000000000000004,10.000000000000002,40,20],"texture":0},"west":{"uv":[20,10.000000000000002,30,20],"texture":0},"up":{"uv":[20,10.000000000000002,10,0],"texture":0},"down":{"uv":[30,0,20,10.000000000000002],"texture":0}},"type":"cube","uuid":"983326be-c52f-6d62-e8f9-2fc169cb7792"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"from":[-3,10,-4.500000000000002],"to":[3,18,-0.5],"autouv":0,"color":9,"origin":[0,6,-2.4999999999999996],"uv_offset":[0,20],"faces":{"north":{"uv":[4.000000000000002,24,10.000000000000002,32],"texture":0},"east":{"uv":[0,24,4.000000000000002,32],"texture":0},"south":{"uv":[14.000000000000004,24,20.000000000000004,32],"texture":0},"west":{"uv":[10.000000000000002,24,14.000000000000004,32],"texture":0},"up":{"uv":[10.000000000000002,24,4.000000000000002,20],"texture":0},"down":{"uv":[16,20,10,24],"texture":0}},"type":"cube","uuid":"53b35782-90ec-ae42-69f9-03af3c6eee02"},{"name":"shoulder","box_uv":true,"rescale":false,"locked":false,"from":[-6,15.5,-2.9999999999999996],"to":[6,16.5,-1.9999999999999996],"autouv":0,"color":4,"origin":[0,6,-2.4999999999999996],"uv_offset":[26,20],"faces":{"north":{"uv":[27,21,39,22],"texture":0},"east":{"uv":[26,21,27,22],"texture":0},"south":{"uv":[40,21,52,22],"texture":0},"west":{"uv":[39,21,40,22],"texture":0},"up":{"uv":[39,21,27,20],"texture":0},"down":{"uv":[51,20,39,21],"texture":0}},"type":"cube","uuid":"68f5c928-414f-4de7-09b2-46ea4d076351"},{"name":"right","box_uv":true,"rescale":false,"locked":false,"from":[5,6,-3.4999999999999996],"to":[7,18,-1.4999999999999996],"autouv":0,"color":4,"origin":[0,6,-2.4999999999999996],"uv_offset":[0,32],"faces":{"north":{"uv":[2,34,4,46],"texture":0},"east":{"uv":[0,34,2,46],"texture":0},"south":{"uv":[6,34,8,46],"texture":0},"west":{"uv":[4,34,6,46],"texture":0},"up":{"uv":[4,34,2,32],"texture":0},"down":{"uv":[6,32,4,34],"texture":0}},"type":"cube","uuid":"d43891b0-0785-c032-0498-f7f5719adaf6"},{"name":"left","box_uv":true,"rescale":false,"locked":false,"from":[-7,6,-3.4999999999999996],"to":[-5,18,-1.4999999999999996],"autouv":0,"color":4,"origin":[0,6,-2.4999999999999996],"uv_offset":[20,20],"faces":{"north":{"uv":[22,22,24,34],"texture":0},"east":{"uv":[20,22,22,34],"texture":0},"south":{"uv":[26,22,28,34],"texture":0},"west":{"uv":[24,22,26,34],"texture":0},"up":{"uv":[24,22,22,20],"texture":0},"down":{"uv":[26,20,24,22],"texture":0}},"type":"cube","uuid":"3545fcdc-da31-0c11-27f1-bd071718f1c2"},{"name":"neck","box_uv":true,"rescale":false,"locked":false,"from":[-1,18,-3.4999999999999996],"to":[1,20,-1.4999999999999996],"autouv":0,"color":4,"origin":[0,6,-2.4999999999999996],"uv_offset":[8,32],"faces":{"north":{"uv":[10,34,12,36],"texture":0},"east":{"uv":[8,34,10,36],"texture":0},"south":{"uv":[14,34,16,36],"texture":0},"west":{"uv":[12,34,14,36],"texture":0},"up":{"uv":[12,34,10,32],"texture":0},"down":{"uv":[14,32,12,34],"texture":0}},"type":"cube","uuid":"58c87944-0655-3c67-4c79-e25cf0ecc2aa"}],"outliner":[{"name":"root","origin":[0,14,0],"color":0,"uuid":"138ba760-ee55-83ad-2ae1-86dc0f45a078","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"head","origin":[0,20,-2.4999999999999996],"color":0,"uuid":"b63c1834-bb3b-e14d-d441-411f4061f7bd","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["983326be-c52f-6d62-e8f9-2fc169cb7792"]},"58c87944-0655-3c67-4c79-e25cf0ecc2aa","53b35782-90ec-ae42-69f9-03af3c6eee02","68f5c928-414f-4de7-09b2-46ea4d076351",{"name":"rightarm","origin":[6,16,-2.4999999999999996],"color":0,"uuid":"b96240a4-e136-4252-e14e-8a9e40a7912a","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["d43891b0-0785-c032-0498-f7f5719adaf6"]},{"name":"leftarm","origin":[-6,16,-2.4999999999999996],"color":0,"uuid":"651fbc5b-c499-0db1-89a2-b7c8b2a63a0d","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["3545fcdc-da31-0c11-27f1-bd071718f1c2"]}]}],"textures":[{"path":"C:\\Users\\Sammy\\Documents\\GitHub\\cccbridge\\forge\\src\\main\\resources\\assets\\cccbridge\\textures\\entity\\animatronic\\body.png","name":"body.png","folder":"block","namespace":"","id":"0","particle":false,"render_mode":"default","render_sides":"auto","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"mode":"bitmap","saved":true,"uuid":"ce0d31b2-e9e8-fdac-090c-6229a474c760","relative_path":"../../../textures/entity/animatronic/body.png","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAABJZJREFUeF7tWU1IVFEUvlNmKqipOWr0RxJm1sIiN4kgYgSRi1ZREC1bBCIU7SLaBVEIFbSJaBFtatHPKtpYbYxwUaYShmSgjqmlMFlJE9+VM5y5c9+8e8eZ4c2bdzfPO++89875znfO+d4zJAxX2+GTMZgWl22WV1TX7pTH+dkJefwT/Z5wJze7wbePQoaPzqqZsRMAAEEh8H8VvxOcWre4UQJBIJjY5R0A7d3nY7rgCQkCgdihgqTavXl5yxj8bFLA2AkAsKmxQfpSX1Qvplem40dy8Mf4lPyT7Jwch13eAdBz6nqMZ1UHAliA5ZR9zoKnDy8Yg+8JBqgA6JzyNQC8BJzKwNclwJugE/1pJJo0y7zrAQU/Bn0rhDIdGDVHNyVoapdtwRTKNLVJLueLYgzpFB41OQRjq/BUJcjv5XQ/taliH5lfkPI6281SAsCVm67D24w3rgRNFKMKEN/nQjGGdAJHdVwVONxJlS2kBJ2CJxZwxaiCkEvFqAWACx3u8OXhBXGwcUUcD1ckCMFnkUXxfrxIXG2pSpDCqQLzimSOl4CTs3CUSmBPU6sMEC9CfOFarNGxoZQvQ/QMXUk5lV5OegB1bB0Ia22CBBTdW3e/VMoy6wCkMwbD1VVxFvCObfNBxHRc5kQHkDM0wnB0+9RF5UC0t/0k5hkhpL7W7qjbEivZUCmW//4U/BguLxeRpSWhHse+jWjf6z/374t9/TIntu+qEXUdx0RF67XQq96GGPZY+G1m4IWAzc9lISpLhDh09ow8R7/jbxv7rv4p628MSRc0bW2OqcHTXgfC65FB7UMXhy7Jj6jv7j+QQSBQ24AoOQQi3Y8Ao98BGBaeYQtCkvNrZQAyj+zyBRAo+N29H62zpLI0k/uMMyDvAADldYiOtvVIcXN67okV4M8vro/bExOIojjhOQZQzcM5NL2WurCYjf4SA82dIvq4TxzY1hlvfOgFZId+oFtXjkzGG5d6Pp0atUI/DeNQKgAmbvSJo+3OANSWlUqw6Ijn3zsXTWp4Hz6tNsD9e2u8yQAOHDHgZnG3pD/tMQL5IgaoIPR1TMqRxjs+XQcgTty1H1VpJNb4EskAGm+4CgFjDc9E5PF2R7m4M1Ya3/NR6MQAejr1AE9PAWqCamAAgMAAzbkIQoBODND1ACoBMMN2ThunMk3DBAYgKMoqAqbsAwAsVQnqGMABIPHDffMkAGptIzBiAA9e1wNU4AEALZKxtPfkFCDnoNPpb2hyaHclOFUvOL4DqD2A9tADntMB5By0u4umNgZAp/vxHE8CgMzztzA4ymu3q3/1X94plqe0vZuz6vmkV1TKFAHhewB0Ly9e1u62GXazD3EAeOB0odealltAtudlCVAP4IqNlUBe17gbIAk9QDX24tx2C8j2fAIA6vgqGAAINXxr48uL2t02w272kgFq4HRRwQCgokQaviBKAGNQ1/zwG4AoiDHIM47A+Vj02uurW03bnvf1jDcBIwDABCU/2wQM8HN2TWILGGCCkp9tAgb4ObsmsQUMMEHJzzYBA/ycXZPYAgaYoORnm4ABfs6uSWwFz4D/tfP8bichFEQAAAAASUVORK5CYII="}]} \ No newline at end of file diff --git a/fabric/src/main/resources/assets/cccbridge/models/item/animatronic_block.json b/fabric/src/main/resources/assets/cccbridge/models/item/animatronic_block.json new file mode 100644 index 0000000..b29148c --- /dev/null +++ b/fabric/src/main/resources/assets/cccbridge/models/item/animatronic_block.json @@ -0,0 +1,168 @@ +{ + "credit": "Made with Blockbench", + "parent": "cccbridge:block/animatronic_block", + "texture_size": [64, 64], + "textures": { + "0": "cccbridge:block/animatronic_block", + "1": "cccbridge:entity/animatronic/body", + "2": "cccbridge:entity/animatronic/face_happy", + "particle": "cccbridge:block/animatronic_block" + }, + "elements": [ + { + "name": "base", + "from": [7.5, 2, 7.5], + "to": [8.5, 10, 8.5], + "faces": { + "north": {"uv": [6, 7, 6.5, 11], "texture": "#0"}, + "east": {"uv": [6.5, 7, 7, 11], "texture": "#0"}, + "south": {"uv": [7, 7, 7.5, 11], "texture": "#0"}, + "west": {"uv": [7.5, 7, 8, 11], "texture": "#0"}, + "up": {"uv": [8.5, 4.5, 8, 4], "texture": "#0"}, + "down": {"uv": [8.5, 4.5, 8, 5], "texture": "#0"} + } + }, + { + "name": "stick", + "from": [2, 0, 2], + "to": [14, 2, 14], + "faces": { + "north": {"uv": [6, 0, 12, 1], "texture": "#0"}, + "east": {"uv": [6, 1, 12, 2], "texture": "#0"}, + "south": {"uv": [6, 2, 12, 3], "texture": "#0"}, + "west": {"uv": [6, 3, 12, 4], "texture": "#0"}, + "up": {"uv": [6, 6, 0, 0], "texture": "#0"}, + "down": {"uv": [6, 6, 0, 12], "texture": "#0"} + } + }, + { + "name": "head", + "from": [3, 14, 0.5], + "to": [13, 24, 10.5], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 14, 5.5]}, + "faces": { + "north": {"uv": [5, 2.5, 7.5, 5], "texture": "#1"}, + "east": {"uv": [2.5, 2.5, 5, 5], "texture": "#1"}, + "south": {"uv": [0, 2.5, 2.5, 5], "texture": "#1"}, + "west": {"uv": [7.5, 2.5, 10, 5], "texture": "#1"}, + "up": {"uv": [5, 2.5, 2.5, 0], "rotation": 90, "texture": "#1"}, + "down": {"uv": [7.5, 0, 5, 2.5], "rotation": 270, "texture": "#1"} + } + }, + { + "name": "face", + "from": [13.23223, 14, 0.45406], + "to": [13.23223, 24, 10.45406], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 14, 5.5]}, + "faces": { + "east": {"uv": [2.5, 2.5, 5, 5], "texture": "#2"} + } + }, + { + "name": "neck", + "from": [7, 13, 4.5], + "to": [9, 15, 6.5], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 1, -2.5]}, + "faces": { + "north": {"uv": [2.5, 8.5, 3, 9], "texture": "#1"}, + "east": {"uv": [2, 8.5, 2.5, 9], "texture": "#1"}, + "south": {"uv": [3.5, 8.5, 4, 9], "texture": "#1"}, + "west": {"uv": [3, 8.5, 3.5, 9], "texture": "#1"}, + "up": {"uv": [3, 8.5, 2.5, 8], "texture": "#1"}, + "down": {"uv": [3.5, 8, 3, 8.5], "texture": "#1"} + } + }, + { + "name": "body", + "from": [5, 5, 3.5], + "to": [11, 13, 7.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 7.5]}, + "faces": { + "north": {"uv": [1, 6, 2.5, 8], "texture": "#1"}, + "east": {"uv": [0, 6, 1, 8], "texture": "#1"}, + "south": {"uv": [3.5, 6, 5, 8], "texture": "#1"}, + "west": {"uv": [2.5, 6, 3.5, 8], "texture": "#1"}, + "up": {"uv": [2.5, 6, 1, 5], "texture": "#1"}, + "down": {"uv": [4, 5, 2.5, 6], "texture": "#1"} + } + }, + { + "name": "shoulder", + "from": [2, 10.5, 5], + "to": [14, 11.5, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 1, -2.5]}, + "faces": { + "north": {"uv": [6.75, 5.25, 9.75, 5.5], "texture": "#1"}, + "east": {"uv": [6.5, 5.25, 6.75, 5.5], "texture": "#1"}, + "south": {"uv": [10, 5.25, 13, 5.5], "texture": "#1"}, + "west": {"uv": [9.75, 5.25, 10, 5.5], "texture": "#1"}, + "up": {"uv": [9.75, 5.25, 6.75, 5], "texture": "#1"}, + "down": {"uv": [12.75, 5, 9.75, 5.25], "texture": "#1"} + } + }, + { + "name": "right", + "from": [13, 1, 4.5], + "to": [15, 13, 6.5], + "rotation": {"angle": 22.5, "axis": "z", "origin": [13, 11, 5.5]}, + "faces": { + "north": {"uv": [0.5, 8.5, 1, 11.5], "texture": "#1"}, + "east": {"uv": [0, 8.5, 0.5, 11.5], "texture": "#1"}, + "south": {"uv": [1.5, 8.5, 2, 11.5], "texture": "#1"}, + "west": {"uv": [1, 8.5, 1.5, 11.5], "texture": "#1"}, + "up": {"uv": [1, 8.5, 0.5, 8], "texture": "#1"}, + "down": {"uv": [1.5, 8, 1, 8.5], "texture": "#1"} + } + }, + { + "name": "left", + "from": [1, 1, 4.5], + "to": [3, 13, 6.5], + "rotation": {"angle": 45, "axis": "x", "origin": [3, 11, 5.5]}, + "faces": { + "north": {"uv": [5.5, 5.5, 6, 8.5], "texture": "#1"}, + "east": {"uv": [5, 5.5, 5.5, 8.5], "texture": "#1"}, + "south": {"uv": [6.5, 5.5, 7, 8.5], "texture": "#1"}, + "west": {"uv": [6, 5.5, 6.5, 8.5], "texture": "#1"}, + "up": {"uv": [6, 5.5, 5.5, 5], "texture": "#1"}, + "down": {"uv": [6.5, 5, 6, 5.5], "texture": "#1"} + } + } + ], + "groups": [ + { + "name": "VoxelShapes", + "origin": [0, 0, 0], + "color": 0, + "children": [0, 1] + }, + { + "name": "root", + "origin": [0, 14, 0], + "color": 0, + "children": [ + { + "name": "head", + "origin": [0, 20, -2.5], + "color": 0, + "children": [2, 3] + }, + 4, + 5, + 6, + { + "name": "rightarm", + "origin": [6, 16, -2.5], + "color": 0, + "children": [7] + }, + { + "name": "leftarm", + "origin": [-6, 16, -2.5], + "color": 0, + "children": [8] + } + ] + } + ] +} \ No newline at end of file diff --git a/fabric/src/main/resources/assets/cccbridge/models/item/wanze.json b/fabric/src/main/resources/assets/cccbridge/models/item/wanze.json deleted file mode 100644 index f4a3c19..0000000 --- a/fabric/src/main/resources/assets/cccbridge/models/item/wanze.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "cccbridge:block/wanze/preview" -} \ No newline at end of file diff --git a/fabric/src/main/resources/assets/cccbridge/textures/block/advanced_wheel.png b/fabric/src/main/resources/assets/cccbridge/textures/block/advanced_wheel.png deleted file mode 100644 index ba91e10fd8a5e01dc99089bcd51abff13c473c08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 390 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCijK0(?STiz_Q@>Kp2tIwS=-<;A$Oa*J7jQVa}T6DG`_J4Zu?zpbM^DmH4# z(mDBs1t1AWi331Vpd`pI_&+LOc%U3B36$e3@Q5sCVBk9p!i>lBSEK+14|}>ehFJKY zop_h8*?_~1(RF1+?f>m}ulMOB-g=XFd*=o=zo+g@XOzxV%v>fphf|65~}bsRr~Eg zlO?Na)<%^n-2syy#43C>TQ*z6^`=Wy$PuB;tAgG&Vi$ZCxE~P`h~nPcIq|~!=0<_% z6Y@E(|84d#Td^bgfWuYU|4UsqIX?Sz>ac)$ad*mN{bN1FC*HSyu3-=|)_18l^ErS1hD5>K$XMW1JY~mQ(*F6)AQ1n3W|B_8 zt2d0`zkYlLRy}^1u7V4xqE%IaB|uy+`Wm3$fBd)t`4h*;-2K#4S&H9sZAOEY;Pf6# z1%y!_YHE3Xq?*HZTfByScWrf&JCwmZ>Y@Tnvju8 znt(#7tg53|DU|@AvIjVAwix<8PQ^2{0l*+x?H`R=8nT5_8Oybqw4V?%Iz*UpzhIjz z(~w(+GxC9hQ}N7fHJn}Eyc=+r>;ZC%Xv|`;-cCn@^sRMUb#F~TA30q_uoj#I-nHC` z1OW0U4o<~UPN(9iRv2yhy?f8&$jTpH)M^`tkqA!&s#i&#U6B(*PDC9-$Z}gm!Tca? z$R;^0*ETkw_eOAU1oYDDf#dc;T2LsJH|9U-NERGSgs>J~(ryU*-vi*S0%WjLT@8gzx#1Tgv@xS;7 XKB`XztQWwu00000NkvXXu0mjf6Y(k3 literal 0 HcmV?d00001 diff --git a/fabric/src/main/resources/assets/cccbridge/textures/block/redrouter/background.png b/fabric/src/main/resources/assets/cccbridge/textures/block/redrouter/background.png index 0190758c46d6695b8daa57587ee7f94ee0ab49b4..5fd285282c84b21f7fa00064c24aabc60e2f1f83 100644 GIT binary patch delta 316 zcmeyu_=RbLW4(8PPl&6Jk55cYjGCI7s;a7nhDJn0gqD_;rlzKolarpFp02L0zP`S? zy85wW$3j9vbaZr-l#~hz3beJgv$L~RR8*Rpnv|85Yiep37#L>#ZGQx$Buj$)g8$&xj6vlgD)m3Qy| z66d#@QtXc%IIXO-bw7{87M&+QnV6W^8MbqFq^d0{e=B#*r26I*8G##Dj`VYW%X3(~ zQkrkM;GQkI((%Xm5~s~EDXc14?C>O_R%PP?ixnMO&n8ybn7&S(;qmUe!L3e{cu$Mx sua>8U#sB@f@86|Y9-4dQ9!$Sxx0IQ;BF0ncG0zopr0L5U0(EtDd delta 187 zcmeyu^o4PPW4%OxPl#)Ba&kpQMOavvmX=mtUf!fhle)XR85kIZ@>fa$DUOmLzu^B6 zz;Lg5ZzNERv%n*=n1O-s5C}7hYIrpO1p_@@978mMd;1;v4k&Q21hV}5|M*bZ>SZ4v zNK8(>!|e5^K_Jt2l7ES+>65vev-CHfy=rpuFwe2jWP|1`3F8eS=Xm~HxzW3Kwg2Nk g-WD5bmPfeQ7`m{8%qt9B4>X;@)78&qol`;+0H2Ub$N&HU diff --git a/fabric/src/main/resources/assets/cccbridge/textures/block/redrouter/connector.png b/fabric/src/main/resources/assets/cccbridge/textures/block/redrouter/connector.png deleted file mode 100644 index e03a70f471a94c14512326944437a27187374597..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 217 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|^0G|-of`WpSloTy3EgNfVGcz-wa7@~ib|A%8666>B9|RaS?_aVXD8gCb z5n0T@z;_sg8IR|$NC67kdAc};XavvgbrfPSU||;g_y6f4W47&O{Cw7(6LjlXE#FK@ z@Z7}^@^sl}4v`s$lov1Z6W%iaSenoD7dG6RnJt&H=zG2tj{us);OXk;vd$@?2>?!% BKwAI+ diff --git a/fabric/src/main/resources/assets/cccbridge/textures/block/redrouter/face/0.png b/fabric/src/main/resources/assets/cccbridge/textures/block/redrouter/face/0.png new file mode 100644 index 0000000000000000000000000000000000000000..1659e4afe72509e208617e81a152e89bf8802bf5 GIT binary patch literal 370 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|y0G|+7A0MBXm>8qTrx6hm<_Z5Tll~jW{5FmI>*VBQmHgi<{-0sgPwSNb zwrT%OV*mXA|34%o#3J#(QS`5Zf`aVq?53usnwlD*VGAWoCIcynk|4iepfYTL;jFOU zE1(+A0*}aI1_r+UAk1jN8ms~o?DuqW4ABUV?GF@cR^V|lygNZ?wcy2~|Fg~9tmeM_ z!0FX{OPRw{t_}dGdIf zA8GRhnfCNbL~MThK*&wG-Yi0Q)fE|;kb~Aoa`Z}C0yi>niMCwy4_e>aI`!P{UzW2j mSN~ZmKk?eS>W28L{|td`JbM`L&Cmimjlt8^&t;ucLK6Vi1Cdq$ literal 0 HcmV?d00001 diff --git a/fabric/src/main/resources/assets/cccbridge/textures/block/redrouter/face/1.png b/fabric/src/main/resources/assets/cccbridge/textures/block/redrouter/face/1.png index 1352829ce37143b5c29309530aa25ef8479ee1fe..c4bc77faafa0039d6dc99e98fa12115aead3e389 100644 GIT binary patch delta 321 zcmdnS_>*aZW4&L1Pl&6Jk55cYjGCI7s;a7nhDJn0gqD_;rlzKolarpFp02L0zP`S? zy1KTuwvLWYNJz;4|NoVglnM$8va_>QR8$ld6`Puxl$DihYHAo581_cGumUNmk|4ie zpi1n3K}3n+76U^)180FpWHAE+-+mBgv|tTZ0qX7Zba4#P2#)P<tcLs3vRC=N5lFi@L&?2#k%P>~Wg223R`KPXdFNlX?9BOUlqIlt yu8Yg;<=dxN-hBD~{Kx5W?OuiUP4lb%GwGe+J8^jb8+M@67(8A5T-G@yGywpUMTL+6 delta 124 zcmey#w2g6sV<}sJPl)UP|Nj{n7(x$St^-m`B|(0{{~4ZcH}C@TI14-?iy0XB4uUY_ zj)~cCfr8qeE{-7@!O00O%qiRro+)a~6PSco9O6(jQiy6`)MH-gShGV!N+Gggq98*< X3B#u+yrnOI+88`t{an^LB{Ts5-ti|J diff --git a/fabric/src/main/resources/assets/cccbridge/textures/block/redrouter/face/10.png b/fabric/src/main/resources/assets/cccbridge/textures/block/redrouter/face/10.png index 6cc6c9fd2786bdec107dcaf0f0d28b1202e3bd10..5af035dba9dc40b275f1952595cade0edbe0be7a 100644 GIT binary patch delta 326 zcmdnW_>XCVW4&L1Pl&6Jk55cYjGCI7s;a7nhDJn0gqD_;rlzKolarpFp02L0zP`S? zy88eB|8;b9LPA1RR8*9dlnM$8w6(Rfv$GWy6`Puxl$DihYHAo57<#JxzXK_$k|4ie zpcd?aK}3n+76U^)180FpWHAE+-+mBgv|tTZ0qULX>Ealo5gglpTj-DikIQA%ys49} zUF!by-#)9s>Rd&I;%QGckDrTKl@2SMGZ#?EU?_Oqs9~*~75eU>VD(wePIjiP2F4TJ zbgmw_EU_wS_4gl~UrT4bTs&)I!zvT+z{gR&JVnOpS`%$=*c-~}%_zJx?|14M1M8X` z<5Qgx$0rG<$N%-&tQP%MFI~M delta 123 zcmeyzw3Ts!V+mV;Pl)UP|Nj{n7(x$St^-m`B|(0{{~4ZcH}C@TI14-?iy0XB4uCLY z*0oMfprDqgi(`mJaB_kRbBJ(5m(mRhrV|Wm2N=>FG!+^)EfCqo&?d&B5ZN$MkfCt_ W!$+%&uhs)~F?hQAxvX481k3}PM_de{ma(o z(TY^hB@G8GMLd-vH_U3(^)^s_e`~S&jn_dg?mIU+%~*Ow#PVHQ$ci_Kj-eL}Y~=k? z>hj(iaTVE>tdaifvSp)^;PZ&TKCP42{i}+ve|a`|^|ia%u&4qQzsO(GGEj?@Qim&+~Mb}DZCM;%?t|- o7&4Enlw{H1JJM*@(8$QJ=^dy1+0BbpfaWrIy85}Sb4q9e0G=-}R{#J2 diff --git a/fabric/src/main/resources/assets/cccbridge/textures/block/redrouter/face/12.png b/fabric/src/main/resources/assets/cccbridge/textures/block/redrouter/face/12.png index 8e34b436c19e577e6037ce0d06d11af4de47203d..f2d77e85cbf25d420dad3c84029e54557b4dc891 100644 GIT binary patch delta 318 zcmX@W_>F0TW4(8PPl&6Jk55cYjGCI7s;a7nhDJn0gqD_;rlzKolarpFp02L$|NsB> z_4U=&)pc}qLPA1RR8*9dlnM$8w6(Rfv$LC;nv|85Yiep37#Loh+ZYR^Buj$)f`PiQ z0tQACuI)fYoCO~Bk;M!QeEUI|(SkKt1t{9@>Ealo5ggkeD0EnXgZ1R(Nn(pUeJ)k~ zpDeaz?zxh`6X&ukZMEN}FiWjyUsJ;o&I7p|Ns?zeR^7eqyx3&2>SS)F*`kKwO{PLO z&IF0?{{F*rlIyfbx@i+56wd^iXup>0Ts-@xFcr&}|H!u6{1-oD!MBW(&XObHAktzHY5Rv57Z diff --git a/fabric/src/main/resources/assets/cccbridge/textures/block/redrouter/face/13.png b/fabric/src/main/resources/assets/cccbridge/textures/block/redrouter/face/13.png index 778bae270c2b5c0015f55ee87ba9c1f03da19e73..714be72c91f5cb2bee1f1ff3a61bdf653a2adfa1 100644 GIT binary patch delta 318 zcmdnT_>F0TW4(8PPl&6Jk55cYjGCI7s;a7nhDJn0gqD_;rlzKolarpFp02L0zP`S? zy88eB|8;b9LPA26l#~hz3bM1awY9ZXR8*Rpnv|85Yiep37#MzKr<(yO$&w(yV4!-e zfPvA3YdcU8XMsn3WHAE+-+mBgv|tTZ0gCo}x;Tbt1jqI_@*Ps(aoNpmomwLOV#@#j zLF)}RA5m8M^0i9y(!VQ>CrmiMGBdSEFx+9Au)^7RPuBMj9*eK3ayK5(Su^XZ&&Hk2 z4$Ybe&q>a^uzOk0t3F<_#p^WHy?0x4x%+8yIUdc);(q_9#{BBL4>s?O56ixFNYa^F v&~vqa&#^OC@6Z3NzqV}ZqxXDzTfedH*v~t!qV+b=p$rV3u6{1-oD!M<&l!jJ delta 132 zcmeyyw2yIuV=Y^NPl)UP|Nj{n7(x$St^-m`B|(0{{~4ZcH}C@TI14-?iy0XB4uCLY z*0oMfprEm*i(`mJaB_kR^A(|lh7Ko<84Mf;Ssg?|L|qtW@(MOEsswVha64RShzwv< eaoEJ5tjti^&hYS_N;DHtJA*(l&goNno>MAKI6%-U?XJ>0`YpbZJC@Ly8H8m+KE7#Q201f3^WvmXQ zBuaw(f`J;b0fw`}darE(N6$*n8Xe&65HP-t}dt8;};lS+M&!xo(-vlFdj%|cx18VkkL&iuaiZ4jWiW9 zLXylH?#i$oD#+-cXRyk1e$ny16FCnaJkIRnT0dK9Ra4v7Qs5cL$o#1!i<(Z=zdbb|vA_h-aKbLh*2~7YIse^<7 delta 134 zcmaFCw1shkBnKM<1B3kM|A`Y76^c0vJR*x382Ao=Fk{xWPEMetr>Bc!h=qUhpa1{u znN=G&y(aUn$YVHRZ_vZH;S}#4@efCtcCjc=abq<3$mHhW$QV{Qi%sdo`4bY_3o>;C kSTm&9To}1{6A~C0Ud$EYPhe141T>Vv)78&qol`;+06^O*uK)l5 diff --git a/fabric/src/main/resources/assets/cccbridge/textures/block/redrouter/face/15.png b/fabric/src/main/resources/assets/cccbridge/textures/block/redrouter/face/15.png index 987ce11235913c79ecc05bbd69908a51f7215436..04718aae52e11be015613f04f48818cf8d7a1d3b 100644 GIT binary patch delta 314 zcmX@f_=#zPW4(8PPl&6Jk55cYjGCI7s;a7nhDJn0#Q*>QwY0P}H8q`_ob>ec^!4@C z)zw2nLUeR=bai!=l#~hz3beJgv$L~RR8*Rpnv|85Yiep37#PA?oYw#;$&w(yV4xvb z0Ry86*LI*H&H|76$YKTtzWpG~Xu%q+0u=4`ba4#P2#)RV-77r9eyoc>tmbznNr{=Id(lbW-R5c^ z+HUl$O^AH_FvX-yW3!xP>N)d#krnf1-<=d0$P=<=kOBM1Mi04X(USi(WYwEHsTi rbH_D7K&WDQ#Fj*Mhxi%F?I&XLau`mBxAFZ18PDM9>gTe~DWM4fJS8&L diff --git a/fabric/src/main/resources/assets/cccbridge/textures/block/redrouter/face/16.png b/fabric/src/main/resources/assets/cccbridge/textures/block/redrouter/face/16.png index 80a0ba3d9d1e1328f05766ff7d07d54ff9ed6552..b1f477b2ee7b49665dd84f482b9a0b0de808cf5b 100644 GIT binary patch delta 321 zcmdnP_>*aZW4&L1Pl&6Jk55cYjGCI7s;a7nhDJn0gqD_;rlzKolarpFp02L0zP`S? zy88eB|FyNXLqbAybaa%IlnM$8va_=l6%|!fRGONal$DihYHAo57<%?DaRO3OB|(0{ zKrPq-gNPEtEe3{q2F?PH$YKTtzWpG~Xu%q+0@T~*>Ealo5ggmk$ahGA$91>A?z+Xd zS>_h~?~Y37?v!_WahjRy>i!Z36W=F085kRx8*VckF%r7Cs)~PeU(_@gK8|f{lT!}0 zt(DxMp;r4#Qr_`Q%FWxidU+4&>{d&yHBml%_olw7SPDC<)yK?N`;LAM)m!Y|7Rdji y!nLsHTK|^fPuK3x|E$0D%ac3bWd8)c7Qg1t`!sRJYZIW;7(8A5T-G@yGywo2u7yJY delta 130 zcmey#w1;tmV>MfVPl)UP|Nj{n7(x$St^-m`B|(0{{~4ZcH}C@TI14-?iy0XB4uCLY z*0oMfprE0ri(`mJaB_kR^A#b6B#T3O2TnBjG;yRb2s%t^p6KvZgDHU_vB^`QHDMu> d6H`wQL(NNu=X`8CZGoB@JYD@<);T3K0RaCEDaQZ+ diff --git a/fabric/src/main/resources/assets/cccbridge/textures/block/redrouter/face/2.png b/fabric/src/main/resources/assets/cccbridge/textures/block/redrouter/face/2.png index 952f152d8d6eef0106c364ae665e3efbb65edee9..461eef455747d4dc2e8481713c9fa7006e29e7f5 100644 GIT binary patch delta 331 zcmX@Y*vve^vEDDhC&bmq$0sHxMompkRaI3(Ln9(0LQ6~Q|NsA*nwm~dPI`KJ`uh6n z>gw9s+B!NqAt50uDk@4!O1iqb1qB7!+1ZMUicL*T%F4<$H8l(j3^Q))^#CcUk|4ie zpdr`+gNPEtEe3{q2F?PH$YKTtzWpG~Xu%q+0y4tW#W6%9IJQ4fs9Ax>KEgP`v7Rl!C&cyt|NjgO455cE*8wS}k|4j}{|ryJ8+ZYEoCO|{#S9F52SAuH z>slu#P|(uT#W6%9I61+E`3RSR!jXeI3XF>qb2K}WEFap^-R m4n_^>NCqAcv4j*BhPr5m_v#5@P zVc*WBk`-=kcAJ0otbedwCcP@uTr6N}nr3#~>_7*S6KkiPu{gI}KJ(fW|N6b__g`5X>~;J51NXJ^$3=M0UVU>V3g|!vPgg&ebxsLQ E00DH0od5s; delta 126 zcmey*w1aViV>w%ZPl)UP|Nj{n7(x$St^-m`B|(0{{~4ZcH}C@TI14-?iy0XB4uCLY z*0oMfprEd&i(`mJaB_kR^Aj$E1`Pwo;Kp+TPgg&ebxsLQ0Pt`o2><{9 diff --git a/fabric/src/main/resources/assets/cccbridge/textures/block/redrouter/face/4.png b/fabric/src/main/resources/assets/cccbridge/textures/block/redrouter/face/4.png index b34f4890f743f2c4c08755c409fd82f76518e9fe..30b66b41cd748bb3e94c07aaf7cbc9c1a94214c3 100644 GIT binary patch delta 338 zcmdnU_>XCVBnLAC1A~SxfAB;_g?hgLpAc6cAD@_*7&SFDRaI3D4ULG12rVrwO-)TF zCnr5UJzZU0eSLj(b@l)M|A&NxsHmtYDJkjb=oAzbXlrX{XJ;!aDmFDWDJv`2)YJft z4!L>x36PR13GxdDYQYW|M3fkAF)-9Ka29w(7BevL?FV5-3)Wy2px()zE{-7@!Lj|l ze1{ZxT6QnK7sLKLvG~;Q{VP~a)Z`Qw#;?1s^wgiXgQt1NK8J<{j0e^-2bT4&2;JF! zvg)j57jxsXDKE?gy-O2hgB65#R`$<7;Bn5{c9o@Az|`HY!M9f_H`}Q3o2qWIZx(*s zY-a6wysFH7Za{m9`_2T@Yt;o`udd&b{pITX_2=VH-JDWfYyKfvGylvD-ixQEb4~!d OkHOQ`&t;ucLK6Vd#)$U- delta 131 zcmeyzw2^UwBnKM<1B3kM|A`Y76$&^DJR*x382Ao=Fk{xWPEMeto2QFoh=qUhpa1{u znN=G&y(aUvH8S2{5{zsR?6@e}aO45QZ0-cE4Hq?LIWkNazaW~F(bBk3oLfTCPebei hqgzDJGgdY>hP-M4@h=h&rUFf5@O1TaS?83{1OVfzDxv@Y diff --git a/fabric/src/main/resources/assets/cccbridge/textures/block/redrouter/face/5.png b/fabric/src/main/resources/assets/cccbridge/textures/block/redrouter/face/5.png index b35280768570c891e6b395309a513e0057dda6b3..b9dcb9bd5cf329373b778d1d0cb60a8a05fe7e0d 100644 GIT binary patch delta 338 zcmZ3<_>XCVBnLAC1A~SxfAB;_g?hgLpAc6cAD@_*7&SFDRaI3D4ULG12rVtG|NsAM zYHB(;IqB)?>FVn0>+7qlt7~g(>*(l&goLQ5s3<8Z6%-U?XJ;!aDmFDWDJv`2)YJft zescB2As{7H666;QGz2?f5K&^d#lTR{z**oCS>-KN?8?v^}?x6qLTE^`gc;|WazPbW* OAA_f>pUXO@geCw(O^8zopr094*4W&i*H diff --git a/fabric/src/main/resources/assets/cccbridge/textures/block/redrouter/face/6.png b/fabric/src/main/resources/assets/cccbridge/textures/block/redrouter/face/6.png index 48d9b32e5e8edfcdff5153f3f7979fe06afc196d..f8df71d127dcd1844456ba0c89729f96f122192b 100644 GIT binary patch delta 360 zcmV-u0hj*O1Cj)gK{cXKOjJcoOiWx{Tr?*qFd`y4EG#xDDL5)BIV&qzSXe$VFfbz{ zG9@K9Dk?lKE-@q|LPA23YApj)R8*0d9x!lla6d6IA`}$v?(RV|Giz&WEFK>4@bKs6 z=7NHPe0+QW000vp&Hw-a05)_|PE(QLB$4nDe*mG6PB8!g010qNS#tmY4!-~Z4!;37 z1ydvd006g1L_t(2Q(ceQ5`r)c0BhTT60B7U-qNUe;DL($|6h}$jx+94va=5fbAPmg zu}+6IdSw#5!80)b@rM))ERqQ0TTDmWa$7v*VVB%CqCi@uhPsN@hxsoU;&FT%B04NAHYq7MDk?cED?TtVFe4)}B_%g1Dm*SO zF(f3Bb}f;n9w0w4F(MQc?(XhEGczn69`Nw+=jP@B000!|ov;7^04-Kl6+H2gbPoneZ>9Dh154EY~w=gT<;WZ3QM=VQOsFo9%9YXpR_x zw{$vNv=`$VgW diff --git a/fabric/src/main/resources/assets/cccbridge/textures/block/redrouter/face/7.png b/fabric/src/main/resources/assets/cccbridge/textures/block/redrouter/face/7.png index fa74d68c90ad8f8f151ebac1556be3185c38b7ed..f4934d33616e9c64b007f0a3ac11c5049ab54f54 100644 GIT binary patch delta 337 zcmdnS_?KydBnLAC1A~SxfAB;_g?hgLpAc6cAD@_*7&SFDRaI3D4ULG12rVrwO-)TF zCnr5Uz5oCJ>+9>QtE=ni=!ArXsHmtYDJkjd>J}6fXlrX{XJ;!aDmFDWDJv`2)YJft zR_5+G1Ei!%g8YJkda(lr5haFO3=H)QoCO|{#S9F5`$3q|f;CtLsCSa5i(`mJaBTlW zp=Jf1=In&humH#B$A0gB!Sv#7-b4Ps9*aZBnLAC1A~SxfAB;_g?hgLpAc6cAD@_*7&SFDRaI3D4ULG12rVrwO-)TF zCnr5UJzZU0eSLj(b#-lRZ5;mLm&>e+mre;=5&Et^(A@F3mdK II;Vst0Pg&PFaQ7m delta 125 zcmey#w3=~(BnKM<1B3kM|A`Y76|y)BJR*x382Ao=Fk{xWPEMetgQtsQh=qUhpa1{u znN=G&y(aUz@k;QpDJ*Bs;cOE0dOXFsjM2xCqv1x&j|7KM{Ryleb~2XCVW4&L1Pl&6Jk55cYjGCI7s;a7nhDJn0gqD_;rlzKolarpFp02L0zP`S? zy88eB|8;b9LPA1RR8*9dlnM$8w6(Rfv$GWy6`Puxl$DihYHAo57<#JxzXK_$k|4ie zpcd?aK}3n+76U^)180FpWHAE+-+mBgv|tTZ0qULX>Ealo5ggkeD0E1H$K|rB-ZZAI zTf%n!cjXN@E;(KPQ^iS^mGv(jQf3|b#L8q*%87w_8GwCao^8*j8R*NNI~(-ycG+7}$Kmz*}`#rNZdl9FfK z+5-Js%&t`x^j$qa!}Qjx_20ivulh3O(mUBdL9f|&$nvhp-#X6VSRmldU|?ZUS4~9dt+nc+_`h7 zO`BF;Ue3V4;H4VZ2&DK+g8YL2qX330cV;XEN^ur=L>4nJ@ErtU#vK#0-vR}rJzX3_ zG=g)x1Nj;ZIGovwwN~8uzavWQ(u@_=@oyJz`Eg-UXP4Ms?ktb^ik^jB3$?XxsIYoZ z?4G-GhF;6gAA6S=JUgT?XXl5Pj}jQ&_3p?ON9pMq>+>W!?CIFSC{WA&%QkemG|(Of MPgg&ebxsLQ0O^%rBme*a delta 185 zcmbQm^oenTW4&mAPl#(qMn-FEYk7J3#EBC(Y}l}3#R>)n2E(_f%77GmNswRge=uN> z@@94e3UL;AL>4nJ@ErnSMo|r~2B2WDr;B5VMsRC)AlCr{4rkNQ_w`R^DlFA*-pk+F zf8^DnQ!)plY8k$Z9mw0d&?1b@@0p;;3>^!jpZPyh4!Ze>T~t!<{*xo4cH_j2wvFn7 fnj%qqR#Y*p_{M5=FVVpZXg-6dtDnm{r-UW|FpWqh diff --git a/fabric/src/main/resources/assets/cccbridge/textures/block/redrouter/redrouter_side.png b/fabric/src/main/resources/assets/cccbridge/textures/block/redrouter/redrouter_side.png index 7b53360e113f0d85c3ebea2793bedb4f39929747..112891adac2d78260315af0a44273bf3bc2e22e7 100644 GIT binary patch delta 497 zcmVQGZHBkTE7r)A;W9`vC6u zdkiUKOb9U=jR0t^l~UgOJkQ(hw)g&ey+#~kOluuNpdo|^eZ5}${T@J)B+j`cNu-nj zrqk)|c6+^Eku41&v|23yQpzMrmdoW|JM?zWYqSsFl56j_#e@11ko?G`{p z$01V6G)=9wp90SLWHRY?yT{{kwOTc}#*|V;Q7ENOr_=ZMHw92tRczp#i@bjpXswH) zFve6>^;z0EXN&~=SDw`Z+?FROmGb&$-4fQ00000NkvXXu0mjfP0!-i delta 315 zcmV-B0mS}*1j_=D8Gi-<001BJ|6u?C0TM|>K~y-6jgzsBgfI|AKayEF7$KP!$ea;U z3x!Yvg-`)S(9I%Q6IeLl0^gw7J%er%ko^7p|BPLE?@y>AA~5syZJh%Ey!ZV>^QvpS z_Zg)%_R&Wpj4t+mIbDD?n9^{8m8ApPed?BN`FPVhL%85hM9{34JyGx z2w-LyBKnhcp69A`+B8k4*0#>Uyz2Va-kmFP002hD^OW-rcBGWYsEJRY@2FP~`o4#? z767nq+vCZ@FaQ8zj9Aw-_rO|<7~{X9hz|H|;*kQzO+RD#{{gW)mj>2cHPQe8 N002ovPDHLkV1hgojnn`D diff --git a/fabric/src/main/resources/assets/cccbridge/textures/block/redrouter/redrouter_top.png b/fabric/src/main/resources/assets/cccbridge/textures/block/redrouter/redrouter_top.png index 66e09d7863156bc2c5ad1732169caa3138be3231..95a46cbc026287b827df0ab54699f21cde5a1fde 100644 GIT binary patch delta 487 zcmVM#(7Url3^R3a6+5(E+4 zxYR%5zZW;cQ9%$t8r$ZJ*1MQ{de1$xnwh-GJnxXfa=8Q`gaE)f2M}YVyf1%t5+THT zy=II_DXq0qO8g&>#{+fTV@%UD=kpmrnx@|SG)-B1y zhG>%*<9IvRvcmzOd8lsfSvdlU6 z_ks|js;WHCopVjo^twK@)@50aMx(ZE0VLGDUav|i?>%w9U5Z*Bs7ccZnxXr zZbzbDL$ucPM-m}~wU&QdJe^JRSK+ delta 209 zcmeyy{D^UaWIZzj1A~Sxe=v|@EDmyaVpw-h<|UBBlJ4m1$iT3%pZiZDE0E6_;1lB7 z+S*!PUJm3P&8%Jlq?k*B{DS}gXSjZf7pRtjv%n*=n1O-s5C}7hYIrpO1%o|Z978mM zQ~S924k&OqYk#-j^7rhHwVh1-T}gI_ycoD`#3KBJx+5DdGhf=$Uaoud`5U%b!U;AD z){EGP@v BMTr0a diff --git a/fabric/src/main/resources/assets/cccbridge/textures/block/scroller/cage.png b/fabric/src/main/resources/assets/cccbridge/textures/block/scroller/cage.png index 0aa95532f787f9a1c43fff872f49b1de17862258..6d0ea5e70ff12b8f5dc6ff90bdc8f7c1ba684d33 100644 GIT binary patch delta 167 zcmeyyc!6<(VZB6vPl#)Kd;7e3^CnK5SY2JcV#SIbJ9b>Ta)p6`LB8~5Fp%OX3Gxg6 z4*?AKn)gNm#ezIt9780gPVM&=I$*%z#A<)%|1ncz-^nFccNIM_T=CNMo3DZ6q8hGa zJOU>3S*8S;6mxg1IhBHoTpy@ZsIlz}JWG@csUIhgEw!>kn?H Sr-?x089ZJ6T-G@yGywokpiF51 delta 205 zcmcb>_>FObVLeN_qpu?a!^VE@KZ&di3=9$hJ|V81ot^XM&6_xJVpCJoiWMu?uV24w z*Dj#soAXmEffPqckYDhB2w=F^yf+dk##!JIS9e%t8=c1Gw7+wv%bBMyg(ahK7*&LpUXO@geCx9`%cvW diff --git a/fabric/src/main/resources/assets/cccbridge/textures/block/scroller/interface.png b/fabric/src/main/resources/assets/cccbridge/textures/block/scroller/interface.png index 92f988d27b1e776ef2eb4db72b6b32474a1fbb44..9272c13f30e991358e49ce7dac0e897dada65b8a 100644 GIT binary patch delta 279 zcmV+y0qFkF1HS^0F@O0q+!@9xiG5abtN_z2}Q!6XFv1sGnu{RMFrpBPpe-7*vdkbl9SPp=qQ_{1=11_lO( zYnR@_!vn(r31K$4jo1ukXeh`2Pv8!R-kAs7ZA zgBQ2YLujam7f2el^n@80j^Ht1Vqzqwfp32?NC>krym5UeCKx`KkMqTpHFt2gx^Ui=I{&kyl&5xnV1@dspa1rc=~N$l!L z;tJlkAd_^atE$rp77mkU#nIk4)^^zHLPYJXt`#xr9&!8pR)2V9aWdJA$CE9zAkm=r z0nx~BAz9%`1Sj!mxyJRw3vM1?m0JYpes-{fi>sN&)(-AboQ)7UGyVK@9hdjhB2a4l zZao?=ZX`;w?|Z}`zA_jSEab2EwnJKlJMASGwlkepdN#avaPiSEzs%n2~**PUd#(>ZrK z$c^wOn43`qW*;p~=!Zav+JofoQ!`mr*Y%p4Q3Tk;Xsc2(kCKO0CHq{v%3*D#PAo}H zvp%H5{cW^St}TP7;72et6sWAj-P1o0iJ*vfU6MO_i6Yu8#)AB`xj+Au7Y*PC_B*-# T3)S?d00000NkvXXu0mjfmx#cI diff --git a/fabric/src/main/resources/assets/cccbridge/textures/block/scroller/scroller_front.png b/fabric/src/main/resources/assets/cccbridge/textures/block/scroller/scroller_front.png index fccbab92c349865c94f55edd3054bd377be977c8..c97a3591bd8ae3496144f09be6f8f65894f9e0b2 100644 GIT binary patch delta 208 zcmZ3_^pkOdVZCC2Plzjrh#bF`y@I9xw`+S3FYcOITHcscC~e@vr)tilWWvC};3~Xe zGLYgf3Gxg64+jih{*0f1!ug&qjv*3LWBUU6jyP~Qxw{8c|7V^))9h|p=ckWKM;w)s zj?MYB^q^cm=aQMBq1(@}JaA(Z@N#?G{ix8>TY+uwN2Xl`)eJfDHA(^Q_6&O)uImSh zKiIDPcE5AK=Y@p-6R)P`o_<}WbGbG$D|%w|4d;13GFdu^DA1{zej$@=bv{ymw!X2U7ecL4LviQ2@i0J2Msnr8o;bB8wRq z_zr+DW7f4!PM~0cr;B5VMtyK_k> xT9asOe2VLS>qEPXE9zK|7S_JvKiZu9hv76U=Q&n&b|0YS44$rjF6*2UngGzsXs`eP diff --git a/fabric/src/main/resources/assets/cccbridge/textures/block/scroller/scroller_side.png b/fabric/src/main/resources/assets/cccbridge/textures/block/scroller/scroller_side.png index fe1df094d6f27f6943e6dcd32e2ece97bb77d6aa..bcc8c24634c50bc3f249535c666e5fc16e3a20d7 100644 GIT binary patch delta 217 zcmV;~04D#e0_g#e7=H)@0000eEe}%w0004VQb$4nuFf3k0000UP)t-s2oxR^YYD9;HdvQpV75L!{9;D5h~t=Ug2 z6&|7J22i;gK|U$E#~o@b`HT)uLZx<_h%cd&TYh{3yiM263Uzbo_L&lnu!j$B5*!3s TS(r3R00000NkvXXu0mjf_n}ZA delta 285 zcmaFKxQ1zhL_G^L0|Ud`yN`l^6k~CayA#8@b22Z19F}xPUq=Rpjs4tz5?O(K-2k5u z*Tpp!N2YsUULU=u*KJ*koq-&mm5QL9rjVz;xQn)^r=FO=;W+wmau1QS`x~>_Xiw(GOub&n$9V?bh%R>zPP#1-70Wz gWj9~q&&^^r`##;XZ|&e+1M(w-r>mdKI;Vst0OEXYe*gdg diff --git a/fabric/src/main/resources/assets/cccbridge/textures/block/source_block_horizontal.png b/fabric/src/main/resources/assets/cccbridge/textures/block/source_block_horizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..df14c26d41667aacac0c93756e0fd03dea8a9a43 GIT binary patch literal 442 zcmV;r0Y(0aP)Px#1ZP1_K>z@;j|==^1poj5bx=%HMGqD$3=$&?4;=Q^y~Cr5nRR!8VsQ>7HxDX5 z3?ekp>glM^*$4|1d#<+$3>FFw8LFzPwY9acudj>2&9D*{Q2?YWV76J#Lb$lN!otG6 zy}c8!J);0wE47=3{$L010qNS#tmY z4#EHc4#EKyC`y0;007QOL_t(IPvw%y4#F@DL>o6voP`(&OWAk+{}ZtbR0s|g5*!dC zr>#a~xqeC^QVKwUk}p0bOY2hevob~ui^ kcpT{1!Q+(9U*w^R3&1xYVI|ZKN&o-=07*qoM6N<$f~a$;-T(jq literal 0 HcmV?d00001 diff --git a/fabric/src/main/resources/assets/cccbridge/textures/block/source_block_horizontal.png.mcmeta b/fabric/src/main/resources/assets/cccbridge/textures/block/source_block_horizontal.png.mcmeta new file mode 100644 index 0000000..df5ea39 --- /dev/null +++ b/fabric/src/main/resources/assets/cccbridge/textures/block/source_block_horizontal.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "interpolate": true, + "frametime": 32 + } +} diff --git a/fabric/src/main/resources/assets/cccbridge/textures/block/source_block_side.png b/fabric/src/main/resources/assets/cccbridge/textures/block/source_block_side.png deleted file mode 100644 index a2d86219e2e17d2e92cccc22fbf88c7cbf383365..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 342 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|y0G|+74--KvE&hjlR9>BPy1G&B^>It#%1WWi`eoIu8#-Az+q<_-W(_iC z4Y6Q7G>bLSo;AybHO7kd++x<(H$7doS)XrXeSeOXyJO<99dqXa&Ezcbh%9Dc;5z`q zj9J$@Ie~)HJzX3_G=gm>bn_in;BXa9$;nu&Tl)9E{oSR$&sl}( zOpFJMCW~>PrYpNS%Lhh0G|+7elcwxA!TlU86HusZ`bx7Ufeaaw7fB?P)tgfPt}}X%brKcL|jUj zS5!;E(qG!Zg+oM+Q&34nT$Ni;Sx{7ki(iIYNSU2inon4TjbBMnT!&jkOHf>!Lr|&d z?}L9pTR00mB8wRq_zrx;D&cMG&`<(ztU_({*{S7&GK ziZVCf`6z5l^qo>GqoSq%{J%a_3EJvstMp>Bbx~*hUCvLR4*0Q)zjyxmq%*vwZB-sm z?c@!1ZQ5TQlMXI#o2x1KTBS_zVZf0!@8?(?{b0Gw{|Doyshq~VHWxyGPG#_P^>bP0 Hl+XkK|6h0F literal 0 HcmV?d00001 diff --git a/fabric/src/main/resources/assets/cccbridge/textures/block/st_block_top.png b/fabric/src/main/resources/assets/cccbridge/textures/block/st_block_top.png deleted file mode 100644 index 588647a9dd8d20104a292c3a1c9b86f2bddfef51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 254 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFavVtEmOQ$!n?{3RNS%Lh$0X`wF{9@WXLdx9yGT*N4J-oPUW@&k2QX!wJIlq=YkCI7eXJ>0`Yfn#4 zUtizMnKP$Oo!ZgS(cRr$TU*=P+uPRGR#{nDU0q#VT%47a)z#HiUS3{QRHUGw(A?Zy zUth1NsMyfZP*PHoo}NBs$`n;q)vBth#>Pe!6%{2VC3SW6y1KfYoSd4P8XX;-va&KM zDXGH3LQYQ3Ns}feCMIfXYF1QKC@U+crKP2&rY0mLq@<)|W@Z)?6eJ}j#l*zi^t9{( zdW5sUBeIx*f$ty)Gwzs}{T3*A+SA1`L?hU@|8-H5fk3M#$4R%1St^0uBCd`{q}Sex z%76bq;@uH8U4DENoa(c%UX@>)~_m%WuDy zmR;b!!ZBsdX6IzL3j$StB>g9?FR?o9V0NTt+lknSC9Zb_7+sDY(e>WE>Y5a%+<}D6 zci&#NI%}-D^EgY(&+?G}TfD0mSWh^y_|=R#b#wn-_9$3bwamb5bP0l+XkK$<)bI literal 0 HcmV?d00001 diff --git a/fabric/src/main/resources/assets/cccbridge/textures/block/target_block_side.png b/fabric/src/main/resources/assets/cccbridge/textures/block/target_block_side.png deleted file mode 100644 index f84c5b100d14ec450af3863b109c9d14576e8c32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 342 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|y0G|+74--KvE&i`()c-y3cyU1S{|&pv4qPiexH>Y$CYA~8cIKK^$8E30 z=A_56poQDllq1A~-P3@5b&tURH~yx|YzO8^oZ6&x$d@ZoQAr1ACTD?1WHAE+-vJP2 z%(~Xe2^5^}>Ealo5o|l5oA0m!hpT8xPR3f@(!c-h?=JN%PkK`IsCh=vDa+)2&MHi2 zVmw$hS&RcUU0D_;$bWo&Uf1LPd}-yj35&MsdS`owKjU$Xx^8&POyP;3cx>y3bsbl8 zqYcXz3%mA^<6{2un5r$;`quGHoSQqpxbFFzXF^V2OspGMwj>m~-+p&aLvfK^ hwn^E?8V9eJ?D>4`)wPeNRsx;K;OXk;vd$@?2>`Y%c<2BC diff --git a/fabric/src/main/resources/assets/cccbridge/textures/block/wanze/wanze_side.png b/fabric/src/main/resources/assets/cccbridge/textures/block/wanze/wanze_side.png deleted file mode 100644 index a8d4a945d04d321b9dee69bc243121cb36b7722c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 260 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}f0G|+7EiElGGcy}&>(~bAjMu1c)mncaXw zoCO|{#S9F5he4R}c>anMpkS(}i(`mJaB82UP=f&nbEd|>|0nYrx*xBaE1;=z=HW!0 znv{D_vW=8Y7CBzL^L0jU!P12v_@CLxi$rbRkaqP@Pw44y0kn|8)78&qol`;+05}0xZ2$lO diff --git a/fabric/src/main/resources/assets/cccbridge/textures/block/wanze/wanze_top.png b/fabric/src/main/resources/assets/cccbridge/textures/block/wanze/wanze_top.png deleted file mode 100644 index 8f3e245b0406c79e19b5333f0a1d5ec7e0b45937..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 251 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}f0G|-o*4EbY@^S|UhnAKWF(E#nFc6&9%~%Vh*h_-^g8zd7gOoS38&HU| zz$3Dlfr0N32s4Umcr^e8V?13PLo|Y8dl~r-C~z=yTm1X~wQ diff --git a/fabric/src/main/resources/assets/cccbridge/textures/entity/animatronic/body.png b/fabric/src/main/resources/assets/cccbridge/textures/entity/animatronic/body.png new file mode 100644 index 0000000000000000000000000000000000000000..9ede83702f5371c02e4d7978b162153575acd643 GIT binary patch literal 700 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`1!1o(uwnpsEKxaRmp_4s78rsT{$qhI|$s9auLN?k_NR@3bEM4i3)lAq3( zuS=HM&M)a)( zNAn$oRo~xrQM2=9+5Cg|T69~0L|vY=ps=jeHF^2@;y|&KM;AX!J(+az!5-=6^1PC| zPs;BMuM0GDc9Z|Yv{ptUP=!2S#aTm7!3bDA-7bMIo z*Iy^MOMeZY8OH^ijb*Qy#TxU4XB6^2x^J>{y8*xMzLaJSACZQZqcV#Qoce3?{V)H% z4*}W>*k7s{@k-rcUhQywzL4#N)W8D{tZNyVEG+E;8|E%%deY6liTjn~EC&t_dCz)A zN$y9CeogyinVC+%>|=>=T*XkY^=8J)mR|M67q;FhWqfP)_Rjl8rjkFq7;F}#dPZ+! zuX0G?ObL7NmnDV6z}CCrM5d#z&+oVI9et04-TIw*;(irhUSo8_4%R$IrC@~?d*ydO VtaVkS4g*sHgQu&X%Q~loCIB^NDWd=Y literal 0 HcmV?d00001 diff --git a/fabric/src/main/resources/assets/cccbridge/textures/entity/animatronic/face_creepy.png b/fabric/src/main/resources/assets/cccbridge/textures/entity/animatronic/face_creepy.png new file mode 100644 index 0000000000000000000000000000000000000000..e0a1621397919a85e5f5585564b2f1c137446b36 GIT binary patch literal 1930 zcmd6n`%}`18pgk@x6Gq;wyiy@>t)Kj>uyEnWmD5)6^%=3WthlGlTAxnluS_2F1qWw z=>e5O5j&EE*EDHIMPO??MP70RWzi5z)WGmAi2@$`5BA4>XP$ZA&&>P7^US>S{)B`_ z*lxGq4gi2HH1c>10D!he5U|a1tDVC?Nc~8eF%jWF%fOfFEilK1!NLHbt<=WwZ;LIq zz7lyh69DW)9|cMq`NXK0CVsFajAj1^+mx!{wU)cfQZUle8^uA%-Hoi~6;nD4Z8zY$g`^IFPHB5VeKIX9^ zUMm8-I4-@cC-&j{BC0gi?Rm-g=w&=yF4!lR^3C^9vrOHzF$R6m+bqyJe#lE$_V!IR zLs>@5lO@$i*%Og?#Hg_5(>u>=(H3h_#XnQkcMIWI@4y3hPdG(C_8_=Tw3kOzeAs{# zgY5*G_gir<9DFV$)?1*`CR#o@l(v+Sv{a;eCAJo~(!QlJ#7R|OA)X7orv7@EbcM<(dvenJ!g=B&HrrS4^WoR9pay|#!b;hi3nmzDU+7;mT=lZx7`36&5-)6QW zQJ#>qG&hdS?viO&+?6?|+ihZ@vidT@wVQElx?CG8PTb{y)01&oY?wn)ZDiL$x&^!(pyPD7GY5OX6HL@vs*-NmvteZox5|HKNd$+Qc}+8*T_&4;wfg z6fh)Dru1LZI->`f)jpGGKnKls2txGph?cpP^?l66MKo4Skz5*LT!E+c+l)<(3BNJLus70sUbWhrs#JsJm4dA79j+oDRCpXop5K!NF zM}&Jrvpn}shx4)sFtG05a5|jKlF2->-6Ker6MVdZPHPq?!gh6_d`3DsPsyGTMR(|b znqFkx zQDAA!6fGqqrt~vP#85x5f5!2q=m&2z5dqq7!4Hs^RVzA#9)XlpPNcC~P?F6#wyA|UPT|geAh_>u6xd5IKPh@Vj9FM`lU>aBl$>rh zza;1u`f^En`l*B?tzOvS`~{@0nPt|9*d*r0Gkr_g+RR}~8;Aq_6WJq!rbS>Q=}f=g zYWm-?nIMhF?{;}{f6h|72-lwW`NSVZ`2(t0{@3c^h8`Q*ERFbNz7GsK=pq#%e>IMb zn*LBFa%DzS0{$G#<;nFSMkA03wQ7Y2lXg!Ov&qO6uy~%f?lwVpOOWVib(r`os9>P) zHj`^6WfBA6f+|SzZurKcjrf6Pzd~ZOE~8G F{{hGae9-^^ literal 0 HcmV?d00001 diff --git a/fabric/src/main/resources/assets/cccbridge/textures/entity/animatronic/face_happy.png b/fabric/src/main/resources/assets/cccbridge/textures/entity/animatronic/face_happy.png new file mode 100644 index 0000000000000000000000000000000000000000..3bb8a809c46d989bee13394480fe4ef29ceabb77 GIT binary patch literal 192 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1quc!B9^Z$B>G+x0en18VopC10MZ-zhbd?!MaSR zs|OF}W!;aq+c41qsLsYvKl|jT0`uQn*UsUN&z5kp{r&5^Zt)+_V70xsSW~!xN}%9C awac5C&s95Kapu&6ggjmST-G@yGywoITs-~& literal 0 HcmV?d00001 diff --git a/fabric/src/main/resources/assets/cccbridge/textures/entity/animatronic/face_normal.png b/fabric/src/main/resources/assets/cccbridge/textures/entity/animatronic/face_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..db0d54d70d305ca7f4a0ed35280df1eca0ecb270 GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBuf-vKbiP>*~f+3zRjv*CsZ!a72H5hQP20Z%venqnWgFDMO zdw1RRz5HFwE=NTGs4oAl`$|dqO3C!S)AprDxY+;x_j~cPAJez3IU^-LK^Le12JQ=9 YWSIF}wd3r!Z6JLNp00i_>zopr04;_+sQ>@~ literal 0 HcmV?d00001 diff --git a/fabric/src/main/resources/assets/cccbridge/textures/entity/animatronic/face_question.png b/fabric/src/main/resources/assets/cccbridge/textures/entity/animatronic/face_question.png new file mode 100644 index 0000000000000000000000000000000000000000..a38034d0b0f856ec1f903cb9695dcedff3fa8e31 GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1quc!4OXu$B>G+w^t3h4j6DSIGp_d|3=?WhvzL0 z3nXuczIRx(c##SNLxcai-Tk7wmppNp_tC88S-^>1zjG+w^t0g4k+-jUU=~LeZ=v&1)E(3 zw03Nn8&%7HB;}8gFi>H6PNn|WEoCpJ7fjJEh(GM~YXAJiKf$}@UpD`*W!zTB9}F0zyqVpALbaYQjv*3LRr?wF4j6DS zxxVAMNhueVL!w_4=7iKV81$2y_U8r>mdKI;Vst0HEko_W%F@ literal 0 HcmV?d00001 diff --git a/fabric/src/main/resources/assets/cccbridge/textures/painting/funny_redrouters.png b/fabric/src/main/resources/assets/cccbridge/textures/painting/funny_redrouters.png new file mode 100644 index 0000000000000000000000000000000000000000..4f8c0205fc6ea1a89870a31c677571dd413c0b34 GIT binary patch literal 1263 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!T5JLoggpk~%NJZz)1yLf4!m?zEhSqX}1Q-eN z5e-TOiV!G7f!HKoZydn8A+cGn_xFA?!+9)Z^xoCXoilgtJ@?L~muJrjFY3g_B+;(q z))HeWr@|vG^8W~vv=erS(v%oVETxn&F10T>2E(#zJWB|pj4+OUMr}jKO2|Ibr0-78 zy)kz@LowK;z)8-?Sj=Gq8vJE}JFt&kIb+COr?cHMgxJ_vrzyuq+LgQ18aXyaPDIH= z8r_IeYfNGcYyMCT_;Z63Cro)n#uzNDC?S|D|F{E?P=7GfE zl%>1nu)G!R+zGeua8OCI4aulUn@sRL5-SFW)VZg<^LJ|s6NH1Ld7E9N4 zA;a%}gzSy4Uz^S{?D=d~F-DBG(X}IE=qn$7f?eRHl$az*5{9As)1M!`eNIW$dGw%V z8zN-~`XEh1?UD>MKR*w*lv3Sp*YmtMj@Q@M=f1i5{X4JHQwi8WAVRW)(w9E_%5j`a zmo5RBc|i#9m~U)s00eHKNsL7V*}@%k5D-+bzP7ejsZ=H=CLouWm!X6q-EIk95|mkF z)KU{ZDijLXg2gLWuJpi=7cX8!5Xn}@7KnR%R43bvY8BQi##kMhAPC?)jse<}I1eRA zFxE!bO`RRH?Yi$A~TQY?JHMX>rb9Wnc&Rh2zntG zi^Wc-1O3hL<~_TK?^e59?$&NJYJfrCZnrV%IfQ{F97^gtpaf(p$I!)7Z@&EcP@nJK zuiSp`=Lf5+tMz&vC-eDyE|=smV^_Q#=iLSS9Ojdx7=vk$j>n5DL5yU0ytv+?H-~>u(f7}uKhpIuDQcrVkyUN> z8P0VBElDt*H7WF0v`-lywwh_0X1ODjYcKET(8I9U@6uM(@uiaxn=1.100.5", - "fabricloader": ">=0.14.6", - "fabric": "*", - "minecraft": "~1.18.2", + "create": ">=${create_version_production}", + "computercraft": ">=${cc_version}", + "fabricloader": ">=${loader_version}", + "minecraft": "~${mc_version}", "java": ">=17" - }, - "suggests": { - "another-mod": "*" } } diff --git a/fabric/src/main/resources/icon.png b/fabric/src/main/resources/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..6840705c810eb4d67c0ea968be4352ace969fe02 GIT binary patch literal 11139 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 V6{@RlM~46a002ovPDHLkV1jtGArSxo literal 0 HcmV?d00001 diff --git a/fabric/src/main/resources/iconHD.png b/fabric/src/main/resources/iconHD.png new file mode 100644 index 0000000000000000000000000000000000000000..631616441e521cbfd0ad6831000614801ee252d5 GIT binary patch literal 124807 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⁢{2yYRE8Ar^d|+i1 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 { - AllDisplayBehaviours.assignTile(AllDisplayBehaviours.register(new ResourceLocation(MOD_ID, "source_block_display_source"), new SourceBlockDisplaySource()), BlockRegister.SOURCE_BLOCK_ENTITY.get().delegate); - AllDisplayBehaviours.assignTile(AllDisplayBehaviours.register(new ResourceLocation(MOD_ID, "target_block_display_source"), new TargetBlockDisplayTarget()), BlockRegister.TARGET_BLOCK_ENTITY.get().delegate); - - ComputerCraftAPI.registerPeripheralProvider((world, pos, side) -> world.getBlockEntity(pos, BlockRegister.SOURCE_BLOCK_ENTITY.get()).map(be -> be.getPeripheral(side)).map(val -> LazyOptional.of(() -> val)).orElse(LazyOptional.empty())); - ComputerCraftAPI.registerPeripheralProvider((world, pos, side) -> world.getBlockEntity(pos, BlockRegister.TARGET_BLOCK_ENTITY.get()).map(be -> be.getPeripheral(side)).map(val -> LazyOptional.of(() -> val)).orElse(LazyOptional.empty())); - ComputerCraftAPI.registerPeripheralProvider((world, pos, side) -> world.getBlockEntity(pos,BlockRegister.REDROUTER_BLOCK_ENTITY.get()).map(be -> be.getPeripheral(side)).map(val -> LazyOptional.of(() -> val)).orElse(LazyOptional.empty())); - ComputerCraftAPI.registerPeripheralProvider((world, pos, side) -> world.getBlockEntity(pos,BlockRegister.SCROLLER_BLOCK_ENTITY.get()).map(be -> be.getPeripheral(side)).map(val -> LazyOptional.of(() -> val)).orElse(LazyOptional.empty())); - ComputerCraftAPI.registerPeripheralProvider(peripheralProvider); + AllDisplayBehaviours.assignBlockEntity(AllDisplayBehaviours.register(new ResourceLocation(MOD_ID, "source_block_display_source"), new SourceBlockDisplaySource()), CCCRegister.SOURCE_BLOCK_ENTITY.get()); + AllDisplayBehaviours.assignBlockEntity(AllDisplayBehaviours.register(new ResourceLocation(MOD_ID, "target_block_display_target"), new TargetBlockDisplayTarget()), CCCRegister.TARGET_BLOCK_ENTITY.get()); + + ComputerCraftAPI.registerPeripheralProvider(new PeripheralProvider()); }); } + @SubscribeEvent + public static void registerRenderers(EntityRenderersEvent.RegisterRenderers event) { + event.registerBlockEntityRenderer(CCCRegister.REDROUTER_BLOCK_ENTITY.get(), RedRouterBlockEntityRenderer::new); + event.registerBlockEntityRenderer(CCCRegister.ANIMATRONIC_BLOCK_ENTITY.get(), AnimatronicBlockEntityRenderer::new); + event.registerEntityRenderer(CCCRegister.ANIMATRONIC_ENTITY.get(), AnimatronicRenderer::new); + } + private void clientSetup(final FMLClientSetupEvent event) { - ItemBlockRenderTypes.setRenderLayer(BlockRegister.REDROUTER_BLOCK.get(), RenderType.translucent()); - ItemBlockRenderTypes.setRenderLayer(BlockRegister.SCROLLER_BLOCK.get(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(CCCRegister.SCROLLER_BLOCK.get(), RenderType.translucent()); + } + + @SubscribeEvent + public static void registerLayerDefinitions(EntityRenderersEvent.RegisterLayerDefinitions event) { + event.registerLayerDefinition(AnimatronicModel.LAYER_LOCATION, AnimatronicModel::createBodyLayer); } } diff --git a/forge/src/main/java/cc/tweaked_programs/cccbridge/BlockRegister.java b/forge/src/main/java/cc/tweaked_programs/cccbridge/CCCRegister.java similarity index 53% rename from forge/src/main/java/cc/tweaked_programs/cccbridge/BlockRegister.java rename to forge/src/main/java/cc/tweaked_programs/cccbridge/CCCRegister.java index 1a61956..7c2fba0 100644 --- a/forge/src/main/java/cc/tweaked_programs/cccbridge/BlockRegister.java +++ b/forge/src/main/java/cc/tweaked_programs/cccbridge/CCCRegister.java @@ -1,13 +1,18 @@ package cc.tweaked_programs.cccbridge; -import cc.tweaked_programs.cccbridge.block.RedRouterBlock; -import cc.tweaked_programs.cccbridge.block.ScrollerBlock; -import cc.tweaked_programs.cccbridge.block.SourceBlock; -import cc.tweaked_programs.cccbridge.block.TargetBlock; -import cc.tweaked_programs.cccbridge.blockEntity.RedRouterBlockEntity; -import cc.tweaked_programs.cccbridge.blockEntity.ScrollerBlockEntity; -import cc.tweaked_programs.cccbridge.blockEntity.SourceBlockEntity; -import cc.tweaked_programs.cccbridge.blockEntity.TargetBlockEntity; +import cc.tweaked_programs.cccbridge.block.*; +import cc.tweaked_programs.cccbridge.blockEntity.*; +import cc.tweaked_programs.cccbridge.entity.animatronic.AnimatronicEntity; +import com.mojang.datafixers.types.Type; +import net.minecraft.Util; +import net.minecraft.core.particles.ParticleType; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.util.datafix.fixes.References; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.MobCategory; +import net.minecraft.world.entity.decoration.Motive; +import net.minecraft.world.entity.decoration.Painting; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.Item; @@ -18,31 +23,47 @@ import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.RegistryObject; -public class BlockRegister { +public class CCCRegister { private static final DeferredRegister BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, CCCBridge.MOD_ID); + private static final DeferredRegister PAINTINGS = DeferredRegister.create(ForgeRegistries.PAINTING_TYPES, CCCBridge.MOD_ID); + private static final DeferredRegister SOUNDS = DeferredRegister.create(ForgeRegistries.SOUND_EVENTS, CCCBridge.MOD_ID); private static final DeferredRegister> BLOCK_ENTITIES = DeferredRegister.create(ForgeRegistries.BLOCK_ENTITIES, CCCBridge.MOD_ID); private static final DeferredRegister ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, CCCBridge.MOD_ID); + public static final DeferredRegister> ENTITIES = DeferredRegister.create(ForgeRegistries.ENTITIES, CCCBridge.MOD_ID); public static final RegistryObject SOURCE_BLOCK = BLOCKS.register("source_block", SourceBlock::new); public static final RegistryObject TARGET_BLOCK = BLOCKS.register("target_block", TargetBlock::new); public static final RegistryObject REDROUTER_BLOCK = BLOCKS.register("redrouter_block", RedRouterBlock::new); public static final RegistryObject SCROLLER_BLOCK = BLOCKS.register("scroller_block", ScrollerBlock::new); + public static final RegistryObject ANIMATRONIC_BLOCK = BLOCKS.register("animatronic_block", AnimatronicBlock::new); - public static final RegistryObject> SOURCE_BLOCK_ENTITY = BLOCK_ENTITIES.register("source_block_entity", () -> BlockEntityType.Builder.of(SourceBlockEntity::new, SOURCE_BLOCK.get()).build(null)); - public static final RegistryObject> TARGET_BLOCK_ENTITY = BLOCK_ENTITIES.register("target_block_entity", () -> BlockEntityType.Builder.of(TargetBlockEntity::new, TARGET_BLOCK.get()).build(null)); - public static final RegistryObject> REDROUTER_BLOCK_ENTITY = BLOCK_ENTITIES.register("redrouter_block_entity", () -> BlockEntityType.Builder.of(RedRouterBlockEntity::new, REDROUTER_BLOCK.get()).build(null)); - public static final RegistryObject> SCROLLER_BLOCK_ENTITY = BLOCK_ENTITIES.register("scroller_block_entity", () -> BlockEntityType.Builder.of(ScrollerBlockEntity::new, SCROLLER_BLOCK.get()).build(null)); + private static Type getType(String key) { + return Util.fetchChoiceType(References.BLOCK_ENTITY, key); + } + + public static final RegistryObject> SOURCE_BLOCK_ENTITY = BLOCK_ENTITIES.register("source_block_entity", () -> BlockEntityType.Builder.of(SourceBlockEntity::new, SOURCE_BLOCK.get()).build(getType("source_block"))); + public static final RegistryObject> TARGET_BLOCK_ENTITY = BLOCK_ENTITIES.register("target_block_entity", () -> BlockEntityType.Builder.of(TargetBlockEntity::new, TARGET_BLOCK.get()).build(getType("target_block"))); + public static final RegistryObject> REDROUTER_BLOCK_ENTITY = BLOCK_ENTITIES.register("redrouter_block_entity", () -> BlockEntityType.Builder.of(RedRouterBlockEntity::new, REDROUTER_BLOCK.get()).build(getType("redrouter_block"))); + public static final RegistryObject> SCROLLER_BLOCK_ENTITY = BLOCK_ENTITIES.register("scroller_block_entity", () -> BlockEntityType.Builder.of(ScrollerBlockEntity::new, SCROLLER_BLOCK.get()).build(getType("scroller_block"))); + public static final RegistryObject> ANIMATRONIC_BLOCK_ENTITY = BLOCK_ENTITIES.register("animatronic_block_entity", () -> BlockEntityType.Builder.of(AnimatronicBlockEntity::new, ANIMATRONIC_BLOCK.get()).build(getType("animatronic_block"))); + + public static final RegistryObject> ANIMATRONIC_ENTITY = ENTITIES.register("animatronic", () -> EntityType.Builder.of(AnimatronicEntity::new, MobCategory.MISC).sized(0.6F, 1.8F).build(new ResourceLocation(CCCBridge.MOD_ID, "animatronic").toString())); public static void register() { BLOCKS.register(FMLJavaModLoadingContext.get().getModEventBus()); BLOCK_ENTITIES.register(FMLJavaModLoadingContext.get().getModEventBus()); + ENTITIES.register(FMLJavaModLoadingContext.get().getModEventBus()); ITEMS.register("source_block", () -> new BlockItem(SOURCE_BLOCK.get(), new Item.Properties().tab(CreativeModeTab.TAB_REDSTONE))); ITEMS.register("target_block", () -> new BlockItem(TARGET_BLOCK.get(), new Item.Properties().tab(CreativeModeTab.TAB_REDSTONE))); ITEMS.register("redrouter_block", () -> new BlockItem(REDROUTER_BLOCK.get(), new Item.Properties().tab(CreativeModeTab.TAB_REDSTONE))); ITEMS.register("scroller_block", () -> new BlockItem(SCROLLER_BLOCK.get(), new Item.Properties().tab(CreativeModeTab.TAB_REDSTONE))); + ITEMS.register("animatronic_block", () -> new BlockItem(ANIMATRONIC_BLOCK.get(), new Item.Properties().tab(CreativeModeTab.TAB_REDSTONE))); ITEMS.register(FMLJavaModLoadingContext.get().getModEventBus()); - //CCCSoundEvents.init(); + PAINTINGS.register("funny_redrouters", () -> new Motive(32,16)); + PAINTINGS.register(FMLJavaModLoadingContext.get().getModEventBus()); + + CCCSoundEvents.init(SOUNDS); } } diff --git a/forge/src/main/java/cc/tweaked_programs/cccbridge/CCCSoundEvents.java b/forge/src/main/java/cc/tweaked_programs/cccbridge/CCCSoundEvents.java index 28dbfe9..ef42177 100644 --- a/forge/src/main/java/cc/tweaked_programs/cccbridge/CCCSoundEvents.java +++ b/forge/src/main/java/cc/tweaked_programs/cccbridge/CCCSoundEvents.java @@ -2,6 +2,7 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvent; +import net.minecraftforge.registries.DeferredRegister; import java.util.HashMap; import java.util.Map; @@ -20,8 +21,8 @@ public static SoundEvent create(String path) { return sound; } - public static void init() { - //for (ResourceLocation id : entries.keySet()) - //Registry.register(Registry.SOUND_EVENT, id, entries.get(id)); + public static void init(DeferredRegister SOUNDS) { + for (ResourceLocation id : entries.keySet()) + SOUNDS.register(id.getPath(), () -> entries.get(id)); } } diff --git a/forge/src/main/java/cc/tweaked_programs/cccbridge/Misc.java b/forge/src/main/java/cc/tweaked_programs/cccbridge/Misc.java new file mode 100644 index 0000000..260da28 --- /dev/null +++ b/forge/src/main/java/cc/tweaked_programs/cccbridge/Misc.java @@ -0,0 +1,110 @@ +package cc.tweaked_programs.cccbridge; + +import net.minecraft.client.renderer.LightTexture; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.TextComponent; + +import java.util.Random; + +public class Misc { + private static final char[] charsetMC = { + // Lower CP437 characters + 0x0020, 0x263A, 0x263B, 0x2665, 0x2666, 0x2663, 0x2660, 0x25CF, 0x25CB, 0x0020, 0x0020, 0x2642, 0x2640, 0x0020, 0x266A, 0x266C, + 0x25B6, 0x25C0, 0x2195, 0x203C, 0x00B6, 0x2591, 0x25AC, 0x21A8, 0x2B06, 0x2B07, 0x27A1, 0x2B05, 0x221F, 0x29FA, 0x25B2, 0x25BC, + // ASCII characters + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x2592, + // Drawing chars + 0x2800, 0x2801, 0x2808, 0x2809, 0x2802, 0x2803, 0x280A, 0x280B, 0x2810, 0x2811, 0x2818, 0x2819, 0x2812, 0x2813, 0x281A, 0x281B, + 0x2804, 0x2805, 0x280C, 0x280D, 0x2806, 0x2807, 0x280E, 0x280F, 0x2814, 0x2815, 0x281C, 0x281D, 0x2816, 0x2817, 0x281E, 0x281F, + // ISO-8859-1 characters + 0x2593, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x2588, 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, + 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, + 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, + 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF, + 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, + 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF + }; + + public static MutableComponent toMCTxt(String line) { + StringBuilder mcTxt = new StringBuilder(); + + for (char c : line.toCharArray()) { + if (c > 255) + mcTxt.append('?'); + else if (c == 223) // ß + mcTxt.append((char)0x1E9E); + else + mcTxt.append(charsetMC[c]); + } + + return new TextComponent("").append(mcTxt.toString()); + } + + public static String toCCTxt(String line) { + StringBuilder ccTxt = new StringBuilder(); + + for (char c : line.toCharArray()) { + char index = findCharIndex(c); + + ccTxt.append((index > 255) ? '?' : index); + } + + return ccTxt.toString(); + } + + private static char findCharIndex(char c) { + if (c == ' ') // Because we replace some non-printable chars with a space, we have to add this if-clause here. + return c; + + for (int i=0; i getPeripheral(@NotNull Level world, @NotNull BlockPos pos, @NotNull Direction side) { - if (world.getBlockEntity(pos) instanceof StationTileEntity) { - return LazyOptional.of(() -> new TrainPeripheral(pos, world)); - } else if (world.getBlockEntity(pos) instanceof SpeedControllerTileEntity) { - return LazyOptional.of(() -> new SpeedControllerPeripheral(pos, world)); + BlockEntity blockEntity = world.getBlockEntity(pos); + + if (blockEntity instanceof PeripheralBlockEntity peripheralBlock) { + IPeripheral peripheral = peripheralBlock.getPeripheral(side); + + if (peripheral != null) + return LazyOptional.of(() -> peripheral); } return LazyOptional.empty(); diff --git a/forge/src/main/java/cc/tweaked_programs/cccbridge/behaviour/LuaScrollValueBehaviour.java b/forge/src/main/java/cc/tweaked_programs/cccbridge/behaviour/LuaScrollValueBehaviour.java new file mode 100644 index 0000000..5d98ad1 --- /dev/null +++ b/forge/src/main/java/cc/tweaked_programs/cccbridge/behaviour/LuaScrollValueBehaviour.java @@ -0,0 +1,93 @@ +package cc.tweaked_programs.cccbridge.behaviour; + +import cc.tweaked_programs.cccbridge.blockEntity.ScrollerBlockEntity; +import com.google.common.collect.ImmutableList; +import com.simibubi.create.foundation.blockEntity.behaviour.*; +import com.simibubi.create.foundation.blockEntity.behaviour.scrollValue.ScrollValueBehaviour; +import com.simibubi.create.foundation.utility.Components; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.TextComponent; +import net.minecraft.network.chat.TranslatableComponent; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.phys.BlockHitResult; + +import java.util.List; + +public class LuaScrollValueBehaviour extends ScrollValueBehaviour { + private boolean hasMinus; + + public LuaScrollValueBehaviour(ScrollerBlockEntity be, ValueBoxTransform slot) { + super(new TranslatableComponent("block.cccbridge.scroller_block"), be, slot); + + withCallback(i -> be.fireUpdateValueEvent()); + onlyActiveWhen(() -> (be.getLevel() != null && !(be.getLevel().getBlockState(be.getBlockPos()).getValue(BlockStateProperties.LOCKED)))); + value = 0; + hasMinus = false; + between(-15,15); + } + + @Override + public void write(CompoundTag nbt, boolean clientPacket) { + nbt.putInt("ScrollValue", value); + nbt.putBoolean("ScrollMinus", hasMinus); + nbt.putInt("ScrollLimit", max); + super.write(nbt, clientPacket); + } + + @Override + public void read(CompoundTag nbt, boolean clientPacket) { + value = nbt.getInt("ScrollValue"); + hasMinus = nbt.getBoolean("ScrollMinus"); + int limit = nbt.getInt("ScrollLimit"); + between(-limit, limit); + super.read(nbt, clientPacket); + } + + public void between(int limit) { + between(-limit, limit); + blockEntity.setChanged(); + blockEntity.sendData(); + } + + public void setHasMinus(boolean state) { + hasMinus = state; + blockEntity.setChanged(); + blockEntity.sendData(); + } + + public int getMax() { + return max; + } + + public boolean hasMinus() { + return hasMinus; + } + + @Override + public ValueSettingsBoard createBoard(Player player, BlockHitResult hitResult) { + List rows; + if (hasMinus) + rows = ImmutableList.of( + Components.translatable("cccbridge.general.unit.scroller.negative"), + Components.translatable("cccbridge.general.unit.scroller.positive") + ); + else + rows = ImmutableList.of( + Components.translatable("cccbridge.general.unit.scroller") + ); + + return new ValueSettingsBoard(label, max, 5, rows, + new ValueSettingsFormatter(ValueSettingsBehaviour.ValueSettings::format)); + } + + @Override + public void setValueSettings(Player player, ValueSettingsBehaviour.ValueSettings valueSetting, boolean ctrlDown) { + if (valueSetting.equals(getValueSettings())) + return; + setValue(hasMinus && valueSetting.row() == 0 ? -valueSetting.value() : valueSetting.value()); + playFeedbackSound(this); + } +} diff --git a/forge/src/main/java/cc/tweaked_programs/cccbridge/block/AnimatronicBlock.java b/forge/src/main/java/cc/tweaked_programs/cccbridge/block/AnimatronicBlock.java new file mode 100644 index 0000000..e53c022 --- /dev/null +++ b/forge/src/main/java/cc/tweaked_programs/cccbridge/block/AnimatronicBlock.java @@ -0,0 +1,53 @@ +package cc.tweaked_programs.cccbridge.block; + +import cc.tweaked_programs.cccbridge.blockEntity.AnimatronicBlockEntity; +import net.minecraft.core.BlockPos; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.EntityBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.Material; +import net.minecraft.world.phys.shapes.BooleanOp; +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; + +public class AnimatronicBlock extends Block implements EntityBlock { + public AnimatronicBlock() { + super(Properties.of(Material.METAL).strength(1.3f).sound(SoundType.CHAIN)); + } + + @Nullable + @Override + public BlockEntity newBlockEntity(@NotNull BlockPos pos, @NotNull BlockState state) { + return new AnimatronicBlockEntity(pos, state); + } + + @Override + public @NotNull VoxelShape getShape(@NotNull BlockState state, @NotNull BlockGetter view, @NotNull BlockPos pos, @NotNull CollisionContext ctx) { + return Shapes.join(Block.box(7.5, 2, 7.5, 8.5, 16, 8.5), Block.box(2, 0, 2, 14, 2, 14), BooleanOp.OR); + } + + @Override + public void setPlacedBy(Level level, BlockPos pos, BlockState state, LivingEntity placer, ItemStack stack) { + BlockEntity blockentity = level.getBlockEntity(pos); + if (!(blockentity instanceof AnimatronicBlockEntity animatronicBlockEntity)) + return; + + float rotation = (float) Mth.floor((Mth.wrapDegrees(placer.yRotO) + 22.5F) / 45.0F) * 45.0F; + animatronicBlockEntity.forceBodyPose(0F, rotation, 0F); + animatronicBlockEntity.setBodyPose(15F, rotation, 0F); + animatronicBlockEntity.setHeadPose(20F, 0F, 0F); + animatronicBlockEntity.setRightArmPose(-15F, 0F, 0F); + animatronicBlockEntity.setLeftArmPose(-15F, 0F, 0F); + animatronicBlockEntity.setChanged(); + } +} diff --git a/forge/src/main/java/cc/tweaked_programs/cccbridge/block/RedRouterBlock.java b/forge/src/main/java/cc/tweaked_programs/cccbridge/block/RedRouterBlock.java index 646bbe7..6c35009 100644 --- a/forge/src/main/java/cc/tweaked_programs/cccbridge/block/RedRouterBlock.java +++ b/forge/src/main/java/cc/tweaked_programs/cccbridge/block/RedRouterBlock.java @@ -1,8 +1,9 @@ package cc.tweaked_programs.cccbridge.block; -import cc.tweaked_programs.cccbridge.BlockRegister; +import cc.tweaked_programs.cccbridge.CCCRegister; +import cc.tweaked_programs.cccbridge.Misc; import cc.tweaked_programs.cccbridge.blockEntity.RedRouterBlockEntity; -import com.simibubi.create.content.contraptions.wrench.IWrenchable; +import com.simibubi.create.content.equipment.wrench.IWrenchable; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.InteractionResult; @@ -20,29 +21,51 @@ 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.IntegerProperty; import net.minecraft.world.level.material.Material; +import org.jetbrains.annotations.NotNull; public class RedRouterBlock extends HorizontalDirectionalBlock implements EntityBlock, IWrenchable { + public static final IntegerProperty FACE = IntegerProperty.create("face", 0, 16); + public RedRouterBlock() { - super(Properties.of(Material.STONE).strength(1.3f).sound(SoundType.STONE)); - registerDefaultState(this.stateDefinition.any().setValue(BlockStateProperties.HORIZONTAL_FACING, Direction.NORTH)); + super(Properties.of(Material.STONE).strength(1.3f).sound(SoundType.STONE).noOcclusion()); + registerDefaultState(this.stateDefinition.any() + .setValue(BlockStateProperties.HORIZONTAL_FACING, Direction.NORTH) + .setValue(FACE, 0) + ); } @Override protected void createBlockStateDefinition(StateDefinition.Builder stateManager) { - stateManager.add(BlockStateProperties.HORIZONTAL_FACING); + stateManager + .add(BlockStateProperties.HORIZONTAL_FACING) + .add(FACE); } @Override - public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + public void neighborChanged(BlockState state, Level level, BlockPos pos, Block block, BlockPos fromPos, boolean pIsMoving) { + if (!level.isClientSide) { + BlockEntity be = level.getBlockEntity(pos); + if (!(be instanceof RedRouterBlockEntity rbe)) + return; + RedRouterBlockEntity.updateInputs(level, pos, rbe); + rbe.setChanged(); + } + } + + @Override + public BlockEntity newBlockEntity(@NotNull BlockPos pos, @NotNull BlockState state) { return new RedRouterBlockEntity(pos, state); } - public boolean isSignalSource(BlockState state) { + @Override + public boolean isSignalSource(@NotNull BlockState state) { return true; } - public int getSignal(BlockState state, BlockGetter world, BlockPos pos, Direction dir) { + @Override + public int getSignal(@NotNull BlockState state, BlockGetter world, @NotNull BlockPos pos, @NotNull Direction dir) { BlockEntity block = world.getBlockEntity(pos); if (!(block instanceof RedRouterBlockEntity redrouter)) return 0; @@ -72,11 +95,13 @@ public InteractionResult onWrenched(BlockState state, UseOnContext context) { @Override public BlockEntityTicker getTicker(Level world, BlockState state, BlockEntityType type) { - return BlockRegister.REDROUTER_BLOCK_ENTITY.get() == type ? RedRouterBlockEntity::tick : null; + return CCCRegister.REDROUTER_BLOCK_ENTITY.get() == type ? RedRouterBlockEntity::tick : null; } @Override public BlockState getStateForPlacement(BlockPlaceContext ctx) { - return this.defaultBlockState().setValue(BlockStateProperties.HORIZONTAL_FACING, ctx.getHorizontalDirection().getOpposite()); + return this.defaultBlockState() + .setValue(BlockStateProperties.HORIZONTAL_FACING, ctx.getHorizontalDirection().getOpposite()) + .setValue(FACE, (ctx.getLevel().isClientSide) ? 0 : Misc.randomFace()); } } \ No newline at end of file diff --git a/forge/src/main/java/cc/tweaked_programs/cccbridge/block/ScrollerBlock.java b/forge/src/main/java/cc/tweaked_programs/cccbridge/block/ScrollerBlock.java index 3044237..1a8e56e 100644 --- a/forge/src/main/java/cc/tweaked_programs/cccbridge/block/ScrollerBlock.java +++ b/forge/src/main/java/cc/tweaked_programs/cccbridge/block/ScrollerBlock.java @@ -1,8 +1,7 @@ package cc.tweaked_programs.cccbridge.block; -import cc.tweaked_programs.cccbridge.BlockRegister; +import cc.tweaked_programs.cccbridge.CCCRegister; import cc.tweaked_programs.cccbridge.blockEntity.ScrollerBlockEntity; -import dan200.computercraft.shared.peripheral.modem.wired.CableModemVariant; import dan200.computercraft.shared.util.WaterloggableHelpers; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -17,13 +16,12 @@ 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.material.Fluid; import net.minecraft.world.level.material.FluidState; -import net.minecraft.world.level.material.Fluids; import net.minecraft.world.level.material.Material; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; +import org.jetbrains.annotations.NotNull; import javax.annotation.Nonnull; @@ -31,7 +29,7 @@ public class ScrollerBlock extends DirectionalBlock implements EntityBlock, SimpleWaterloggedBlock { public ScrollerBlock() { - super(BlockBehaviour.Properties.of(Material.WOOD).strength(1.0f).sound(SoundType.WOOD)); + super(BlockBehaviour.Properties.of(Material.METAL).strength(1.0f).sound(SoundType.METAL)); registerDefaultState(this.stateDefinition.any() .setValue(BlockStateProperties.FACING, Direction.NORTH) .setValue(BlockStateProperties.WATERLOGGED, false) @@ -44,40 +42,33 @@ protected void createBlockStateDefinition(StateDefinition.Builder newBox(0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.125f); + case NORTH -> newBox(0.0f, 0.0f, 1 - 0.125f, 1.0f, 1.0f, 1.0f); + case WEST -> newBox(1 - 0.125f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f); + case EAST -> newBox(0.0f, 0.0f, 0.0f, 0.125f, 1.0f, 1.0f); + case UP -> newBox(0.0f, 0.0f, 0.0f, 1.0f, 0.125f, 1.0f); + case DOWN -> newBox(0.0f, 1 - 0.125f, 0.0f, 1.0f, 1.0f, 1.0f); + default -> newBox(0, 0, 0, 1, 1, 1); + }; } private static VoxelShape newBox(float p1, float p2, float p3, float p4, float p5, float p6) { @@ -85,8 +76,8 @@ private static VoxelShape newBox(float p1, float p2, float p3, float p4, float p } @Override - public BlockEntityTicker getTicker(Level world, BlockState state, BlockEntityType type) { - return BlockRegister.SCROLLER_BLOCK_ENTITY.get() == type ? ScrollerBlockEntity::tick : null; + public BlockEntityTicker getTicker(@NotNull Level world, @NotNull BlockState state, @NotNull BlockEntityType type) { + return CCCRegister.SCROLLER_BLOCK_ENTITY.get() == type ? ScrollerBlockEntity::tick : null; } @Override diff --git a/forge/src/main/java/cc/tweaked_programs/cccbridge/block/SourceBlock.java b/forge/src/main/java/cc/tweaked_programs/cccbridge/block/SourceBlock.java index 118f297..e36aa8f 100644 --- a/forge/src/main/java/cc/tweaked_programs/cccbridge/block/SourceBlock.java +++ b/forge/src/main/java/cc/tweaked_programs/cccbridge/block/SourceBlock.java @@ -12,7 +12,7 @@ public class SourceBlock extends Block implements EntityBlock { public SourceBlock() { - super(Properties.of(Material.METAL).strength(2.0f).sound(SoundType.COPPER)); + super(Properties.of(Material.METAL).strength(3.0f).sound(SoundType.METAL)); } @Nullable diff --git a/forge/src/main/java/cc/tweaked_programs/cccbridge/block/TargetBlock.java b/forge/src/main/java/cc/tweaked_programs/cccbridge/block/TargetBlock.java index 803a11b..6e80d20 100644 --- a/forge/src/main/java/cc/tweaked_programs/cccbridge/block/TargetBlock.java +++ b/forge/src/main/java/cc/tweaked_programs/cccbridge/block/TargetBlock.java @@ -13,7 +13,7 @@ public class TargetBlock extends Block implements EntityBlock { public TargetBlock() { - super(BlockBehaviour.Properties.of(Material.METAL).strength(2.0f).sound(SoundType.COPPER)); + super(BlockBehaviour.Properties.of(Material.METAL).strength(3.0f).sound(SoundType.METAL)); } @Nullable diff --git a/forge/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/AnimatronicBlockEntity.java b/forge/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/AnimatronicBlockEntity.java new file mode 100644 index 0000000..f143168 --- /dev/null +++ b/forge/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/AnimatronicBlockEntity.java @@ -0,0 +1,119 @@ +package cc.tweaked_programs.cccbridge.blockEntity; + +import cc.tweaked_programs.cccbridge.CCCRegister; +import cc.tweaked_programs.cccbridge.entity.animatronic.AnimatronicEntity; +import cc.tweaked_programs.cccbridge.peripherals.AnimatronicPeripheral; +import dan200.computercraft.api.peripheral.IPeripheral; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.Rotations; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.Objects; + +public class AnimatronicBlockEntity extends BlockEntity implements PeripheralBlockEntity { + private AnimatronicPeripheral peripheral; + private AnimatronicEntity animatronic; + + public AnimatronicBlockEntity(BlockPos pos, BlockState blockState) { + super(CCCRegister.ANIMATRONIC_BLOCK_ENTITY.get(), pos, blockState); + } + + public Rotations getRightArmPose() { + return getAnimatronic().getDestinationRightArmPose(); + } + + public Rotations getLeftArmPose() { + return getAnimatronic().getDestinationLeftArmPose(); + } + + public Rotations getBodyPose() { + return getAnimatronic().getDestinationBodyPose(); + } + + public Rotations getHeadPose() { + return getAnimatronic().getDestinationHeadPose(); + } + + public void setRightArmPose(float x, float y, float z) { + getAnimatronic().setRightArmPose(new Rotations(x, y, z)); + } + + public void setLeftArmPose(float x, float y, float z) { + getAnimatronic().setLeftArmPose(new Rotations(x, y, z)); + } + + public void setBodyPose(float x, float y, float z) { + getAnimatronic().setBodyPose(new Rotations(x, y, z)); + } + + public void setHeadPose(float x, float y, float z) { + getAnimatronic().setHeadPose(new Rotations(x, y, z)); + } + + public void forceBodyPose(float x, float y, float z) { + getAnimatronic().forceBodyPose(new Rotations(x, y, z)); + } + + @Override + @Nullable + public IPeripheral getPeripheral(@NotNull Direction side) { + if (side.getName().equals(Direction.DOWN.getName())) { + if (peripheral == null) + peripheral = new AnimatronicPeripheral(this); + return peripheral; + } + return null; + } + + public AnimatronicEntity getAnimatronic() { + if (animatronic == null) + this.animatronic = new AnimatronicEntity(CCCRegister.ANIMATRONIC_ENTITY.get(), getLevel()); + + if (getLevel() != null) + animatronic.level = getLevel(); + + return animatronic; + } + + @Override + public void load(@NotNull CompoundTag nbt) { + getAnimatronic().read(nbt); + super.load(nbt); + } + + @Override + public void saveAdditional(@NotNull CompoundTag nbt) { + getAnimatronic().add(nbt); + super.saveAdditional(nbt); + } + + @Override + public void setChanged() { + super.setChanged(); + if (level != null && this.hasLevel() && !level.isClientSide) + level.sendBlockUpdated(this.getBlockPos(), this.getBlockState(), this.getBlockState(), Block.UPDATE_ALL); + } + @Nullable + @Override + public Packet getUpdatePacket() { + return ClientboundBlockEntityDataPacket.create(this); + } + + @Override + public @NotNull CompoundTag getUpdateTag() { + return saveWithoutMetadata(); + } + + public void setFace(String face) { + getAnimatronic().setFace(face); + } +} diff --git a/forge/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/PeripheralBlockEntity.java b/forge/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/PeripheralBlockEntity.java new file mode 100644 index 0000000..1fd0b76 --- /dev/null +++ b/forge/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/PeripheralBlockEntity.java @@ -0,0 +1,23 @@ +package cc.tweaked_programs.cccbridge.blockEntity; + +import dan200.computercraft.api.peripheral.IPeripheral; +import net.minecraft.core.Direction; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +/** + * This interface is used to give TileEntities the ability to provide its Peripheral. + * By implementing this, it can be made sure that the object has this ability for sure. + * + * @version 1.0 + */ +public interface PeripheralBlockEntity { + /** + * Returns a peripheral. Can be null, if the TileEntity rejects the request. + * + * @param side From which side is the block called? + * @return null or Peripheral for the TileEntity. + */ + @Nullable + IPeripheral getPeripheral(@NotNull Direction side); +} diff --git a/forge/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/RedRouterBlockEntity.java b/forge/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/RedRouterBlockEntity.java index 85d68f8..9a46025 100644 --- a/forge/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/RedRouterBlockEntity.java +++ b/forge/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/RedRouterBlockEntity.java @@ -1,7 +1,7 @@ package cc.tweaked_programs.cccbridge.blockEntity; -import cc.tweaked_programs.cccbridge.BlockRegister; -import cc.tweaked_programs.cccbridge.CCCBridge; +import cc.tweaked_programs.cccbridge.CCCRegister; +import cc.tweaked_programs.cccbridge.block.RedRouterBlock; import cc.tweaked_programs.cccbridge.peripherals.RedRouterBlockPeripheral; import dan200.computercraft.api.peripheral.IPeripheral; import net.minecraft.core.BlockPos; @@ -14,20 +14,23 @@ import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.HashMap; import java.util.Map; +import java.util.Objects; -public class RedRouterBlockEntity extends BlockEntity { +public class RedRouterBlockEntity extends BlockEntity implements PeripheralBlockEntity { private final HashMap outputDir = new HashMap<>(); private final HashMap inputDir = new HashMap<>(); private boolean blockupdate = false; + private boolean newInputs = false; private RedRouterBlockPeripheral peripheral; private Direction facing; public RedRouterBlockEntity(BlockPos pos, BlockState state) { - super(BlockRegister.REDROUTER_BLOCK_ENTITY.get(), pos, state); + super(CCCRegister.REDROUTER_BLOCK_ENTITY.get(), pos, state); facing = state.getValue(BlockStateProperties.HORIZONTAL_FACING); outputDir.put("up", 0); outputDir.put("down", 0); @@ -46,26 +49,31 @@ public RedRouterBlockEntity(BlockPos pos, BlockState state) { public static void tick(Level world, BlockPos blockPos, BlockState state, BlockEntity be) { if (!(be instanceof RedRouterBlockEntity redrouter)) return; + if (state.getValue(BlockStateProperties.HORIZONTAL_FACING) != redrouter.facing) { redrouter.blockupdate = true; - //redrouter.facing = state.getValue(BlockStateProperties.HORIZONTAL_FACING); + redrouter.facing = state.getValue(BlockStateProperties.HORIZONTAL_FACING); } if (redrouter.blockupdate) { - world.updateNeighborsAt(be.getBlockPos(), world.getBlockState(be.getBlockPos()) - .getBlock()); + world.updateNeighborsAt(be.getBlockPos(), world.getBlockState(be.getBlockPos()).getBlock()); redrouter.blockupdate = false; } + updateInputs(world, blockPos, redrouter); - updateInputs(world, blockPos, redrouter); + if (redrouter.newInputs && redrouter.peripheral != null) { + redrouter.peripheral.sendEvent(RedRouterBlockPeripheral.REDSTONE_EVENT); + redrouter.newInputs = false; + } } - private static void updateInputs(Level world, BlockPos blockPos, RedRouterBlockEntity redrouter) { + public static void updateInputs(Level world, BlockPos blockPos, RedRouterBlockEntity redrouter) { for (Map.Entry entry : redrouter.inputDir.entrySet()) { String side = entry.getKey(); Direction dir = Direction.byName(side).getOpposite(); BlockPos offsetPos = blockPos.relative(dir); BlockState block = world.getBlockState(offsetPos); + int power = block.getBlock().getSignal(block, world, offsetPos, dir); redrouter.inputDir.put(side, power); } @@ -102,7 +110,7 @@ public void setPower(String side, int power) { } @Override - public void load(CompoundTag nbt) { + public void load(@NotNull CompoundTag nbt) { super.load(nbt); for (Map.Entry entry : outputDir.entrySet()) { String side = entry.getKey(); @@ -111,7 +119,7 @@ public void load(CompoundTag nbt) { } @Override - public void saveAdditional(CompoundTag nbt) { + public void saveAdditional(@NotNull CompoundTag nbt) { for (Map.Entry entry : outputDir.entrySet()) nbt.putInt(entry.getKey(), entry.getValue()); super.saveAdditional(nbt); @@ -130,13 +138,13 @@ public Packet getUpdatePacket() { } @Override - public CompoundTag getUpdateTag() { + public @NotNull CompoundTag getUpdateTag() { return saveWithoutMetadata(); } - public IPeripheral getPeripheral(Direction side) { + public IPeripheral getPeripheral(@NotNull Direction side) { if (peripheral == null) peripheral = new RedRouterBlockPeripheral(this); return peripheral; } -} +} \ No newline at end of file diff --git a/forge/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/ScrollerBlockEntity.java b/forge/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/ScrollerBlockEntity.java index 106ab22..5b91347 100644 --- a/forge/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/ScrollerBlockEntity.java +++ b/forge/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/ScrollerBlockEntity.java @@ -1,16 +1,14 @@ package cc.tweaked_programs.cccbridge.blockEntity; -import cc.tweaked_programs.cccbridge.BlockRegister; +import cc.tweaked_programs.cccbridge.CCCRegister; import cc.tweaked_programs.cccbridge.CCCSoundEvents; +import cc.tweaked_programs.cccbridge.behaviour.LuaScrollValueBehaviour; import cc.tweaked_programs.cccbridge.peripherals.ScrollerBlockPeripheral; import com.simibubi.create.AllSoundEvents; -import com.simibubi.create.foundation.tileEntity.SmartTileEntity; -import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; -import com.simibubi.create.foundation.tileEntity.behaviour.ValueBoxTransform; -import com.simibubi.create.foundation.tileEntity.behaviour.scrollvalue.ScrollValueBehaviour; +import com.simibubi.create.foundation.blockEntity.SmartBlockEntity; +import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour; +import com.simibubi.create.foundation.blockEntity.behaviour.ValueBoxTransform; import com.simibubi.create.foundation.utility.VecHelper; -import net.minecraft.network.chat.TranslatableComponent; -import net.minecraft.world.phys.Vec3; import dan200.computercraft.api.peripheral.IPeripheral; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -19,39 +17,45 @@ import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.phys.Vec3; import org.jetbrains.annotations.Nullable; import java.util.List; -public class ScrollerBlockEntity extends SmartTileEntity { + +public class ScrollerBlockEntity extends SmartBlockEntity implements PeripheralBlockEntity { private ScrollerBlockPeripheral peripheral; private boolean locked = false; private boolean updateLock = false; private boolean playTickSound = false; + private LuaScrollValueBehaviour scroller; public ScrollerBlockEntity(BlockPos pos, BlockState state) { - super(BlockRegister.SCROLLER_BLOCK_ENTITY.get(), pos, state); + super(CCCRegister.SCROLLER_BLOCK_ENTITY.get(), pos, state); } - @Nullable - public IPeripheral getPeripheral(Direction side) { - if (side == this.getBlockState().getValue(BlockStateProperties.FACING).getOpposite()) { + public IPeripheral getPeripheral(@Nullable Direction side) { + if (side == this.getBlockState().getValue(BlockStateProperties.FACING).getOpposite() || side == null) { if (peripheral == null) - peripheral = new ScrollerBlockPeripheral(this, this.getLevel()); + peripheral = new ScrollerBlockPeripheral(this); return peripheral; } return null; } public void setLock(boolean state) { locked = state; updateLock = true; } - public void playTickSound() { playTickSound = true; } - @Nullable - public ScrollValueBehaviour getBehaviour() { - TileEntityBehaviour behaviour = getBehaviour(ScrollValueBehaviour.TYPE); - if (behaviour instanceof ScrollValueBehaviour scrollValueBehaviour) - return scrollValueBehaviour; - return null; + public int getValue() { + return scroller.getValue(); + } + + public void setValue(int value) { + scroller.setValue(value); + } + + public void fireUpdateValueEvent() { + if (peripheral != null) + peripheral.sendEvent("scroller_changed", scroller.getValue()); } public static void tick(Level world, BlockPos blockPos, BlockState state, BlockEntity be) { @@ -79,44 +83,41 @@ public static void tick(Level world, BlockPos blockPos, BlockState state, BlockE 1.5f); scroller.playTickSound = false; } - - scroller.tick(); } @Override - public void addBehaviours(List behaviours) { - ScrollValueBehaviour scroller = new ScrollValueBehaviour(this.getBlockState().getBlock().getName(), this, new ControllerValueBoxTransform()) - .between(-150, 150) - .moveText(new Vec3(9, 0, 10)) - .withUnit(i -> new TranslatableComponent("cccbridge.general.unit.scroller")) - .withCallback(i -> { if (this.peripheral != null) peripheral.newValue(i); }) - .onlyActiveWhen(() -> !(this.getLevel().getBlockState(this.getBlockPos()).getValue(BlockStateProperties.LOCKED))) - .withStepFunction(context -> context.shift ? 1 : 10) - .withFormatter(i -> { - StringBuilder number = new StringBuilder(String.valueOf(i)); - if (i <= -10 || i >= 10) - number.insert(number.length()-1,'.'); - else - number.insert( (i>=0) ? 0 : 1, "0."); - return number.toString(); - }); - scroller.value = 0; + public void addBehaviours(List behaviours) { + if (scroller == null) { + scroller = new LuaScrollValueBehaviour(this, new ControllerValueBoxTransform()); + } behaviours.add(scroller); } + public int getLimit() { + return scroller.getMax(); + } + + public void setLimit(int limit) { + scroller.between(limit); + } + + public boolean hasMinus() { + return scroller.hasMinus(); + } + + public void toggleMinusSpectrum(boolean state) { + scroller.setHasMinus(state); + } + private static class ControllerValueBoxTransform extends ValueBoxTransform.Sided { @Override protected Vec3 getSouthLocation() { - return VecHelper.voxelSpace(8, 8, 0.5); + return VecHelper.voxelSpace(8D, 8D, 0.01D); } @Override protected boolean isSideActive(BlockState state, Direction direction) { return state.getValue(BlockStateProperties.FACING) == direction; } - @Override - protected float getScale() { - return 0.5f; - } } } diff --git a/forge/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/SourceBlockEntity.java b/forge/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/SourceBlockEntity.java index 584ea42..69b4d62 100644 --- a/forge/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/SourceBlockEntity.java +++ b/forge/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/SourceBlockEntity.java @@ -1,37 +1,27 @@ package cc.tweaked_programs.cccbridge.blockEntity; -import cc.tweaked_programs.cccbridge.BlockRegister; +import cc.tweaked_programs.cccbridge.CCCRegister; import cc.tweaked_programs.cccbridge.peripherals.SourceBlockPeripheral; import dan200.computercraft.api.peripheral.IPeripheral; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; -import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.List; - -public class SourceBlockEntity extends BlockEntity { +public class SourceBlockEntity extends BlockEntity implements PeripheralBlockEntity { private SourceBlockPeripheral peripheral; public SourceBlockEntity(BlockPos pos, BlockState state) { - super(BlockRegister.SOURCE_BLOCK_ENTITY.get(), pos, state); + super(CCCRegister.SOURCE_BLOCK_ENTITY.get(), pos, state); } - public IPeripheral getPeripheral(@NotNull Direction side) { + public IPeripheral getPeripheral(@Nullable Direction side) { if (peripheral == null) peripheral = new SourceBlockPeripheral(this); return peripheral; } - @Nullable - public List getContent() { - if (peripheral == null) - return null; - return peripheral.getContent(); - } - public void setSize(int width, int height) { if (peripheral != null) peripheral.setSize(width, height); diff --git a/forge/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/TargetBlockEntity.java b/forge/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/TargetBlockEntity.java index a90636f..f6f9b72 100644 --- a/forge/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/TargetBlockEntity.java +++ b/forge/src/main/java/cc/tweaked_programs/cccbridge/blockEntity/TargetBlockEntity.java @@ -1,20 +1,21 @@ package cc.tweaked_programs.cccbridge.blockEntity; -import cc.tweaked_programs.cccbridge.BlockRegister; +import cc.tweaked_programs.cccbridge.CCCRegister; import cc.tweaked_programs.cccbridge.peripherals.TargetBlockPeripheral; import dan200.computercraft.api.peripheral.IPeripheral; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; +import org.jetbrains.annotations.NotNull; import java.util.List; -public class TargetBlockEntity extends BlockEntity { +public class TargetBlockEntity extends BlockEntity implements PeripheralBlockEntity { private TargetBlockPeripheral peripheral; public TargetBlockEntity(BlockPos pos, BlockState state) { - super(BlockRegister.TARGET_BLOCK_ENTITY.get(), pos, state); + super(CCCRegister.TARGET_BLOCK_ENTITY.get(), pos, state); } public void updateContent(int offset, List content) { @@ -22,21 +23,14 @@ public void updateContent(int offset, List content) { return; int height = getHeight(); int i = 0; - String dot = Character.toString(183); for (String line : content) { - if (i < height) { - // Replace chars that exist in C and can't be displayed in CC: - line = line.replaceAll("\u2588", "="); - line = line.replaceAll("\u2592", "-"); - line = line.replaceAll("\u2591", dot); - + if (i < height) peripheral.replaceLine(offset + i, line); - } i++; } } - public IPeripheral getPeripheral(Direction side) { + public IPeripheral getPeripheral(@NotNull Direction side) { if (peripheral == null) peripheral = new TargetBlockPeripheral(this); return peripheral; diff --git a/forge/src/main/java/cc/tweaked_programs/cccbridge/blockEntityRenderer/AnimatronicBlockEntityRenderer.java b/forge/src/main/java/cc/tweaked_programs/cccbridge/blockEntityRenderer/AnimatronicBlockEntityRenderer.java new file mode 100644 index 0000000..a309ddc --- /dev/null +++ b/forge/src/main/java/cc/tweaked_programs/cccbridge/blockEntityRenderer/AnimatronicBlockEntityRenderer.java @@ -0,0 +1,32 @@ +package cc.tweaked_programs.cccbridge.blockEntityRenderer; + +import cc.tweaked_programs.cccbridge.blockEntity.AnimatronicBlockEntity; +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; +import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; +import net.minecraft.client.renderer.entity.EntityRenderDispatcher; +import net.minecraft.world.entity.Entity; +import org.jetbrains.annotations.NotNull; + +public class AnimatronicBlockEntityRenderer implements BlockEntityRenderer { + private final EntityRenderDispatcher entityRenderer; + private static final float scale = 1F/32F*(32F-4F); + + public AnimatronicBlockEntityRenderer(BlockEntityRendererProvider.Context context) { + this.entityRenderer = Minecraft.getInstance().getEntityRenderDispatcher(); + } + + @Override + public void render(@NotNull AnimatronicBlockEntity blockEntity, float partialTick, @NotNull PoseStack poseStack, @NotNull MultiBufferSource bufferSource, int packedLight, int packedOverlay) { + poseStack.pushPose(); + + poseStack.scale(scale, scale, scale); + + Entity entity = blockEntity.getAnimatronic(); + this.entityRenderer.render(entity, 0.575D, 0.15D, 0.575D, 0.0F, partialTick, poseStack, bufferSource, packedLight); + + poseStack.popPose(); + } +} diff --git a/forge/src/main/java/cc/tweaked_programs/cccbridge/blockEntityRenderer/RedRouterBlockEntityRenderer.java b/forge/src/main/java/cc/tweaked_programs/cccbridge/blockEntityRenderer/RedRouterBlockEntityRenderer.java new file mode 100644 index 0000000..ecc46a1 --- /dev/null +++ b/forge/src/main/java/cc/tweaked_programs/cccbridge/blockEntityRenderer/RedRouterBlockEntityRenderer.java @@ -0,0 +1,105 @@ +package cc.tweaked_programs.cccbridge.blockEntityRenderer; + +import cc.tweaked_programs.cccbridge.CCCBridge; +import cc.tweaked_programs.cccbridge.Misc; +import cc.tweaked_programs.cccbridge.block.RedRouterBlock; +import cc.tweaked_programs.cccbridge.blockEntity.RedRouterBlockEntity; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.math.Vector3f; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; +import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.core.Direction; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.inventory.InventoryMenu; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; + +import java.util.HashMap; +import java.util.Map; + + +public class RedRouterBlockEntityRenderer implements BlockEntityRenderer { + private final Map FACE_TEXTURE; + public RedRouterBlockEntityRenderer(BlockEntityRendererProvider.Context context) { + Map faces = new HashMap<>(); + for (int i=0; i<=16; i++) { + faces.put(i, new ResourceLocation(CCCBridge.MOD_ID, "block/redrouter/face/"+i)); + } + FACE_TEXTURE = faces; + } + + @Override + public void render(RedRouterBlockEntity blockEntity, float partialTick, PoseStack poseStack, MultiBufferSource bufferSource, int packedLight, int packedOverlay) { + BlockState block = blockEntity.getBlockState(); + VertexConsumer buffer = bufferSource.getBuffer(RenderType.cutout()); + int flickering = Misc.flickering(); + + poseStack.pushPose(); + + // Rotate + poseStack.translate(0.5D, 0.5D, 0.5D); + if (block.hasProperty(BlockStateProperties.HORIZONTAL_FACING)) + poseStack.mulPose(Vector3f.YP.rotationDegrees(getDir(block.getValue(BlockStateProperties.HORIZONTAL_FACING)))); + poseStack.translate(-0.5D, -0.5D, -0.5D); + + int id = 0; + if (block.hasProperty(RedRouterBlock.FACE)) + id = block.getValue(RedRouterBlock.FACE); + + TextureAtlasSprite sprite = Minecraft.getInstance().getTextureAtlas(InventoryMenu.BLOCK_ATLAS).apply(getFace(id)); + int sprite_size = sprite.getWidth(); + + poseStack.translate(0D, 0D, 2D/16D-0.01); + + buffer.vertex(poseStack.last().pose(), 0 ,0 ,0) + .color(0.7F, 0.7F, 0.7F, 1.0F) + .uv(sprite.getU(sprite_size), sprite.getV(sprite_size)) + .overlayCoords(OverlayTexture.NO_OVERLAY) + .uv2(flickering) + .normal(poseStack.last().normal(), 0, 0, 0).endVertex(); + + buffer.vertex(poseStack.last().pose(), 0 ,1 ,0) + .color(0.7F, 0.7F, 0.7F, 1.0F) + .uv(sprite.getU(sprite_size), sprite.getV(0)) + .overlayCoords(OverlayTexture.NO_OVERLAY) + .uv2(flickering) + .normal(poseStack.last().normal(), 0, 0, 0).endVertex(); + + buffer.vertex(poseStack.last().pose(), 1 ,1 ,0) + .color(0.7F, 0.7F, 0.7F, 1.0F) + .uv(sprite.getU(0), sprite.getV(0)) + .overlayCoords(OverlayTexture.NO_OVERLAY) + .uv2(flickering) + .normal(poseStack.last().normal(), 0, 0, 0).endVertex(); + + buffer.vertex(poseStack.last().pose(), 1 ,0 ,0) + .color(0.7F, 0.7F, 0.7F, 1.0F) + .uv(sprite.getU(0), sprite.getV(sprite_size)) + .overlayCoords(OverlayTexture.NO_OVERLAY) + .uv2(flickering) + .normal(poseStack.last().normal(), 0, 0, 0).endVertex(); + + poseStack.popPose(); + } + + public ResourceLocation getFace(int id) { + return (id >= 1 && id <= 16) ? FACE_TEXTURE.get(id) : FACE_TEXTURE.get(0); + } + + public int getDir(Direction dir) { + return switch(dir) { + case NORTH -> 0; + case EAST -> 270; + case SOUTH -> 180; + case WEST -> 90; + default -> 0; + }; + } +} diff --git a/forge/src/main/java/cc/tweaked_programs/cccbridge/display/SourceBlockDisplaySource.java b/forge/src/main/java/cc/tweaked_programs/cccbridge/display/SourceBlockDisplaySource.java index 1899aab..2151a9c 100644 --- a/forge/src/main/java/cc/tweaked_programs/cccbridge/display/SourceBlockDisplaySource.java +++ b/forge/src/main/java/cc/tweaked_programs/cccbridge/display/SourceBlockDisplaySource.java @@ -1,11 +1,12 @@ package cc.tweaked_programs.cccbridge.display; import cc.tweaked_programs.cccbridge.blockEntity.SourceBlockEntity; -import com.simibubi.create.content.logistics.block.display.DisplayLinkContext; -import com.simibubi.create.content.logistics.block.display.source.DisplaySource; -import com.simibubi.create.content.logistics.block.display.target.DisplayTargetStats; +import cc.tweaked_programs.cccbridge.Misc; +import cc.tweaked_programs.cccbridge.peripherals.SourceBlockPeripheral; +import com.simibubi.create.content.redstone.displayLink.DisplayLinkContext; +import com.simibubi.create.content.redstone.displayLink.source.DisplaySource; +import com.simibubi.create.content.redstone.displayLink.target.DisplayTargetStats; import net.minecraft.network.chat.MutableComponent; -import net.minecraft.network.chat.TextComponent; import net.minecraft.world.level.block.entity.BlockEntity; import java.util.LinkedList; @@ -14,20 +15,28 @@ public class SourceBlockDisplaySource extends DisplaySource { @Override public List provideText(DisplayLinkContext context, DisplayTargetStats stats) { - BlockEntity block = context.getSourceTE(); + BlockEntity block = context.getSourceBlockEntity(); + if (!(block instanceof SourceBlockEntity sourceBlock)) return EMPTY; + if (!(sourceBlock.getPeripheral(null) instanceof SourceBlockPeripheral peripheral)) + return EMPTY; + sourceBlock.setSize(stats.maxColumns(), stats.maxRows()); - List data = sourceBlock.getContent(); + List data = peripheral.getContent(); if (data == null) return EMPTY; List content = new LinkedList<>(); - for (String line : data) { - content.add(new TextComponent("").append(line)); - } + for (String line : data) + content.add(Misc.toMCTxt(line)); return content; } + + @Override + public int getPassiveRefreshTicks() { + return 20; + } } \ No newline at end of file diff --git a/forge/src/main/java/cc/tweaked_programs/cccbridge/display/TargetBlockDisplayTarget.java b/forge/src/main/java/cc/tweaked_programs/cccbridge/display/TargetBlockDisplayTarget.java index 0a8530a..4df4acc 100644 --- a/forge/src/main/java/cc/tweaked_programs/cccbridge/display/TargetBlockDisplayTarget.java +++ b/forge/src/main/java/cc/tweaked_programs/cccbridge/display/TargetBlockDisplayTarget.java @@ -1,9 +1,10 @@ package cc.tweaked_programs.cccbridge.display; +import cc.tweaked_programs.cccbridge.Misc; import cc.tweaked_programs.cccbridge.blockEntity.TargetBlockEntity; -import com.simibubi.create.content.logistics.block.display.DisplayLinkContext; -import com.simibubi.create.content.logistics.block.display.target.DisplayBoardTarget; -import com.simibubi.create.content.logistics.block.display.target.DisplayTargetStats; +import com.simibubi.create.content.redstone.displayLink.DisplayLinkContext; +import com.simibubi.create.content.redstone.displayLink.target.DisplayBoardTarget; +import com.simibubi.create.content.redstone.displayLink.target.DisplayTargetStats; import net.minecraft.network.chat.MutableComponent; import net.minecraft.world.level.block.entity.BlockEntity; @@ -13,16 +14,16 @@ public class TargetBlockDisplayTarget extends DisplayBoardTarget { @Override public void acceptFlapText(int line, List> text, DisplayLinkContext context) { - BlockEntity block = context.getTargetTE(); + BlockEntity block = context.getTargetBlockEntity(); if (!(block instanceof TargetBlockEntity targetBlock)) return; List content = new LinkedList<>(); for (List c : text) { - String parts = ""; + StringBuilder parts = new StringBuilder(); for (MutableComponent sLine : c) - parts = parts + sLine.getString() + " "; - content.add(parts); + parts.append(sLine.getString()).append(" "); + content.add(Misc.toCCTxt(parts.toString())); } targetBlock.updateContent(line, content); @@ -30,7 +31,7 @@ public void acceptFlapText(int line, List> text, DisplayL @Override public DisplayTargetStats provideStats(DisplayLinkContext context) { - BlockEntity block = context.getTargetTE(); + BlockEntity block = context.getTargetBlockEntity(); if (!(block instanceof TargetBlockEntity targetBlock)) return new DisplayTargetStats(24, 1, this); diff --git a/forge/src/main/java/cc/tweaked_programs/cccbridge/entity/animatronic/AnimatronicEntity.java b/forge/src/main/java/cc/tweaked_programs/cccbridge/entity/animatronic/AnimatronicEntity.java new file mode 100644 index 0000000..c346f6c --- /dev/null +++ b/forge/src/main/java/cc/tweaked_programs/cccbridge/entity/animatronic/AnimatronicEntity.java @@ -0,0 +1,242 @@ +package cc.tweaked_programs.cccbridge.entity.animatronic; + +import cc.tweaked_programs.cccbridge.Misc; +import net.minecraft.core.Rotations; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.ListTag; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientboundAddEntityPacket; +import net.minecraft.network.syncher.EntityDataAccessor; +import net.minecraft.network.syncher.EntityDataSerializers; +import net.minecraft.network.syncher.SynchedEntityData; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.Level; +import org.jetbrains.annotations.NotNull; + +import java.util.Optional; + +public class AnimatronicEntity extends Entity { + private static final Rotations DEFAULT_HEAD_POSE = new Rotations(0.0F, 0.0F, 0.0F); + private static final Rotations DEFAULT_BODY_POSE = new Rotations(0.0F, 0.0F, 0.0F); + private static final Rotations DEFAULT_LEFT_ARM_POSE = new Rotations(0.0F, 0.0F, 0.0F); + private static final Rotations DEFAULT_RIGHT_ARM_POSE = new Rotations(0.0F, 0.0F, 0.0F); + + public static final EntityDataAccessor DATA_HEAD_POSE = SynchedEntityData.defineId(AnimatronicEntity.class, EntityDataSerializers.ROTATIONS); + public static final EntityDataAccessor DATA_BODY_POSE = SynchedEntityData.defineId(AnimatronicEntity.class, EntityDataSerializers.ROTATIONS); + public static final EntityDataAccessor DATA_LEFT_ARM_POSE = SynchedEntityData.defineId(AnimatronicEntity.class, EntityDataSerializers.ROTATIONS); + public static final EntityDataAccessor DATA_RIGHT_ARM_POSE = SynchedEntityData.defineId(AnimatronicEntity.class, EntityDataSerializers.ROTATIONS); + public static final EntityDataAccessor DATA_FACE = SynchedEntityData.defineId(AnimatronicEntity.class, EntityDataSerializers.STRING); + + + private Rotations headPose = new Rotations(DEFAULT_HEAD_POSE.getX(), DEFAULT_HEAD_POSE.getY(), DEFAULT_HEAD_POSE.getZ()); + private Rotations bodyPose = new Rotations(DEFAULT_BODY_POSE.getX(), DEFAULT_BODY_POSE.getY(), DEFAULT_BODY_POSE.getZ()); + private Rotations leftArmPose = new Rotations(DEFAULT_LEFT_ARM_POSE.getX(), DEFAULT_LEFT_ARM_POSE.getY(), DEFAULT_LEFT_ARM_POSE.getZ()); + private Rotations rightArmPose = new Rotations(DEFAULT_RIGHT_ARM_POSE.getX(), DEFAULT_RIGHT_ARM_POSE.getY(), DEFAULT_RIGHT_ARM_POSE.getZ()); + + private Rotations current_headPose = new Rotations(DEFAULT_HEAD_POSE.getX(), DEFAULT_HEAD_POSE.getY(), DEFAULT_HEAD_POSE.getZ()); + private Rotations current_bodyPose = new Rotations(DEFAULT_BODY_POSE.getX(), DEFAULT_BODY_POSE.getY(), DEFAULT_BODY_POSE.getZ()); + private Rotations current_leftArmPose = new Rotations(DEFAULT_LEFT_ARM_POSE.getX(), DEFAULT_LEFT_ARM_POSE.getY(), DEFAULT_LEFT_ARM_POSE.getZ()); + private Rotations current_rightArmPose = new Rotations(DEFAULT_RIGHT_ARM_POSE.getX(), DEFAULT_RIGHT_ARM_POSE.getY(), DEFAULT_RIGHT_ARM_POSE.getZ()); + + private Rotations start_headPose = new Rotations(DEFAULT_HEAD_POSE.getX(), DEFAULT_HEAD_POSE.getY(), DEFAULT_HEAD_POSE.getZ()); + private Rotations start_bodyPose = new Rotations(DEFAULT_BODY_POSE.getX(), DEFAULT_BODY_POSE.getY(), DEFAULT_BODY_POSE.getZ()); + private Rotations start_leftArmPose = new Rotations(DEFAULT_LEFT_ARM_POSE.getX(), DEFAULT_LEFT_ARM_POSE.getY(), DEFAULT_LEFT_ARM_POSE.getZ()); + private Rotations start_rightArmPose = new Rotations(DEFAULT_RIGHT_ARM_POSE.getX(), DEFAULT_RIGHT_ARM_POSE.getY(), DEFAULT_RIGHT_ARM_POSE.getZ()); + + private boolean isMoving; + private double step; + private long start_animation; + + private String face; + + public AnimatronicEntity(EntityType entityType, Level level) { + super(entityType, level); + isMoving = true; + step = 0.0; + face = "normal"; + start_animation = 0; + } + + public void updateCurrentPoses(float partialTicks) { + step = (level.getGameTime()-start_animation+partialTicks) * (0.0175*6); + + current_headPose = updatePose(start_headPose, getDestinationHeadPose()); + current_bodyPose = updatePose(start_bodyPose, getDestinationBodyPose()); + current_leftArmPose = updatePose(start_leftArmPose, getDestinationLeftArmPose()); + current_rightArmPose = updatePose(start_rightArmPose, getDestinationRightArmPose()); + + if (step >= 1) { + isMoving = false; + current_headPose = getDestinationHeadPose(); + current_bodyPose = getDestinationBodyPose(); + current_leftArmPose = getDestinationLeftArmPose(); + current_rightArmPose = getDestinationRightArmPose(); + } + } + + private Rotations updatePose(Rotations start, Rotations destination) { + float x = Misc.updateMovement(start.getX(), destination.getX(), step); + float y = Misc.updateMovement(start.getY(), destination.getY(), step); + float z = Misc.updateMovement(start.getZ(), destination.getZ(), step); + return new Rotations(x, y, z); + } + + public boolean isMoving() { + return isMoving; + } + + public void startAnimation() { + // onLoad level is null; skip animation + if (level == null) { + current_headPose = getDestinationHeadPose(); + current_bodyPose = getDestinationBodyPose(); + current_leftArmPose = getDestinationLeftArmPose(); + current_rightArmPose = getRightArmPose(); + return; + } + + if (!level.isClientSide) + return; + + start_animation = level.getGameTime(); + start_headPose = current_headPose; + start_bodyPose = current_bodyPose; + start_leftArmPose = current_leftArmPose; + start_rightArmPose = current_rightArmPose; + isMoving = true; + step = 0.0; + } + + public ResourceLocation getFace() { + if (this.entityData.get(DATA_FACE) == null) + return AnimatronicRenderer.TEXTURE_FACE_NORMAL; + + return switch (this.entityData.get(DATA_FACE)) { + case "normal" -> AnimatronicRenderer.TEXTURE_FACE_NORMAL; + case "happy" -> AnimatronicRenderer.TEXTURE_FACE_HAPPY; + case "question" -> AnimatronicRenderer.TEXTURE_FACE_QUESTION; + case "sad" -> AnimatronicRenderer.TEXTURE_FACE_SAD; + + default -> AnimatronicRenderer.TEXTURE_FACE_NORMAL; + }; + } + + public void setFace(String face) { + this.entityData.set(DATA_FACE, face); + } + + public void setRightArmPose(Rotations rotations) { + this.entityData.set(DATA_RIGHT_ARM_POSE, rotations); + } + + public void setLeftArmPose(Rotations rotations) { + this.entityData.set(DATA_LEFT_ARM_POSE, rotations); + } + + public void setBodyPose(Rotations rotations) { + this.entityData.set(DATA_BODY_POSE, rotations); + } + + public void forceBodyPose(Rotations rotations) { + setBodyPose(rotations); + current_bodyPose = rotations; + } + + + public void setHeadPose(Rotations rotations) { + this.entityData.set(DATA_HEAD_POSE, rotations); + + } + + public Rotations getRightArmPose() { + return current_rightArmPose; + } + + public Rotations getLeftArmPose() { + return current_leftArmPose; + } + + public Rotations getBodyPose() { + return current_bodyPose; + } + + public Rotations getHeadPose() { + return current_headPose; + } + + public Rotations getDestinationHeadPose() { + return Optional.ofNullable(this.entityData.get(DATA_HEAD_POSE)).orElse(DEFAULT_HEAD_POSE); + } + + public Rotations getDestinationBodyPose() { + return Optional.ofNullable(this.entityData.get(DATA_BODY_POSE)).orElse(DEFAULT_BODY_POSE); + } + + public Rotations getDestinationLeftArmPose() { + return Optional.ofNullable(this.entityData.get(DATA_LEFT_ARM_POSE)).orElse(DEFAULT_LEFT_ARM_POSE); + } + + public Rotations getDestinationRightArmPose() { + return Optional.ofNullable(this.entityData.get(DATA_RIGHT_ARM_POSE)).orElse(DEFAULT_RIGHT_ARM_POSE); + } + + + public void read(CompoundTag nbt) { + readAdditionalSaveData(nbt); + } + + public void add(CompoundTag nbt) { + addAdditionalSaveData(nbt); + } + + @Override + protected void readAdditionalSaveData(CompoundTag nbt) { + ListTag ltHead = nbt.getList("headPose", 5); + this.setHeadPose(ltHead.isEmpty() ? DEFAULT_HEAD_POSE : new Rotations(ltHead)); + + ListTag ltBody = nbt.getList("bodyPose", 5); + this.setBodyPose(ltBody.isEmpty() ? DEFAULT_HEAD_POSE : new Rotations(ltBody)); + + ListTag ltLeftArm = nbt.getList("leftArmPose", 5); + this.setLeftArmPose(ltLeftArm.isEmpty() ? DEFAULT_HEAD_POSE : new Rotations(ltLeftArm)); + + ListTag ltArmPose = nbt.getList("rightArmPose", 5); + this.setRightArmPose(ltArmPose.isEmpty() ? DEFAULT_HEAD_POSE : new Rotations(ltArmPose)); + + setFace(nbt.getString("face")); + + startAnimation(); + } + + @Override + protected void addAdditionalSaveData(CompoundTag nbt) { + nbt.put("headPose", getDestinationHeadPose().save()); + nbt.put("bodyPose", getDestinationBodyPose().save()); + nbt.put("leftArmPose", getDestinationLeftArmPose().save()); + nbt.put("rightArmPose", getDestinationRightArmPose().save()); + if (this.entityData.get(DATA_FACE) != null) + nbt.putString("face", this.entityData.get(DATA_FACE)); + } + + @Override + protected void defineSynchedData() { + this.entityData.define(DATA_HEAD_POSE, headPose); + this.entityData.define(DATA_BODY_POSE, bodyPose); + this.entityData.define(DATA_LEFT_ARM_POSE, leftArmPose); + this.entityData.define(DATA_RIGHT_ARM_POSE, rightArmPose); + this.entityData.define(DATA_FACE, face); + } + + @Override + public @NotNull Packet getAddEntityPacket() { + return new ClientboundAddEntityPacket(this); + } + + @Override + public void onSyncedDataUpdated(EntityDataAccessor key) { + super.onSyncedDataUpdated(key); + startAnimation(); + } +} diff --git a/forge/src/main/java/cc/tweaked_programs/cccbridge/entity/animatronic/AnimatronicModel.java b/forge/src/main/java/cc/tweaked_programs/cccbridge/entity/animatronic/AnimatronicModel.java new file mode 100644 index 0000000..2425c7f --- /dev/null +++ b/forge/src/main/java/cc/tweaked_programs/cccbridge/entity/animatronic/AnimatronicModel.java @@ -0,0 +1,65 @@ +package cc.tweaked_programs.cccbridge.entity.animatronic; + +import cc.tweaked_programs.cccbridge.CCCRegister; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.model.EntityModel; +import net.minecraft.client.model.geom.ModelLayerLocation; +import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.client.model.geom.PartPose; +import net.minecraft.client.model.geom.builders.*; +import org.jetbrains.annotations.NotNull; + +public class AnimatronicModel extends EntityModel { + public static final ModelLayerLocation LAYER_LOCATION = new ModelLayerLocation(CCCRegister.ANIMATRONIC_ENTITY.getId(), "main"); + private static final float awesomeFactor = ((float)Math.PI / 180F); + private final ModelPart root; + + public AnimatronicModel(ModelPart root) { + this.root = root.getChild("root"); + } + + public static LayerDefinition createBodyLayer() { + MeshDefinition meshdefinition = new MeshDefinition(); + PartDefinition partdefinition = meshdefinition.getRoot(); + + PartDefinition root = partdefinition.addOrReplaceChild("root", CubeListBuilder.create().texOffs(8, 32).addBox(-1.0F, -6.0F, -3.5F, 2.0F, 2.0F, 2.0F, new CubeDeformation(0.0F)) + .texOffs(0, 20).addBox(-3.0F, -4.0F, -4.5F, 6.0F, 8.0F, 4.0F, new CubeDeformation(0.0F)) + .texOffs(26, 20).addBox(-6.0F, -2.5F, -3.0F, 12.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 10.0F, 0.0F)); + + PartDefinition head = root.addOrReplaceChild("head", CubeListBuilder.create().texOffs(0, 0).addBox(-5.0F, -9.0F, -5.0F, 10.0F, 10.0F, 10.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, -6.0F, -2.5F)); + + PartDefinition rightarm = root.addOrReplaceChild("rightarm", CubeListBuilder.create().texOffs(0, 32).addBox(-1.0F, -2.0F, -1.0F, 2.0F, 12.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offset(-6.0F, -2.0F, -2.5F)); + + PartDefinition leftarm = root.addOrReplaceChild("leftarm", CubeListBuilder.create().texOffs(20, 20).addBox(-1.0F, -2.0F, -1.0F, 2.0F, 12.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offset(6.0F, -2.0F, -2.5F)); + + return LayerDefinition.create(meshdefinition, 64, 64); + } + + @Override + public void setupAnim(T entity, float limbSwing, float limbSwingAmount, float partialTicks, float netHeadYaw, float headPitch) { + if (entity.isMoving()) + entity.updateCurrentPoses(partialTicks); + + this.root.getChild("head").xRot = entity.getHeadPose().getX() * awesomeFactor; + this.root.getChild("head").yRot = entity.getHeadPose().getY() * awesomeFactor; + this.root.getChild("head").zRot = entity.getHeadPose().getZ() * awesomeFactor; + + this.root.yRot = entity.getBodyPose().getY() * awesomeFactor; + this.root.xRot = entity.getBodyPose().getX() * awesomeFactor; + this.root.zRot = entity.getBodyPose().getZ() * awesomeFactor; + + this.root.getChild("leftarm").xRot = entity.getLeftArmPose().getX() * awesomeFactor; + this.root.getChild("leftarm").yRot = entity.getLeftArmPose().getY() * awesomeFactor; + this.root.getChild("leftarm").zRot = entity.getLeftArmPose().getZ() * awesomeFactor; + + this.root.getChild("rightarm").xRot = entity.getRightArmPose().getX() * awesomeFactor; + this.root.getChild("rightarm").yRot = entity.getRightArmPose().getY() * awesomeFactor; + this.root.getChild("rightarm").zRot = entity.getRightArmPose().getZ() * awesomeFactor; + } + + @Override + public void renderToBuffer(@NotNull PoseStack poseStack, @NotNull VertexConsumer vertexConsumer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) { + root.render(poseStack, vertexConsumer, packedLight, packedOverlay, red, green, blue, alpha); + } +} \ No newline at end of file diff --git a/forge/src/main/java/cc/tweaked_programs/cccbridge/entity/animatronic/AnimatronicRenderer.java b/forge/src/main/java/cc/tweaked_programs/cccbridge/entity/animatronic/AnimatronicRenderer.java new file mode 100644 index 0000000..499f11b --- /dev/null +++ b/forge/src/main/java/cc/tweaked_programs/cccbridge/entity/animatronic/AnimatronicRenderer.java @@ -0,0 +1,57 @@ +package cc.tweaked_programs.cccbridge.entity.animatronic; + +import cc.tweaked_programs.cccbridge.CCCBridge; +import cc.tweaked_programs.cccbridge.Misc; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.entity.EntityRenderer; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.resources.ResourceLocation; +import org.jetbrains.annotations.NotNull; + +public class AnimatronicRenderer extends EntityRenderer { + public static final ResourceLocation TEXTURE_BODY = new ResourceLocation(CCCBridge.MOD_ID, "textures/entity/animatronic/body.png"); + + public static final ResourceLocation TEXTURE_FACE_NORMAL = new ResourceLocation(CCCBridge.MOD_ID, "textures/entity/animatronic/face_normal.png"); + public static final ResourceLocation TEXTURE_FACE_HAPPY = new ResourceLocation(CCCBridge.MOD_ID, "textures/entity/animatronic/face_happy.png"); + public static final ResourceLocation TEXTURE_FACE_QUESTION = new ResourceLocation(CCCBridge.MOD_ID, "textures/entity/animatronic/face_question.png"); + public static final ResourceLocation TEXTURE_FACE_SAD = new ResourceLocation(CCCBridge.MOD_ID, "textures/entity/animatronic/face_sad.png"); + + public static final ResourceLocation TEXTURE_FACE_CURSED = new ResourceLocation(CCCBridge.MOD_ID, "textures/entity/animatronic/face_creepy.png"); + + private final AnimatronicModel model; + + public AnimatronicRenderer(EntityRendererProvider.Context context) { + super(context); + this.model = new AnimatronicModel<>(context.bakeLayer(AnimatronicModel.LAYER_LOCATION)); + } + + @Override + public @NotNull ResourceLocation getTextureLocation(@NotNull AnimatronicEntity entity) { + return TEXTURE_BODY; + } + + @Override + public void render(@NotNull AnimatronicEntity entity, float yaw, float tickDelta, PoseStack poseStack, MultiBufferSource multiBufferSource, int light) { + // Setup + poseStack.pushPose(); + poseStack.scale(-1.0F, -1.0F, 1.0F); + poseStack.translate(0.0F, -1.5F, 0.0F); + + this.model.setupAnim(entity, 0.0F, 0.0F, tickDelta, 0.0F, 0.0F); + + // Render model + VertexConsumer vertexConsumer = multiBufferSource.getBuffer(this.model.renderType(TEXTURE_BODY)); + this.model.renderToBuffer(poseStack, vertexConsumer, light, OverlayTexture.NO_OVERLAY, 1.0F, 1.0F, 1.0F, 1.0F); + + // Eyes + vertexConsumer = multiBufferSource.getBuffer(this.model.renderType(Misc.rareCreepiness() ? TEXTURE_FACE_CURSED : entity.getFace())); + this.model.renderToBuffer(poseStack, vertexConsumer, Misc.flickering(), OverlayTexture.NO_OVERLAY, 1.0F, 1.0F, 1.0F, 1.0F); + + // Checkout + poseStack.popPose(); + super.render(entity, yaw, tickDelta, poseStack, multiBufferSource, light); + } +} \ No newline at end of file diff --git a/forge/src/main/java/cc/tweaked_programs/cccbridge/peripherals/AnimatronicPeripheral.java b/forge/src/main/java/cc/tweaked_programs/cccbridge/peripherals/AnimatronicPeripheral.java new file mode 100644 index 0000000..3c2c115 --- /dev/null +++ b/forge/src/main/java/cc/tweaked_programs/cccbridge/peripherals/AnimatronicPeripheral.java @@ -0,0 +1,234 @@ +package cc.tweaked_programs.cccbridge.peripherals; + +import cc.tweaked_programs.cccbridge.blockEntity.AnimatronicBlockEntity; +import dan200.computercraft.api.lua.LuaException; +import dan200.computercraft.api.lua.LuaFunction; +import dan200.computercraft.api.lua.MethodResult; +import net.minecraft.core.Rotations; +import net.minecraft.util.Mth; + +/** + * This peripheral is used by the Animatronic. It is an electronic puppet that can be positioned however needed. + * Neat for decoration purposes! A bit rusty, however. + * + * @version 1.1 + */ +public class AnimatronicPeripheral extends TweakedPeripheral { + private float[] headRot; + private float[] bodyRot; + private float[] leftArmRot; + private float[] rightArmRot; + + public AnimatronicPeripheral(AnimatronicBlockEntity blockEntity) { + super("animatronic", blockEntity); + + headRot = new float[]{0,0,0}; + bodyRot = new float[]{0,0,0}; + leftArmRot = new float[]{0,0,0}; + rightArmRot = new float[]{0,0,0}; + } + + /** + * Changes the face of the Animatronic. + * + * @param face The new face. Must be either 'normal', 'happy', 'question' or 'sad'. + * + * @throws LuaException Whenever the given string is not one of those types. + */ + @LuaFunction + public final void setFace(String face) throws LuaException { + if (face.equals("normal") || face.equals("happy") || face.equals("question") || face.equals("sad")) { + AnimatronicBlockEntity be = super.getTarget(); + if (be != null) { + be.setFace(face); + be.setChanged(); + } + } else throw new LuaException("Given string must be either 'normal', 'happy', 'question' or 'sad'"); + } + + /** + * Pushes the stored rotation values to the Animatronic. + * After pushing them, the rotations get reset to 0 everywhere. + */ + @LuaFunction + public final void push() { + AnimatronicBlockEntity be = super.getTarget(); + if (be != null) { + be.setHeadPose(headRot[0], headRot[1], headRot[2]); + be.setBodyPose(bodyRot[0], bodyRot[1], bodyRot[2]); + be.setLeftArmPose(leftArmRot[0], leftArmRot[1], leftArmRot[2]); + be.setRightArmPose(rightArmRot[0], rightArmRot[1], rightArmRot[2]); + be.setChanged(); + } + + headRot = new float[]{0,0,0}; + bodyRot = new float[]{0,0,0}; + leftArmRot = new float[]{0,0,0}; + rightArmRot = new float[]{0,0,0}; + } + + /** + * Sets the head rotation. + * Can only be set within the bounds -180° to 180° for `X`, `Y` and `Z`. + * + * @param x The X rotation. + * @param y The Y rotation. + * @param z The Z rotation. + */ + @LuaFunction + public final void setHeadRot(double x, double y, double z) { + x = Mth.clamp(x, -180D, 180D); + y = Mth.clamp(y, -180D, 180D); + z = Mth.clamp(z, -180D, 180D); + headRot = new float[]{(float)x, (float)y, (float)z}; + } + + /** + * Sets the body rotation. + * Can only be set within the bounds -180° to 180° for `Y` and `Z`; + * > Note: `X` can be set within 360°. + * + * @param x The X rotation. + * @param y The Y rotation. + * @param z The Z rotation. + */ + @LuaFunction + public final void setBodyRot(double x, double y, double z) { + x = Mth.clamp(x, -360D, 360D); + y = Mth.clamp(y, -180D, 180D); + z = Mth.clamp(z, -180D, 180D); + bodyRot = new float[]{(float)x, (float)y, (float)z}; + } + + /** + * Sets the left arm rotation. + * Can only be set within the bounds -180° to 180° for `X`, `Y` and `Z`. + * + * @param x The X rotation. + * @param y The Y rotation. + * @param z The Z rotation. + */ + @LuaFunction + public final void setLeftArmRot(double x, double y, double z) { + x = Mth.clamp(x, -180, 180); + y = Mth.clamp(y, -180, 180); + z = Mth.clamp(z, -180, 180); + leftArmRot = new float[]{(float)x, (float)y, (float)z}; + } + + /** + * Sets the right arm rotation. + * Can only be set within the bounds -180° to 180° for `X`, `Y` and `Z`. + * + * @param x The X rotation. + * @param y The Y rotation. + * @param z The Z rotation. + */ + @LuaFunction + public final void setRightArmRot(double x, double y, double z) { + x = Mth.clamp(x, -180, 180); + y = Mth.clamp(y, -180, 180); + z = Mth.clamp(z, -180, 180); + rightArmRot = new float[]{(float)x, (float)y, (float)z}; + } + + /** + * Returns the current stored head rotation. + * + * @return Head rotation: table.unpack{X, Y, Z}. + */ + @LuaFunction + public final MethodResult getStoredHeadRot() { + return MethodResult.of((double)headRot[0], (double)headRot[1], (double)headRot[2]); + } + + /** + * Returns the current stored body rotation. + * + * @return Body rotation: table.unpack{X, Y, Z}. + */ + @LuaFunction + public final MethodResult getStoredBodyRot() { + return MethodResult.of((double)bodyRot[0], (double)bodyRot[1], (double)bodyRot[2]); + } + + /** + * Returns the current stored left arm rotation. + * + * @return Left arm rotation: table.unpack{X, Y, Z}. + */ + @LuaFunction + public final MethodResult getStoredLeftArmRot() { + return MethodResult.of((double)leftArmRot[0], (double)leftArmRot[1], (double)leftArmRot[2]); + } + + /** + * Returns the current stored right arm rotation. + * + * @return Right arm rotation: table.unpack{X, Y, Z}. + */ + @LuaFunction + public final MethodResult getStoredRightArmRot() { + return MethodResult.of((double)rightArmRot[0], (double)rightArmRot[1], (double)rightArmRot[2]); + } + + /** + * Returns the head rotation of the Animatronic. + * + * @return Head rotation: table.unpack{X, Y, Z}. + */ + @LuaFunction + public final MethodResult getAppliedHeadRot() { + AnimatronicBlockEntity be = super.getTarget(); + if (be != null) { + Rotations rot = be.getHeadPose(); + return MethodResult.of((double)rot.getX(), (double)rot.getY(), (double)rot.getZ()); + } + return MethodResult.of(0F, 0F, 0F); + } + + /** + * Returns the body rotation of the Animatronic. + * + * @return Body rotation: table.unpack{X, Y, Z}. + */ + @LuaFunction + public final MethodResult getAppliedBodyRot() { + AnimatronicBlockEntity be = super.getTarget(); + if (be != null) { + Rotations rot = be.getBodyPose(); + return MethodResult.of((double)rot.getX(), (double)rot.getY(), (double)rot.getZ()); + } + return MethodResult.of(0F, 0F, 0F); + } + + /** + * Returns the left arm rotation of the Animatronic. + * + * @return Left arm rotation: table.unpack{X, Y, Z}. + */ + @LuaFunction + public final MethodResult getAppliedLeftArmRot() { + AnimatronicBlockEntity be = super.getTarget(); + if (be != null) { + Rotations rot = be.getLeftArmPose(); + return MethodResult.of((double)rot.getX(), (double)rot.getY(), (double)rot.getZ()); + } + return MethodResult.of(0F, 0F, 0F); + } + + /** + * Returns the right arm rotation of the Animatronic. + * + * @return Right arm rotation: table.unpack{X, Y, Z}. + */ + @LuaFunction + public final MethodResult getAppliedRightArmRot() { + AnimatronicBlockEntity be = super.getTarget(); + if (be != null) { + Rotations rot = be.getRightArmPose(); + return MethodResult.of((double)rot.getX(), (double)rot.getY(), (double)rot.getZ()); + } + return MethodResult.of(0F, 0F, 0F); + } +} diff --git a/forge/src/main/java/cc/tweaked_programs/cccbridge/peripherals/RedRouterBlockPeripheral.java b/forge/src/main/java/cc/tweaked_programs/cccbridge/peripherals/RedRouterBlockPeripheral.java index 383ad38..72a5491 100644 --- a/forge/src/main/java/cc/tweaked_programs/cccbridge/peripherals/RedRouterBlockPeripheral.java +++ b/forge/src/main/java/cc/tweaked_programs/cccbridge/peripherals/RedRouterBlockPeripheral.java @@ -3,36 +3,43 @@ import cc.tweaked_programs.cccbridge.blockEntity.RedRouterBlockEntity; import dan200.computercraft.api.lua.LuaException; import dan200.computercraft.api.lua.LuaFunction; -import dan200.computercraft.api.peripheral.IPeripheral; +import dan200.computercraft.api.peripheral.IComputerAccess; import dan200.computercraft.core.computer.ComputerSide; import net.minecraft.core.Direction; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -public class RedRouterBlockPeripheral implements IPeripheral { - private final RedRouterBlockEntity redrouter_be; +import java.util.LinkedList; +import java.util.List; - public RedRouterBlockPeripheral(RedRouterBlockEntity redrouter_block_entity) { - this.redrouter_be = redrouter_block_entity; - } +/** + * This peripheral is used by the RedRouter. It works very similar to the Redstone API. + * + * @version 1.1 + */ +public class RedRouterBlockPeripheral extends TweakedPeripheral { + public static final String REDSTONE_EVENT = "redstone"; + private final List pcs = new LinkedList<>(); - @NotNull - @Override - public String getType() { - return "redrouter"; + public RedRouterBlockPeripheral(RedRouterBlockEntity blockentity) { + super("redrouter", blockentity); } public Direction getActualSide(ComputerSide side) { - Direction facing = redrouter_be.getFacing(); - return switch (side.getName()) { - case ("front") -> facing.getOpposite(); - case ("back") -> facing; - case ("left") -> facing.getClockWise(); - case ("right") -> facing.getCounterClockWise(); - case ("top") -> Direction.DOWN; - case ("bottom") -> Direction.UP; - default -> Direction.NORTH; - }; + RedRouterBlockEntity be = getTarget(); + + if (be != null) { + Direction facing = getTarget().getFacing(); + return switch (side.getName()) { + case ("front") -> facing.getOpposite(); + case ("back") -> facing; + case ("left") -> facing.getClockWise(); + case ("right") -> facing.getCounterClockWise(); + case ("top") -> Direction.DOWN; + case ("bottom") -> Direction.UP; + default -> Direction.NORTH; + }; + } + + return Direction.NORTH; } /** @@ -43,7 +50,9 @@ public Direction getActualSide(ComputerSide side) { */ @LuaFunction public final void setOutput(ComputerSide side, boolean on) { - redrouter_be.setPower(getActualSide(side).getName(), on ? 15 : 0); + RedRouterBlockEntity be = getTarget(); + if (be != null) + be.setPower(getActualSide(side).getName(), on ? 15 : 0); } /** @@ -55,7 +64,11 @@ public final void setOutput(ComputerSide side, boolean on) { */ @LuaFunction public final boolean getOutput(ComputerSide side) { - return redrouter_be.getPower(getActualSide(side)) > 0; + RedRouterBlockEntity be = getTarget(); + if (be != null) + return be.getPower(getActualSide(side)) > 0; + + return false; } /** @@ -66,7 +79,11 @@ public final boolean getOutput(ComputerSide side) { */ @LuaFunction public final boolean getInput(ComputerSide side) { - return redrouter_be.getRedstoneInput(getActualSide(side)) > 0; + RedRouterBlockEntity be = getTarget(); + if (be != null) + return be.getRedstoneInput(getActualSide(side)) > 0; + + return false; } /** @@ -79,7 +96,10 @@ public final boolean getInput(ComputerSide side) { @LuaFunction({"setAnalogOutput", "setAnalogueOutput"}) public final void setAnalogOutput(ComputerSide side, int value) throws LuaException { if (value < 0 || value > 15) throw new LuaException("Expected number in range 0-15"); - redrouter_be.setPower(getActualSide(side).getName(), value); + RedRouterBlockEntity be = getTarget(); + + if (be != null) + be.setPower(getActualSide(side).getName(), value); } /** @@ -91,7 +111,11 @@ public final void setAnalogOutput(ComputerSide side, int value) throws LuaExcept */ @LuaFunction({"getAnalogOutput", "getAnalogueOutput"}) public final int getAnalogOutput(ComputerSide side) { - return redrouter_be.getPower(getActualSide(side)); + RedRouterBlockEntity be = getTarget(); + if (be != null) + return be.getPower(getActualSide(side)); + + return 0; } /** @@ -102,11 +126,10 @@ public final int getAnalogOutput(ComputerSide side) { */ @LuaFunction({"getAnalogInput", "getAnalogueInput"}) public final int getAnalogInput(ComputerSide side) { - return redrouter_be.getRedstoneInput(getActualSide(side)); - } + RedRouterBlockEntity be = getTarget(); + if (be != null) + return be.getRedstoneInput(getActualSide(side)); - @Override - public boolean equals(@Nullable IPeripheral other) { - return this == other || other instanceof RedRouterBlockPeripheral redrouter && redrouter.redrouter_be == redrouter_be; + return 0; } } diff --git a/forge/src/main/java/cc/tweaked_programs/cccbridge/peripherals/ScrollerBlockPeripheral.java b/forge/src/main/java/cc/tweaked_programs/cccbridge/peripherals/ScrollerBlockPeripheral.java index a8f8dad..6ac0456 100644 --- a/forge/src/main/java/cc/tweaked_programs/cccbridge/peripherals/ScrollerBlockPeripheral.java +++ b/forge/src/main/java/cc/tweaked_programs/cccbridge/peripherals/ScrollerBlockPeripheral.java @@ -1,52 +1,37 @@ package cc.tweaked_programs.cccbridge.peripherals; import cc.tweaked_programs.cccbridge.blockEntity.ScrollerBlockEntity; -import com.simibubi.create.foundation.tileEntity.behaviour.scrollvalue.ScrollValueBehaviour; import dan200.computercraft.api.lua.LuaFunction; -import dan200.computercraft.api.peripheral.IComputerAccess; -import dan200.computercraft.api.peripheral.IPeripheral; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.properties.BlockStateProperties; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import javax.annotation.Nonnull; -import java.util.LinkedList; -import java.util.List; +/** + * This peripheral is used by the Scroller Pane. It allows to interact with its valued that the player can manipulate + * (as long as this peripheral allows though, as it call lock it for outside interactions) + * + * @version 2.0 + */ +public class ScrollerBlockPeripheral extends TweakedPeripheral { -public class ScrollerBlockPeripheral implements IPeripheral { - private final ScrollerBlockEntity scroller; - private final Level level; - private final List pcs = new LinkedList<>(); - - public ScrollerBlockPeripheral(ScrollerBlockEntity block_entity, Level level) { - this.scroller = block_entity; - this.level = level; - } - - @Override - public void attach(@Nonnull IComputerAccess computer) { - pcs.add(computer); - } - - @Override - public void detach(@Nonnull IComputerAccess computer) { - pcs.removeIf(p -> (p.getID() == computer.getID())); - } - - public void newValue(int value) { - for (IComputerAccess pc : pcs) - pc.queueEvent("scroller_changed", pc.getAttachmentName(), (double)(value/10)); + public ScrollerBlockPeripheral(ScrollerBlockEntity blockentity) { + super("scroller", blockentity); } - /** * Returns whether the Scroller Pane is locked or not. * @return The state */ @LuaFunction public final boolean isLocked() { - return level.getBlockState(scroller.getBlockPos()).getValue(BlockStateProperties.LOCKED); + ScrollerBlockEntity be = getTarget(); + if (be != null) { + Level level = getTarget().getLevel(); + + if (level != null) + return level.getBlockState(be.getBlockPos()).getValue(BlockStateProperties.LOCKED); + } + + return false; } /** @@ -54,45 +39,88 @@ public final boolean isLocked() { * @param state Sate for lock */ @LuaFunction - public final void setLock(boolean state) { scroller.setLock(state); } + public final void setLock(boolean state) { + ScrollerBlockEntity be = getTarget(); + if (be != null) + be.setLock(state); + } /** - * Returns the current value of the Scroller Pane. - * @return Value (-15.0 - 15.0) + * Returns the selected value of the Scroller Pane. + * + * @return The selected value. */ @LuaFunction - public final double getValue() { - ScrollValueBehaviour scrollValueBehaviour = scroller.getBehaviour(); - if (scrollValueBehaviour == null) return 0.0f; + public final int getValue() { + ScrollerBlockEntity be = getTarget(); + if (be != null) + return be.getValue(); - return (double)scrollValueBehaviour.getValue()/10; + return 0; } /** - * Sets a new value for the Scroller Pane - * @param value The new value (Must be in between -15.0 - 15.0) + * Changes the selected value. + * @param value The new value to select. */ @LuaFunction - public final void setValue(double value) { - ScrollValueBehaviour scrollValueBehaviour = scroller.getBehaviour(); - if (scrollValueBehaviour == null) return; + public final void setValue(int value) { + ScrollerBlockEntity be = getTarget(); + if (be != null) + be.setValue(value); + } - if (value > 15) value = 15; - else if (value < -15) value = -15; + /** + * Returns the limit relative to zero. + * E.g. 15 for from 0 to 15. + * + * @return The limit. + */ + @LuaFunction + public final int getLimit() { + ScrollerBlockEntity be = getTarget(); + if (be != null) + return be.getLimit(); - scrollValueBehaviour.setValue((int)(value*10)); - scroller.playTickSound(); + return 0; } + /** + * Returns whenever the Scroller Pane has the minus spectrum enabled. + * + * @return true for when the minus spectrum is enabled, and false for the opposite. + */ + @LuaFunction + public final boolean hasMinusSpectrum() { + ScrollerBlockEntity be = getTarget(); + if (be != null) + return be.hasMinus(); - @NotNull - @Override - public String getType() { - return "scroller"; + return false; } - @Override - public boolean equals(@Nullable IPeripheral other) { - return this == other || other instanceof ScrollerBlockPeripheral s && s.scroller == scroller; + /** + * Enables or disables the minus spectrum. + * + * @param state true for enabled minus spectrum, false for the opposite. + */ + @LuaFunction + public final void toggleMinusSpectrum(boolean state) { + ScrollerBlockEntity be = getTarget(); + if (be != null) + be.toggleMinusSpectrum(state); + } + + /** + * Sets a new limit relative to zero. + * If minus spectrum enabled, the limit then gets mirrored to the minus spectrum too. + * + * @param limit The new limit. + */ + @LuaFunction + public final void setLimit(int limit) { + ScrollerBlockEntity be = getTarget(); + if (be != null) + be.setLimit(limit); } } diff --git a/forge/src/main/java/cc/tweaked_programs/cccbridge/peripherals/SourceBlockPeripheral.java b/forge/src/main/java/cc/tweaked_programs/cccbridge/peripherals/SourceBlockPeripheral.java index bbe6351..1052242 100644 --- a/forge/src/main/java/cc/tweaked_programs/cccbridge/peripherals/SourceBlockPeripheral.java +++ b/forge/src/main/java/cc/tweaked_programs/cccbridge/peripherals/SourceBlockPeripheral.java @@ -11,31 +11,21 @@ import org.jetbrains.annotations.Nullable; import javax.annotation.Nonnull; +import javax.xml.transform.Source; import java.util.LinkedList; import java.util.List; -public class SourceBlockPeripheral implements IPeripheral { - private final SourceBlockEntity source_block_entity; +/** + * This peripheral is used by the Source Block. It is used to give some kind of Create Display Targets data. + * The peripheral acts similar to a normal Terminal, with some implementations from the Window API and other limitations like no control over the colors. + * + * @version 1.1 + */ +public class SourceBlockPeripheral extends TweakedPeripheral { private final Terminal term = new Terminal(4, 2, false); - private final List pcs = new LinkedList<>(); - public SourceBlockPeripheral(SourceBlockEntity source_block_entity) { - this.source_block_entity = source_block_entity; - } - - @Override - public void attach(@Nonnull IComputerAccess computer) { - pcs.add(computer); - } - - @Override - public void detach(@Nonnull IComputerAccess computer) { - pcs.removeIf(p -> (p.getID() == computer.getID())); - } - - public void resize() { - for (IComputerAccess pc : pcs) - pc.queueEvent("monitor_resize", pc.getAttachmentName()); + public SourceBlockPeripheral(SourceBlockEntity blockentity) { + super("create_source", blockentity); } public void setSize(int width, int height) { @@ -43,24 +33,14 @@ public void setSize(int width, int height) { int oldH = term.getHeight(); if (!(oldW != width || oldH != height)) return; term.resize(width, height); - resize(); + super.sendEvent("monitor_resize"); } public List getContent() { List content = new LinkedList<>(); - // Replace chars that exist in CC and can't be displayed in C: - for (int i = 0; i < term.getHeight(); i++) { - String line = term.getLine(i).toString(); - for (int j = 0; j < line.length(); j++) { - char ch = line.charAt(j); - - // Printable chars in byte range - if (ch < 32 || (ch > 126 && ch < 161)) - line = line.substring(0, j) + '?' + line.substring(j + 1); - } - content.add(line); - } + for (int i = 0; i < term.getHeight(); i++) + content.add( term.getLine(i).toString()); return content; } @@ -130,7 +110,7 @@ public final String getLine(int y) throws LuaException { } /** - * Returns the current current cursor position. + * Returns the current cursor position. * * @return Object[] {posX, posY} */ @@ -148,16 +128,4 @@ public final Object[] getCursorPos() { public final Object[] getSize() { return new Object[]{term.getWidth(), term.getHeight()}; } - - - @NotNull - @Override - public String getType() { - return "create_source"; - } - - @Override - public boolean equals(@Nullable IPeripheral other) { - return this == other || other instanceof SourceBlockPeripheral source && source.source_block_entity == source_block_entity; - } } \ No newline at end of file diff --git a/forge/src/main/java/cc/tweaked_programs/cccbridge/peripherals/SpeedControllerPeripheral.java b/forge/src/main/java/cc/tweaked_programs/cccbridge/peripherals/SpeedControllerPeripheral.java deleted file mode 100644 index 683bfb9..0000000 --- a/forge/src/main/java/cc/tweaked_programs/cccbridge/peripherals/SpeedControllerPeripheral.java +++ /dev/null @@ -1,71 +0,0 @@ -package cc.tweaked_programs.cccbridge.peripherals; - -import com.simibubi.create.content.contraptions.relays.advanced.SpeedControllerTileEntity; -import com.simibubi.create.foundation.config.AllConfigs; -import dan200.computercraft.api.lua.LuaException; -import dan200.computercraft.api.lua.LuaFunction; -import dan200.computercraft.api.peripheral.IPeripheral; -import net.minecraft.core.BlockPos; -import net.minecraft.world.level.Level; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -public class SpeedControllerPeripheral implements IPeripheral { - private final Level level; - private final SpeedControllerTileEntity controller; - private final Integer maxSpeed = AllConfigs.SERVER.kinetics.maxRotationSpeed.get(); - - public SpeedControllerPeripheral(@NotNull BlockPos pos, Level level) { - this.level = level; - controller = (SpeedControllerTileEntity) level.getBlockEntity(pos); - } - - - @NotNull - @Override - public String getType() { - return "speed_controller"; - } - - /** - * Returns the theoretical current wanted speed. - * @return Current speed - */ - @LuaFunction - public final float getSpeed() { - return controller.getSpeed(); - } - - /** - * Changes the current speed to a new value. (must be between from server given interval) - * @param rot New wanted speed - * @throws LuaException When value is out of bounds. - */ - @LuaFunction - public final void setSpeed(int rot) throws LuaException { - /*if (rot < -maxSpeed || rot > maxSpeed) - throw new LuaException("Given rotation must be between "+-maxSpeed+" & "+maxSpeed+"!"); - - float prevSpeed = controller.getSpeed(); - controller.setSpeed(rot); - - controller.markDirty(); - controller.onSpeedChanged(prevSpeed); - controller.sendData();*/ - } - - /** - * Whenever the Speed Controller is OverStressed or not. - * @return State of being overstressed or not - */ - @LuaFunction - public final boolean isOverStressed() { - return controller.isOverStressed(); - } - - - @Override - public boolean equals(@Nullable IPeripheral iPeripheral) { - return this == iPeripheral; - } -} \ No newline at end of file diff --git a/forge/src/main/java/cc/tweaked_programs/cccbridge/peripherals/TargetBlockPeripheral.java b/forge/src/main/java/cc/tweaked_programs/cccbridge/peripherals/TargetBlockPeripheral.java index 4c84191..e6b9195 100644 --- a/forge/src/main/java/cc/tweaked_programs/cccbridge/peripherals/TargetBlockPeripheral.java +++ b/forge/src/main/java/cc/tweaked_programs/cccbridge/peripherals/TargetBlockPeripheral.java @@ -9,13 +9,16 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -public class TargetBlockPeripheral implements IPeripheral { - private final TargetBlockEntity target_block_entity; +/** + * This peripheral is used by the Target Block. It is used to get data from Create Display Sources. The data has to be synced by the BlockEntity. + * + * @version 1.1 + */ +public class TargetBlockPeripheral extends TweakedPeripheral { private final Terminal term = new Terminal(32, 24, false); - - public TargetBlockPeripheral(TargetBlockEntity target_block_entity) { - this.target_block_entity = target_block_entity; + public TargetBlockPeripheral(TargetBlockEntity blockentity) { + super("create_target", blockentity); } public void replaceLine(int y, String line) { @@ -30,6 +33,10 @@ public int getWidth() { return term.getWidth(); } + public int getHeight() { + return term.getHeight(); + } + /** * Sets the new width of the display. Cannot be larger than 164 chars. * @@ -42,10 +49,6 @@ public final void setWidth(int width) throws LuaException { term.resize(width, 16); } - public int getHeight() { - return term.getHeight(); - } - /** * Clears the whole screen. */ @@ -91,15 +94,4 @@ public final String getLine(int y) throws LuaException { public final Object[] getSize() { return new Object[]{term.getWidth(), term.getHeight()}; } - - @NotNull - @Override - public String getType() { - return "create_target"; - } - - @Override - public boolean equals(@Nullable IPeripheral other) { - return this == other || other instanceof TargetBlockPeripheral target && target.target_block_entity == target_block_entity; - } } \ No newline at end of file diff --git a/forge/src/main/java/cc/tweaked_programs/cccbridge/peripherals/TrainPeripheral.java b/forge/src/main/java/cc/tweaked_programs/cccbridge/peripherals/TrainPeripheral.java deleted file mode 100644 index d0d5a6b..0000000 --- a/forge/src/main/java/cc/tweaked_programs/cccbridge/peripherals/TrainPeripheral.java +++ /dev/null @@ -1,192 +0,0 @@ -package cc.tweaked_programs.cccbridge.peripherals; - -import com.simibubi.create.Create; -import com.simibubi.create.content.logistics.trains.GraphLocation; -import com.simibubi.create.content.logistics.trains.entity.Train; -import com.simibubi.create.content.logistics.trains.management.edgePoint.station.GlobalStation; -import com.simibubi.create.content.logistics.trains.management.edgePoint.station.StationTileEntity; -import com.simibubi.create.content.logistics.trains.management.edgePoint.station.TrainEditPacket.TrainEditReturnPacket; -import com.simibubi.create.content.logistics.trains.management.schedule.Schedule; -import com.simibubi.create.foundation.networking.AllPackets; -import dan200.computercraft.api.lua.LuaFunction; -import dan200.computercraft.api.lua.MethodResult; -import dan200.computercraft.api.peripheral.IComputerAccess; -import dan200.computercraft.api.peripheral.IPeripheral; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.network.chat.TextComponent; -import net.minecraft.world.level.Level; -import net.minecraftforge.network.PacketDistributor; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; -import java.util.UUID; - - -public class TrainPeripheral implements IPeripheral { - private static Schedule schedule; - private final List connectedComputers = new ArrayList<>(); - private final Level level; - private final StationTileEntity station; - - public TrainPeripheral(@NotNull BlockPos pos, Level level) { - this.level = level; - station = (StationTileEntity) level.getBlockEntity(pos); - } - - @NotNull - @Override - public String getType() { - return "train_station"; - } - - /** - * Assembles a train. - * - * @return Whether it was successful or not with a message. - */ - @LuaFunction - public final MethodResult assemble() { - if (station.getStation().getPresentTrain() != null) { - return MethodResult.of(false, "Train already assembled"); - } - if (station.tryEnterAssemblyMode()) { - station.assemble(UUID.fromString("069a79f4-44e9-4726-a5be-fca90e38aaf5")); - station.tick(); - if (schedule == null) { - return MethodResult.of(true, "No schedule found"); - } - station.getStation().getPresentTrain().runtime.setSchedule(schedule, true); - schedule = null; - return MethodResult.of(true, "Train assembled"); - } - return MethodResult.of(false, "Could not assemble train"); - } - - /** - * Disassembles a train. - * - * @return Whether it was successful or not with a message. - */ - @LuaFunction - public final MethodResult disassemble() { - if (station.getStation().getPresentTrain() == null) { - return MethodResult.of(false, "Train not assembled"); - } - if (station.getStation().getPresentTrain().canDisassemble()) { - Direction direction = station.getAssemblyDirection(); - BlockPos position = station.edgePoint.getGlobalPosition().above(); - schedule = station.getStation().getPresentTrain().runtime.getSchedule(); - station.getStation().getPresentTrain().disassemble(direction, position); - return MethodResult.of(true, "Train disassembled"); - } - return MethodResult.of(false, "Could not disassemble train"); - } - - /** - * Returns the current station name. - * - * @return Name of station. - */ - @LuaFunction - public final String getStationName() { - return station.getStation().name; - } - - /** - * Returns the current trains name. - * - * @return Name of train. - */ - @LuaFunction - public final String getTrainName() { - return Objects.requireNonNull(station.getStation().getPresentTrain()).name.getContents(); - } - - /** - * Sets the stations name - * - * @param name The new name. - * @return Whether it was successful or not. - */ - @LuaFunction - public final boolean setStationName(@NotNull String name) { - GlobalStation station2 = station.getStation(); - GraphLocation graphLocation = station.edgePoint.determineGraphLocation(); - if (station2 != null && graphLocation != null) { - station2.name = name; - Create.RAILWAYS.sync.pointAdded(graphLocation.graph, station2); - Create.RAILWAYS.markTracksDirty(); - station.notifyUpdate(); - return true; - } - //AllPackets.channel.sendToServer(StationEditPacket.configure(station.getBlockPos(),false,name)); - return false; - } - - /** - * Sets the current trains name. - * - * @param name The new name. - * @return Whether it was successful or not with a message. - */ - @LuaFunction - public final MethodResult setTrainName(@NotNull String name) { - if (station.getStation().getPresentTrain() == null) { - return MethodResult.of(false, "There is no train to set the name of"); - } - Train train = station.getStation().getPresentTrain(); - Train Train = Create.RAILWAYS.sided(level).trains.get(train.id); - if (Train == null) { - return MethodResult.of(false, "Train not found"); - } - if (!name.isBlank()) { - Train.name = new TextComponent(name); - station.tick(); - AllPackets.channel.send(PacketDistributor.ALL.noArg(), new TrainEditReturnPacket(Train.id, name, Train.icon.getId())); - return MethodResult.of(true, "Train name set to" + name); - } - //AllPackets.channel.sendToServer(new TrainEditPacket(train.id, name,train.icon.getId())); - return MethodResult.of(false, "Train name cannot be blank"); - } - - /** - * Gets the number of Bogeys attached to the current train. - * - * @return The number of Bogeys. - */ - @LuaFunction - public final int getBogeys() { - if (station.getStation().getPresentTrain() == null) { - return 0; - } - return station.getStation().getPresentTrain().carriages.size(); - } - - /** - * Returns boolean whether a train os present or not. - * - * @return Whether it was successful or not. - */ - @LuaFunction - public final boolean getPresentTrain() { - return station.getStation().getPresentTrain() != null; - } - - /** - * Clears the schedule saved in the station. - */ - @LuaFunction - public final void clearSchedule() { - schedule = null; - } - - @Override - public boolean equals(@Nullable IPeripheral iPeripheral) { - return this == iPeripheral; - } -} - diff --git a/forge/src/main/java/cc/tweaked_programs/cccbridge/peripherals/TweakedPeripheral.java b/forge/src/main/java/cc/tweaked_programs/cccbridge/peripherals/TweakedPeripheral.java new file mode 100644 index 0000000..258e453 --- /dev/null +++ b/forge/src/main/java/cc/tweaked_programs/cccbridge/peripherals/TweakedPeripheral.java @@ -0,0 +1,58 @@ +package cc.tweaked_programs.cccbridge.peripherals; + +import dan200.computercraft.api.peripheral.IComputerAccess; +import dan200.computercraft.api.peripheral.IPeripheral; +import net.minecraft.world.level.block.entity.BlockEntity; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import javax.annotation.Nonnull; +import java.util.LinkedList; +import java.util.List; + +/** + * I did not steal the name from Create. I swear! + * No seriously! + */ +abstract class TweakedPeripheral implements IPeripheral { + private final String type; + private final BE blockEntity; + private final List computers = new LinkedList<>(); + + public TweakedPeripheral(String type, @Nullable BE blockEntity) { + this.type = type; + this.blockEntity = blockEntity; + } + + public void sendEvent(@Nonnull String event, @Nullable Object... arguments) { + for (IComputerAccess pc : computers) + pc.queueEvent(event, pc.getAttachmentName(), arguments); + } + + @Override + public void attach(@Nonnull IComputerAccess computer) { + computers.add(computer); + } + + @Override + public void detach(@Nonnull IComputerAccess computer) { + computers.removeIf(p -> (p.getID() == computer.getID())); + } + + @NotNull + @Override + public String getType() { + return type; + } + + @Nullable + @Override + public BE getTarget() { + return blockEntity; + } + + @Override + public boolean equals(@Nullable IPeripheral other) { + return other == this && other.getType().equals(type) && other.getTarget() == this.getTarget(); + } +} diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index ff82361..ca13b1e 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/forge/src/main/resources/META-INF/mods.toml @@ -1,42 +1,42 @@ modLoader="javafml" loaderVersion="[40,)" -license="Apache-2.0" +license="${license}" issueTrackerURL="https://github.com/tweaked-programs/cccbridge/issues/" [[mods]] -modId="cccbridge" -version="1.3.1" +modId="${archives_base_name}" +version="${version}-${modloader}" displayName="CC:C Bridge" -updateJSONURL="" -displayURL="https://tweaked-programs.cc/tag/cccbridge/" -logoFile="icon.png" -credits="Thanks for this mod goes out to agnor99, who understands forge way better than me!!" +updateJSONURL="https://api.modrinth.com/updates/${archives_base_name}/forge_updates.json" +displayURL="https://tweaked-programs.cc/" +logoFile= "iconHD.png" +credits="Thanks to agnor99, who understands modding much better!" authors="Sammy L. Koch & Luke A. Hanssen" -description='''Adds compatibility between the ComputerCraft and Create mod! +description='''This mod adds compatibility between the ComputerCraft and Create mod! -Copyright 2022 Sammy L. Koch''' +Copyright ${copyright_year} Sammy L. Koch''' -[[dependencies.cccbridge]] +[[dependencies.${archives_base_name}]] modId="forge" mandatory=true - versionRange="[40,)" + versionRange="[${forge_version},)" ordering="NONE" # NONE; BEFORE; AFTER side="BOTH" -[[dependencies.cccbridge]] +[[dependencies.${archives_base_name}]] modId="minecraft" mandatory=true - versionRange="[1.18.2,1.19)" + versionRange="[${mc_version},)" ordering="NONE" side="BOTH" -[[dependencies.cccbridge]] +[[dependencies.${archives_base_name}]] modId="create" mandatory=true - versionRange="[0.5.0c,)" + versionRange="[${create_version_production},)" ordering="NONE" side="BOTH" -[[dependencies.cccbridge]] +[[dependencies.${archives_base_name}]] modId="computercraft" mandatory=true - versionRange="[1.101.0,)" + versionRange="[${cc_version},)" ordering="NONE" side="BOTH" diff --git a/forge/src/main/resources/assets/cccbridge/blockstates/animatronic_block.json b/forge/src/main/resources/assets/cccbridge/blockstates/animatronic_block.json new file mode 100644 index 0000000..ca39b68 --- /dev/null +++ b/forge/src/main/resources/assets/cccbridge/blockstates/animatronic_block.json @@ -0,0 +1,5 @@ +{ + "variants": { + "": { "model": "cccbridge:block/animatronic_block" } + } +} \ No newline at end of file diff --git a/forge/src/main/resources/assets/cccbridge/blockstates/redrouter_block.json b/forge/src/main/resources/assets/cccbridge/blockstates/redrouter_block.json index 2d71f6b..24ae416 100644 --- a/forge/src/main/resources/assets/cccbridge/blockstates/redrouter_block.json +++ b/forge/src/main/resources/assets/cccbridge/blockstates/redrouter_block.json @@ -1,76 +1,224 @@ { - "variants": { - "facing=north": [ - { "model": "cccbridge:block/redrouter_face/1", "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/2", "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/3", "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/4", "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/5", "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/6", "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/7", "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/8", "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/9", "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/10", "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/11", "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/12", "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/13", "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/14", "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/15", "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/16", "uvlock": true } - ], - "facing=east": [ - { "model": "cccbridge:block/redrouter_face/1", "y": 90, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/2", "y": 90, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/3", "y": 90, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/4", "y": 90, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/5", "y": 90, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/6", "y": 90, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/7", "y": 90, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/8", "y": 90, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/9", "y": 90, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/10", "y": 90, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/11", "y": 90, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/12", "y": 90, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/13", "y": 90, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/14", "y": 90, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/15", "y": 90, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/16", "y": 90, "uvlock": true } - ], - "facing=south": [ - { "model": "cccbridge:block/redrouter_face/1", "y": 180, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/2", "y": 180, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/3", "y": 180, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/4", "y": 180, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/5", "y": 180, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/6", "y": 180, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/7", "y": 180, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/8", "y": 180, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/9", "y": 180, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/10", "y": 180, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/11", "y": 180, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/12", "y": 180, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/13", "y": 180, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/14", "y": 180, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/15", "y": 180, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/16", "y": 180, "uvlock": true } - ], - "facing=west": [ - { "model": "cccbridge:block/redrouter_face/1", "y": 270, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/2", "y": 270, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/3", "y": 270, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/4", "y": 270, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/5", "y": 270, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/6", "y": 270, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/7", "y": 270, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/8", "y": 270, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/9", "y": 270, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/10", "y": 270, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/11", "y": 270, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/12", "y": 270, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/13", "y": 270, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/14", "y": 270, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/15", "y": 270, "uvlock": true }, - { "model": "cccbridge:block/redrouter_face/16", "y": 270, "uvlock": true } - ] - } + "multipart": [ + { "when": { "facing": "north", "face": 0 }, + "apply": { "model": "cccbridge:block/redrouter_face/0", "uvlock": false } + }, + { "when": { "facing": "east", "face": 0 }, + "apply": { "model": "cccbridge:block/redrouter_face/0", "y": 90, "uvlock": false } + }, + { "when": { "facing": "south", "face": 0 }, + "apply": { "model": "cccbridge:block/redrouter_face/0", "y": 180, "uvlock": false } + }, + { "when": { "facing": "west", "face": 0 }, + "apply": { "model": "cccbridge:block/redrouter_face/0", "y": 270, "uvlock": false } + }, + + { "when": { "facing": "north", "face": 1 }, + "apply": { "model": "cccbridge:block/redrouter_face/1", "uvlock": false } + }, + { "when": { "facing": "east", "face": 1 }, + "apply": { "model": "cccbridge:block/redrouter_face/1", "y": 90, "uvlock": false } + }, + { "when": { "facing": "south", "face": 1 }, + "apply": { "model": "cccbridge:block/redrouter_face/1", "y": 180, "uvlock": false } + }, + { "when": { "facing": "west", "face": 1 }, + "apply": { "model": "cccbridge:block/redrouter_face/1", "y": 270, "uvlock": false } + }, + + { "when": { "facing": "north", "face": 2 }, + "apply": { "model": "cccbridge:block/redrouter_face/2", "uvlock": false } + }, + { "when": { "facing": "east", "face": 2 }, + "apply": { "model": "cccbridge:block/redrouter_face/2", "y": 90, "uvlock": false } + }, + { "when": { "facing": "south", "face": 2 }, + "apply": { "model": "cccbridge:block/redrouter_face/2", "y": 180, "uvlock": false } + }, + { "when": { "facing": "west", "face": 2 }, + "apply": { "model": "cccbridge:block/redrouter_face/2", "y": 270, "uvlock": false } + }, + + { "when": { "facing": "north", "face": 3 }, + "apply": { "model": "cccbridge:block/redrouter_face/3", "uvlock": false } + }, + { "when": { "facing": "east", "face": 3 }, + "apply": { "model": "cccbridge:block/redrouter_face/3", "y": 90, "uvlock": false } + }, + { "when": { "facing": "south", "face": 3 }, + "apply": { "model": "cccbridge:block/redrouter_face/3", "y": 180, "uvlock": false } + }, + { "when": { "facing": "west", "face": 3 }, + "apply": { "model": "cccbridge:block/redrouter_face/3", "y": 270, "uvlock": false } + }, + + { "when": { "facing": "north", "face": 4 }, + "apply": { "model": "cccbridge:block/redrouter_face/4", "uvlock": false } + }, + { "when": { "facing": "east", "face": 4 }, + "apply": { "model": "cccbridge:block/redrouter_face/4", "y": 90, "uvlock": false } + }, + { "when": { "facing": "south", "face": 4 }, + "apply": { "model": "cccbridge:block/redrouter_face/4", "y": 180, "uvlock": false } + }, + { "when": { "facing": "west", "face": 4 }, + "apply": { "model": "cccbridge:block/redrouter_face/4", "y": 270, "uvlock": false } + }, + + { "when": { "facing": "north", "face": 5 }, + "apply": { "model": "cccbridge:block/redrouter_face/5", "uvlock": false } + }, + { "when": { "facing": "east", "face": 5 }, + "apply": { "model": "cccbridge:block/redrouter_face/5", "y": 90, "uvlock": false } + }, + { "when": { "facing": "south", "face": 5 }, + "apply": { "model": "cccbridge:block/redrouter_face/5", "y": 180, "uvlock": false } + }, + { "when": { "facing": "west", "face": 5 }, + "apply": { "model": "cccbridge:block/redrouter_face/5", "y": 270, "uvlock": false } + }, + + { "when": { "facing": "north", "face": 6 }, + "apply": { "model": "cccbridge:block/redrouter_face/6", "uvlock": false } + }, + { "when": { "facing": "east", "face": 6 }, + "apply": { "model": "cccbridge:block/redrouter_face/6", "y": 90, "uvlock": false } + }, + { "when": { "facing": "south", "face": 6 }, + "apply": { "model": "cccbridge:block/redrouter_face/6", "y": 180, "uvlock": false } + }, + { "when": { "facing": "west", "face": 6 }, + "apply": { "model": "cccbridge:block/redrouter_face/6", "y": 270, "uvlock": false } + }, + + { "when": { "facing": "north", "face": 7 }, + "apply": { "model": "cccbridge:block/redrouter_face/7", "uvlock": false } + }, + { "when": { "facing": "east", "face": 7 }, + "apply": { "model": "cccbridge:block/redrouter_face/7", "y": 90, "uvlock": false } + }, + { "when": { "facing": "south", "face": 7 }, + "apply": { "model": "cccbridge:block/redrouter_face/7", "y": 180, "uvlock": false } + }, + { "when": { "facing": "west", "face": 7 }, + "apply": { "model": "cccbridge:block/redrouter_face/7", "y": 270, "uvlock": false } + }, + + { "when": { "facing": "north", "face": 8 }, + "apply": { "model": "cccbridge:block/redrouter_face/8", "uvlock": false } + }, + { "when": { "facing": "east", "face": 8 }, + "apply": { "model": "cccbridge:block/redrouter_face/8", "y": 90, "uvlock": false } + }, + { "when": { "facing": "south", "face": 8 }, + "apply": { "model": "cccbridge:block/redrouter_face/8", "y": 180, "uvlock": false } + }, + { "when": { "facing": "west", "face": 8 }, + "apply": { "model": "cccbridge:block/redrouter_face/8", "y": 270, "uvlock": false } + }, + + { "when": { "facing": "north", "face": 9 }, + "apply": { "model": "cccbridge:block/redrouter_face/9", "uvlock": false } + }, + { "when": { "facing": "east", "face": 9 }, + "apply": { "model": "cccbridge:block/redrouter_face/9", "y": 90, "uvlock": false } + }, + { "when": { "facing": "south", "face": 9 }, + "apply": { "model": "cccbridge:block/redrouter_face/9", "y": 180, "uvlock": false } + }, + { "when": { "facing": "west", "face": 9 }, + "apply": { "model": "cccbridge:block/redrouter_face/9", "y": 270, "uvlock": false } + }, + + { "when": { "facing": "north", "face": 10 }, + "apply": { "model": "cccbridge:block/redrouter_face/10", "uvlock": false } + }, + { "when": { "facing": "east", "face": 10 }, + "apply": { "model": "cccbridge:block/redrouter_face/10", "y": 90, "uvlock": false } + }, + { "when": { "facing": "south", "face": 10 }, + "apply": { "model": "cccbridge:block/redrouter_face/10", "y": 180, "uvlock": false } + }, + { "when": { "facing": "west", "face": 10 }, + "apply": { "model": "cccbridge:block/redrouter_face/10", "y": 270, "uvlock": false } + }, + + { "when": { "facing": "north", "face": 11 }, + "apply": { "model": "cccbridge:block/redrouter_face/11", "uvlock": false } + }, + { "when": { "facing": "east", "face": 11 }, + "apply": { "model": "cccbridge:block/redrouter_face/11", "y": 90, "uvlock": false } + }, + { "when": { "facing": "south", "face": 11 }, + "apply": { "model": "cccbridge:block/redrouter_face/11", "y": 180, "uvlock": false } + }, + { "when": { "facing": "west", "face": 11 }, + "apply": { "model": "cccbridge:block/redrouter_face/11", "y": 270, "uvlock": false } + }, + + { "when": { "facing": "north", "face": 12 }, + "apply": { "model": "cccbridge:block/redrouter_face/12", "uvlock": false } + }, + { "when": { "facing": "east", "face": 12 }, + "apply": { "model": "cccbridge:block/redrouter_face/12", "y": 90, "uvlock": false } + }, + { "when": { "facing": "south", "face": 12 }, + "apply": { "model": "cccbridge:block/redrouter_face/12", "y": 180, "uvlock": false } + }, + { "when": { "facing": "west", "face": 12 }, + "apply": { "model": "cccbridge:block/redrouter_face/12", "y": 270, "uvlock": false } + }, + + { "when": { "facing": "north", "face": 13 }, + "apply": { "model": "cccbridge:block/redrouter_face/13", "uvlock": false } + }, + { "when": { "facing": "east", "face": 13 }, + "apply": { "model": "cccbridge:block/redrouter_face/13", "y": 90, "uvlock": false } + }, + { "when": { "facing": "south", "face": 13 }, + "apply": { "model": "cccbridge:block/redrouter_face/13", "y": 180, "uvlock": false } + }, + { "when": { "facing": "west", "face": 13 }, + "apply": { "model": "cccbridge:block/redrouter_face/13", "y": 270, "uvlock": false } + }, + + { "when": { "facing": "north", "face": 14 }, + "apply": { "model": "cccbridge:block/redrouter_face/14", "uvlock": false } + }, + { "when": { "facing": "east", "face": 14 }, + "apply": { "model": "cccbridge:block/redrouter_face/14", "y": 90, "uvlock": false } + }, + { "when": { "facing": "south", "face": 14 }, + "apply": { "model": "cccbridge:block/redrouter_face/14", "y": 180, "uvlock": false } + }, + { "when": { "facing": "west", "face": 14 }, + "apply": { "model": "cccbridge:block/redrouter_face/14", "y": 270, "uvlock": false } + }, + + { "when": { "facing": "north", "face": 15 }, + "apply": { "model": "cccbridge:block/redrouter_face/15", "uvlock": false } + }, + { "when": { "facing": "east", "face": 15 }, + "apply": { "model": "cccbridge:block/redrouter_face/15", "y": 90, "uvlock": false } + }, + { "when": { "facing": "south", "face": 15 }, + "apply": { "model": "cccbridge:block/redrouter_face/15", "y": 180, "uvlock": false } + }, + { "when": { "facing": "west", "face": 15 }, + "apply": { "model": "cccbridge:block/redrouter_face/15", "y": 270, "uvlock": false } + }, + + { "when": { "facing": "north", "face": 16 }, + "apply": { "model": "cccbridge:block/redrouter_face/16", "uvlock": false } + }, + { "when": { "facing": "east", "face": 16 }, + "apply": { "model": "cccbridge:block/redrouter_face/16", "y": 90, "uvlock": false } + }, + { "when": { "facing": "south", "face": 16 }, + "apply": { "model": "cccbridge:block/redrouter_face/16", "y": 180, "uvlock": false } + }, + { "when": { "facing": "west", "face": 16 }, + "apply": { "model": "cccbridge:block/redrouter_face/16", "y": 270, "uvlock": false } + } + ] } \ No newline at end of file diff --git a/forge/src/main/resources/assets/cccbridge/blockstates/scroller_block.json b/forge/src/main/resources/assets/cccbridge/blockstates/scroller_block.json index 7d729fa..ea82087 100644 --- a/forge/src/main/resources/assets/cccbridge/blockstates/scroller_block.json +++ b/forge/src/main/resources/assets/cccbridge/blockstates/scroller_block.json @@ -1,41 +1,41 @@ { "multipart": [ { "when": { "facing": "north", "locked": "false" }, - "apply": { "model": "cccbridge:block/scroller_block", "uvlock": true } + "apply": { "model": "cccbridge:block/scroller_block", "uvlock": false } }, { "when": { "facing": "east", "locked": "false" }, - "apply": { "model": "cccbridge:block/scroller_block", "y": 90, "uvlock": true } + "apply": { "model": "cccbridge:block/scroller_block", "y": 90, "uvlock": false } }, { "when": { "facing": "south", "locked": "false" }, - "apply": { "model": "cccbridge:block/scroller_block", "y": 180, "uvlock": true } + "apply": { "model": "cccbridge:block/scroller_block", "y": 180, "uvlock": false } }, { "when": { "facing": "west", "locked": "false" }, - "apply": { "model": "cccbridge:block/scroller_block", "y": 270, "uvlock": true } + "apply": { "model": "cccbridge:block/scroller_block", "y": 270, "uvlock": false } }, { "when": { "facing": "up", "locked": "false" }, - "apply": { "model": "cccbridge:block/scroller_block", "x": -90, "uvlock": true } + "apply": { "model": "cccbridge:block/scroller_block", "x": -90, "y": 180, "uvlock": false } }, { "when": { "facing": "down", "locked": "false" }, - "apply": { "model": "cccbridge:block/scroller_block", "x": 90, "uvlock": true } + "apply": { "model": "cccbridge:block/scroller_block", "x": 90, "y": 180, "uvlock": false } }, { "when": { "facing": "north", "locked": "true" }, - "apply": { "model": "cccbridge:block/locked_scroller_block", "uvlock": true } + "apply": { "model": "cccbridge:block/locked_scroller_block", "uvlock": false } }, { "when": { "facing": "east", "locked": "true" }, - "apply": { "model": "cccbridge:block/locked_scroller_block", "y": 90, "uvlock": true } + "apply": { "model": "cccbridge:block/locked_scroller_block", "y": 90, "uvlock": false } }, { "when": { "facing": "south", "locked": "true" }, - "apply": { "model": "cccbridge:block/locked_scroller_block", "y": 180, "uvlock": true } + "apply": { "model": "cccbridge:block/locked_scroller_block", "y": 180, "uvlock": false } }, { "when": { "facing": "west", "locked": "true" }, - "apply": { "model": "cccbridge:block/locked_scroller_block", "y": 270, "uvlock": true } + "apply": { "model": "cccbridge:block/locked_scroller_block", "y": 270, "uvlock": false } }, { "when": { "facing": "up", "locked": "true" }, - "apply": { "model": "cccbridge:block/locked_scroller_block", "x": -90, "uvlock": true } + "apply": { "model": "cccbridge:block/locked_scroller_block", "x": -90, "uvlock": false } }, { "when": { "facing": "down", "locked": "true" }, - "apply": { "model": "cccbridge:block/locked_scroller_block", "x": 90, "uvlock": true } + "apply": { "model": "cccbridge:block/locked_scroller_block", "x": 90, "uvlock": false } } ] } \ No newline at end of file diff --git a/forge/src/main/resources/assets/cccbridge/icon.png b/forge/src/main/resources/assets/cccbridge/icon.png deleted file mode 100644 index 94d4e3ea0317e44339b8596bfde5f6ca629cc2b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5722 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 M07*qoM6N<$f@!eVHvj+t diff --git a/forge/src/main/resources/assets/cccbridge/iconHD.png b/forge/src/main/resources/assets/cccbridge/iconHD.png deleted file mode 100644 index ef649784d4dc194dc2ed180b6574ad7ead16f094..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86976 zcmZ6zbySp5*Ec+rgwiDqA~BRmNDVNAbPO;C=lnV5*42m}HVtEwpKfcP}mRfZqvSRg649Ad)Y)KUj_LUj7AvZjh>q za&RBBtvSM+hc=m9*IWgy4SEA~{I zDd5(PZ2X;#-eeyaK0m0@_}nOxP&p1>UJf(VVo30d%NKufxn{`e?53JcwO^pc@lvpM5tHQ}&V~WIc=z?gp>GNMGWN0PqiZ0{dY48Lm z>{)|Ac6d7YiB&6eIthPP-Lnk3@XgQyb2PeDB3QOqX^V%6_%~I9n zVc*$Pk9k|utS6m6<}R(#N(s5uP`clJAP|g&tQZ8cveSZX3Wkg!de_2x`;@|p?RdlZ zmzM&U-!Bjtlitr)CaVL1F!*vrAl4!xOVy+e|KV7V_{BqZx#Gv=bB4wEw76|t)Kx_vWiDrzIe�z7TN-S(jq%8 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 LvSf|;yWsx^R~%f? diff --git a/forge/src/main/resources/assets/cccbridge/lang/en_us.json b/forge/src/main/resources/assets/cccbridge/lang/en_us.json index 61b529e..14eb843 100644 --- a/forge/src/main/resources/assets/cccbridge/lang/en_us.json +++ b/forge/src/main/resources/assets/cccbridge/lang/en_us.json @@ -3,10 +3,13 @@ "block.cccbridge.target_block": "Target Block", "block.cccbridge.redrouter_block": "RedRouter Block", "block.cccbridge.scroller_block": "Scroller Pane", + "block.cccbridge.animatronic_block": "Animatronic", "cccbridge.display_source.source_block_display_source": "Given data from computer", - "cccbridge.general.unit.scroller": "Small Lua Number", + "cccbridge.general.unit.scroller": "Lua Number", + "cccbridge.general.unit.scroller.positive": "Lua Num. +", + "cccbridge.general.unit.scroller.negative": "Lua Num. -", "subtitles.cccbridge.cage_lock": "Scroller locked", "subtitles.cccbridge.cage_unlock": "Scroller unlocked" diff --git a/forge/src/main/resources/assets/cccbridge/models/block/animatronic_block.json b/forge/src/main/resources/assets/cccbridge/models/block/animatronic_block.json new file mode 100644 index 0000000..a1388d0 --- /dev/null +++ b/forge/src/main/resources/assets/cccbridge/models/block/animatronic_block.json @@ -0,0 +1,83 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [32, 32], + "textures": { + "0": "cccbridge:block/animatronic_block", + "particle": "cccbridge:block/animatronic_block" + }, + "elements": [ + { + "name": "base", + "from": [7.5, 2, 7.5], + "to": [8.5, 16, 8.5], + "faces": { + "north": {"uv": [6, 4, 6.5, 11], "texture": "#0"}, + "east": {"uv": [6.5, 4, 7, 11], "texture": "#0"}, + "south": {"uv": [7, 4, 7.5, 11], "texture": "#0"}, + "west": {"uv": [7.5, 4, 8, 11], "texture": "#0"}, + "up": {"uv": [8.5, 4.5, 8, 4], "texture": "#0"}, + "down": {"uv": [8.5, 4.5, 8, 5], "texture": "#0"} + } + }, + { + "name": "stick", + "from": [2, 0, 2], + "to": [14, 2, 14], + "faces": { + "north": {"uv": [6, 0, 12, 1], "texture": "#0"}, + "east": {"uv": [6, 1, 12, 2], "texture": "#0"}, + "south": {"uv": [6, 2, 12, 3], "texture": "#0"}, + "west": {"uv": [6, 3, 12, 4], "texture": "#0"}, + "up": {"uv": [6, 6, 0, 0], "texture": "#0"}, + "down": {"uv": [6, 6, 0, 12], "texture": "#0"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [69, 0, 0], + "translation": [0, 0.75, 1.25], + "scale": [0.3, 0.3, 0.3] + }, + "thirdperson_lefthand": { + "rotation": [69, 0, 0], + "translation": [0, 0.75, 1.25], + "scale": [0.3, 0.3, 0.3] + }, + "firstperson_righthand": { + "rotation": [0, -180, 0], + "translation": [1, 1, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 89, 0], + "translation": [1, 1, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 4, 0], + "scale": [0.3, 0.3, 0.3] + }, + "gui": { + "rotation": [-175.21, -45.54, 179.37], + "translation": [0, -2, 0], + "scale": [0.6, 0.6, 0.6] + }, + "head": { + "rotation": [-150, 70, -3], + "translation": [-2.5, 8, 5.75] + }, + "fixed": { + "translation": [0, -3, 0], + "scale": [0.6, 0.6, 0.6] + } + }, + "groups": [ + { + "name": "VoxelShapes", + "origin": [0, 0, 0], + "color": 0, + "children": [0, 1] + } + ] +} \ No newline at end of file diff --git a/forge/src/main/resources/assets/cccbridge/models/block/base.json b/forge/src/main/resources/assets/cccbridge/models/block/base.json deleted file mode 100644 index b970fb2..0000000 --- a/forge/src/main/resources/assets/cccbridge/models/block/base.json +++ /dev/null @@ -1,190 +0,0 @@ -{ - "credit": "By Sammy.K via Blockbench", - "parent": "block/block", - "textures": { - "0": "cccbridge:block/st_block_top", - "particle": "cccbridge:block/st_block_top" - }, - "elements": [ - { - "name": "body", - "from": [1, 1, 1], - "to": [15, 15, 15], - "faces": { - "north": {"uv": [1, 1, 15, 15], "texture": "#0", "cullface": "north"}, - "east": {"uv": [1, 1, 15, 15], "texture": "#0", "cullface": "east"}, - "south": {"uv": [1, 1, 15, 15], "texture": "#0", "cullface": "south"}, - "west": {"uv": [1, 1, 15, 15], "texture": "#0", "cullface": "west"}, - "up": {"uv": [1, 1, 15, 15], "texture": "#0"}, - "down": {"uv": [1, 1, 15, 15], "texture": "#0"} - } - }, - { - "name": "vertical-ne", - "from": [15, 0, 0], - "to": [16, 16, 1], - "faces": { - "north": {"uv": [0, 0, 1, 16], "texture": "#0"}, - "east": {"uv": [15, 0, 16, 16], "texture": "#0"}, - "south": {"uv": [15, 0, 16, 16], "texture": "#0"}, - "west": {"uv": [0, 0, 1, 16], "texture": "#0"}, - "up": {"uv": [15, 0, 16, 1], "texture": "#0"}, - "down": {"uv": [0, 0, 1, 1], "texture": "#0"} - } - }, - { - "name": "vertical-es", - "from": [15, 0, 15], - "to": [16, 16, 16], - "faces": { - "north": {"uv": [0, 0, 1, 16], "texture": "#0"}, - "east": {"uv": [0, 0, 1, 16], "texture": "#0"}, - "south": {"uv": [15, 0, 16, 16], "texture": "#0"}, - "west": {"uv": [15, 0, 16, 16], "texture": "#0"}, - "up": {"uv": [15, 15, 16, 16], "texture": "#0"}, - "down": {"uv": [0, 15, 1, 16], "texture": "#0"} - } - }, - { - "name": "vertical-sw", - "from": [0, 0, 15], - "to": [1, 16, 16], - "faces": { - "north": {"uv": [15, 0, 16, 16], "texture": "#0"}, - "east": {"uv": [0, 0, 1, 16], "texture": "#0"}, - "south": {"uv": [0, 0, 1, 16], "texture": "#0"}, - "west": {"uv": [15, 0, 16, 16], "texture": "#0"}, - "up": {"uv": [0, 15, 1, 16], "texture": "#0"}, - "down": {"uv": [15, 15, 16, 16], "texture": "#0"} - } - }, - { - "name": "vertical-wn", - "from": [0, 0, 0], - "to": [1, 16, 1], - "faces": { - "north": {"uv": [15, 0, 16, 16], "texture": "#0"}, - "east": {"uv": [15, 0, 16, 16], "texture": "#0"}, - "south": {"uv": [0, 0, 1, 16], "texture": "#0"}, - "west": {"uv": [0, 0, 1, 16], "texture": "#0"}, - "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, - "down": {"uv": [15, 0, 16, 1], "texture": "#0"} - } - }, - { - "name": "side-upper-n", - "from": [1, 15, 0], - "to": [15, 16, 1], - "faces": { - "north": {"uv": [1, 0, 15, 1], "texture": "#0"}, - "east": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "south": {"uv": [1, 0, 15, 1], "texture": "#0"}, - "west": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "up": {"uv": [1, 0, 15, 1], "texture": "#0"}, - "down": {"uv": [1, 0, 15, 1], "rotation": 180, "texture": "#0"} - } - }, - { - "name": "side-upper-s", - "from": [1, 15, 15], - "to": [15, 16, 16], - "faces": { - "north": {"uv": [1, 15, 15, 16], "rotation": 180, "texture": "#0"}, - "east": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "south": {"uv": [1, 0, 15, 1], "texture": "#0"}, - "west": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "up": {"uv": [1, 15, 15, 16], "texture": "#0"}, - "down": {"uv": [1, 0, 15, 1], "texture": "#0"} - } - }, - { - "name": "side-upper-w", - "from": [0, 15, 1], - "to": [1, 16, 15], - "faces": { - "north": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "east": {"uv": [0, 1, 1, 15], "rotation": 90, "texture": "#0"}, - "south": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "west": {"uv": [1, 0, 15, 1], "texture": "#0"}, - "up": {"uv": [0, 1, 1, 15], "texture": "#0"}, - "down": {"uv": [1, 0, 15, 1], "rotation": 270, "texture": "#0"} - } - }, - { - "name": "side-upper-e", - "from": [15, 15, 1], - "to": [16, 16, 15], - "faces": { - "north": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "east": {"uv": [1, 0, 15, 1], "texture": "#0"}, - "south": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "west": {"uv": [15, 1, 16, 15], "rotation": 270, "texture": "#0"}, - "up": {"uv": [15, 1, 16, 15], "texture": "#0"}, - "down": {"uv": [1, 0, 15, 1], "rotation": 90, "texture": "#0"} - } - }, - { - "name": "side-lower-w", - "from": [0, 0, 1], - "to": [1, 1, 15], - "faces": { - "north": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "east": {"uv": [15, 1, 16, 15], "rotation": 270, "texture": "#0"}, - "south": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "west": {"uv": [1, 15, 15, 16], "texture": "#0"}, - "up": {"uv": [1, 15, 15, 16], "rotation": 90, "texture": "#0"}, - "down": {"uv": [15, 1, 16, 15], "texture": "#0"} - } - }, - { - "name": "side-lower-s", - "from": [1, 0, 15], - "to": [15, 1, 16], - "faces": { - "north": {"uv": [1, 15, 15, 16], "texture": "#0"}, - "east": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "south": {"uv": [1, 15, 15, 16], "texture": "#0"}, - "west": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "up": {"uv": [1, 15, 15, 16], "texture": "#0"}, - "down": {"uv": [1, 15, 15, 16], "texture": "#0"} - } - }, - { - "name": "side-lower-e", - "from": [15, 0, 1], - "to": [16, 1, 15], - "faces": { - "north": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "east": {"uv": [1, 15, 15, 16], "texture": "#0"}, - "south": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "west": {"uv": [0, 1, 1, 15], "rotation": 90, "texture": "#0"}, - "up": {"uv": [1, 15, 15, 16], "rotation": 270, "texture": "#0"}, - "down": {"uv": [0, 1, 1, 15], "texture": "#0"} - } - }, - { - "name": "side-lower-n", - "from": [1, 0, 0], - "to": [15, 1, 1], - "faces": { - "north": {"uv": [1, 15, 15, 16], "texture": "#0"}, - "east": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "south": {"uv": [1, 15, 15, 16], "texture": "#0"}, - "west": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "up": {"uv": [1, 15, 15, 16], "rotation": 180, "texture": "#0"}, - "down": {"uv": [1, 0, 15, 1], "texture": "#0"} - } - } - ], - "groups": [ - 0, - { - "name": "frame", - "origin": [0, 0, 0], - "color": 0, - "nbt": "{}", - "armAnimationEnabled": false, - "children": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] - } - ] -} \ No newline at end of file diff --git a/forge/src/main/resources/assets/cccbridge/models/block/locked_scroller_block.json b/forge/src/main/resources/assets/cccbridge/models/block/locked_scroller_block.json index 1d0f7fb..cc4bb2c 100644 --- a/forge/src/main/resources/assets/cccbridge/models/block/locked_scroller_block.json +++ b/forge/src/main/resources/assets/cccbridge/models/block/locked_scroller_block.json @@ -1,6 +1,7 @@ { "credit": "By Sammy.K via Blockbench", "parent": "block/block", + "render_type": "cutout", "textures": { "0": "cccbridge:block/scroller/scroller_side", "1": "cccbridge:block/scroller/scroller_front", @@ -10,16 +11,35 @@ }, "elements": [ { - "name": "body", - "from": [0, 0, 15], - "to": [16, 16, 16], + "name": "cage", + "from": [4, 4, 15], + "to": [12, 12, 16], "faces": { - "north": {"uv": [0, 0, 16, 16], "texture": "#1", "cullface": "north"}, - "east": {"uv": [15, 0, 16, 16], "texture": "#0", "cullface": "east"}, - "south": {"uv": [0, 0, 16, 16], "texture": "#0", "cullface": "south"}, - "west": {"uv": [0, 0, 1, 16], "texture": "#0", "cullface": "west"}, - "up": {"uv": [0, 0, 16, 1], "texture": "#0"}, - "down": {"uv": [0, 15, 16, 16], "texture": "#0"} + "north": {"uv": [3, 3, 13, 13], "texture": "#3"}, + "east": {"uv": [3, 3, 4, 13], "texture": "#3"}, + "west": {"uv": [12, 3, 13, 13], "texture": "#3"}, + "up": {"uv": [3, 3, 13, 4], "texture": "#3"}, + "down": {"uv": [3, 12, 13, 13], "texture": "#3"} + } + }, + { + "name": "interface", + "from": [3, 3, 15.95], + "to": [13, 13, 16], + "faces": { + "north": {"uv": [3, 3, 13, 13], "texture": "#2"}, + "south": {"uv": [3, 3, 13, 13], "texture": "#0"} + } + }, + { + "name": "side-upper-n", + "from": [1, 15, 14], + "to": [15, 16, 15], + "faces": { + "north": {"uv": [1, 0, 15, 1], "texture": "#1"}, + "south": {"uv": [0, 0, 0, 0], "texture": "#1"}, + "up": {"uv": [15, 0, 1, 1], "texture": "#1"}, + "down": {"uv": [1, 0, 15, 1], "rotation": 180, "texture": "#1"} } }, { @@ -27,11 +47,12 @@ "from": [15, 0, 14], "to": [16, 16, 15], "faces": { - "north": {"uv": [0, 0, 1, 16], "texture": "#0"}, - "east": {"uv": [15, 0, 16, 16], "texture": "#0"}, - "west": {"uv": [0, 0, 1, 16], "texture": "#0"}, - "up": {"uv": [15, 0, 16, 1], "texture": "#0"}, - "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + "north": {"uv": [0, 0, 1, 16], "texture": "#1"}, + "east": {"uv": [0, 0, 1, 16], "texture": "#1"}, + "south": {"uv": [0, 0, 0, 0], "texture": "#1"}, + "west": {"uv": [0, 0, 1, 16], "texture": "#1"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#1"}, + "down": {"uv": [0, 15, 1, 16], "texture": "#1"} } }, { @@ -39,59 +60,71 @@ "from": [0, 0, 14], "to": [1, 16, 15], "faces": { - "north": {"uv": [15, 0, 16, 16], "texture": "#0"}, - "east": {"uv": [15, 0, 16, 16], "texture": "#0"}, - "west": {"uv": [0, 0, 1, 16], "texture": "#0"}, - "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, - "down": {"uv": [15, 0, 16, 1], "texture": "#0"} + "north": {"uv": [15, 0, 16, 16], "texture": "#1"}, + "east": {"uv": [15, 0, 16, 16], "texture": "#1"}, + "south": {"uv": [0, 0, 0, 0], "texture": "#1"}, + "west": {"uv": [15, 0, 16, 16], "texture": "#1"}, + "up": {"uv": [15, 0, 16, 1], "texture": "#1"}, + "down": {"uv": [15, 15, 16, 16], "texture": "#1"} } }, { - "name": "side-upper-n", - "from": [1, 15, 14], - "to": [15, 16, 15], + "name": "side-lower-n", + "from": [1, 0, 14], + "to": [15, 1, 15], "faces": { - "north": {"uv": [1, 0, 15, 1], "texture": "#0"}, - "east": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "west": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "up": {"uv": [1, 0, 15, 1], "texture": "#0"}, - "down": {"uv": [1, 0, 15, 1], "rotation": 180, "texture": "#0"} + "north": {"uv": [1, 15, 15, 16], "texture": "#1"}, + "south": {"uv": [0, 0, 0, 0], "texture": "#1"}, + "up": {"uv": [1, 15, 15, 16], "rotation": 180, "texture": "#1"}, + "down": {"uv": [15, 15, 1, 16], "texture": "#1"} } }, { - "name": "side-lower-n", - "from": [1, 0, 14], - "to": [15, 1, 15], + "name": "top", + "from": [0, 13, 15], + "to": [16, 16, 16], "faces": { - "north": {"uv": [1, 15, 15, 16], "texture": "#0"}, - "east": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "west": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "up": {"uv": [1, 15, 15, 16], "rotation": 180, "texture": "#0"}, - "down": {"uv": [1, 0, 15, 1], "texture": "#0"} + "north": {"uv": [0, 0, 16, 3], "texture": "#0"}, + "east": {"uv": [15, 0, 16, 3], "texture": "#0"}, + "south": {"uv": [0, 0, 16, 3], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "up": {"uv": [0, 0, 16, 1], "texture": "#0"}, + "down": {"uv": [0, 2, 16, 3], "texture": "#0"} } }, { - "name": "interface", - "from": [3, 3, 15.9], - "to": [13, 13, 14.91], + "name": "east", + "from": [13, 3, 15], + "to": [16, 13, 16], "faces": { - "north": {"uv": [3, 3, 13, 13], "texture": "#2"}, - "east": {"uv": [3, 3, 2, 13], "texture": "#2"}, - "west": {"uv": [13, 3, 14, 13], "texture": "#2"}, - "up": {"uv": [3, 2, 13, 3], "rotation": 180, "texture": "#2"}, - "down": {"uv": [3, 13, 13, 14], "texture": "#2"} + "north": {"uv": [0, 3, 3, 13], "texture": "#0"}, + "east": {"uv": [15, 3, 16, 13], "texture": "#0"}, + "south": {"uv": [13, 3, 16, 13], "texture": "#0"}, + "west": {"uv": [2, 3, 3, 13], "texture": "#0"} } }, { - "name": "cage", - "from": [4, 4, 15], - "to": [12, 12, 16], + "name": "bottom", + "from": [0, 0, 15], + "to": [16, 3, 16], "faces": { - "north": {"uv": [3, 3, 13, 13], "texture": "#3"}, - "east": {"uv": [3, 3, 4, 13], "texture": "#3"}, - "west": {"uv": [12, 3, 13, 13], "texture": "#3"}, - "up": {"uv": [3, 3, 13, 4], "texture": "#3"}, - "down": {"uv": [3, 12, 13, 13], "texture": "#3"} + "north": {"uv": [0, 13, 16, 16], "texture": "#0"}, + "east": {"uv": [15, 13, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 13, 16, 16], "texture": "#0"}, + "west": {"uv": [0, 13, 1, 16], "texture": "#0"}, + "up": {"uv": [0, 13, 16, 14], "texture": "#0"}, + "down": {"uv": [0, 15, 16, 16], "texture": "#0"} + } + }, + { + "name": "west", + "from": [0, 3, 15], + "to": [3, 13, 16], + "faces": { + "north": {"uv": [13, 3, 16, 13], "texture": "#0"}, + "east": {"uv": [13, 3, 14, 13], "texture": "#0"}, + "south": {"uv": [0, 3, 3, 13], "texture": "#0"}, + "west": {"uv": [0, 3, 1, 13], "texture": "#0"} } } ], @@ -108,13 +141,13 @@ }, "firstperson_righthand": { "rotation": [-13, 155, 0], - "translation": [-3, 2.5, 5.75], - "scale": [0.4, 0.4, 0.4] + "translation": [-3.75, 2.5, 5.75], + "scale": [0.3, 0.3, 0.3] }, "firstperson_lefthand": { "rotation": [-13, 155, 0], - "translation": [-3, 2.5, 5.75], - "scale": [0.4, 0.4, 0.4] + "translation": [-3.25, 2.5, 5.75], + "scale": [0.3, 0.3, 0.3] }, "ground": { "rotation": [90, 0, 0], @@ -136,15 +169,18 @@ }, "groups": [ 0, + 1, { "name": "frame", "origin": [0, 0, 0], "color": 0, - "nbt": "{}", - "armAnimationEnabled": false, - "children": [1, 2, 3, 4] + "children": [2, 3, 4, 5] }, - 5, - 6 + { + "name": "base", + "origin": [0, 0, 0], + "color": 0, + "children": [6, 7, 8, 9] + } ] } \ No newline at end of file diff --git a/forge/src/main/resources/assets/cccbridge/models/block/redrouter_block.json b/forge/src/main/resources/assets/cccbridge/models/block/redrouter_block.json index 34f3fd1..bf43356 100644 --- a/forge/src/main/resources/assets/cccbridge/models/block/redrouter_block.json +++ b/forge/src/main/resources/assets/cccbridge/models/block/redrouter_block.json @@ -1,99 +1,20 @@ { "credit": "By Sammy.K via Blockbench", - "parent": "cccbridge:block/base", + "render_type": "cutout", "textures": { - "2": "cccbridge:block/redrouter/background", "3": "cccbridge:block/redrouter/redrouter_side", "4": "cccbridge:block/redrouter/redrouter_top", "5": "cccbridge:block/redrouter/redrouter_front", - "6": "cccbridge:block/redrouter/connector", - "particle": "cccbridge:block/redrouter/background", - "face": "cccbridge:block/redrouter/face/1" + "6": "cccbridge:block/redrouter/background", + "particle": "cccbridge:block/redrouter/background" }, "elements": [ - { - "name": "background", - "from": [2, 2, 2], - "to": [14, 14, 2], - "faces": { - "north": {"uv": [2, 2, 14, 14], "texture": "#2"} - } - }, - { - "name": "face", - "from": [0, 0, 1.9], - "to": [16, 16, 1.9], - "faces": { - "north": {"uv": [0, 0, 16, 16], "texture": "#face"} - } - }, - { - "name": "east", - "from": [15, 5, 5], - "to": [14.5, 11, 11], - "faces": { - "north": {"uv": [11, 5, 12, 11], "texture": "#6"}, - "east": {"uv": [5, 5, 11, 11], "texture": "#6"}, - "south": {"uv": [4, 5, 5, 11], "texture": "#6"}, - "up": {"uv": [5, 4, 11, 5], "rotation": 270, "texture": "#6"}, - "down": {"uv": [5, 11, 11, 12], "rotation": 90, "texture": "#6"} - } - }, - { - "name": "west", - "from": [1.5, 5, 5], - "to": [1, 11, 11], - "faces": { - "north": {"uv": [4, 5, 5, 11], "texture": "#6"}, - "south": {"uv": [11, 5, 12, 11], "texture": "#6"}, - "west": {"uv": [5, 5, 11, 11], "texture": "#6"}, - "up": {"uv": [5, 4, 11, 5], "rotation": 90, "texture": "#6"}, - "down": {"uv": [5, 11, 11, 12], "rotation": 270, "texture": "#6"} - } - }, - { - "name": "south", - "from": [5, 5, 15], - "to": [11, 11, 14.5], - "rotation": {"angle": 0, "axis": "y", "origin": [15, 8, 20]}, - "faces": { - "east": {"uv": [11, 5, 12, 11], "texture": "#6"}, - "south": {"uv": [5, 5, 11, 11], "texture": "#6"}, - "west": {"uv": [4, 5, 5, 11], "texture": "#6"}, - "up": {"uv": [5, 4, 11, 5], "texture": "#6"}, - "down": {"uv": [5, 11, 11, 12], "texture": "#6"} - } - }, - { - "name": "upper", - "from": [5, 15, 5], - "to": [11, 14.5, 11], - "faces": { - "north": {"uv": [5, 4, 11, 5], "rotation": 180, "texture": "#6"}, - "east": {"uv": [11, 5, 12, 11], "rotation": 90, "texture": "#6"}, - "south": {"uv": [5, 11, 11, 12], "texture": "#6"}, - "west": {"uv": [4, 5, 5, 11], "rotation": 270, "texture": "#6"}, - "up": {"uv": [5, 5, 11, 11], "texture": "#6"} - } - }, - { - "name": "lower", - "from": [5, 1.5, 5], - "to": [11, 1, 11], - "faces": { - "north": {"uv": [5, 11, 11, 12], "rotation": 180, "texture": "#6"}, - "east": {"uv": [11, 5, 12, 11], "rotation": 270, "texture": "#6"}, - "south": {"uv": [5, 4, 11, 5], "texture": "#6"}, - "west": {"uv": [4, 5, 5, 11], "rotation": 90, "texture": "#6"}, - "down": {"uv": [5, 5, 11, 11], "texture": "#6"} - } - }, { "name": "left", "from": [2, 4, 1], "to": [2, 12, 2], "faces": { - "east": {"uv": [14, 4, 15, 12], "texture": "#2"} + "east": {"uv": [14, 4, 15, 12], "texture": "#6"} } }, { @@ -101,7 +22,7 @@ "from": [14, 4, 1], "to": [14, 12, 2], "faces": { - "west": {"uv": [1, 4, 2, 12], "texture": "#2"} + "west": {"uv": [1, 4, 2, 12], "texture": "#6"} } }, { @@ -109,7 +30,7 @@ "from": [4, 2, 1], "to": [12, 2, 2], "faces": { - "up": {"uv": [4, 14, 12, 15], "texture": "#2"} + "up": {"uv": [4, 14, 12, 15], "texture": "#6"} } }, { @@ -117,7 +38,7 @@ "from": [4, 14, 1], "to": [12, 14, 2], "faces": { - "down": {"uv": [4, 1, 12, 2], "texture": "#2"} + "down": {"uv": [4, 1, 12, 2], "texture": "#6"} } }, { @@ -125,8 +46,8 @@ "from": [3, 13, 1], "to": [4, 14, 2], "faces": { - "east": {"uv": [12, 2, 13, 3], "texture": "#2"}, - "down": {"uv": [12, 2, 13, 3], "texture": "#2"} + "east": {"uv": [12, 2, 13, 3], "texture": "#6"}, + "down": {"uv": [12, 2, 13, 3], "texture": "#6"} } }, { @@ -134,8 +55,8 @@ "from": [12, 13, 1], "to": [13, 14, 2], "faces": { - "west": {"uv": [3, 2, 4, 3], "texture": "#2"}, - "down": {"uv": [3, 2, 4, 3], "texture": "#2"} + "west": {"uv": [3, 2, 4, 3], "texture": "#6"}, + "down": {"uv": [3, 2, 4, 3], "texture": "#6"} } }, { @@ -143,8 +64,8 @@ "from": [3, 2, 1], "to": [4, 3, 2], "faces": { - "east": {"uv": [12, 13, 13, 14], "texture": "#2"}, - "up": {"uv": [12, 13, 13, 14], "texture": "#2"} + "east": {"uv": [12, 13, 13, 14], "texture": "#6"}, + "up": {"uv": [12, 13, 13, 14], "texture": "#6"} } }, { @@ -152,8 +73,8 @@ "from": [12, 2, 1], "to": [13, 3, 2], "faces": { - "west": {"uv": [3, 13, 4, 14], "texture": "#2"}, - "up": {"uv": [3, 13, 4, 14], "texture": "#2"} + "west": {"uv": [3, 13, 4, 14], "texture": "#6"}, + "up": {"uv": [3, 13, 4, 14], "texture": "#6"} } }, { @@ -161,8 +82,8 @@ "from": [2, 3, 1], "to": [3, 4, 2], "faces": { - "east": {"uv": [13, 12, 14, 13], "texture": "#2"}, - "up": {"uv": [13, 12, 14, 13], "texture": "#2"} + "east": {"uv": [13, 12, 14, 13], "texture": "#6"}, + "up": {"uv": [13, 12, 14, 13], "texture": "#6"} } }, { @@ -170,8 +91,8 @@ "from": [13, 3, 1], "to": [14, 4, 2], "faces": { - "west": {"uv": [2, 12, 3, 13], "texture": "#2"}, - "up": {"uv": [2, 12, 3, 13], "texture": "#2"} + "west": {"uv": [2, 12, 3, 13], "texture": "#6"}, + "up": {"uv": [2, 12, 3, 13], "texture": "#6"} } }, { @@ -179,8 +100,8 @@ "from": [13, 12, 1], "to": [14, 13, 2], "faces": { - "west": {"uv": [3, 2, 4, 3], "texture": "#2"}, - "down": {"uv": [2, 3, 3, 4], "texture": "#2"} + "west": {"uv": [3, 2, 4, 3], "texture": "#6"}, + "down": {"uv": [2, 3, 3, 4], "texture": "#6"} } }, { @@ -188,216 +109,231 @@ "from": [2, 12, 1], "to": [3, 13, 2], "faces": { - "east": {"uv": [13, 3, 14, 4], "texture": "#2"}, - "down": {"uv": [13, 3, 14, 4], "texture": "#2"} + "east": {"uv": [13, 3, 14, 4], "texture": "#6"}, + "down": {"uv": [13, 3, 14, 4], "texture": "#6"} } }, { "name": "body", - "from": [1, 1, 1], - "to": [15, 15, 15], + "from": [0, 0, 2], + "to": [16, 16, 16], "faces": { - "north": {"uv": [1, 1, 15, 15], "texture": "#5", "cullface": "north"}, - "east": {"uv": [1, 1, 15, 15], "texture": "#3", "cullface": "east"}, - "south": {"uv": [1, 1, 15, 15], "texture": "#3", "cullface": "south"}, - "west": {"uv": [1, 1, 15, 15], "texture": "#3", "cullface": "west"}, - "up": {"uv": [1, 1, 15, 15], "texture": "#4"}, - "down": {"uv": [1, 1, 15, 15], "texture": "#4"} + "east": {"uv": [0, 0, 15, 16], "texture": "#3", "cullface": "east"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#3", "cullface": "south"}, + "west": {"uv": [1, 0, 16, 16], "texture": "#3", "cullface": "west"}, + "up": {"uv": [0, 1, 16, 16], "texture": "#4"}, + "down": {"uv": [0, 0, 16, 15], "texture": "#4"} } }, { "name": "vertical-ne", "from": [15, 0, 0], - "to": [16, 16, 1], + "to": [16, 16, 2], "faces": { "north": {"uv": [0, 0, 1, 16], "texture": "#3"}, - "east": {"uv": [15, 0, 16, 16], "texture": "#3"}, + "east": {"uv": [14, 0, 16, 16], "texture": "#3"}, "south": {"uv": [15, 0, 16, 16], "texture": "#3"}, - "west": {"uv": [0, 0, 1, 16], "texture": "#3"}, - "up": {"uv": [15, 0, 16, 1], "texture": "#3"}, - "down": {"uv": [0, 0, 1, 1], "texture": "#3"} - } - }, - { - "name": "vertical-es", - "from": [15, 0, 15], - "to": [16, 16, 16], - "faces": { - "north": {"uv": [0, 0, 1, 16], "texture": "#3"}, - "east": {"uv": [0, 0, 1, 16], "texture": "#3"}, - "south": {"uv": [15, 0, 16, 16], "texture": "#3"}, - "west": {"uv": [15, 0, 16, 16], "texture": "#3"}, - "up": {"uv": [15, 15, 16, 16], "texture": "#3"}, - "down": {"uv": [0, 15, 1, 16], "texture": "#3"} - } - }, - { - "name": "vertical-sw", - "from": [0, 0, 15], - "to": [1, 16, 16], - "faces": { - "north": {"uv": [15, 0, 16, 16], "texture": "#3"}, - "east": {"uv": [0, 0, 1, 16], "texture": "#3"}, - "south": {"uv": [0, 0, 1, 16], "texture": "#3"}, - "west": {"uv": [15, 0, 16, 16], "texture": "#3"}, - "up": {"uv": [0, 15, 1, 16], "texture": "#3"}, - "down": {"uv": [15, 15, 16, 16], "texture": "#3"} + "west": {"uv": [0, 0, 2, 16], "texture": "#3"}, + "up": {"uv": [15, 0, 16, 2], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 2], "texture": "#3"} } }, { "name": "vertical-wn", "from": [0, 0, 0], - "to": [1, 16, 1], + "to": [1, 16, 2], "faces": { "north": {"uv": [15, 0, 16, 16], "texture": "#3"}, - "east": {"uv": [15, 0, 16, 16], "texture": "#3"}, + "east": {"uv": [14, 0, 16, 16], "texture": "#3"}, "south": {"uv": [0, 0, 1, 16], "texture": "#3"}, - "west": {"uv": [0, 0, 1, 16], "texture": "#3"}, - "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, - "down": {"uv": [15, 0, 16, 1], "texture": "#3"} + "west": {"uv": [0, 0, 2, 16], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 2], "texture": "#3"}, + "down": {"uv": [15, 0, 16, 2], "texture": "#3"} } }, { "name": "side-upper-n", "from": [1, 15, 0], - "to": [15, 16, 1], + "to": [15, 16, 2], "faces": { "north": {"uv": [1, 0, 15, 1], "texture": "#3"}, "east": {"uv": [0, 0, 0, 0], "texture": "#3"}, "south": {"uv": [1, 0, 15, 1], "texture": "#3"}, "west": {"uv": [0, 0, 0, 0], "texture": "#3"}, - "up": {"uv": [1, 0, 15, 1], "texture": "#3"}, - "down": {"uv": [1, 0, 15, 1], "rotation": 180, "texture": "#3"} + "up": {"uv": [1, 0, 15, 2], "texture": "#3"}, + "down": {"uv": [1, 0, 15, 2], "rotation": 180, "texture": "#3"} } }, { - "name": "side-upper-s", - "from": [1, 15, 15], - "to": [15, 16, 16], + "name": "side-lower-n", + "from": [1, 0, 0], + "to": [15, 1, 2], "faces": { - "north": {"uv": [1, 15, 15, 16], "rotation": 180, "texture": "#3"}, + "north": {"uv": [1, 15, 15, 16], "texture": "#3"}, "east": {"uv": [0, 0, 0, 0], "texture": "#3"}, - "south": {"uv": [1, 0, 15, 1], "texture": "#3"}, + "south": {"uv": [1, 15, 15, 16], "texture": "#3"}, "west": {"uv": [0, 0, 0, 0], "texture": "#3"}, - "up": {"uv": [1, 15, 15, 16], "texture": "#3"}, - "down": {"uv": [1, 0, 15, 1], "texture": "#3"} + "up": {"uv": [1, 14, 15, 16], "rotation": 180, "texture": "#3"}, + "down": {"uv": [1, 2, 15, 0], "texture": "#3"} } }, { - "name": "side-upper-w", - "from": [0, 15, 1], - "to": [1, 16, 15], + "name": "bottom", + "from": [1, 1, 1], + "to": [15, 2, 1], "faces": { - "north": {"uv": [0, 0, 0, 0], "texture": "#3"}, - "east": {"uv": [0, 1, 1, 15], "rotation": 90, "texture": "#3"}, - "south": {"uv": [0, 0, 0, 0], "texture": "#3"}, - "west": {"uv": [1, 0, 15, 1], "texture": "#3"}, - "up": {"uv": [0, 1, 1, 15], "texture": "#3"}, - "down": {"uv": [1, 0, 15, 1], "rotation": 270, "texture": "#3"} + "north": {"uv": [1, 14, 15, 15], "texture": "#5"} } }, { - "name": "side-upper-e", - "from": [15, 15, 1], - "to": [16, 16, 15], + "name": "bottom3", + "from": [12, 2, 1], + "to": [15, 3, 1], "faces": { - "north": {"uv": [0, 0, 0, 0], "texture": "#3"}, - "east": {"uv": [1, 0, 15, 1], "texture": "#3"}, - "south": {"uv": [0, 0, 0, 0], "texture": "#3"}, - "west": {"uv": [15, 1, 16, 15], "rotation": 270, "texture": "#3"}, - "up": {"uv": [15, 1, 16, 15], "texture": "#3"}, - "down": {"uv": [1, 0, 15, 1], "rotation": 90, "texture": "#3"} + "north": {"uv": [1, 13, 4, 14], "texture": "#5"} } }, { - "name": "side-lower-w", - "from": [0, 0, 1], - "to": [1, 1, 15], + "name": "bottom4", + "from": [1, 2, 1], + "to": [4, 3, 1], "faces": { - "north": {"uv": [0, 0, 0, 0], "texture": "#3"}, - "east": {"uv": [15, 1, 16, 15], "rotation": 270, "texture": "#3"}, - "south": {"uv": [0, 0, 0, 0], "texture": "#3"}, - "west": {"uv": [1, 15, 15, 16], "texture": "#3"}, - "up": {"uv": [1, 15, 15, 16], "rotation": 90, "texture": "#3"}, - "down": {"uv": [15, 1, 16, 15], "texture": "#3"} + "north": {"uv": [12, 13, 15, 14], "texture": "#5"} } }, { - "name": "side-lower-s", - "from": [1, 0, 15], - "to": [15, 1, 16], + "name": "bottom2", + "from": [1, 3, 1], + "to": [3, 4, 1], "faces": { - "north": {"uv": [1, 15, 15, 16], "texture": "#3"}, - "east": {"uv": [0, 0, 0, 0], "texture": "#3"}, - "south": {"uv": [1, 15, 15, 16], "texture": "#3"}, - "west": {"uv": [0, 0, 0, 0], "texture": "#3"}, - "up": {"uv": [1, 15, 15, 16], "texture": "#3"}, - "down": {"uv": [1, 15, 15, 16], "texture": "#3"} + "north": {"uv": [13, 12, 15, 13], "texture": "#5"} } }, { - "name": "side-lower-e", - "from": [15, 0, 1], - "to": [16, 1, 15], + "name": "bottom1", + "from": [13, 3, 1], + "to": [15, 4, 1], "faces": { - "north": {"uv": [0, 0, 0, 0], "texture": "#3"}, - "east": {"uv": [1, 15, 15, 16], "texture": "#3"}, - "south": {"uv": [0, 0, 0, 0], "texture": "#3"}, - "west": {"uv": [0, 1, 1, 15], "rotation": 90, "texture": "#3"}, - "up": {"uv": [1, 15, 15, 16], "rotation": 270, "texture": "#3"}, - "down": {"uv": [0, 1, 1, 15], "texture": "#3"} + "north": {"uv": [1, 12, 3, 13], "texture": "#5"} } }, { - "name": "side-lower-n", - "from": [1, 0, 0], - "to": [15, 1, 1], + "name": "top5", + "from": [1, 12, 1], + "to": [3, 13, 1], "faces": { - "north": {"uv": [1, 15, 15, 16], "texture": "#3"}, - "east": {"uv": [0, 0, 0, 0], "texture": "#3"}, - "south": {"uv": [1, 15, 15, 16], "texture": "#3"}, - "west": {"uv": [0, 0, 0, 0], "texture": "#3"}, - "up": {"uv": [1, 15, 15, 16], "rotation": 180, "texture": "#3"}, - "down": {"uv": [1, 0, 15, 1], "texture": "#3"} + "north": {"uv": [13, 3, 15, 4], "texture": "#5"} + } + }, + { + "name": "top4", + "from": [13, 12, 1], + "to": [15, 13, 1], + "faces": { + "north": {"uv": [1, 3, 3, 4], "texture": "#5"} + } + }, + { + "name": "left", + "from": [14, 4, 1], + "to": [15, 12, 1], + "faces": { + "north": {"uv": [1, 4, 2, 12], "texture": "#5"} + } + }, + { + "name": "right", + "from": [1, 4, 1], + "to": [2, 12, 1], + "faces": { + "north": {"uv": [14, 4, 15, 12], "texture": "#5"} + } + }, + { + "name": "top1", + "from": [12, 13, 1], + "to": [15, 14, 1], + "faces": { + "north": {"uv": [1, 2, 4, 3], "texture": "#5"} + } + }, + { + "name": "top", + "from": [1, 14, 1], + "to": [15, 15, 1], + "faces": { + "north": {"uv": [1, 1, 15, 2], "texture": "#5"} + } + }, + { + "name": "top2", + "from": [1, 13, 1], + "to": [4, 14, 1], + "faces": { + "north": {"uv": [12, 2, 15, 3], "texture": "#5"} + } + }, + { + "name": "face", + "from": [2, 2, 1.9], + "to": [14, 14, 2.9], + "faces": { + "north": {"uv": [2, 2, 14, 14], "texture": "#6"} } } ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + }, "groups": [ - 0, - 1, - { - "name": "connector", - "origin": [8, 8, 8], - "color": 0, - "nbt": "{}", - "armAnimationEnabled": false, - "children": [2, 3, 4, 5, 6] - }, { "name": "screen", "origin": [0, 0, 0], "color": 0, - "nbt": "{}", - "armAnimationEnabled": false, - "children": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18] + "children": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] }, { "name": "base", "origin": [0, 0, 0], "color": 0, - "nbt": "{}", - "armAnimationEnabled": false, "children": [ - 19, + 12, { "name": "frame", "origin": [0, 0, 0], "color": 0, - "nbt": "{}", - "armAnimationEnabled": false, - "children": [20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31] + "children": [13, 14, 15, 16] } ] + }, + { + "name": "face", + "origin": [0, 0, 0], + "color": 0, + "children": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29] } ] } \ No newline at end of file diff --git a/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/0.json b/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/0.json new file mode 100644 index 0000000..cc7cd95 --- /dev/null +++ b/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/0.json @@ -0,0 +1,6 @@ +{ + "parent": "cccbridge:block/redrouter_block", + "textures": { + "6": "cccbridge:block/redrouter/face/0" + } +} \ No newline at end of file diff --git a/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/1.json b/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/1.json index 992ad97..e4f39ad 100644 --- a/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/1.json +++ b/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/1.json @@ -1,7 +1,6 @@ { - "credit": "By Sammy.K", "parent": "cccbridge:block/redrouter_block", "textures": { - "face": "cccbridge:block/redrouter/face/1" + "6": "cccbridge:block/redrouter/face/1" } } \ No newline at end of file diff --git a/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/10.json b/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/10.json index de1af19..dd06ce7 100644 --- a/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/10.json +++ b/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/10.json @@ -1,7 +1,6 @@ { - "credit": "By Sammy.K", "parent": "cccbridge:block/redrouter_block", "textures": { - "face": "cccbridge:block/redrouter/face/10" + "6": "cccbridge:block/redrouter/face/10" } } \ No newline at end of file diff --git a/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/11.json b/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/11.json index dd6051f..51fd111 100644 --- a/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/11.json +++ b/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/11.json @@ -1,7 +1,6 @@ { - "credit": "By Sammy.K", "parent": "cccbridge:block/redrouter_block", "textures": { - "face": "cccbridge:block/redrouter/face/11" + "6": "cccbridge:block/redrouter/face/11" } } \ No newline at end of file diff --git a/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/12.json b/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/12.json index ef30c46..6a483ef 100644 --- a/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/12.json +++ b/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/12.json @@ -1,7 +1,6 @@ { - "credit": "By Sammy.K", "parent": "cccbridge:block/redrouter_block", "textures": { - "face": "cccbridge:block/redrouter/face/12" + "6": "cccbridge:block/redrouter/face/12" } } \ No newline at end of file diff --git a/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/13.json b/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/13.json index 8585e44..0d203a4 100644 --- a/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/13.json +++ b/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/13.json @@ -1,7 +1,6 @@ { - "credit": "By Sammy.K", "parent": "cccbridge:block/redrouter_block", "textures": { - "face": "cccbridge:block/redrouter/face/13" + "6": "cccbridge:block/redrouter/face/13" } } \ No newline at end of file diff --git a/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/14.json b/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/14.json index 1bcdf08..e1fd253 100644 --- a/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/14.json +++ b/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/14.json @@ -1,7 +1,6 @@ { - "credit": "By Sammy.K", "parent": "cccbridge:block/redrouter_block", "textures": { - "face": "cccbridge:block/redrouter/face/14" + "6": "cccbridge:block/redrouter/face/14" } } \ No newline at end of file diff --git a/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/15.json b/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/15.json index e8af63b..c1bea21 100644 --- a/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/15.json +++ b/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/15.json @@ -1,7 +1,6 @@ { - "credit": "By Sammy.K", "parent": "cccbridge:block/redrouter_block", "textures": { - "face": "cccbridge:block/redrouter/face/15" + "6": "cccbridge:block/redrouter/face/15" } } \ No newline at end of file diff --git a/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/16.json b/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/16.json index 0996f92..92daa7a 100644 --- a/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/16.json +++ b/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/16.json @@ -1,7 +1,6 @@ { - "credit": "By Sammy.K", "parent": "cccbridge:block/redrouter_block", "textures": { - "face": "cccbridge:block/redrouter/face/16" + "6": "cccbridge:block/redrouter/face/16" } } \ No newline at end of file diff --git a/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/17.json b/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/17.json new file mode 100644 index 0000000..b2a180c --- /dev/null +++ b/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/17.json @@ -0,0 +1,6 @@ +{ + "parent": "cccbridge:block/redrouter_block", + "textures": { + "6": "cccbridge:block/redrouter/face/17" + } +} \ No newline at end of file diff --git a/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/2.json b/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/2.json index 1f60b7b..a2cc2f1 100644 --- a/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/2.json +++ b/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/2.json @@ -1,7 +1,6 @@ { - "credit": "By Sammy.K", "parent": "cccbridge:block/redrouter_block", "textures": { - "face": "cccbridge:block/redrouter/face/2" + "6": "cccbridge:block/redrouter/face/2" } } \ No newline at end of file diff --git a/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/3.json b/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/3.json index 838b34f..90a867b 100644 --- a/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/3.json +++ b/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/3.json @@ -1,7 +1,6 @@ { - "credit": "By Sammy.K", "parent": "cccbridge:block/redrouter_block", "textures": { - "face": "cccbridge:block/redrouter/face/3" + "6": "cccbridge:block/redrouter/face/3" } } \ No newline at end of file diff --git a/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/4.json b/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/4.json index 15935ff..cd16c18 100644 --- a/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/4.json +++ b/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/4.json @@ -1,7 +1,6 @@ { - "credit": "By Sammy.K", "parent": "cccbridge:block/redrouter_block", "textures": { - "face": "cccbridge:block/redrouter/face/4" + "6": "cccbridge:block/redrouter/face/4" } } \ No newline at end of file diff --git a/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/5.json b/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/5.json index 4540dee..d376c72 100644 --- a/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/5.json +++ b/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/5.json @@ -1,7 +1,6 @@ { - "credit": "By Sammy.K", "parent": "cccbridge:block/redrouter_block", "textures": { - "face": "cccbridge:block/redrouter/face/5" + "6": "cccbridge:block/redrouter/face/5" } } \ No newline at end of file diff --git a/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/6.json b/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/6.json index a391ce8..8582a91 100644 --- a/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/6.json +++ b/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/6.json @@ -1,7 +1,6 @@ { - "credit": "By Sammy.K", "parent": "cccbridge:block/redrouter_block", "textures": { - "face": "cccbridge:block/redrouter/face/6" + "6": "cccbridge:block/redrouter/face/6" } } \ No newline at end of file diff --git a/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/7.json b/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/7.json index f67e417..e9b2d24 100644 --- a/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/7.json +++ b/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/7.json @@ -1,7 +1,6 @@ { - "credit": "By Sammy.K", "parent": "cccbridge:block/redrouter_block", "textures": { - "face": "cccbridge:block/redrouter/face/7" + "6": "cccbridge:block/redrouter/face/7" } } \ No newline at end of file diff --git a/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/8.json b/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/8.json index a2c90cf..bf27b07 100644 --- a/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/8.json +++ b/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/8.json @@ -1,7 +1,6 @@ { - "credit": "By Sammy.K", "parent": "cccbridge:block/redrouter_block", "textures": { - "face": "cccbridge:block/redrouter/face/8" + "6": "cccbridge:block/redrouter/face/8" } } \ No newline at end of file diff --git a/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/9.json b/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/9.json index d195d98..f052f44 100644 --- a/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/9.json +++ b/forge/src/main/resources/assets/cccbridge/models/block/redrouter_face/9.json @@ -1,7 +1,6 @@ { - "credit": "By Sammy.K", "parent": "cccbridge:block/redrouter_block", "textures": { - "face": "cccbridge:block/redrouter/face/9" + "6": "cccbridge:block/redrouter/face/9" } } \ No newline at end of file diff --git a/forge/src/main/resources/assets/cccbridge/models/block/scroller_block.json b/forge/src/main/resources/assets/cccbridge/models/block/scroller_block.json index ee6ec66..cc01eef 100644 --- a/forge/src/main/resources/assets/cccbridge/models/block/scroller_block.json +++ b/forge/src/main/resources/assets/cccbridge/models/block/scroller_block.json @@ -1,6 +1,7 @@ { "credit": "By Sammy.K via Blockbench", "parent": "block/block", + "render_type": "cutout", "textures": { "0": "cccbridge:block/scroller/scroller_side", "1": "cccbridge:block/scroller/scroller_front", @@ -8,29 +9,17 @@ "particle": "cccbridge:block/scroller/scroller_side" }, "elements": [ - { - "name": "body", - "from": [0, 0, 15], - "to": [16, 16, 16], - "faces": { - "north": {"uv": [0, 0, 16, 16], "texture": "#1", "cullface": "north"}, - "east": {"uv": [15, 0, 16, 16], "texture": "#0", "cullface": "east"}, - "south": {"uv": [0, 0, 16, 16], "texture": "#0", "cullface": "south"}, - "west": {"uv": [0, 0, 1, 16], "texture": "#0", "cullface": "west"}, - "up": {"uv": [0, 0, 16, 1], "texture": "#0"}, - "down": {"uv": [0, 15, 16, 16], "texture": "#0"} - } - }, { "name": "vertical-ne", "from": [15, 0, 14], "to": [16, 16, 15], "faces": { - "north": {"uv": [0, 0, 1, 16], "texture": "#0"}, - "east": {"uv": [15, 0, 16, 16], "texture": "#0"}, - "west": {"uv": [0, 0, 1, 16], "texture": "#0"}, - "up": {"uv": [15, 0, 16, 1], "texture": "#0"}, - "down": {"uv": [0, 0, 1, 1], "texture": "#0"} + "north": {"uv": [0, 0, 1, 16], "texture": "#1"}, + "east": {"uv": [0, 0, 1, 16], "texture": "#1"}, + "south": {"uv": [0, 0, 0, 0], "texture": "#1"}, + "west": {"uv": [0, 0, 1, 16], "texture": "#1"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#1"}, + "down": {"uv": [0, 15, 1, 16], "texture": "#1"} } }, { @@ -38,11 +27,12 @@ "from": [0, 0, 14], "to": [1, 16, 15], "faces": { - "north": {"uv": [15, 0, 16, 16], "texture": "#0"}, - "east": {"uv": [15, 0, 16, 16], "texture": "#0"}, - "west": {"uv": [0, 0, 1, 16], "texture": "#0"}, - "up": {"uv": [0, 0, 1, 1], "texture": "#0"}, - "down": {"uv": [15, 0, 16, 1], "texture": "#0"} + "north": {"uv": [15, 0, 16, 16], "texture": "#1"}, + "east": {"uv": [15, 0, 16, 16], "texture": "#1"}, + "south": {"uv": [0, 0, 0, 0], "texture": "#1"}, + "west": {"uv": [15, 0, 16, 16], "texture": "#1"}, + "up": {"uv": [15, 0, 16, 1], "texture": "#1"}, + "down": {"uv": [15, 15, 16, 16], "texture": "#1"} } }, { @@ -50,11 +40,12 @@ "from": [1, 15, 14], "to": [15, 16, 15], "faces": { - "north": {"uv": [1, 0, 15, 1], "texture": "#0"}, - "east": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "west": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "up": {"uv": [1, 0, 15, 1], "texture": "#0"}, - "down": {"uv": [1, 0, 15, 1], "rotation": 180, "texture": "#0"} + "north": {"uv": [1, 0, 15, 1], "texture": "#1"}, + "east": {"uv": [0, 0, 0, 0], "texture": "#1"}, + "south": {"uv": [0, 0, 0, 0], "texture": "#1"}, + "west": {"uv": [0, 0, 0, 0], "texture": "#1"}, + "up": {"uv": [15, 0, 1, 1], "texture": "#1"}, + "down": {"uv": [15, 0, 1, 1], "texture": "#1"} } }, { @@ -62,24 +53,74 @@ "from": [1, 0, 14], "to": [15, 1, 15], "faces": { - "north": {"uv": [1, 15, 15, 16], "texture": "#0"}, - "east": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "west": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "up": {"uv": [1, 15, 15, 16], "rotation": 180, "texture": "#0"}, - "down": {"uv": [1, 0, 15, 1], "texture": "#0"} + "north": {"uv": [1, 15, 15, 16], "texture": "#1"}, + "east": {"uv": [0, 0, 0, 0], "texture": "#1"}, + "south": {"uv": [0, 0, 0, 0], "texture": "#1"}, + "west": {"uv": [0, 0, 0, 0], "texture": "#1"}, + "up": {"uv": [15, 15, 1, 16], "texture": "#1"}, + "down": {"uv": [15, 15, 1, 16], "texture": "#1"} } }, { "name": "interface", - "from": [3, 3, 15.9], - "to": [13, 13, 14.91], + "from": [3, 3, 15.95], + "to": [13, 13, 16], "faces": { "north": {"uv": [3, 3, 13, 13], "texture": "#2"}, "east": {"uv": [3, 3, 2, 13], "texture": "#2"}, + "south": {"uv": [3, 3, 13, 13], "texture": "#0"}, "west": {"uv": [13, 3, 14, 13], "texture": "#2"}, "up": {"uv": [3, 2, 13, 3], "rotation": 180, "texture": "#2"}, "down": {"uv": [3, 13, 13, 14], "texture": "#2"} } + }, + { + "name": "bottom", + "from": [0, 0, 15], + "to": [16, 3, 16], + "faces": { + "north": {"uv": [0, 13, 16, 16], "texture": "#1"}, + "east": {"uv": [15, 13, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 13, 16, 16], "texture": "#0"}, + "west": {"uv": [0, 13, 1, 16], "texture": "#0"}, + "up": {"uv": [0, 13, 16, 14], "texture": "#2"}, + "down": {"uv": [0, 15, 16, 16], "texture": "#0"} + } + }, + { + "name": "top", + "from": [0, 13, 15], + "to": [16, 16, 16], + "faces": { + "north": {"uv": [0, 0, 16, 3], "texture": "#1"}, + "east": {"uv": [15, 0, 16, 3], "texture": "#0"}, + "south": {"uv": [0, 0, 16, 3], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "up": {"uv": [0, 0, 16, 1], "texture": "#0"}, + "down": {"uv": [0, 2, 16, 3], "texture": "#2"} + } + }, + { + "name": "east", + "from": [13, 3, 15], + "to": [16, 13, 16], + "faces": { + "north": {"uv": [0, 3, 3, 13], "texture": "#1"}, + "east": {"uv": [15, 3, 16, 13], "texture": "#0"}, + "south": {"uv": [13, 3, 16, 13], "texture": "#0"}, + "west": {"uv": [2, 3, 3, 13], "texture": "#2"} + } + }, + { + "name": "west", + "from": [0, 3, 15], + "to": [3, 13, 16], + "faces": { + "north": {"uv": [13, 3, 16, 13], "texture": "#1"}, + "east": {"uv": [13, 3, 14, 13], "texture": "#2"}, + "south": {"uv": [0, 3, 3, 13], "texture": "#0"}, + "west": {"uv": [0, 3, 1, 13], "texture": "#0"} + } } ], "display": { @@ -95,13 +136,13 @@ }, "firstperson_righthand": { "rotation": [-13, 155, 0], - "translation": [-3, 2.5, 5.75], - "scale": [0.4, 0.4, 0.4] + "translation": [-3.25, 2.5, 5.75], + "scale": [0.3, 0.3, 0.3] }, "firstperson_lefthand": { "rotation": [-13, 155, 0], - "translation": [-3, 2.5, 5.75], - "scale": [0.4, 0.4, 0.4] + "translation": [-3.25, 2.5, 5.75], + "scale": [0.3, 0.3, 0.3] }, "ground": { "rotation": [90, 0, 0], @@ -122,15 +163,18 @@ } }, "groups": [ - 0, { "name": "frame", "origin": [0, 0, 0], "color": 0, - "nbt": "{}", - "armAnimationEnabled": false, - "children": [1, 2, 3, 4] + "children": [0, 1, 2, 3] }, - 5 + 4, + { + "name": "base", + "origin": [0, 0, 0], + "color": 0, + "children": [5, 6, 7, 8] + } ] } \ No newline at end of file diff --git a/forge/src/main/resources/assets/cccbridge/models/block/source_block.json b/forge/src/main/resources/assets/cccbridge/models/block/source_block.json index 6628a34..07fc0a2 100644 --- a/forge/src/main/resources/assets/cccbridge/models/block/source_block.json +++ b/forge/src/main/resources/assets/cccbridge/models/block/source_block.json @@ -1,161 +1,12 @@ { - "credit": "By Sammy.K via Blockbench", - "parent": "minecraft:block/block", + "parent": "minecraft:block/cube", "textures": { - "0": "cccbridge:block/source_block_side", - "1": "cccbridge:block/st_block_top", - "particle": "cccbridge:block/source_block_side" - }, - "elements": [ - { - "name": "base", - "from": [1, 1, 1], - "to": [15, 15, 15], - "faces": { - "north": {"uv": [1, 1, 15, 15], "texture": "#0"}, - "east": {"uv": [1, 1, 15, 15], "texture": "#0"}, - "south": {"uv": [1, 1, 15, 15], "texture": "#0"}, - "west": {"uv": [1, 1, 15, 15], "texture": "#0"} - } - }, - { - "name": "sw", - "from": [0, 1, 15], - "to": [1, 15, 16], - "faces": { - "north": {"uv": [15, 1, 16, 15], "texture": "#0"}, - "east": {"uv": [0, 1, 1, 15], "texture": "#0"}, - "south": {"uv": [0, 1, 1, 15], "texture": "#0"}, - "west": {"uv": [15, 1, 16, 15], "texture": "#0"} - } - }, - { - "name": "ew", - "from": [15, 1, 15], - "to": [16, 15, 16], - "faces": { - "north": {"uv": [0, 1, 1, 15], "texture": "#0"}, - "east": {"uv": [0, 1, 1, 15], "texture": "#0"}, - "south": {"uv": [15, 1, 16, 15], "texture": "#0"}, - "west": {"uv": [15, 1, 16, 15], "texture": "#0"} - } - }, - { - "name": "wn", - "from": [0, 1, 0], - "to": [1, 15, 1], - "faces": { - "north": {"uv": [15, 1, 16, 15], "texture": "#0"}, - "east": {"uv": [0, 0, 1, 14], "texture": "#0"}, - "south": {"uv": [0, 1, 1, 15], "texture": "#0"}, - "west": {"uv": [15, 1, 16, 15], "texture": "#0"} - } - }, - { - "name": "ne", - "from": [15, 1, 0], - "to": [16, 15, 1], - "faces": { - "north": {"uv": [0, 1, 1, 15], "texture": "#0"}, - "east": {"uv": [15, 1, 16, 15], "texture": "#0"}, - "south": {"uv": [15, 1, 16, 15], "texture": "#0"}, - "west": {"uv": [0, 1, 1, 15], "texture": "#0"} - } - }, - { - "name": "top", - "from": [0, 15, 0], - "to": [16, 16, 16], - "faces": { - "north": {"uv": [0, 0, 16, 1], "texture": "#0"}, - "east": {"uv": [0, 0, 16, 1], "texture": "#0"}, - "south": {"uv": [0, 0, 16, 1], "texture": "#0"}, - "west": {"uv": [0, 0, 16, 1], "texture": "#0"}, - "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, - "down": {"uv": [0, 0, 16, 16], "texture": "#0"} - } - }, - { - "name": "bottom", - "from": [0, 0, 0], - "to": [16, 1, 16], - "faces": { - "north": {"uv": [0, 15, 16, 16], "texture": "#0"}, - "east": {"uv": [0, 15, 16, 16], "texture": "#0"}, - "south": {"uv": [0, 15, 16, 16], "texture": "#0"}, - "west": {"uv": [0, 15, 16, 16], "texture": "#0"}, - "up": {"uv": [0, 0, 16, 16], "texture": "#0"}, - "down": {"uv": [0, 0, 16, 16], "texture": "#1"} - } - }, - { - "name": "west", - "from": [0, 4, 4], - "to": [1, 12, 12], - "faces": { - "north": {"uv": [4, 4, 5, 12], "texture": "#0"}, - "south": {"uv": [11, 4, 12, 12], "texture": "#0"}, - "west": {"uv": [4, 4, 12, 12], "texture": "#0"}, - "up": {"uv": [4, 4, 12, 5], "rotation": 90, "texture": "#0"}, - "down": {"uv": [4, 11, 12, 12], "rotation": 270, "texture": "#0"} - } - }, - { - "name": "north", - "from": [4, 4, 0], - "to": [12, 12, 1], - "faces": { - "north": {"uv": [4, 4, 12, 12], "texture": "#0"}, - "east": {"uv": [4, 4, 5, 12], "texture": "#0"}, - "west": {"uv": [11, 4, 12, 12], "texture": "#0"}, - "up": {"uv": [4, 4, 12, 5], "rotation": 180, "texture": "#0"}, - "down": {"uv": [4, 11, 12, 12], "rotation": 180, "texture": "#0"} - } - }, - { - "name": "east", - "from": [15, 4, 4], - "to": [16, 12, 12], - "faces": { - "north": {"uv": [11, 4, 12, 12], "texture": "#0"}, - "east": {"uv": [4, 4, 12, 12], "texture": "#0"}, - "south": {"uv": [4, 4, 5, 12], "texture": "#0"}, - "up": {"uv": [4, 4, 12, 5], "rotation": 270, "texture": "#0"}, - "down": {"uv": [4, 11, 12, 12], "rotation": 90, "texture": "#0"} - } - }, - { - "name": "south", - "from": [4, 4, 15], - "to": [12, 12, 16], - "faces": { - "east": {"uv": [11, 4, 12, 12], "texture": "#0"}, - "south": {"uv": [4, 4, 12, 12], "texture": "#0"}, - "west": {"uv": [4, 4, 5, 12], "texture": "#0"}, - "up": {"uv": [4, 4, 12, 5], "texture": "#0"}, - "down": {"uv": [4, 11, 12, 12], "texture": "#0"} - } - } - ], - "groups": [ - 0, - { - "name": "frame", - "origin": [0, 0, 0], - "color": 0, - "children": [1, 2, 3, 4] - }, - { - "name": "plates", - "origin": [0, 0, 0], - "color": 0, - "children": [5, 6] - }, - { - "name": "connections", - "origin": [0, 0, 0], - "color": 0, - "children": [7, 8, 9, 10] - } - ] -} \ No newline at end of file + "down": "cccbridge:block/source_target_block_vertical", + "east": "cccbridge:block/source_block_horizontal", + "north": "cccbridge:block/source_block_horizontal", + "particle": "cccbridge:block/source_block_horizontal", + "south": "cccbridge:block/source_block_horizontal", + "up": "cccbridge:block/source_target_block_vertical", + "west": "cccbridge:block/source_block_horizontal" + } + } \ No newline at end of file diff --git a/forge/src/main/resources/assets/cccbridge/models/block/target_block.json b/forge/src/main/resources/assets/cccbridge/models/block/target_block.json index 451c149..3d3adcc 100644 --- a/forge/src/main/resources/assets/cccbridge/models/block/target_block.json +++ b/forge/src/main/resources/assets/cccbridge/models/block/target_block.json @@ -1,221 +1,12 @@ { - "credit": "By Sammy.K via Blockbench", - "parent": "minecraft:block/block", + "parent": "minecraft:block/cube", "textures": { - "0": "cccbridge:block/target_block_side", - "1": "cccbridge:block/st_block_top", - "particle": "cccbridge:block/target_block_side" - }, - "elements": [ - { - "name": "sw", - "from": [0, 1, 15], - "to": [1, 15, 16], - "faces": { - "north": {"uv": [15, 1, 16, 15], "texture": "#0"}, - "east": {"uv": [0, 1, 1, 15], "texture": "#0"}, - "south": {"uv": [0, 1, 1, 15], "texture": "#0"}, - "west": {"uv": [15, 1, 16, 15], "texture": "#0"} - } - }, - { - "name": "ew", - "from": [15, 1, 15], - "to": [16, 15, 16], - "faces": { - "north": {"uv": [0, 1, 1, 15], "texture": "#0"}, - "east": {"uv": [0, 1, 1, 15], "texture": "#0"}, - "south": {"uv": [15, 1, 16, 15], "texture": "#0"}, - "west": {"uv": [15, 1, 16, 15], "texture": "#0"} - } - }, - { - "name": "wn", - "from": [0, 1, 0], - "to": [1, 15, 1], - "faces": { - "north": {"uv": [15, 1, 16, 15], "texture": "#0"}, - "east": {"uv": [0, 0, 1, 14], "texture": "#0"}, - "south": {"uv": [0, 1, 1, 15], "texture": "#0"}, - "west": {"uv": [15, 1, 16, 15], "texture": "#0"} - } - }, - { - "name": "ne", - "from": [15, 1, 0], - "to": [16, 15, 1], - "faces": { - "north": {"uv": [0, 1, 1, 15], "texture": "#0"}, - "east": {"uv": [15, 1, 16, 15], "texture": "#0"}, - "south": {"uv": [15, 1, 16, 15], "texture": "#0"}, - "west": {"uv": [0, 1, 1, 15], "texture": "#0"} - } - }, - { - "name": "top", - "from": [0, 15, 0], - "to": [16, 16, 16], - "faces": { - "north": {"uv": [0, 0, 16, 1], "texture": "#0"}, - "east": {"uv": [0, 0, 16, 1], "texture": "#0"}, - "south": {"uv": [0, 0, 16, 1], "texture": "#0"}, - "west": {"uv": [0, 0, 16, 1], "texture": "#0"}, - "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, - "down": {"uv": [0, 0, 16, 16], "texture": "#0"} - } - }, - { - "name": "bottom", - "from": [0, 0, 0], - "to": [16, 1, 16], - "faces": { - "north": {"uv": [0, 15, 16, 16], "texture": "#0"}, - "east": {"uv": [0, 15, 16, 16], "texture": "#0"}, - "south": {"uv": [0, 15, 16, 16], "texture": "#0"}, - "west": {"uv": [0, 15, 16, 16], "texture": "#0"}, - "up": {"uv": [0, 0, 16, 16], "texture": "#0"}, - "down": {"uv": [0, 0, 16, 16], "texture": "#1"} - } - }, - { - "name": "west", - "from": [2, 12, 12], - "to": [1, 4, 4], - "faces": { - "north": {"uv": [3, 4, 4, 12], "texture": "#0"}, - "south": {"uv": [12, 4, 13, 12], "texture": "#0"}, - "west": {"uv": [4, 4, 12, 12], "texture": "#0"}, - "up": {"uv": [4, 3, 12, 4], "rotation": 90, "texture": "#0"}, - "down": {"uv": [4, 12, 12, 13], "rotation": 270, "texture": "#0"} - } - }, - { - "name": "north", - "from": [12, 12, 2], - "to": [4, 4, 1], - "faces": { - "north": {"uv": [4, 4, 12, 12], "texture": "#0"}, - "east": {"uv": [3, 4, 4, 12], "texture": "#0"}, - "west": {"uv": [12, 4, 13, 12], "texture": "#0"}, - "up": {"uv": [4, 3, 12, 4], "rotation": 180, "texture": "#0"}, - "down": {"uv": [4, 12, 12, 13], "rotation": 180, "texture": "#0"} - } - }, - { - "name": "east", - "from": [15, 12, 12], - "to": [14, 4, 4], - "faces": { - "north": {"uv": [12, 4, 13, 12], "texture": "#0"}, - "east": {"uv": [4, 4, 12, 12], "texture": "#0"}, - "south": {"uv": [3, 4, 4, 12], "texture": "#0"}, - "up": {"uv": [4, 3, 12, 4], "rotation": 270, "texture": "#0"}, - "down": {"uv": [4, 12, 12, 13], "rotation": 90, "texture": "#0"} - } - }, - { - "name": "south", - "from": [12, 12, 15], - "to": [4, 4, 14], - "faces": { - "east": {"uv": [12, 4, 13, 12], "texture": "#0"}, - "south": {"uv": [4, 4, 12, 12], "texture": "#0"}, - "west": {"uv": [3, 4, 4, 12], "texture": "#0"}, - "up": {"uv": [4, 3, 12, 4], "texture": "#0"}, - "down": {"uv": [4, 12, 12, 13], "texture": "#0"} - } - }, - { - "name": "bottom", - "from": [1, 1, 1], - "to": [15, 4, 15], - "faces": { - "north": {"uv": [1, 12, 15, 15], "texture": "#0"}, - "east": {"uv": [1, 12, 15, 15], "texture": "#0"}, - "south": {"uv": [1, 12, 15, 15], "texture": "#0"}, - "west": {"uv": [1, 12, 15, 15], "texture": "#0"} - } - }, - { - "name": "top", - "from": [1, 12, 1], - "to": [15, 15, 15], - "faces": { - "north": {"uv": [1, 1, 15, 4], "texture": "#0"}, - "east": {"uv": [1, 1, 15, 4], "texture": "#0"}, - "south": {"uv": [1, 1, 15, 4], "texture": "#0"}, - "west": {"uv": [1, 1, 15, 4], "texture": "#0"} - } - }, - { - "name": "wn", - "from": [1, 4, 1], - "to": [4, 12, 4], - "faces": { - "north": {"uv": [12, 4, 15, 12], "texture": "#0"}, - "west": {"uv": [1, 4, 4, 12], "texture": "#0"} - } - }, - { - "name": "ne", - "from": [12, 4, 1], - "to": [15, 12, 4], - "faces": { - "north": {"uv": [1, 4, 4, 12], "texture": "#0"}, - "east": {"uv": [12, 4, 15, 12], "texture": "#0"} - } - }, - { - "name": "es", - "from": [12, 4, 12], - "to": [15, 12, 15], - "faces": { - "east": {"uv": [1, 4, 4, 12], "texture": "#0"}, - "south": {"uv": [12, 4, 15, 12], "texture": "#0"} - } - }, - { - "name": "sw", - "from": [1, 4, 12], - "to": [4, 12, 15], - "faces": { - "south": {"uv": [1, 4, 4, 12], "texture": "#0"}, - "west": {"uv": [12, 4, 15, 12], "texture": "#0"} - } - } - ], - "groups": [ - { - "name": "frame", - "origin": [0, 0, 0], - "color": 0, - "nbt": "{}", - "armAnimationEnabled": false, - "children": [0, 1, 2, 3] - }, - { - "name": "plates", - "origin": [0, 0, 0], - "color": 0, - "nbt": "{}", - "armAnimationEnabled": false, - "children": [4, 5] - }, - { - "name": "connections", - "origin": [0, 0, 0], - "color": 0, - "nbt": "{}", - "armAnimationEnabled": false, - "children": [6, 7, 8, 9] - }, - { - "name": "group", - "origin": [0, 0, 0], - "color": 0, - "nbt": "{}", - "armAnimationEnabled": false, - "children": [10, 11, 12, 13, 14, 15] - } - ] -} \ No newline at end of file + "down": "cccbridge:block/source_target_block_vertical", + "east": "cccbridge:block/target_block_horizontal", + "north": "cccbridge:block/target_block_horizontal", + "particle": "cccbridge:block/target_block_horizontal", + "south": "cccbridge:block/target_block_horizontal", + "up": "cccbridge:block/source_target_block_vertical", + "west": "cccbridge:block/target_block_horizontal" + } + } \ No newline at end of file diff --git a/forge/src/main/resources/assets/cccbridge/models/entity/animatronic.bbmodel b/forge/src/main/resources/assets/cccbridge/models/entity/animatronic.bbmodel new file mode 100644 index 0000000..0536de5 --- /dev/null +++ b/forge/src/main/resources/assets/cccbridge/models/entity/animatronic.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.5","model_format":"modded_entity","box_uv":true},"name":"animatronic","model_identifier":"animatronic","modded_entity_version":"1.17","modded_entity_flip_y":true,"visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"unhandled_root_fields":{},"resolution":{"width":64,"height":64},"elements":[{"name":"head","box_uv":true,"rescale":false,"locked":false,"from":[-5,19,-7.500000000000002],"to":[5,29,2.5000000000000004],"autouv":0,"color":0,"origin":[0,6,-2.4999999999999996],"faces":{"north":{"uv":[10.000000000000002,10.000000000000002,20,20],"texture":0},"east":{"uv":[0,10.000000000000002,10.000000000000002,20],"texture":0},"south":{"uv":[30.000000000000004,10.000000000000002,40,20],"texture":0},"west":{"uv":[20,10.000000000000002,30,20],"texture":0},"up":{"uv":[20,10.000000000000002,10,0],"texture":0},"down":{"uv":[30,0,20,10.000000000000002],"texture":0}},"type":"cube","uuid":"983326be-c52f-6d62-e8f9-2fc169cb7792"},{"name":"body","box_uv":true,"rescale":false,"locked":false,"from":[-3,10,-4.500000000000002],"to":[3,18,-0.5],"autouv":0,"color":9,"origin":[0,6,-2.4999999999999996],"uv_offset":[0,20],"faces":{"north":{"uv":[4.000000000000002,24,10.000000000000002,32],"texture":0},"east":{"uv":[0,24,4.000000000000002,32],"texture":0},"south":{"uv":[14.000000000000004,24,20.000000000000004,32],"texture":0},"west":{"uv":[10.000000000000002,24,14.000000000000004,32],"texture":0},"up":{"uv":[10.000000000000002,24,4.000000000000002,20],"texture":0},"down":{"uv":[16,20,10,24],"texture":0}},"type":"cube","uuid":"53b35782-90ec-ae42-69f9-03af3c6eee02"},{"name":"shoulder","box_uv":true,"rescale":false,"locked":false,"from":[-6,15.5,-2.9999999999999996],"to":[6,16.5,-1.9999999999999996],"autouv":0,"color":4,"origin":[0,6,-2.4999999999999996],"uv_offset":[26,20],"faces":{"north":{"uv":[27,21,39,22],"texture":0},"east":{"uv":[26,21,27,22],"texture":0},"south":{"uv":[40,21,52,22],"texture":0},"west":{"uv":[39,21,40,22],"texture":0},"up":{"uv":[39,21,27,20],"texture":0},"down":{"uv":[51,20,39,21],"texture":0}},"type":"cube","uuid":"68f5c928-414f-4de7-09b2-46ea4d076351"},{"name":"right","box_uv":true,"rescale":false,"locked":false,"from":[5,6,-3.4999999999999996],"to":[7,18,-1.4999999999999996],"autouv":0,"color":4,"origin":[0,6,-2.4999999999999996],"uv_offset":[0,32],"faces":{"north":{"uv":[2,34,4,46],"texture":0},"east":{"uv":[0,34,2,46],"texture":0},"south":{"uv":[6,34,8,46],"texture":0},"west":{"uv":[4,34,6,46],"texture":0},"up":{"uv":[4,34,2,32],"texture":0},"down":{"uv":[6,32,4,34],"texture":0}},"type":"cube","uuid":"d43891b0-0785-c032-0498-f7f5719adaf6"},{"name":"left","box_uv":true,"rescale":false,"locked":false,"from":[-7,6,-3.4999999999999996],"to":[-5,18,-1.4999999999999996],"autouv":0,"color":4,"origin":[0,6,-2.4999999999999996],"uv_offset":[20,20],"faces":{"north":{"uv":[22,22,24,34],"texture":0},"east":{"uv":[20,22,22,34],"texture":0},"south":{"uv":[26,22,28,34],"texture":0},"west":{"uv":[24,22,26,34],"texture":0},"up":{"uv":[24,22,22,20],"texture":0},"down":{"uv":[26,20,24,22],"texture":0}},"type":"cube","uuid":"3545fcdc-da31-0c11-27f1-bd071718f1c2"},{"name":"neck","box_uv":true,"rescale":false,"locked":false,"from":[-1,18,-3.4999999999999996],"to":[1,20,-1.4999999999999996],"autouv":0,"color":4,"origin":[0,6,-2.4999999999999996],"uv_offset":[8,32],"faces":{"north":{"uv":[10,34,12,36],"texture":0},"east":{"uv":[8,34,10,36],"texture":0},"south":{"uv":[14,34,16,36],"texture":0},"west":{"uv":[12,34,14,36],"texture":0},"up":{"uv":[12,34,10,32],"texture":0},"down":{"uv":[14,32,12,34],"texture":0}},"type":"cube","uuid":"58c87944-0655-3c67-4c79-e25cf0ecc2aa"}],"outliner":[{"name":"root","origin":[0,14,0],"color":0,"uuid":"138ba760-ee55-83ad-2ae1-86dc0f45a078","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":[{"name":"head","origin":[0,20,-2.4999999999999996],"color":0,"uuid":"b63c1834-bb3b-e14d-d441-411f4061f7bd","export":true,"mirror_uv":false,"isOpen":false,"locked":false,"visibility":true,"autouv":0,"children":["983326be-c52f-6d62-e8f9-2fc169cb7792"]},"58c87944-0655-3c67-4c79-e25cf0ecc2aa","53b35782-90ec-ae42-69f9-03af3c6eee02","68f5c928-414f-4de7-09b2-46ea4d076351",{"name":"rightarm","origin":[6,16,-2.4999999999999996],"color":0,"uuid":"b96240a4-e136-4252-e14e-8a9e40a7912a","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["d43891b0-0785-c032-0498-f7f5719adaf6"]},{"name":"leftarm","origin":[-6,16,-2.4999999999999996],"color":0,"uuid":"651fbc5b-c499-0db1-89a2-b7c8b2a63a0d","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"children":["3545fcdc-da31-0c11-27f1-bd071718f1c2"]}]}],"textures":[{"path":"C:\\Users\\Sammy\\Documents\\GitHub\\cccbridge\\forge\\src\\main\\resources\\assets\\cccbridge\\textures\\entity\\animatronic\\body.png","name":"body.png","folder":"block","namespace":"","id":"0","particle":false,"render_mode":"default","render_sides":"auto","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"mode":"bitmap","saved":true,"uuid":"ce0d31b2-e9e8-fdac-090c-6229a474c760","relative_path":"../../../textures/entity/animatronic/body.png","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAABJZJREFUeF7tWU1IVFEUvlNmKqipOWr0RxJm1sIiN4kgYgSRi1ZREC1bBCIU7SLaBVEIFbSJaBFtatHPKtpYbYxwUaYShmSgjqmlMFlJE9+VM5y5c9+8e8eZ4c2bdzfPO++89875znfO+d4zJAxX2+GTMZgWl22WV1TX7pTH+dkJefwT/Z5wJze7wbePQoaPzqqZsRMAAEEh8H8VvxOcWre4UQJBIJjY5R0A7d3nY7rgCQkCgdihgqTavXl5yxj8bFLA2AkAsKmxQfpSX1Qvplem40dy8Mf4lPyT7Jwch13eAdBz6nqMZ1UHAliA5ZR9zoKnDy8Yg+8JBqgA6JzyNQC8BJzKwNclwJugE/1pJJo0y7zrAQU/Bn0rhDIdGDVHNyVoapdtwRTKNLVJLueLYgzpFB41OQRjq/BUJcjv5XQ/taliH5lfkPI6281SAsCVm67D24w3rgRNFKMKEN/nQjGGdAJHdVwVONxJlS2kBJ2CJxZwxaiCkEvFqAWACx3u8OXhBXGwcUUcD1ckCMFnkUXxfrxIXG2pSpDCqQLzimSOl4CTs3CUSmBPU6sMEC9CfOFarNGxoZQvQ/QMXUk5lV5OegB1bB0Ia22CBBTdW3e/VMoy6wCkMwbD1VVxFvCObfNBxHRc5kQHkDM0wnB0+9RF5UC0t/0k5hkhpL7W7qjbEivZUCmW//4U/BguLxeRpSWhHse+jWjf6z/374t9/TIntu+qEXUdx0RF67XQq96GGPZY+G1m4IWAzc9lISpLhDh09ow8R7/jbxv7rv4p628MSRc0bW2OqcHTXgfC65FB7UMXhy7Jj6jv7j+QQSBQ24AoOQQi3Y8Ao98BGBaeYQtCkvNrZQAyj+zyBRAo+N29H62zpLI0k/uMMyDvAADldYiOtvVIcXN67okV4M8vro/bExOIojjhOQZQzcM5NL2WurCYjf4SA82dIvq4TxzY1hlvfOgFZId+oFtXjkzGG5d6Pp0atUI/DeNQKgAmbvSJo+3OANSWlUqw6Ijn3zsXTWp4Hz6tNsD9e2u8yQAOHDHgZnG3pD/tMQL5IgaoIPR1TMqRxjs+XQcgTty1H1VpJNb4EskAGm+4CgFjDc9E5PF2R7m4M1Ya3/NR6MQAejr1AE9PAWqCamAAgMAAzbkIQoBODND1ACoBMMN2ThunMk3DBAYgKMoqAqbsAwAsVQnqGMABIPHDffMkAGptIzBiAA9e1wNU4AEALZKxtPfkFCDnoNPpb2hyaHclOFUvOL4DqD2A9tADntMB5By0u4umNgZAp/vxHE8CgMzztzA4ymu3q3/1X94plqe0vZuz6vmkV1TKFAHhewB0Ly9e1u62GXazD3EAeOB0odealltAtudlCVAP4IqNlUBe17gbIAk9QDX24tx2C8j2fAIA6vgqGAAINXxr48uL2t02w272kgFq4HRRwQCgokQaviBKAGNQ1/zwG4AoiDHIM47A+Vj02uurW03bnvf1jDcBIwDABCU/2wQM8HN2TWILGGCCkp9tAgb4ObsmsQUMMEHJzzYBA/ycXZPYAgaYoORnm4ABfs6uSWwFz4D/tfP8bichFEQAAAAASUVORK5CYII="}]} \ No newline at end of file diff --git a/forge/src/main/resources/assets/cccbridge/models/item/animatronic_block.json b/forge/src/main/resources/assets/cccbridge/models/item/animatronic_block.json new file mode 100644 index 0000000..b29148c --- /dev/null +++ b/forge/src/main/resources/assets/cccbridge/models/item/animatronic_block.json @@ -0,0 +1,168 @@ +{ + "credit": "Made with Blockbench", + "parent": "cccbridge:block/animatronic_block", + "texture_size": [64, 64], + "textures": { + "0": "cccbridge:block/animatronic_block", + "1": "cccbridge:entity/animatronic/body", + "2": "cccbridge:entity/animatronic/face_happy", + "particle": "cccbridge:block/animatronic_block" + }, + "elements": [ + { + "name": "base", + "from": [7.5, 2, 7.5], + "to": [8.5, 10, 8.5], + "faces": { + "north": {"uv": [6, 7, 6.5, 11], "texture": "#0"}, + "east": {"uv": [6.5, 7, 7, 11], "texture": "#0"}, + "south": {"uv": [7, 7, 7.5, 11], "texture": "#0"}, + "west": {"uv": [7.5, 7, 8, 11], "texture": "#0"}, + "up": {"uv": [8.5, 4.5, 8, 4], "texture": "#0"}, + "down": {"uv": [8.5, 4.5, 8, 5], "texture": "#0"} + } + }, + { + "name": "stick", + "from": [2, 0, 2], + "to": [14, 2, 14], + "faces": { + "north": {"uv": [6, 0, 12, 1], "texture": "#0"}, + "east": {"uv": [6, 1, 12, 2], "texture": "#0"}, + "south": {"uv": [6, 2, 12, 3], "texture": "#0"}, + "west": {"uv": [6, 3, 12, 4], "texture": "#0"}, + "up": {"uv": [6, 6, 0, 0], "texture": "#0"}, + "down": {"uv": [6, 6, 0, 12], "texture": "#0"} + } + }, + { + "name": "head", + "from": [3, 14, 0.5], + "to": [13, 24, 10.5], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 14, 5.5]}, + "faces": { + "north": {"uv": [5, 2.5, 7.5, 5], "texture": "#1"}, + "east": {"uv": [2.5, 2.5, 5, 5], "texture": "#1"}, + "south": {"uv": [0, 2.5, 2.5, 5], "texture": "#1"}, + "west": {"uv": [7.5, 2.5, 10, 5], "texture": "#1"}, + "up": {"uv": [5, 2.5, 2.5, 0], "rotation": 90, "texture": "#1"}, + "down": {"uv": [7.5, 0, 5, 2.5], "rotation": 270, "texture": "#1"} + } + }, + { + "name": "face", + "from": [13.23223, 14, 0.45406], + "to": [13.23223, 24, 10.45406], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 14, 5.5]}, + "faces": { + "east": {"uv": [2.5, 2.5, 5, 5], "texture": "#2"} + } + }, + { + "name": "neck", + "from": [7, 13, 4.5], + "to": [9, 15, 6.5], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 1, -2.5]}, + "faces": { + "north": {"uv": [2.5, 8.5, 3, 9], "texture": "#1"}, + "east": {"uv": [2, 8.5, 2.5, 9], "texture": "#1"}, + "south": {"uv": [3.5, 8.5, 4, 9], "texture": "#1"}, + "west": {"uv": [3, 8.5, 3.5, 9], "texture": "#1"}, + "up": {"uv": [3, 8.5, 2.5, 8], "texture": "#1"}, + "down": {"uv": [3.5, 8, 3, 8.5], "texture": "#1"} + } + }, + { + "name": "body", + "from": [5, 5, 3.5], + "to": [11, 13, 7.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 7.5]}, + "faces": { + "north": {"uv": [1, 6, 2.5, 8], "texture": "#1"}, + "east": {"uv": [0, 6, 1, 8], "texture": "#1"}, + "south": {"uv": [3.5, 6, 5, 8], "texture": "#1"}, + "west": {"uv": [2.5, 6, 3.5, 8], "texture": "#1"}, + "up": {"uv": [2.5, 6, 1, 5], "texture": "#1"}, + "down": {"uv": [4, 5, 2.5, 6], "texture": "#1"} + } + }, + { + "name": "shoulder", + "from": [2, 10.5, 5], + "to": [14, 11.5, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 1, -2.5]}, + "faces": { + "north": {"uv": [6.75, 5.25, 9.75, 5.5], "texture": "#1"}, + "east": {"uv": [6.5, 5.25, 6.75, 5.5], "texture": "#1"}, + "south": {"uv": [10, 5.25, 13, 5.5], "texture": "#1"}, + "west": {"uv": [9.75, 5.25, 10, 5.5], "texture": "#1"}, + "up": {"uv": [9.75, 5.25, 6.75, 5], "texture": "#1"}, + "down": {"uv": [12.75, 5, 9.75, 5.25], "texture": "#1"} + } + }, + { + "name": "right", + "from": [13, 1, 4.5], + "to": [15, 13, 6.5], + "rotation": {"angle": 22.5, "axis": "z", "origin": [13, 11, 5.5]}, + "faces": { + "north": {"uv": [0.5, 8.5, 1, 11.5], "texture": "#1"}, + "east": {"uv": [0, 8.5, 0.5, 11.5], "texture": "#1"}, + "south": {"uv": [1.5, 8.5, 2, 11.5], "texture": "#1"}, + "west": {"uv": [1, 8.5, 1.5, 11.5], "texture": "#1"}, + "up": {"uv": [1, 8.5, 0.5, 8], "texture": "#1"}, + "down": {"uv": [1.5, 8, 1, 8.5], "texture": "#1"} + } + }, + { + "name": "left", + "from": [1, 1, 4.5], + "to": [3, 13, 6.5], + "rotation": {"angle": 45, "axis": "x", "origin": [3, 11, 5.5]}, + "faces": { + "north": {"uv": [5.5, 5.5, 6, 8.5], "texture": "#1"}, + "east": {"uv": [5, 5.5, 5.5, 8.5], "texture": "#1"}, + "south": {"uv": [6.5, 5.5, 7, 8.5], "texture": "#1"}, + "west": {"uv": [6, 5.5, 6.5, 8.5], "texture": "#1"}, + "up": {"uv": [6, 5.5, 5.5, 5], "texture": "#1"}, + "down": {"uv": [6.5, 5, 6, 5.5], "texture": "#1"} + } + } + ], + "groups": [ + { + "name": "VoxelShapes", + "origin": [0, 0, 0], + "color": 0, + "children": [0, 1] + }, + { + "name": "root", + "origin": [0, 14, 0], + "color": 0, + "children": [ + { + "name": "head", + "origin": [0, 20, -2.5], + "color": 0, + "children": [2, 3] + }, + 4, + 5, + 6, + { + "name": "rightarm", + "origin": [6, 16, -2.5], + "color": 0, + "children": [7] + }, + { + "name": "leftarm", + "origin": [-6, 16, -2.5], + "color": 0, + "children": [8] + } + ] + } + ] +} \ No newline at end of file diff --git a/forge/src/main/resources/assets/cccbridge/textures/block/animatronic_block.png b/forge/src/main/resources/assets/cccbridge/textures/block/animatronic_block.png new file mode 100644 index 0000000000000000000000000000000000000000..0f49242df72cd6c7d61cd883bbd95de4863f34cf GIT binary patch literal 637 zcmV-@0)qXCP)18l^ErS1hD5>K$XMW1JY~mQ(*F6)AQ1n3W|B_8 zt2d0`zkYlLRy}^1u7V4xqE%IaB|uy+`Wm3$fBd)t`4h*;-2K#4S&H9sZAOEY;Pf6# z1%y!_YHE3Xq?*HZTfByScWrf&JCwmZ>Y@Tnvju8 znt(#7tg53|DU|@AvIjVAwix<8PQ^2{0l*+x?H`R=8nT5_8Oybqw4V?%Iz*UpzhIjz z(~w(+GxC9hQ}N7fHJn}Eyc=+r>;ZC%Xv|`;-cCn@^sRMUb#F~TA30q_uoj#I-nHC` z1OW0U4o<~UPN(9iRv2yhy?f8&$jTpH)M^`tkqA!&s#i&#U6B(*PDC9-$Z}gm!Tca? z$R;^0*ETkw_eOAU1oYDDf#dc;T2LsJH|9U-NERGSgs>J~(ryU*-vi*S0%WjLT@8gzx#1Tgv@xS;7 XKB`XztQWwu00000NkvXXu0mjf6Y(k3 literal 0 HcmV?d00001 diff --git a/forge/src/main/resources/assets/cccbridge/textures/block/redrouter/background.png b/forge/src/main/resources/assets/cccbridge/textures/block/redrouter/background.png index 0190758c46d6695b8daa57587ee7f94ee0ab49b4..5fd285282c84b21f7fa00064c24aabc60e2f1f83 100644 GIT binary patch delta 316 zcmeyu_=RbLW4(8PPl&6Jk55cYjGCI7s;a7nhDJn0gqD_;rlzKolarpFp02L0zP`S? zy85wW$3j9vbaZr-l#~hz3beJgv$L~RR8*Rpnv|85Yiep37#L>#ZGQx$Buj$)g8$&xj6vlgD)m3Qy| z66d#@QtXc%IIXO-bw7{87M&+QnV6W^8MbqFq^d0{e=B#*r26I*8G##Dj`VYW%X3(~ zQkrkM;GQkI((%Xm5~s~EDXc14?C>O_R%PP?ixnMO&n8ybn7&S(;qmUe!L3e{cu$Mx sua>8U#sB@f@86|Y9-4dQ9!$Sxx0IQ;BF0ncG0zopr0L5U0(EtDd delta 187 zcmeyu^o4PPW4%OxPl#)Ba&kpQMOavvmX=mtUf!fhle)XR85kIZ@>fa$DUOmLzu^B6 zz;Lg5ZzNERv%n*=n1O-s5C}7hYIrpO1p_@@978mMd;1;v4k&Q21hV}5|M*bZ>SZ4v zNK8(>!|e5^K_Jt2l7ES+>65vev-CHfy=rpuFwe2jWP|1`3F8eS=Xm~HxzW3Kwg2Nk g-WD5bmPfeQ7`m{8%qt9B4>X;@)78&qol`;+0H2Ub$N&HU diff --git a/forge/src/main/resources/assets/cccbridge/textures/block/redrouter/connector.png b/forge/src/main/resources/assets/cccbridge/textures/block/redrouter/connector.png deleted file mode 100644 index e03a70f471a94c14512326944437a27187374597..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 217 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|^0G|-of`WpSloTy3EgNfVGcz-wa7@~ib|A%8666>B9|RaS?_aVXD8gCb z5n0T@z;_sg8IR|$NC67kdAc};XavvgbrfPSU||;g_y6f4W47&O{Cw7(6LjlXE#FK@ z@Z7}^@^sl}4v`s$lov1Z6W%iaSenoD7dG6RnJt&H=zG2tj{us);OXk;vd$@?2>?!% BKwAI+ diff --git a/forge/src/main/resources/assets/cccbridge/textures/block/redrouter/face/0.png b/forge/src/main/resources/assets/cccbridge/textures/block/redrouter/face/0.png new file mode 100644 index 0000000000000000000000000000000000000000..1659e4afe72509e208617e81a152e89bf8802bf5 GIT binary patch literal 370 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|y0G|+7A0MBXm>8qTrx6hm<_Z5Tll~jW{5FmI>*VBQmHgi<{-0sgPwSNb zwrT%OV*mXA|34%o#3J#(QS`5Zf`aVq?53usnwlD*VGAWoCIcynk|4iepfYTL;jFOU zE1(+A0*}aI1_r+UAk1jN8ms~o?DuqW4ABUV?GF@cR^V|lygNZ?wcy2~|Fg~9tmeM_ z!0FX{OPRw{t_}dGdIf zA8GRhnfCNbL~MThK*&wG-Yi0Q)fE|;kb~Aoa`Z}C0yi>niMCwy4_e>aI`!P{UzW2j mSN~ZmKk?eS>W28L{|td`JbM`L&Cmimjlt8^&t;ucLK6Vi1Cdq$ literal 0 HcmV?d00001 diff --git a/forge/src/main/resources/assets/cccbridge/textures/block/redrouter/face/1.png b/forge/src/main/resources/assets/cccbridge/textures/block/redrouter/face/1.png index 1352829ce37143b5c29309530aa25ef8479ee1fe..c4bc77faafa0039d6dc99e98fa12115aead3e389 100644 GIT binary patch delta 321 zcmdnS_>*aZW4&L1Pl&6Jk55cYjGCI7s;a7nhDJn0gqD_;rlzKolarpFp02L0zP`S? zy1KTuwvLWYNJz;4|NoVglnM$8va_>QR8$ld6`Puxl$DihYHAo581_cGumUNmk|4ie zpi1n3K}3n+76U^)180FpWHAE+-+mBgv|tTZ0qX7Zba4#P2#)P<tcLs3vRC=N5lFi@L&?2#k%P>~Wg223R`KPXdFNlX?9BOUlqIlt yu8Yg;<=dxN-hBD~{Kx5W?OuiUP4lb%GwGe+J8^jb8+M@67(8A5T-G@yGywpUMTL+6 delta 124 zcmey#w2g6sV<}sJPl)UP|Nj{n7(x$St^-m`B|(0{{~4ZcH}C@TI14-?iy0XB4uUY_ zj)~cCfr8qeE{-7@!O00O%qiRro+)a~6PSco9O6(jQiy6`)MH-gShGV!N+Gggq98*< X3B#u+yrnOI+88`t{an^LB{Ts5-ti|J diff --git a/forge/src/main/resources/assets/cccbridge/textures/block/redrouter/face/10.png b/forge/src/main/resources/assets/cccbridge/textures/block/redrouter/face/10.png index 6cc6c9fd2786bdec107dcaf0f0d28b1202e3bd10..5af035dba9dc40b275f1952595cade0edbe0be7a 100644 GIT binary patch delta 326 zcmdnW_>XCVW4&L1Pl&6Jk55cYjGCI7s;a7nhDJn0gqD_;rlzKolarpFp02L0zP`S? zy88eB|8;b9LPA1RR8*9dlnM$8w6(Rfv$GWy6`Puxl$DihYHAo57<#JxzXK_$k|4ie zpcd?aK}3n+76U^)180FpWHAE+-+mBgv|tTZ0qULX>Ealo5gglpTj-DikIQA%ys49} zUF!by-#)9s>Rd&I;%QGckDrTKl@2SMGZ#?EU?_Oqs9~*~75eU>VD(wePIjiP2F4TJ zbgmw_EU_wS_4gl~UrT4bTs&)I!zvT+z{gR&JVnOpS`%$=*c-~}%_zJx?|14M1M8X` z<5Qgx$0rG<$N%-&tQP%MFI~M delta 123 zcmeyzw3Ts!V+mV;Pl)UP|Nj{n7(x$St^-m`B|(0{{~4ZcH}C@TI14-?iy0XB4uCLY z*0oMfprDqgi(`mJaB_kRbBJ(5m(mRhrV|Wm2N=>FG!+^)EfCqo&?d&B5ZN$MkfCt_ W!$+%&uhs)~F?hQAxvX481k3}PM_de{ma(o z(TY^hB@G8GMLd-vH_U3(^)^s_e`~S&jn_dg?mIU+%~*Ow#PVHQ$ci_Kj-eL}Y~=k? z>hj(iaTVE>tdaifvSp)^;PZ&TKCP42{i}+ve|a`|^|ia%u&4qQzsO(GGEj?@Qim&+~Mb}DZCM;%?t|- o7&4Enlw{H1JJM*@(8$QJ=^dy1+0BbpfaWrIy85}Sb4q9e0G=-}R{#J2 diff --git a/forge/src/main/resources/assets/cccbridge/textures/block/redrouter/face/12.png b/forge/src/main/resources/assets/cccbridge/textures/block/redrouter/face/12.png index 8e34b436c19e577e6037ce0d06d11af4de47203d..f2d77e85cbf25d420dad3c84029e54557b4dc891 100644 GIT binary patch delta 318 zcmX@W_>F0TW4(8PPl&6Jk55cYjGCI7s;a7nhDJn0gqD_;rlzKolarpFp02L$|NsB> z_4U=&)pc}qLPA1RR8*9dlnM$8w6(Rfv$LC;nv|85Yiep37#Loh+ZYR^Buj$)f`PiQ z0tQACuI)fYoCO~Bk;M!QeEUI|(SkKt1t{9@>Ealo5ggkeD0EnXgZ1R(Nn(pUeJ)k~ zpDeaz?zxh`6X&ukZMEN}FiWjyUsJ;o&I7p|Ns?zeR^7eqyx3&2>SS)F*`kKwO{PLO z&IF0?{{F*rlIyfbx@i+56wd^iXup>0Ts-@xFcr&}|H!u6{1-oD!MBW(&XObHAktzHY5Rv57Z diff --git a/forge/src/main/resources/assets/cccbridge/textures/block/redrouter/face/13.png b/forge/src/main/resources/assets/cccbridge/textures/block/redrouter/face/13.png index 778bae270c2b5c0015f55ee87ba9c1f03da19e73..714be72c91f5cb2bee1f1ff3a61bdf653a2adfa1 100644 GIT binary patch delta 318 zcmdnT_>F0TW4(8PPl&6Jk55cYjGCI7s;a7nhDJn0gqD_;rlzKolarpFp02L0zP`S? zy88eB|8;b9LPA26l#~hz3bM1awY9ZXR8*Rpnv|85Yiep37#MzKr<(yO$&w(yV4!-e zfPvA3YdcU8XMsn3WHAE+-+mBgv|tTZ0gCo}x;Tbt1jqI_@*Ps(aoNpmomwLOV#@#j zLF)}RA5m8M^0i9y(!VQ>CrmiMGBdSEFx+9Au)^7RPuBMj9*eK3ayK5(Su^XZ&&Hk2 z4$Ybe&q>a^uzOk0t3F<_#p^WHy?0x4x%+8yIUdc);(q_9#{BBL4>s?O56ixFNYa^F v&~vqa&#^OC@6Z3NzqV}ZqxXDzTfedH*v~t!qV+b=p$rV3u6{1-oD!M<&l!jJ delta 132 zcmeyyw2yIuV=Y^NPl)UP|Nj{n7(x$St^-m`B|(0{{~4ZcH}C@TI14-?iy0XB4uCLY z*0oMfprEm*i(`mJaB_kR^A(|lh7Ko<84Mf;Ssg?|L|qtW@(MOEsswVha64RShzwv< eaoEJ5tjti^&hYS_N;DHtJA*(l&goNno>MAKI6%-U?XJ>0`YpbZJC@Ly8H8m+KE7#Q201f3^WvmXQ zBuaw(f`J;b0fw`}darE(N6$*n8Xe&65HP-t}dt8;};lS+M&!xo(-vlFdj%|cx18VkkL&iuaiZ4jWiW9 zLXylH?#i$oD#+-cXRyk1e$ny16FCnaJkIRnT0dK9Ra4v7Qs5cL$o#1!i<(Z=zdbb|vA_h-aKbLh*2~7YIse^<7 delta 134 zcmaFCw1shkBnKM<1B3kM|A`Y76^c0vJR*x382Ao=Fk{xWPEMetr>Bc!h=qUhpa1{u znN=G&y(aUn$YVHRZ_vZH;S}#4@efCtcCjc=abq<3$mHhW$QV{Qi%sdo`4bY_3o>;C kSTm&9To}1{6A~C0Ud$EYPhe141T>Vv)78&qol`;+06^O*uK)l5 diff --git a/forge/src/main/resources/assets/cccbridge/textures/block/redrouter/face/15.png b/forge/src/main/resources/assets/cccbridge/textures/block/redrouter/face/15.png index 987ce11235913c79ecc05bbd69908a51f7215436..04718aae52e11be015613f04f48818cf8d7a1d3b 100644 GIT binary patch delta 314 zcmX@f_=#zPW4(8PPl&6Jk55cYjGCI7s;a7nhDJn0#Q*>QwY0P}H8q`_ob>ec^!4@C z)zw2nLUeR=bai!=l#~hz3beJgv$L~RR8*Rpnv|85Yiep37#PA?oYw#;$&w(yV4xvb z0Ry86*LI*H&H|76$YKTtzWpG~Xu%q+0u=4`ba4#P2#)RV-77r9eyoc>tmbznNr{=Id(lbW-R5c^ z+HUl$O^AH_FvX-yW3!xP>N)d#krnf1-<=d0$P=<=kOBM1Mi04X(USi(WYwEHsTi rbH_D7K&WDQ#Fj*Mhxi%F?I&XLau`mBxAFZ18PDM9>gTe~DWM4fJS8&L diff --git a/forge/src/main/resources/assets/cccbridge/textures/block/redrouter/face/16.png b/forge/src/main/resources/assets/cccbridge/textures/block/redrouter/face/16.png index 80a0ba3d9d1e1328f05766ff7d07d54ff9ed6552..b1f477b2ee7b49665dd84f482b9a0b0de808cf5b 100644 GIT binary patch delta 321 zcmdnP_>*aZW4&L1Pl&6Jk55cYjGCI7s;a7nhDJn0gqD_;rlzKolarpFp02L0zP`S? zy88eB|FyNXLqbAybaa%IlnM$8va_=l6%|!fRGONal$DihYHAo57<%?DaRO3OB|(0{ zKrPq-gNPEtEe3{q2F?PH$YKTtzWpG~Xu%q+0@T~*>Ealo5ggmk$ahGA$91>A?z+Xd zS>_h~?~Y37?v!_WahjRy>i!Z36W=F085kRx8*VckF%r7Cs)~PeU(_@gK8|f{lT!}0 zt(DxMp;r4#Qr_`Q%FWxidU+4&>{d&yHBml%_olw7SPDC<)yK?N`;LAM)m!Y|7Rdji y!nLsHTK|^fPuK3x|E$0D%ac3bWd8)c7Qg1t`!sRJYZIW;7(8A5T-G@yGywo2u7yJY delta 130 zcmey#w1;tmV>MfVPl)UP|Nj{n7(x$St^-m`B|(0{{~4ZcH}C@TI14-?iy0XB4uCLY z*0oMfprE0ri(`mJaB_kR^A#b6B#T3O2TnBjG;yRb2s%t^p6KvZgDHU_vB^`QHDMu> d6H`wQL(NNu=X`8CZGoB@JYD@<);T3K0RaCEDaQZ+ diff --git a/forge/src/main/resources/assets/cccbridge/textures/block/redrouter/face/2.png b/forge/src/main/resources/assets/cccbridge/textures/block/redrouter/face/2.png index 952f152d8d6eef0106c364ae665e3efbb65edee9..461eef455747d4dc2e8481713c9fa7006e29e7f5 100644 GIT binary patch delta 331 zcmX@Y*vve^vEDDhC&bmq$0sHxMompkRaI3(Ln9(0LQ6~Q|NsA*nwm~dPI`KJ`uh6n z>gw9s+B!NqAt50uDk@4!O1iqb1qB7!+1ZMUicL*T%F4<$H8l(j3^Q))^#CcUk|4ie zpdr`+gNPEtEe3{q2F?PH$YKTtzWpG~Xu%q+0y4tW#W6%9IJQ4fs9Ax>KEgP`v7Rl!C&cyt|NjgO455cE*8wS}k|4j}{|ryJ8+ZYEoCO|{#S9F52SAuH z>slu#P|(uT#W6%9I61+E`3RSR!jXeI3XF>qb2K}WEFap^-R m4n_^>NCqAcv4j*BhPr5m_v#5@P zVc*WBk`-=kcAJ0otbedwCcP@uTr6N}nr3#~>_7*S6KkiPu{gI}KJ(fW|N6b__g`5X>~;J51NXJ^$3=M0UVU>V3g|!vPgg&ebxsLQ E00DH0od5s; delta 126 zcmey*w1aViV>w%ZPl)UP|Nj{n7(x$St^-m`B|(0{{~4ZcH}C@TI14-?iy0XB4uCLY z*0oMfprEd&i(`mJaB_kR^Aj$E1`Pwo;Kp+TPgg&ebxsLQ0Pt`o2><{9 diff --git a/forge/src/main/resources/assets/cccbridge/textures/block/redrouter/face/4.png b/forge/src/main/resources/assets/cccbridge/textures/block/redrouter/face/4.png index b34f4890f743f2c4c08755c409fd82f76518e9fe..30b66b41cd748bb3e94c07aaf7cbc9c1a94214c3 100644 GIT binary patch delta 338 zcmdnU_>XCVBnLAC1A~SxfAB;_g?hgLpAc6cAD@_*7&SFDRaI3D4ULG12rVrwO-)TF zCnr5UJzZU0eSLj(b@l)M|A&NxsHmtYDJkjb=oAzbXlrX{XJ;!aDmFDWDJv`2)YJft z4!L>x36PR13GxdDYQYW|M3fkAF)-9Ka29w(7BevL?FV5-3)Wy2px()zE{-7@!Lj|l ze1{ZxT6QnK7sLKLvG~;Q{VP~a)Z`Qw#;?1s^wgiXgQt1NK8J<{j0e^-2bT4&2;JF! zvg)j57jxsXDKE?gy-O2hgB65#R`$<7;Bn5{c9o@Az|`HY!M9f_H`}Q3o2qWIZx(*s zY-a6wysFH7Za{m9`_2T@Yt;o`udd&b{pITX_2=VH-JDWfYyKfvGylvD-ixQEb4~!d OkHOQ`&t;ucLK6Vd#)$U- delta 131 zcmeyzw2^UwBnKM<1B3kM|A`Y76$&^DJR*x382Ao=Fk{xWPEMeto2QFoh=qUhpa1{u znN=G&y(aUvH8S2{5{zsR?6@e}aO45QZ0-cE4Hq?LIWkNazaW~F(bBk3oLfTCPebei hqgzDJGgdY>hP-M4@h=h&rUFf5@O1TaS?83{1OVfzDxv@Y diff --git a/forge/src/main/resources/assets/cccbridge/textures/block/redrouter/face/5.png b/forge/src/main/resources/assets/cccbridge/textures/block/redrouter/face/5.png index b35280768570c891e6b395309a513e0057dda6b3..b9dcb9bd5cf329373b778d1d0cb60a8a05fe7e0d 100644 GIT binary patch delta 338 zcmZ3<_>XCVBnLAC1A~SxfAB;_g?hgLpAc6cAD@_*7&SFDRaI3D4ULG12rVtG|NsAM zYHB(;IqB)?>FVn0>+7qlt7~g(>*(l&goLQ5s3<8Z6%-U?XJ;!aDmFDWDJv`2)YJft zescB2As{7H666;QGz2?f5K&^d#lTR{z**oCS>-KN?8?v^}?x6qLTE^`gc;|WazPbW* OAA_f>pUXO@geCw(O^8zopr094*4W&i*H diff --git a/forge/src/main/resources/assets/cccbridge/textures/block/redrouter/face/6.png b/forge/src/main/resources/assets/cccbridge/textures/block/redrouter/face/6.png index 48d9b32e5e8edfcdff5153f3f7979fe06afc196d..f8df71d127dcd1844456ba0c89729f96f122192b 100644 GIT binary patch delta 360 zcmV-u0hj*O1Cj)gK{cXKOjJcoOiWx{Tr?*qFd`y4EG#xDDL5)BIV&qzSXe$VFfbz{ zG9@K9Dk?lKE-@q|LPA23YApj)R8*0d9x!lla6d6IA`}$v?(RV|Giz&WEFK>4@bKs6 z=7NHPe0+QW000vp&Hw-a05)_|PE(QLB$4nDe*mG6PB8!g010qNS#tmY4!-~Z4!;37 z1ydvd006g1L_t(2Q(ceQ5`r)c0BhTT60B7U-qNUe;DL($|6h}$jx+94va=5fbAPmg zu}+6IdSw#5!80)b@rM))ERqQ0TTDmWa$7v*VVB%CqCi@uhPsN@hxsoU;&FT%B04NAHYq7MDk?cED?TtVFe4)}B_%g1Dm*SO zF(f3Bb}f;n9w0w4F(MQc?(XhEGczn69`Nw+=jP@B000!|ov;7^04-Kl6+H2gbPoneZ>9Dh154EY~w=gT<;WZ3QM=VQOsFo9%9YXpR_x zw{$vNv=`$VgW diff --git a/forge/src/main/resources/assets/cccbridge/textures/block/redrouter/face/7.png b/forge/src/main/resources/assets/cccbridge/textures/block/redrouter/face/7.png index fa74d68c90ad8f8f151ebac1556be3185c38b7ed..f4934d33616e9c64b007f0a3ac11c5049ab54f54 100644 GIT binary patch delta 337 zcmdnS_?KydBnLAC1A~SxfAB;_g?hgLpAc6cAD@_*7&SFDRaI3D4ULG12rVrwO-)TF zCnr5Uz5oCJ>+9>QtE=ni=!ArXsHmtYDJkjd>J}6fXlrX{XJ;!aDmFDWDJv`2)YJft zR_5+G1Ei!%g8YJkda(lr5haFO3=H)QoCO|{#S9F5`$3q|f;CtLsCSa5i(`mJaBTlW zp=Jf1=In&humH#B$A0gB!Sv#7-b4Ps9*aZBnLAC1A~SxfAB;_g?hgLpAc6cAD@_*7&SFDRaI3D4ULG12rVrwO-)TF zCnr5UJzZU0eSLj(b#-lRZ5;mLm&>e+mre;=5&Et^(A@F3mdK II;Vst0Pg&PFaQ7m delta 125 zcmey#w3=~(BnKM<1B3kM|A`Y76|y)BJR*x382Ao=Fk{xWPEMetgQtsQh=qUhpa1{u znN=G&y(aUz@k;QpDJ*Bs;cOE0dOXFsjM2xCqv1x&j|7KM{Ryleb~2XCVW4&L1Pl&6Jk55cYjGCI7s;a7nhDJn0gqD_;rlzKolarpFp02L0zP`S? zy88eB|8;b9LPA1RR8*9dlnM$8w6(Rfv$GWy6`Puxl$DihYHAo57<#JxzXK_$k|4ie zpcd?aK}3n+76U^)180FpWHAE+-+mBgv|tTZ0qULX>Ealo5ggkeD0E1H$K|rB-ZZAI zTf%n!cjXN@E;(KPQ^iS^mGv(jQf3|b#L8q*%87w_8GwCao^8*j8R*NNI~(-ycG+7}$Kmz*}`#rNZdl9FfK z+5-Js%&t`x^j$qa!}Qjx_20ivulh3O(mUBdL9f|&$nvhp-#X6VSRmldU|?ZUS4~9dt+nc+_`h7 zO`BF;Ue3V4;H4VZ2&DK+g8YL2qX330cV;XEN^ur=L>4nJ@ErtU#vK#0-vR}rJzX3_ zG=g)x1Nj;ZIGovwwN~8uzavWQ(u@_=@oyJz`Eg-UXP4Ms?ktb^ik^jB3$?XxsIYoZ z?4G-GhF;6gAA6S=JUgT?XXl5Pj}jQ&_3p?ON9pMq>+>W!?CIFSC{WA&%QkemG|(Of MPgg&ebxsLQ0O^%rBme*a delta 185 zcmbQm^oenTW4&mAPl#(qMn-FEYk7J3#EBC(Y}l}3#R>)n2E(_f%77GmNswRge=uN> z@@94e3UL;AL>4nJ@ErnSMo|r~2B2WDr;B5VMsRC)AlCr{4rkNQ_w`R^DlFA*-pk+F zf8^DnQ!)plY8k$Z9mw0d&?1b@@0p;;3>^!jpZPyh4!Ze>T~t!<{*xo4cH_j2wvFn7 fnj%qqR#Y*p_{M5=FVVpZXg-6dtDnm{r-UW|FpWqh diff --git a/forge/src/main/resources/assets/cccbridge/textures/block/redrouter/redrouter_side.png b/forge/src/main/resources/assets/cccbridge/textures/block/redrouter/redrouter_side.png index 7b53360e113f0d85c3ebea2793bedb4f39929747..112891adac2d78260315af0a44273bf3bc2e22e7 100644 GIT binary patch delta 497 zcmVQGZHBkTE7r)A;W9`vC6u zdkiUKOb9U=jR0t^l~UgOJkQ(hw)g&ey+#~kOluuNpdo|^eZ5}${T@J)B+j`cNu-nj zrqk)|c6+^Eku41&v|23yQpzMrmdoW|JM?zWYqSsFl56j_#e@11ko?G`{p z$01V6G)=9wp90SLWHRY?yT{{kwOTc}#*|V;Q7ENOr_=ZMHw92tRczp#i@bjpXswH) zFve6>^;z0EXN&~=SDw`Z+?FROmGb&$-4fQ00000NkvXXu0mjfP0!-i delta 315 zcmV-B0mS}*1j_=D8Gi-<001BJ|6u?C0TM|>K~y-6jgzsBgfI|AKayEF7$KP!$ea;U z3x!Yvg-`)S(9I%Q6IeLl0^gw7J%er%ko^7p|BPLE?@y>AA~5syZJh%Ey!ZV>^QvpS z_Zg)%_R&Wpj4t+mIbDD?n9^{8m8ApPed?BN`FPVhL%85hM9{34JyGx z2w-LyBKnhcp69A`+B8k4*0#>Uyz2Va-kmFP002hD^OW-rcBGWYsEJRY@2FP~`o4#? z767nq+vCZ@FaQ8zj9Aw-_rO|<7~{X9hz|H|;*kQzO+RD#{{gW)mj>2cHPQe8 N002ovPDHLkV1hgojnn`D diff --git a/forge/src/main/resources/assets/cccbridge/textures/block/redrouter/redrouter_top.png b/forge/src/main/resources/assets/cccbridge/textures/block/redrouter/redrouter_top.png index 66e09d7863156bc2c5ad1732169caa3138be3231..95a46cbc026287b827df0ab54699f21cde5a1fde 100644 GIT binary patch delta 487 zcmVM#(7Url3^R3a6+5(E+4 zxYR%5zZW;cQ9%$t8r$ZJ*1MQ{de1$xnwh-GJnxXfa=8Q`gaE)f2M}YVyf1%t5+THT zy=II_DXq0qO8g&>#{+fTV@%UD=kpmrnx@|SG)-B1y zhG>%*<9IvRvcmzOd8lsfSvdlU6 z_ks|js;WHCopVjo^twK@)@50aMx(ZE0VLGDUav|i?>%w9U5Z*Bs7ccZnxXr zZbzbDL$ucPM-m}~wU&QdJe^JRSK+ delta 209 zcmeyy{D^UaWIZzj1A~Sxe=v|@EDmyaVpw-h<|UBBlJ4m1$iT3%pZiZDE0E6_;1lB7 z+S*!PUJm3P&8%Jlq?k*B{DS}gXSjZf7pRtjv%n*=n1O-s5C}7hYIrpO1%o|Z978mM zQ~S924k&OqYk#-j^7rhHwVh1-T}gI_ycoD`#3KBJx+5DdGhf=$Uaoud`5U%b!U;AD z){EGP@v BMTr0a diff --git a/forge/src/main/resources/assets/cccbridge/textures/block/scroller/cage.png b/forge/src/main/resources/assets/cccbridge/textures/block/scroller/cage.png index 0aa95532f787f9a1c43fff872f49b1de17862258..6d0ea5e70ff12b8f5dc6ff90bdc8f7c1ba684d33 100644 GIT binary patch delta 167 zcmeyyc!6<(VZB6vPl#)Kd;7e3^CnK5SY2JcV#SIbJ9b>Ta)p6`LB8~5Fp%OX3Gxg6 z4*?AKn)gNm#ezIt9780gPVM&=I$*%z#A<)%|1ncz-^nFccNIM_T=CNMo3DZ6q8hGa zJOU>3S*8S;6mxg1IhBHoTpy@ZsIlz}JWG@csUIhgEw!>kn?H Sr-?x089ZJ6T-G@yGywokpiF51 delta 205 zcmcb>_>FObVLeN_qpu?a!^VE@KZ&di3=9$hJ|V81ot^XM&6_xJVpCJoiWMu?uV24w z*Dj#soAXmEffPqckYDhB2w=F^yf+dk##!JIS9e%t8=c1Gw7+wv%bBMyg(ahK7*&LpUXO@geCx9`%cvW diff --git a/forge/src/main/resources/assets/cccbridge/textures/block/scroller/interface.png b/forge/src/main/resources/assets/cccbridge/textures/block/scroller/interface.png index 92f988d27b1e776ef2eb4db72b6b32474a1fbb44..9272c13f30e991358e49ce7dac0e897dada65b8a 100644 GIT binary patch delta 279 zcmV+y0qFkF1HS^0F@O0q+!@9xiG5abtN_z2}Q!6XFv1sGnu{RMFrpBPpe-7*vdkbl9SPp=qQ_{1=11_lO( zYnR@_!vn(r31K$4jo1ukXeh`2Pv8!R-kAs7ZA zgBQ2YLujam7f2el^n@80j^Ht1Vqzqwfp32?NC>krym5UeCKx`KkMqTpHFt2gx^Ui=I{&kyl&5xnV1@dspa1rc=~N$l!L z;tJlkAd_^atE$rp77mkU#nIk4)^^zHLPYJXt`#xr9&!8pR)2V9aWdJA$CE9zAkm=r z0nx~BAz9%`1Sj!mxyJRw3vM1?m0JYpes-{fi>sN&)(-AboQ)7UGyVK@9hdjhB2a4l zZao?=ZX`;w?|Z}`zA_jSEab2EwnJKlJMASGwlkepdN#avaPiSEzs%n2~**PUd#(>ZrK z$c^wOn43`qW*;p~=!Zav+JofoQ!`mr*Y%p4Q3Tk;Xsc2(kCKO0CHq{v%3*D#PAo}H zvp%H5{cW^St}TP7;72et6sWAj-P1o0iJ*vfU6MO_i6Yu8#)AB`xj+Au7Y*PC_B*-# T3)S?d00000NkvXXu0mjfmx#cI diff --git a/forge/src/main/resources/assets/cccbridge/textures/block/scroller/scroller_front.png b/forge/src/main/resources/assets/cccbridge/textures/block/scroller/scroller_front.png index fccbab92c349865c94f55edd3054bd377be977c8..c97a3591bd8ae3496144f09be6f8f65894f9e0b2 100644 GIT binary patch delta 208 zcmZ3_^pkOdVZCC2Plzjrh#bF`y@I9xw`+S3FYcOITHcscC~e@vr)tilWWvC};3~Xe zGLYgf3Gxg64+jih{*0f1!ug&qjv*3LWBUU6jyP~Qxw{8c|7V^))9h|p=ckWKM;w)s zj?MYB^q^cm=aQMBq1(@}JaA(Z@N#?G{ix8>TY+uwN2Xl`)eJfDHA(^Q_6&O)uImSh zKiIDPcE5AK=Y@p-6R)P`o_<}WbGbG$D|%w|4d;13GFdu^DA1{zej$@=bv{ymw!X2U7ecL4LviQ2@i0J2Msnr8o;bB8wRq z_zr+DW7f4!PM~0cr;B5VMtyK_k> xT9asOe2VLS>qEPXE9zK|7S_JvKiZu9hv76U=Q&n&b|0YS44$rjF6*2UngGzsXs`eP diff --git a/forge/src/main/resources/assets/cccbridge/textures/block/scroller/scroller_side.png b/forge/src/main/resources/assets/cccbridge/textures/block/scroller/scroller_side.png index fe1df094d6f27f6943e6dcd32e2ece97bb77d6aa..bcc8c24634c50bc3f249535c666e5fc16e3a20d7 100644 GIT binary patch delta 217 zcmV;~04D#e0_g#e7=H)@0000eEe}%w0004VQb$4nuFf3k0000UP)t-s2oxR^YYD9;HdvQpV75L!{9;D5h~t=Ug2 z6&|7J22i;gK|U$E#~o@b`HT)uLZx<_h%cd&TYh{3yiM263Uzbo_L&lnu!j$B5*!3s TS(r3R00000NkvXXu0mjf_n}ZA delta 285 zcmaFKxQ1zhL_G^L0|Ud`yN`l^6k~CayA#8@b22Z19F}xPUq=Rpjs4tz5?O(K-2k5u z*Tpp!N2YsUULU=u*KJ*koq-&mm5QL9rjVz;xQn)^r=FO=;W+wmau1QS`x~>_Xiw(GOub&n$9V?bh%R>zPP#1-70Wz gWj9~q&&^^r`##;XZ|&e+1M(w-r>mdKI;Vst0OEXYe*gdg diff --git a/forge/src/main/resources/assets/cccbridge/textures/block/source_block_horizontal.png b/forge/src/main/resources/assets/cccbridge/textures/block/source_block_horizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..df14c26d41667aacac0c93756e0fd03dea8a9a43 GIT binary patch literal 442 zcmV;r0Y(0aP)Px#1ZP1_K>z@;j|==^1poj5bx=%HMGqD$3=$&?4;=Q^y~Cr5nRR!8VsQ>7HxDX5 z3?ekp>glM^*$4|1d#<+$3>FFw8LFzPwY9acudj>2&9D*{Q2?YWV76J#Lb$lN!otG6 zy}c8!J);0wE47=3{$L010qNS#tmY z4#EHc4#EKyC`y0;007QOL_t(IPvw%y4#F@DL>o6voP`(&OWAk+{}ZtbR0s|g5*!dC zr>#a~xqeC^QVKwUk}p0bOY2hevob~ui^ kcpT{1!Q+(9U*w^R3&1xYVI|ZKN&o-=07*qoM6N<$f~a$;-T(jq literal 0 HcmV?d00001 diff --git a/forge/src/main/resources/assets/cccbridge/textures/block/source_block_horizontal.png.mcmeta b/forge/src/main/resources/assets/cccbridge/textures/block/source_block_horizontal.png.mcmeta new file mode 100644 index 0000000..df5ea39 --- /dev/null +++ b/forge/src/main/resources/assets/cccbridge/textures/block/source_block_horizontal.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "interpolate": true, + "frametime": 32 + } +} diff --git a/forge/src/main/resources/assets/cccbridge/textures/block/source_block_side.png b/forge/src/main/resources/assets/cccbridge/textures/block/source_block_side.png deleted file mode 100644 index a2d86219e2e17d2e92cccc22fbf88c7cbf383365..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 342 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|y0G|+74--KvE&hjlR9>BPy1G&B^>It#%1WWi`eoIu8#-Az+q<_-W(_iC z4Y6Q7G>bLSo;AybHO7kd++x<(H$7doS)XrXeSeOXyJO<99dqXa&Ezcbh%9Dc;5z`q zj9J$@Ie~)HJzX3_G=gm>bn_in;BXa9$;nu&Tl)9E{oSR$&sl}( zOpFJMCW~>PrYpNS%Lhh0G|+7elcwxA!TlU86HusZ`bx7Ufeaaw7fB?P)tgfPt}}X%brKcL|jUj zS5!;E(qG!Zg+oM+Q&34nT$Ni;Sx{7ki(iIYNSU2inon4TjbBMnT!&jkOHf>!Lr|&d z?}L9pTR00mB8wRq_zrx;D&cMG&`<(ztU_({*{S7&GK ziZVCf`6z5l^qo>GqoSq%{J%a_3EJvstMp>Bbx~*hUCvLR4*0Q)zjyxmq%*vwZB-sm z?c@!1ZQ5TQlMXI#o2x1KTBS_zVZf0!@8?(?{b0Gw{|Doyshq~VHWxyGPG#_P^>bP0 Hl+XkK|6h0F literal 0 HcmV?d00001 diff --git a/forge/src/main/resources/assets/cccbridge/textures/block/st_block_top.png b/forge/src/main/resources/assets/cccbridge/textures/block/st_block_top.png deleted file mode 100644 index 588647a9dd8d20104a292c3a1c9b86f2bddfef51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 254 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFavVtEmOQ$!n?{3RNS%Lh$0X`wF{9@WXLdx9yGT*N4J-oPUW@&k2QX!wJIlq=YkCI7eXJ>0`Yfn#4 zUtizMnKP$Oo!ZgS(cRr$TU*=P+uPRGR#{nDU0q#VT%47a)z#HiUS3{QRHUGw(A?Zy zUth1NsMyfZP*PHoo}NBs$`n;q)vBth#>Pe!6%{2VC3SW6y1KfYoSd4P8XX;-va&KM zDXGH3LQYQ3Ns}feCMIfXYF1QKC@U+crKP2&rY0mLq@<)|W@Z)?6eJ}j#l*zi^t9{( zdW5sUBeIx*f$ty)Gwzs}{T3*A+SA1`L?hU@|8-H5fk3M#$4R%1St^0uBCd`{q}Sex z%76bq;@uH8U4DENoa(c%UX@>)~_m%WuDy zmR;b!!ZBsdX6IzL3j$StB>g9?FR?o9V0NTt+lknSC9Zb_7+sDY(e>WE>Y5a%+<}D6 zci&#NI%}-D^EgY(&+?G}TfD0mSWh^y_|=R#b#wn-_9$3bwamb5bP0l+XkK$<)bI literal 0 HcmV?d00001 diff --git a/forge/src/main/resources/assets/cccbridge/textures/block/target_block_side.png b/forge/src/main/resources/assets/cccbridge/textures/block/target_block_side.png deleted file mode 100644 index f84c5b100d14ec450af3863b109c9d14576e8c32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 342 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|y0G|+74--KvE&i`()c-y3cyU1S{|&pv4qPiexH>Y$CYA~8cIKK^$8E30 z=A_56poQDllq1A~-P3@5b&tURH~yx|YzO8^oZ6&x$d@ZoQAr1ACTD?1WHAE+-vJP2 z%(~Xe2^5^}>Ealo5o|l5oA0m!hpT8xPR3f@(!c-h?=JN%PkK`IsCh=vDa+)2&MHi2 zVmw$hS&RcUU0D_;$bWo&Uf1LPd}-yj35&MsdS`owKjU$Xx^8&POyP;3cx>y3bsbl8 zqYcXz3%mA^<6{2un5r$;`quGHoSQqpxbFFzXF^V2OspGMwj>m~-+p&aLvfK^ hwn^E?8V9eJ?D>4`)wPeNRsx;K;OXk;vd$@?2>`Y%c<2BC diff --git a/forge/src/main/resources/assets/cccbridge/textures/entity/animatronic/body.png b/forge/src/main/resources/assets/cccbridge/textures/entity/animatronic/body.png new file mode 100644 index 0000000000000000000000000000000000000000..9ede83702f5371c02e4d7978b162153575acd643 GIT binary patch literal 700 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`1!1o(uwnpsEKxaRmp_4s78rsT{$qhI|$s9auLN?k_NR@3bEM4i3)lAq3( zuS=HM&M)a)( zNAn$oRo~xrQM2=9+5Cg|T69~0L|vY=ps=jeHF^2@;y|&KM;AX!J(+az!5-=6^1PC| zPs;BMuM0GDc9Z|Yv{ptUP=!2S#aTm7!3bDA-7bMIo z*Iy^MOMeZY8OH^ijb*Qy#TxU4XB6^2x^J>{y8*xMzLaJSACZQZqcV#Qoce3?{V)H% z4*}W>*k7s{@k-rcUhQywzL4#N)W8D{tZNyVEG+E;8|E%%deY6liTjn~EC&t_dCz)A zN$y9CeogyinVC+%>|=>=T*XkY^=8J)mR|M67q;FhWqfP)_Rjl8rjkFq7;F}#dPZ+! zuX0G?ObL7NmnDV6z}CCrM5d#z&+oVI9et04-TIw*;(irhUSo8_4%R$IrC@~?d*ydO VtaVkS4g*sHgQu&X%Q~loCIB^NDWd=Y literal 0 HcmV?d00001 diff --git a/forge/src/main/resources/assets/cccbridge/textures/entity/animatronic/face_creepy.png b/forge/src/main/resources/assets/cccbridge/textures/entity/animatronic/face_creepy.png new file mode 100644 index 0000000000000000000000000000000000000000..e0a1621397919a85e5f5585564b2f1c137446b36 GIT binary patch literal 1930 zcmd6n`%}`18pgk@x6Gq;wyiy@>t)Kj>uyEnWmD5)6^%=3WthlGlTAxnluS_2F1qWw z=>e5O5j&EE*EDHIMPO??MP70RWzi5z)WGmAi2@$`5BA4>XP$ZA&&>P7^US>S{)B`_ z*lxGq4gi2HH1c>10D!he5U|a1tDVC?Nc~8eF%jWF%fOfFEilK1!NLHbt<=WwZ;LIq zz7lyh69DW)9|cMq`NXK0CVsFajAj1^+mx!{wU)cfQZUle8^uA%-Hoi~6;nD4Z8zY$g`^IFPHB5VeKIX9^ zUMm8-I4-@cC-&j{BC0gi?Rm-g=w&=yF4!lR^3C^9vrOHzF$R6m+bqyJe#lE$_V!IR zLs>@5lO@$i*%Og?#Hg_5(>u>=(H3h_#XnQkcMIWI@4y3hPdG(C_8_=Tw3kOzeAs{# zgY5*G_gir<9DFV$)?1*`CR#o@l(v+Sv{a;eCAJo~(!QlJ#7R|OA)X7orv7@EbcM<(dvenJ!g=B&HrrS4^WoR9pay|#!b;hi3nmzDU+7;mT=lZx7`36&5-)6QW zQJ#>qG&hdS?viO&+?6?|+ihZ@vidT@wVQElx?CG8PTb{y)01&oY?wn)ZDiL$x&^!(pyPD7GY5OX6HL@vs*-NmvteZox5|HKNd$+Qc}+8*T_&4;wfg z6fh)Dru1LZI->`f)jpGGKnKls2txGph?cpP^?l66MKo4Skz5*LT!E+c+l)<(3BNJLus70sUbWhrs#JsJm4dA79j+oDRCpXop5K!NF zM}&Jrvpn}shx4)sFtG05a5|jKlF2->-6Ker6MVdZPHPq?!gh6_d`3DsPsyGTMR(|b znqFkx zQDAA!6fGqqrt~vP#85x5f5!2q=m&2z5dqq7!4Hs^RVzA#9)XlpPNcC~P?F6#wyA|UPT|geAh_>u6xd5IKPh@Vj9FM`lU>aBl$>rh zza;1u`f^En`l*B?tzOvS`~{@0nPt|9*d*r0Gkr_g+RR}~8;Aq_6WJq!rbS>Q=}f=g zYWm-?nIMhF?{;}{f6h|72-lwW`NSVZ`2(t0{@3c^h8`Q*ERFbNz7GsK=pq#%e>IMb zn*LBFa%DzS0{$G#<;nFSMkA03wQ7Y2lXg!Ov&qO6uy~%f?lwVpOOWVib(r`os9>P) zHj`^6WfBA6f+|SzZurKcjrf6Pzd~ZOE~8G F{{hGae9-^^ literal 0 HcmV?d00001 diff --git a/forge/src/main/resources/assets/cccbridge/textures/entity/animatronic/face_happy.png b/forge/src/main/resources/assets/cccbridge/textures/entity/animatronic/face_happy.png new file mode 100644 index 0000000000000000000000000000000000000000..3bb8a809c46d989bee13394480fe4ef29ceabb77 GIT binary patch literal 192 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1quc!B9^Z$B>G+x0en18VopC10MZ-zhbd?!MaSR zs|OF}W!;aq+c41qsLsYvKl|jT0`uQn*UsUN&z5kp{r&5^Zt)+_V70xsSW~!xN}%9C awac5C&s95Kapu&6ggjmST-G@yGywoITs-~& literal 0 HcmV?d00001 diff --git a/forge/src/main/resources/assets/cccbridge/textures/entity/animatronic/face_normal.png b/forge/src/main/resources/assets/cccbridge/textures/entity/animatronic/face_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..db0d54d70d305ca7f4a0ed35280df1eca0ecb270 GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBuf-vKbiP>*~f+3zRjv*CsZ!a72H5hQP20Z%venqnWgFDMO zdw1RRz5HFwE=NTGs4oAl`$|dqO3C!S)AprDxY+;x_j~cPAJez3IU^-LK^Le12JQ=9 YWSIF}wd3r!Z6JLNp00i_>zopr04;_+sQ>@~ literal 0 HcmV?d00001 diff --git a/forge/src/main/resources/assets/cccbridge/textures/entity/animatronic/face_question.png b/forge/src/main/resources/assets/cccbridge/textures/entity/animatronic/face_question.png new file mode 100644 index 0000000000000000000000000000000000000000..a38034d0b0f856ec1f903cb9695dcedff3fa8e31 GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1quc!4OXu$B>G+w^t3h4j6DSIGp_d|3=?WhvzL0 z3nXuczIRx(c##SNLxcai-Tk7wmppNp_tC88S-^>1zjG+w^t0g4k+-jUU=~LeZ=v&1)E(3 zw03Nn8&%7HB;}8gFi>H6PNn|WEoCpJ7fjJEh(GM~YXAJiKf$}@UpD`*W!zTB9}F0zyqVpALbaYQjv*3LRr?wF4j6DS zxxVAMNhueVL!w_4=7iKV81$2y_U8r>mdKI;Vst0HEko_W%F@ literal 0 HcmV?d00001 diff --git a/forge/src/main/resources/assets/cccbridge/textures/painting/funny_redrouters.png b/forge/src/main/resources/assets/cccbridge/textures/painting/funny_redrouters.png new file mode 100644 index 0000000000000000000000000000000000000000..4f8c0205fc6ea1a89870a31c677571dd413c0b34 GIT binary patch literal 1263 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 V6{@RlM~46a002ovPDHLkV1jtGArSxo literal 5722 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 M07*qoM6N<$f@!eVHvj+t diff --git a/forge/src/main/resources/iconHD.png b/forge/src/main/resources/iconHD.png index ef649784d4dc194dc2ed180b6574ad7ead16f094..631616441e521cbfd0ad6831000614801ee252d5 100644 GIT binary patch literal 124807 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⁢{2yYRE8Ar^d|+i1 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�z7TN-S(jq%8 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 LvSf|;yWsx^R~%f?