From 088d9a3a6a1185f8901671258cb1a65c470e7e52 Mon Sep 17 00:00:00 2001 From: crispytwig <48872606+crispytwig@users.noreply.github.com> Date: Tue, 22 Oct 2024 14:03:12 -0500 Subject: [PATCH] Cage, Bottle, + Bowl basic implementation --- .../hamsters/HamstersVanillaIntegration.java | 41 +- .../hamsters/block/CagePanelBlock.java | 157 + .../hamsters/block/properties/CageType.java | 24 + .../hamsters/entity/Frank.java | 157 + .../hamsters/entity/Hamster.java | 841 ++-- .../hamsters/entity/HamsterBall.java | 2 +- .../hamsters/entity/HamsterNew.java | 281 +- .../entity/common/HamstersGeoEntity.java | 2 +- .../hamsters/registry/HamstersBlocks.java | 64 +- .../registry/HamstersCreativeModeTab.java | 111 +- .../hamsters/registry/HamstersEntityType.java | 10 + .../hamsters/registry/HamstersItems.java | 87 +- .../hamsters/registry/HamstersTags.java | 2 + .../animations/scp_frank.rp_anim.json | 3481 +++++++++++++++++ .../blockstates/black_cage_panel.json | 64 + .../blockstates/black_hamster_bottle.json | 19 + .../blockstates/black_hamster_bowl.json | 33 + .../hamsters/blockstates/blue_cage_panel.json | 64 + .../blockstates/blue_hamster_bottle.json | 6 +- .../blockstates/blue_hamster_bowl.json | 64 +- .../blockstates/brown_cage_panel.json | 64 + .../blockstates/brown_hamster_bottle.json | 19 + .../blockstates/brown_hamster_bowl.json | 33 + .../hamsters/blockstates/cage_panel.json | 64 + .../hamsters/blockstates/cyan_cage_panel.json | 64 + .../blockstates/cyan_hamster_bottle.json | 19 + .../blockstates/cyan_hamster_bowl.json | 33 + .../hamsters/blockstates/gray_cage_panel.json | 64 + .../blockstates/gray_hamster_bottle.json | 19 + .../blockstates/gray_hamster_bowl.json | 33 + .../blockstates/green_cage_panel.json | 64 + .../blockstates/green_hamster_bottle.json | 19 + .../blockstates/green_hamster_bowl.json | 33 + .../blockstates/light_blue_cage_panel.json | 64 + .../light_blue_hamster_bottle.json | 19 + .../blockstates/light_blue_hamster_bowl.json | 33 + .../blockstates/light_gray_cage_panel.json | 64 + .../light_gray_hamster_bottle.json | 19 + .../blockstates/light_gray_hamster_bowl.json | 33 + .../hamsters/blockstates/lime_cage_panel.json | 64 + .../blockstates/lime_hamster_bottle.json | 19 + .../blockstates/lime_hamster_bowl.json | 33 + .../blockstates/magenta_cage_panel.json | 64 + .../blockstates/magenta_hamster_bottle.json | 19 + .../blockstates/magenta_hamster_bowl.json | 33 + .../blockstates/orange_cage_panel.json | 64 + .../blockstates/orange_hamster_bottle.json | 19 + .../blockstates/orange_hamster_bowl.json | 33 + .../hamsters/blockstates/pink_cage_panel.json | 64 + .../blockstates/pink_hamster_bottle.json | 19 + .../blockstates/pink_hamster_bowl.json | 33 + .../blockstates/purple_cage_panel.json | 64 + .../blockstates/purple_hamster_bottle.json | 19 + .../blockstates/purple_hamster_bowl.json | 33 + .../hamsters/blockstates/red_cage_panel.json | 64 + .../blockstates/red_hamster_bottle.json | 19 + .../blockstates/red_hamster_bowl.json | 33 + .../blockstates/white_cage_panel.json | 20 + .../blockstates/white_hamster_bottle.json | 19 + .../blockstates/white_hamster_bowl.json | 33 + .../assets/hamsters/blockstates/wno.py | 108 + .../blockstates/yellow_cage_panel.json | 64 + .../blockstates/yellow_hamster_bottle.json | 19 + .../blockstates/yellow_hamster_bowl.json | 33 + .../hamsters/geo/entity/frank_scp.geo.json | 357 ++ .../resources/assets/hamsters/lang/en_us.json | 71 +- .../hamsters/models/block/bottle/black.json | 6 + .../hamsters/models/block/bottle/blue.json | 10 +- .../hamsters/models/block/bottle/brown.json | 6 + .../hamsters/models/block/bottle/cyan.json | 6 + .../hamsters/models/block/bottle/gray.json | 6 + .../hamsters/models/block/bottle/green.json | 6 + .../models/block/bottle/light_blue.json | 6 + .../models/block/bottle/light_gray.json | 6 + .../hamsters/models/block/bottle/lime.json | 6 + .../hamsters/models/block/bottle/magenta.json | 6 + .../hamsters/models/block/bottle/orange.json | 6 + .../hamsters/models/block/bottle/pink.json | 6 + .../hamsters/models/block/bottle/purple.json | 6 + .../hamsters/models/block/bottle/red.json | 6 + .../hamsters/models/block/bottle/white.json | 6 + .../hamsters/models/block/bottle/wno.py | 108 + .../hamsters/models/block/bottle/yellow.json | 6 + .../hamsters/models/block/bowl/black.json | 6 + .../hamsters/models/block/bowl/blue.json | 10 +- .../hamsters/models/block/bowl/brown.json | 6 + .../hamsters/models/block/bowl/cyan.json | 6 + .../hamsters/models/block/bowl/gray.json | 6 + .../hamsters/models/block/bowl/green.json | 6 + .../models/block/bowl/light_blue.json | 6 + .../models/block/bowl/light_gray.json | 6 + .../hamsters/models/block/bowl/lime.json | 6 + .../hamsters/models/block/bowl/magenta.json | 6 + .../hamsters/models/block/bowl/orange.json | 6 + .../hamsters/models/block/bowl/pink.json | 6 + .../hamsters/models/block/bowl/purple.json | 6 + .../hamsters/models/block/bowl/red.json | 6 + .../hamsters/models/block/bowl/white.json | 6 + .../assets/hamsters/models/block/bowl/wno.py | 108 + .../hamsters/models/block/bowl/yellow.json | 6 + .../models/block/cage_panel/black.json | 7 + .../models/block/cage_panel/black_bottom.json | 7 + .../models/block/cage_panel/black_middle.json | 7 + .../models/block/cage_panel/black_top.json | 7 + .../models/block/cage_panel/blue.json | 7 + .../models/block/cage_panel/blue_bottom.json | 7 + .../models/block/cage_panel/blue_middle.json | 7 + .../models/block/cage_panel/blue_top.json | 7 + .../models/block/cage_panel/brown.json | 7 + .../models/block/cage_panel/brown_bottom.json | 7 + .../models/block/cage_panel/brown_middle.json | 7 + .../models/block/cage_panel/brown_top.json | 7 + .../models/block/cage_panel/cage.json | 7 + .../models/block/cage_panel/cage_bottom.json | 7 + .../models/block/cage_panel/cage_middle.json | 7 + .../models/block/cage_panel/cage_top.json | 7 + .../models/block/cage_panel/cyan.json | 7 + .../models/block/cage_panel/cyan_bottom.json | 7 + .../models/block/cage_panel/cyan_middle.json | 7 + .../models/block/cage_panel/cyan_top.json | 7 + .../models/block/cage_panel/gray.json | 7 + .../models/block/cage_panel/gray_bottom.json | 7 + .../models/block/cage_panel/gray_middle.json | 7 + .../models/block/cage_panel/gray_top.json | 7 + .../models/block/cage_panel/green.json | 7 + .../models/block/cage_panel/green_bottom.json | 7 + .../models/block/cage_panel/green_middle.json | 7 + .../models/block/cage_panel/green_top.json | 7 + .../models/block/cage_panel/light_blue.json | 7 + .../block/cage_panel/light_blue_bottom.json | 7 + .../block/cage_panel/light_blue_middle.json | 7 + .../block/cage_panel/light_blue_top.json | 7 + .../models/block/cage_panel/light_gray.json | 7 + .../block/cage_panel/light_gray_bottom.json | 7 + .../block/cage_panel/light_gray_middle.json | 7 + .../block/cage_panel/light_gray_top.json | 7 + .../models/block/cage_panel/lime.json | 7 + .../models/block/cage_panel/lime_bottom.json | 7 + .../models/block/cage_panel/lime_middle.json | 7 + .../models/block/cage_panel/lime_top.json | 7 + .../models/block/cage_panel/magenta.json | 7 + .../block/cage_panel/magenta_bottom.json | 7 + .../block/cage_panel/magenta_middle.json | 7 + .../models/block/cage_panel/magenta_top.json | 7 + .../models/block/cage_panel/orange.json | 7 + .../block/cage_panel/orange_bottom.json | 7 + .../block/cage_panel/orange_middle.json | 7 + .../models/block/cage_panel/orange_top.json | 7 + .../models/block/cage_panel/pink.json | 7 + .../models/block/cage_panel/pink_bottom.json | 7 + .../models/block/cage_panel/pink_middle.json | 7 + .../models/block/cage_panel/pink_top.json | 7 + .../models/block/cage_panel/purple.json | 7 + .../block/cage_panel/purple_bottom.json | 7 + .../block/cage_panel/purple_middle.json | 7 + .../models/block/cage_panel/purple_top.json | 7 + .../hamsters/models/block/cage_panel/red.json | 7 + .../models/block/cage_panel/red_bottom.json | 7 + .../models/block/cage_panel/red_middle.json | 7 + .../models/block/cage_panel/red_top.json | 7 + .../models/block/cage_panel/white.json | 7 + .../models/block/cage_panel/white_bottom.json | 7 + .../models/block/cage_panel/white_middle.json | 7 + .../models/block/cage_panel/white_top.json | 7 + .../hamsters/models/block/cage_panel/wno.py | 108 + .../models/block/cage_panel/yellow.json | 7 + .../block/cage_panel/yellow_bottom.json | 7 + .../block/cage_panel/yellow_middle.json | 7 + .../models/block/cage_panel/yellow_top.json | 7 + .../hamsters/models/block/template/bowl.json | 26 +- .../models/block/template/cage_panel.json | 53 + .../block/template/cage_panel_bottom.json | 52 + .../models/block/template/cage_panel_top.json | 37 + .../models/block/{ => tunnel}/6_ways.json | 0 .../models/block/{ => tunnel}/base.json | 0 .../models/block/{ => tunnel}/corner.json | 0 .../models/block/{ => tunnel}/one_way.json | 0 .../models/block/{ => tunnel}/side.json | 0 .../models/block/{ => tunnel}/t_shape.json | 0 .../models/block/{ => tunnel}/tunnel.json | 0 .../models/item/black_cage_panel.json | 6 + .../models/item/black_hamster_ball.json | 6 + .../models/item/black_hamster_bottle.json | 6 + .../models/item/black_hamster_bowl.json | 6 + .../hamsters/models/item/blue_cage_panel.json | 6 + .../models/item/blue_hamster_ball.json | 6 + .../models/item/blue_hamster_bottle.json | 10 +- .../models/item/blue_hamster_bowl.json | 10 +- .../models/item/brown_cage_panel.json | 6 + .../models/item/brown_hamster_ball.json | 6 + .../models/item/brown_hamster_bottle.json | 6 + .../models/item/brown_hamster_bowl.json | 6 + .../hamsters/models/item/cage_panel.json | 6 + .../hamsters/models/item/cyan_cage_panel.json | 6 + .../models/item/cyan_hamster_ball.json | 6 + .../models/item/cyan_hamster_bottle.json | 6 + .../models/item/cyan_hamster_bowl.json | 6 + .../hamsters/models/item/gray_cage_panel.json | 6 + .../models/item/gray_hamster_ball.json | 6 + .../models/item/gray_hamster_bottle.json | 6 + .../models/item/gray_hamster_bowl.json | 6 + .../models/item/green_cage_panel.json | 6 + .../models/item/green_hamster_ball.json | 6 + .../models/item/green_hamster_bottle.json | 6 + .../models/item/green_hamster_bowl.json | 6 + .../models/item/light_blue_cage_panel.json | 6 + .../models/item/light_blue_hamster_ball.json | 6 + .../item/light_blue_hamster_bottle.json | 6 + .../models/item/light_blue_hamster_bowl.json | 6 + .../models/item/light_gray_cage_panel.json | 6 + .../models/item/light_gray_hamster_ball.json | 6 + .../item/light_gray_hamster_bottle.json | 6 + .../models/item/light_gray_hamster_bowl.json | 6 + .../hamsters/models/item/lime_cage_panel.json | 6 + .../models/item/lime_hamster_ball.json | 6 + .../models/item/lime_hamster_bottle.json | 6 + .../models/item/lime_hamster_bowl.json | 6 + .../models/item/magenta_cage_panel.json | 6 + .../models/item/magenta_hamster_ball.json | 6 + .../models/item/magenta_hamster_bottle.json | 6 + .../models/item/magenta_hamster_bowl.json | 6 + .../models/item/orange_cage_panel.json | 6 + .../models/item/orange_hamster_ball.json | 6 + .../models/item/orange_hamster_bottle.json | 6 + .../models/item/orange_hamster_bowl.json | 6 + .../hamsters/models/item/pink_cage_panel.json | 6 + .../models/item/pink_hamster_ball.json | 6 + .../models/item/pink_hamster_bottle.json | 6 + .../models/item/pink_hamster_bowl.json | 6 + .../models/item/purple_cage_panel.json | 6 + .../models/item/purple_hamster_ball.json | 6 + .../models/item/purple_hamster_bottle.json | 6 + .../models/item/purple_hamster_bowl.json | 6 + .../hamsters/models/item/red_cage_panel.json | 6 + .../models/item/red_hamster_ball.json | 6 + .../models/item/red_hamster_bottle.json | 6 + .../models/item/red_hamster_bowl.json | 6 + .../models/item/white_cage_panel.json | 6 + .../models/item/white_hamster_ball.json | 6 + .../models/item/white_hamster_bottle.json | 6 + .../models/item/white_hamster_bowl.json | 6 + .../assets/hamsters/models/item/wno.py | 108 + .../models/item/yellow_cage_panel.json | 6 + .../models/item/yellow_hamster_ball.json | 6 + .../models/item/yellow_hamster_bottle.json | 6 + .../models/item/yellow_hamster_bowl.json | 6 + .../hamsters/textures/block/bottle/black.png | Bin 0 -> 944 bytes .../hamsters/textures/block/bottle/blue.png | Bin 557 -> 941 bytes .../hamsters/textures/block/bottle/brown.png | Bin 0 -> 914 bytes .../hamsters/textures/block/bottle/cyan.png | Bin 0 -> 1011 bytes .../hamsters/textures/block/bottle/gray.png | Bin 0 -> 913 bytes .../hamsters/textures/block/bottle/green.png | Bin 0 -> 1000 bytes .../textures/block/bottle/light_blue.png | Bin 0 -> 963 bytes .../textures/block/bottle/light_gray.png | Bin 0 -> 940 bytes .../hamsters/textures/block/bottle/lime.png | Bin 0 -> 1017 bytes .../textures/block/bottle/magenta.png | Bin 0 -> 951 bytes .../hamsters/textures/block/bottle/orange.png | Bin 0 -> 1013 bytes .../hamsters/textures/block/bottle/pink.png | Bin 0 -> 901 bytes .../hamsters/textures/block/bottle/purple.png | Bin 0 -> 925 bytes .../hamsters/textures/block/bottle/red.png | Bin 0 -> 998 bytes .../hamsters/textures/block/bottle/white.png | Bin 0 -> 928 bytes .../hamsters/textures/block/bottle/yellow.png | Bin 0 -> 988 bytes .../hamsters/textures/block/bowl/black.png | Bin 0 -> 522 bytes .../hamsters/textures/block/bowl/blue.png | Bin 327 -> 573 bytes .../hamsters/textures/block/bowl/brown.png | Bin 0 -> 498 bytes .../hamsters/textures/block/bowl/cyan.png | Bin 0 -> 562 bytes .../hamsters/textures/block/bowl/gray.png | Bin 0 -> 480 bytes .../hamsters/textures/block/bowl/green.png | Bin 0 -> 554 bytes .../textures/block/bowl/light_blue.png | Bin 0 -> 490 bytes .../textures/block/bowl/light_gray.png | Bin 0 -> 513 bytes .../hamsters/textures/block/bowl/lime.png | Bin 0 -> 566 bytes .../hamsters/textures/block/bowl/magenta.png | Bin 0 -> 540 bytes .../hamsters/textures/block/bowl/orange.png | Bin 0 -> 556 bytes .../hamsters/textures/block/bowl/pink.png | Bin 0 -> 496 bytes .../hamsters/textures/block/bowl/purple.png | Bin 0 -> 516 bytes .../hamsters/textures/block/bowl/red.png | Bin 0 -> 554 bytes .../hamsters/textures/block/bowl/white.png | Bin 0 -> 405 bytes .../hamsters/textures/block/bowl/yellow.png | Bin 0 -> 562 bytes .../hamsters/textures/block/cage/black.png | Bin 0 -> 563 bytes .../textures/block/cage/black_bottom.png | Bin 0 -> 589 bytes .../textures/block/cage/black_middle.png | Bin 0 -> 599 bytes .../textures/block/cage/black_top.png | Bin 0 -> 565 bytes .../hamsters/textures/block/cage/blue.png | Bin 0 -> 561 bytes .../textures/block/cage/blue_bottom.png | Bin 0 -> 614 bytes .../textures/block/cage/blue_middle.png | Bin 0 -> 618 bytes .../hamsters/textures/block/cage/blue_top.png | Bin 0 -> 567 bytes .../hamsters/textures/block/cage/brown.png | Bin 0 -> 596 bytes .../textures/block/cage/brown_bottom.png | Bin 0 -> 647 bytes .../textures/block/cage/brown_middle.png | Bin 0 -> 647 bytes .../textures/block/cage/brown_top.png | Bin 0 -> 605 bytes .../hamsters/textures/block/cage/cage.png | Bin 0 -> 269 bytes .../textures/block/cage/cage_bottom.png | Bin 0 -> 243 bytes .../textures/block/cage/cage_middle.png | Bin 0 -> 645 bytes .../hamsters/textures/block/cage/cage_top.png | Bin 0 -> 307 bytes .../hamsters/textures/block/cage/cyan.png | Bin 0 -> 600 bytes .../textures/block/cage/cyan_bottom.png | Bin 0 -> 633 bytes .../textures/block/cage/cyan_middle.png | Bin 0 -> 630 bytes .../hamsters/textures/block/cage/cyan_top.png | Bin 0 -> 604 bytes .../hamsters/textures/block/cage/gray.png | Bin 0 -> 587 bytes .../textures/block/cage/gray_bottom.png | Bin 0 -> 605 bytes .../textures/block/cage/gray_middle.png | Bin 0 -> 605 bytes .../hamsters/textures/block/cage/gray_top.png | Bin 0 -> 586 bytes .../hamsters/textures/block/cage/green.png | Bin 0 -> 554 bytes .../textures/block/cage/green_bottom.png | Bin 0 -> 569 bytes .../textures/block/cage/green_middle.png | Bin 0 -> 574 bytes .../textures/block/cage/green_top.png | Bin 0 -> 558 bytes .../textures/block/cage/light_blue.png | Bin 0 -> 564 bytes .../textures/block/cage/light_blue_bottom.png | Bin 0 -> 560 bytes .../textures/block/cage/light_blue_middle.png | Bin 0 -> 557 bytes .../textures/block/cage/light_blue_top.png | Bin 0 -> 559 bytes .../textures/block/cage/light_gray.png | Bin 0 -> 588 bytes .../textures/block/cage/light_gray_bottom.png | Bin 0 -> 634 bytes .../textures/block/cage/light_gray_middle.png | Bin 0 -> 660 bytes .../textures/block/cage/light_gray_top.png | Bin 0 -> 597 bytes .../hamsters/textures/block/cage/lime.png | Bin 0 -> 586 bytes .../textures/block/cage/lime_bottom.png | Bin 0 -> 639 bytes .../textures/block/cage/lime_middle.png | Bin 0 -> 633 bytes .../hamsters/textures/block/cage/lime_top.png | Bin 0 -> 590 bytes .../hamsters/textures/block/cage/magenta.png | Bin 0 -> 629 bytes .../textures/block/cage/magenta_middle.png | Bin 0 -> 650 bytes .../textures/block/cage/magenta_top.png | Bin 0 -> 636 bytes .../textures/block/cage/mangenta_bottom.png | Bin 0 -> 651 bytes .../hamsters/textures/block/cage/orange.png | Bin 0 -> 527 bytes .../textures/block/cage/orange_bottom.png | Bin 0 -> 564 bytes .../textures/block/cage/orange_middle.png | Bin 0 -> 546 bytes .../textures/block/cage/orange_top.png | Bin 0 -> 527 bytes .../hamsters/textures/block/cage/pink.png | Bin 0 -> 570 bytes .../textures/block/cage/pink_bottom.png | Bin 0 -> 617 bytes .../textures/block/cage/pink_middle.png | Bin 0 -> 608 bytes .../hamsters/textures/block/cage/pink_top.png | Bin 0 -> 573 bytes .../hamsters/textures/block/cage/purple.png | Bin 0 -> 616 bytes .../textures/block/cage/purple_bottom.png | Bin 0 -> 646 bytes .../textures/block/cage/purple_middle.png | Bin 0 -> 645 bytes .../textures/block/cage/purple_top.png | Bin 0 -> 623 bytes .../hamsters/textures/block/cage/red.png | Bin 0 -> 599 bytes .../textures/block/cage/red_bottom.png | Bin 0 -> 619 bytes .../textures/block/cage/red_middle.png | Bin 0 -> 608 bytes .../hamsters/textures/block/cage/red_top.png | Bin 0 -> 612 bytes .../hamsters/textures/block/cage/white.png | Bin 0 -> 477 bytes .../textures/block/cage/white_bottom.png | Bin 0 -> 470 bytes .../textures/block/cage/white_middle.png | Bin 0 -> 489 bytes .../textures/block/cage/white_top.png | Bin 0 -> 478 bytes .../hamsters/textures/block/cage/yellow.png | Bin 0 -> 505 bytes .../textures/block/cage/yellow_bottom.png | Bin 0 -> 556 bytes .../textures/block/cage/yellow_middle.png | Bin 0 -> 567 bytes .../textures/block/cage/yellow_top.png | Bin 0 -> 515 bytes .../hamsters/textures/entity/frank_scp.png | Bin 0 -> 7132 bytes .../hamsters/textures/item/ball/black.png | Bin 0 -> 397 bytes .../hamsters/textures/item/ball/blue.png | Bin 0 -> 449 bytes .../hamsters/textures/item/ball/brown.png | Bin 0 -> 436 bytes .../hamsters/textures/item/ball/cyan.png | Bin 0 -> 435 bytes .../hamsters/textures/item/ball/gray.png | Bin 0 -> 396 bytes .../hamsters/textures/item/ball/green.png | Bin 0 -> 388 bytes .../textures/item/ball/light_blue.png | Bin 0 -> 460 bytes .../textures/item/ball/light_gray.png | Bin 0 -> 448 bytes .../hamsters/textures/item/ball/lime.png | Bin 0 -> 446 bytes .../hamsters/textures/item/ball/magenta.png | Bin 0 -> 452 bytes .../hamsters/textures/item/ball/orange.png | Bin 0 -> 398 bytes .../hamsters/textures/item/ball/pink.png | Bin 0 -> 443 bytes .../hamsters/textures/item/ball/purple.png | Bin 0 -> 449 bytes .../hamsters/textures/item/ball/red.png | Bin 0 -> 431 bytes .../hamsters/textures/item/ball/white.png | Bin 0 -> 427 bytes .../hamsters/textures/item/ball/yellow.png | Bin 0 -> 414 bytes .../textures/item/blue_hamster_bottle.png | Bin 335 -> 0 bytes .../textures/item/blue_hamster_bowl.png | Bin 267 -> 0 bytes .../hamsters/textures/item/bottle/black.png | Bin 0 -> 422 bytes .../hamsters/textures/item/bottle/blue.png | Bin 0 -> 419 bytes .../hamsters/textures/item/bottle/brown.png | Bin 0 -> 412 bytes .../hamsters/textures/item/bottle/cyan.png | Bin 0 -> 425 bytes .../hamsters/textures/item/bottle/gray.png | Bin 0 -> 409 bytes .../hamsters/textures/item/bottle/green.png | Bin 0 -> 400 bytes .../textures/item/bottle/light_blue.png | Bin 0 -> 430 bytes .../textures/item/bottle/light_gray.png | Bin 0 -> 434 bytes .../hamsters/textures/item/bottle/lime.png | Bin 0 -> 424 bytes .../hamsters/textures/item/bottle/magenta.png | Bin 0 -> 437 bytes .../hamsters/textures/item/bottle/orange.png | Bin 0 -> 427 bytes .../hamsters/textures/item/bottle/pink.png | Bin 0 -> 451 bytes .../hamsters/textures/item/bottle/purple.png | Bin 0 -> 437 bytes .../hamsters/textures/item/bottle/red.png | Bin 0 -> 413 bytes .../hamsters/textures/item/bottle/white.png | Bin 0 -> 433 bytes .../hamsters/textures/item/bottle/yellow.png | Bin 0 -> 414 bytes .../hamsters/textures/item/bowl/black.png | Bin 0 -> 323 bytes .../hamsters/textures/item/bowl/blue.png | Bin 0 -> 345 bytes .../hamsters/textures/item/bowl/brown.png | Bin 0 -> 342 bytes .../hamsters/textures/item/bowl/cyan.png | Bin 0 -> 343 bytes .../hamsters/textures/item/bowl/gray.png | Bin 0 -> 291 bytes .../hamsters/textures/item/bowl/green.png | Bin 0 -> 309 bytes .../textures/item/bowl/light_blue.png | Bin 0 -> 346 bytes .../textures/item/bowl/light_gray.png | Bin 0 -> 350 bytes .../hamsters/textures/item/bowl/lime.png | Bin 0 -> 356 bytes .../hamsters/textures/item/bowl/magenta.png | Bin 0 -> 347 bytes .../hamsters/textures/item/bowl/orange.png | Bin 0 -> 325 bytes .../hamsters/textures/item/bowl/pink.png | Bin 0 -> 350 bytes .../hamsters/textures/item/bowl/purple.png | Bin 0 -> 351 bytes .../hamsters/textures/item/bowl/red.png | Bin 0 -> 347 bytes .../hamsters/textures/item/bowl/white.png | Bin 0 -> 341 bytes .../hamsters/textures/item/bowl/yellow.png | Bin 0 -> 307 bytes .../hamsters/textures/item/hamster_ball.png | Bin 346 -> 0 bytes .../advancements/recipes/cage_panel.json | 35 + .../data/hamsters/recipes/cage_panel.json | 16 + .../data/hamsters/tags/items/cage_panels.json | 20 + 401 files changed, 8469 insertions(+), 966 deletions(-) create mode 100644 src/main/java/com/starfish_studios/hamsters/block/CagePanelBlock.java create mode 100644 src/main/java/com/starfish_studios/hamsters/block/properties/CageType.java create mode 100644 src/main/java/com/starfish_studios/hamsters/entity/Frank.java create mode 100644 src/main/resources/assets/hamsters/animations/scp_frank.rp_anim.json create mode 100644 src/main/resources/assets/hamsters/blockstates/black_cage_panel.json create mode 100644 src/main/resources/assets/hamsters/blockstates/black_hamster_bottle.json create mode 100644 src/main/resources/assets/hamsters/blockstates/black_hamster_bowl.json create mode 100644 src/main/resources/assets/hamsters/blockstates/blue_cage_panel.json create mode 100644 src/main/resources/assets/hamsters/blockstates/brown_cage_panel.json create mode 100644 src/main/resources/assets/hamsters/blockstates/brown_hamster_bottle.json create mode 100644 src/main/resources/assets/hamsters/blockstates/brown_hamster_bowl.json create mode 100644 src/main/resources/assets/hamsters/blockstates/cage_panel.json create mode 100644 src/main/resources/assets/hamsters/blockstates/cyan_cage_panel.json create mode 100644 src/main/resources/assets/hamsters/blockstates/cyan_hamster_bottle.json create mode 100644 src/main/resources/assets/hamsters/blockstates/cyan_hamster_bowl.json create mode 100644 src/main/resources/assets/hamsters/blockstates/gray_cage_panel.json create mode 100644 src/main/resources/assets/hamsters/blockstates/gray_hamster_bottle.json create mode 100644 src/main/resources/assets/hamsters/blockstates/gray_hamster_bowl.json create mode 100644 src/main/resources/assets/hamsters/blockstates/green_cage_panel.json create mode 100644 src/main/resources/assets/hamsters/blockstates/green_hamster_bottle.json create mode 100644 src/main/resources/assets/hamsters/blockstates/green_hamster_bowl.json create mode 100644 src/main/resources/assets/hamsters/blockstates/light_blue_cage_panel.json create mode 100644 src/main/resources/assets/hamsters/blockstates/light_blue_hamster_bottle.json create mode 100644 src/main/resources/assets/hamsters/blockstates/light_blue_hamster_bowl.json create mode 100644 src/main/resources/assets/hamsters/blockstates/light_gray_cage_panel.json create mode 100644 src/main/resources/assets/hamsters/blockstates/light_gray_hamster_bottle.json create mode 100644 src/main/resources/assets/hamsters/blockstates/light_gray_hamster_bowl.json create mode 100644 src/main/resources/assets/hamsters/blockstates/lime_cage_panel.json create mode 100644 src/main/resources/assets/hamsters/blockstates/lime_hamster_bottle.json create mode 100644 src/main/resources/assets/hamsters/blockstates/lime_hamster_bowl.json create mode 100644 src/main/resources/assets/hamsters/blockstates/magenta_cage_panel.json create mode 100644 src/main/resources/assets/hamsters/blockstates/magenta_hamster_bottle.json create mode 100644 src/main/resources/assets/hamsters/blockstates/magenta_hamster_bowl.json create mode 100644 src/main/resources/assets/hamsters/blockstates/orange_cage_panel.json create mode 100644 src/main/resources/assets/hamsters/blockstates/orange_hamster_bottle.json create mode 100644 src/main/resources/assets/hamsters/blockstates/orange_hamster_bowl.json create mode 100644 src/main/resources/assets/hamsters/blockstates/pink_cage_panel.json create mode 100644 src/main/resources/assets/hamsters/blockstates/pink_hamster_bottle.json create mode 100644 src/main/resources/assets/hamsters/blockstates/pink_hamster_bowl.json create mode 100644 src/main/resources/assets/hamsters/blockstates/purple_cage_panel.json create mode 100644 src/main/resources/assets/hamsters/blockstates/purple_hamster_bottle.json create mode 100644 src/main/resources/assets/hamsters/blockstates/purple_hamster_bowl.json create mode 100644 src/main/resources/assets/hamsters/blockstates/red_cage_panel.json create mode 100644 src/main/resources/assets/hamsters/blockstates/red_hamster_bottle.json create mode 100644 src/main/resources/assets/hamsters/blockstates/red_hamster_bowl.json create mode 100644 src/main/resources/assets/hamsters/blockstates/white_cage_panel.json create mode 100644 src/main/resources/assets/hamsters/blockstates/white_hamster_bottle.json create mode 100644 src/main/resources/assets/hamsters/blockstates/white_hamster_bowl.json create mode 100644 src/main/resources/assets/hamsters/blockstates/wno.py create mode 100644 src/main/resources/assets/hamsters/blockstates/yellow_cage_panel.json create mode 100644 src/main/resources/assets/hamsters/blockstates/yellow_hamster_bottle.json create mode 100644 src/main/resources/assets/hamsters/blockstates/yellow_hamster_bowl.json create mode 100644 src/main/resources/assets/hamsters/geo/entity/frank_scp.geo.json create mode 100644 src/main/resources/assets/hamsters/models/block/bottle/black.json create mode 100644 src/main/resources/assets/hamsters/models/block/bottle/brown.json create mode 100644 src/main/resources/assets/hamsters/models/block/bottle/cyan.json create mode 100644 src/main/resources/assets/hamsters/models/block/bottle/gray.json create mode 100644 src/main/resources/assets/hamsters/models/block/bottle/green.json create mode 100644 src/main/resources/assets/hamsters/models/block/bottle/light_blue.json create mode 100644 src/main/resources/assets/hamsters/models/block/bottle/light_gray.json create mode 100644 src/main/resources/assets/hamsters/models/block/bottle/lime.json create mode 100644 src/main/resources/assets/hamsters/models/block/bottle/magenta.json create mode 100644 src/main/resources/assets/hamsters/models/block/bottle/orange.json create mode 100644 src/main/resources/assets/hamsters/models/block/bottle/pink.json create mode 100644 src/main/resources/assets/hamsters/models/block/bottle/purple.json create mode 100644 src/main/resources/assets/hamsters/models/block/bottle/red.json create mode 100644 src/main/resources/assets/hamsters/models/block/bottle/white.json create mode 100644 src/main/resources/assets/hamsters/models/block/bottle/wno.py create mode 100644 src/main/resources/assets/hamsters/models/block/bottle/yellow.json create mode 100644 src/main/resources/assets/hamsters/models/block/bowl/black.json create mode 100644 src/main/resources/assets/hamsters/models/block/bowl/brown.json create mode 100644 src/main/resources/assets/hamsters/models/block/bowl/cyan.json create mode 100644 src/main/resources/assets/hamsters/models/block/bowl/gray.json create mode 100644 src/main/resources/assets/hamsters/models/block/bowl/green.json create mode 100644 src/main/resources/assets/hamsters/models/block/bowl/light_blue.json create mode 100644 src/main/resources/assets/hamsters/models/block/bowl/light_gray.json create mode 100644 src/main/resources/assets/hamsters/models/block/bowl/lime.json create mode 100644 src/main/resources/assets/hamsters/models/block/bowl/magenta.json create mode 100644 src/main/resources/assets/hamsters/models/block/bowl/orange.json create mode 100644 src/main/resources/assets/hamsters/models/block/bowl/pink.json create mode 100644 src/main/resources/assets/hamsters/models/block/bowl/purple.json create mode 100644 src/main/resources/assets/hamsters/models/block/bowl/red.json create mode 100644 src/main/resources/assets/hamsters/models/block/bowl/white.json create mode 100644 src/main/resources/assets/hamsters/models/block/bowl/wno.py create mode 100644 src/main/resources/assets/hamsters/models/block/bowl/yellow.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/black.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/black_bottom.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/black_middle.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/black_top.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/blue.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/blue_bottom.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/blue_middle.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/blue_top.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/brown.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/brown_bottom.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/brown_middle.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/brown_top.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/cage.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/cage_bottom.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/cage_middle.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/cage_top.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/cyan.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/cyan_bottom.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/cyan_middle.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/cyan_top.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/gray.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/gray_bottom.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/gray_middle.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/gray_top.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/green.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/green_bottom.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/green_middle.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/green_top.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/light_blue.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/light_blue_bottom.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/light_blue_middle.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/light_blue_top.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/light_gray.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/light_gray_bottom.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/light_gray_middle.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/light_gray_top.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/lime.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/lime_bottom.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/lime_middle.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/lime_top.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/magenta.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/magenta_bottom.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/magenta_middle.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/magenta_top.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/orange.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/orange_bottom.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/orange_middle.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/orange_top.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/pink.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/pink_bottom.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/pink_middle.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/pink_top.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/purple.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/purple_bottom.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/purple_middle.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/purple_top.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/red.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/red_bottom.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/red_middle.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/red_top.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/white.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/white_bottom.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/white_middle.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/white_top.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/wno.py create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/yellow.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/yellow_bottom.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/yellow_middle.json create mode 100644 src/main/resources/assets/hamsters/models/block/cage_panel/yellow_top.json create mode 100644 src/main/resources/assets/hamsters/models/block/template/cage_panel.json create mode 100644 src/main/resources/assets/hamsters/models/block/template/cage_panel_bottom.json create mode 100644 src/main/resources/assets/hamsters/models/block/template/cage_panel_top.json rename src/main/resources/assets/hamsters/models/block/{ => tunnel}/6_ways.json (100%) rename src/main/resources/assets/hamsters/models/block/{ => tunnel}/base.json (100%) rename src/main/resources/assets/hamsters/models/block/{ => tunnel}/corner.json (100%) rename src/main/resources/assets/hamsters/models/block/{ => tunnel}/one_way.json (100%) rename src/main/resources/assets/hamsters/models/block/{ => tunnel}/side.json (100%) rename src/main/resources/assets/hamsters/models/block/{ => tunnel}/t_shape.json (100%) rename src/main/resources/assets/hamsters/models/block/{ => tunnel}/tunnel.json (100%) create mode 100644 src/main/resources/assets/hamsters/models/item/black_cage_panel.json create mode 100644 src/main/resources/assets/hamsters/models/item/black_hamster_ball.json create mode 100644 src/main/resources/assets/hamsters/models/item/black_hamster_bottle.json create mode 100644 src/main/resources/assets/hamsters/models/item/black_hamster_bowl.json create mode 100644 src/main/resources/assets/hamsters/models/item/blue_cage_panel.json create mode 100644 src/main/resources/assets/hamsters/models/item/blue_hamster_ball.json create mode 100644 src/main/resources/assets/hamsters/models/item/brown_cage_panel.json create mode 100644 src/main/resources/assets/hamsters/models/item/brown_hamster_ball.json create mode 100644 src/main/resources/assets/hamsters/models/item/brown_hamster_bottle.json create mode 100644 src/main/resources/assets/hamsters/models/item/brown_hamster_bowl.json create mode 100644 src/main/resources/assets/hamsters/models/item/cage_panel.json create mode 100644 src/main/resources/assets/hamsters/models/item/cyan_cage_panel.json create mode 100644 src/main/resources/assets/hamsters/models/item/cyan_hamster_ball.json create mode 100644 src/main/resources/assets/hamsters/models/item/cyan_hamster_bottle.json create mode 100644 src/main/resources/assets/hamsters/models/item/cyan_hamster_bowl.json create mode 100644 src/main/resources/assets/hamsters/models/item/gray_cage_panel.json create mode 100644 src/main/resources/assets/hamsters/models/item/gray_hamster_ball.json create mode 100644 src/main/resources/assets/hamsters/models/item/gray_hamster_bottle.json create mode 100644 src/main/resources/assets/hamsters/models/item/gray_hamster_bowl.json create mode 100644 src/main/resources/assets/hamsters/models/item/green_cage_panel.json create mode 100644 src/main/resources/assets/hamsters/models/item/green_hamster_ball.json create mode 100644 src/main/resources/assets/hamsters/models/item/green_hamster_bottle.json create mode 100644 src/main/resources/assets/hamsters/models/item/green_hamster_bowl.json create mode 100644 src/main/resources/assets/hamsters/models/item/light_blue_cage_panel.json create mode 100644 src/main/resources/assets/hamsters/models/item/light_blue_hamster_ball.json create mode 100644 src/main/resources/assets/hamsters/models/item/light_blue_hamster_bottle.json create mode 100644 src/main/resources/assets/hamsters/models/item/light_blue_hamster_bowl.json create mode 100644 src/main/resources/assets/hamsters/models/item/light_gray_cage_panel.json create mode 100644 src/main/resources/assets/hamsters/models/item/light_gray_hamster_ball.json create mode 100644 src/main/resources/assets/hamsters/models/item/light_gray_hamster_bottle.json create mode 100644 src/main/resources/assets/hamsters/models/item/light_gray_hamster_bowl.json create mode 100644 src/main/resources/assets/hamsters/models/item/lime_cage_panel.json create mode 100644 src/main/resources/assets/hamsters/models/item/lime_hamster_ball.json create mode 100644 src/main/resources/assets/hamsters/models/item/lime_hamster_bottle.json create mode 100644 src/main/resources/assets/hamsters/models/item/lime_hamster_bowl.json create mode 100644 src/main/resources/assets/hamsters/models/item/magenta_cage_panel.json create mode 100644 src/main/resources/assets/hamsters/models/item/magenta_hamster_ball.json create mode 100644 src/main/resources/assets/hamsters/models/item/magenta_hamster_bottle.json create mode 100644 src/main/resources/assets/hamsters/models/item/magenta_hamster_bowl.json create mode 100644 src/main/resources/assets/hamsters/models/item/orange_cage_panel.json create mode 100644 src/main/resources/assets/hamsters/models/item/orange_hamster_ball.json create mode 100644 src/main/resources/assets/hamsters/models/item/orange_hamster_bottle.json create mode 100644 src/main/resources/assets/hamsters/models/item/orange_hamster_bowl.json create mode 100644 src/main/resources/assets/hamsters/models/item/pink_cage_panel.json create mode 100644 src/main/resources/assets/hamsters/models/item/pink_hamster_ball.json create mode 100644 src/main/resources/assets/hamsters/models/item/pink_hamster_bottle.json create mode 100644 src/main/resources/assets/hamsters/models/item/pink_hamster_bowl.json create mode 100644 src/main/resources/assets/hamsters/models/item/purple_cage_panel.json create mode 100644 src/main/resources/assets/hamsters/models/item/purple_hamster_ball.json create mode 100644 src/main/resources/assets/hamsters/models/item/purple_hamster_bottle.json create mode 100644 src/main/resources/assets/hamsters/models/item/purple_hamster_bowl.json create mode 100644 src/main/resources/assets/hamsters/models/item/red_cage_panel.json create mode 100644 src/main/resources/assets/hamsters/models/item/red_hamster_ball.json create mode 100644 src/main/resources/assets/hamsters/models/item/red_hamster_bottle.json create mode 100644 src/main/resources/assets/hamsters/models/item/red_hamster_bowl.json create mode 100644 src/main/resources/assets/hamsters/models/item/white_cage_panel.json create mode 100644 src/main/resources/assets/hamsters/models/item/white_hamster_ball.json create mode 100644 src/main/resources/assets/hamsters/models/item/white_hamster_bottle.json create mode 100644 src/main/resources/assets/hamsters/models/item/white_hamster_bowl.json create mode 100644 src/main/resources/assets/hamsters/models/item/wno.py create mode 100644 src/main/resources/assets/hamsters/models/item/yellow_cage_panel.json create mode 100644 src/main/resources/assets/hamsters/models/item/yellow_hamster_ball.json create mode 100644 src/main/resources/assets/hamsters/models/item/yellow_hamster_bottle.json create mode 100644 src/main/resources/assets/hamsters/models/item/yellow_hamster_bowl.json create mode 100644 src/main/resources/assets/hamsters/textures/block/bottle/black.png create mode 100644 src/main/resources/assets/hamsters/textures/block/bottle/brown.png create mode 100644 src/main/resources/assets/hamsters/textures/block/bottle/cyan.png create mode 100644 src/main/resources/assets/hamsters/textures/block/bottle/gray.png create mode 100644 src/main/resources/assets/hamsters/textures/block/bottle/green.png create mode 100644 src/main/resources/assets/hamsters/textures/block/bottle/light_blue.png create mode 100644 src/main/resources/assets/hamsters/textures/block/bottle/light_gray.png create mode 100644 src/main/resources/assets/hamsters/textures/block/bottle/lime.png create mode 100644 src/main/resources/assets/hamsters/textures/block/bottle/magenta.png create mode 100644 src/main/resources/assets/hamsters/textures/block/bottle/orange.png create mode 100644 src/main/resources/assets/hamsters/textures/block/bottle/pink.png create mode 100644 src/main/resources/assets/hamsters/textures/block/bottle/purple.png create mode 100644 src/main/resources/assets/hamsters/textures/block/bottle/red.png create mode 100644 src/main/resources/assets/hamsters/textures/block/bottle/white.png create mode 100644 src/main/resources/assets/hamsters/textures/block/bottle/yellow.png create mode 100644 src/main/resources/assets/hamsters/textures/block/bowl/black.png create mode 100644 src/main/resources/assets/hamsters/textures/block/bowl/brown.png create mode 100644 src/main/resources/assets/hamsters/textures/block/bowl/cyan.png create mode 100644 src/main/resources/assets/hamsters/textures/block/bowl/gray.png create mode 100644 src/main/resources/assets/hamsters/textures/block/bowl/green.png create mode 100644 src/main/resources/assets/hamsters/textures/block/bowl/light_blue.png create mode 100644 src/main/resources/assets/hamsters/textures/block/bowl/light_gray.png create mode 100644 src/main/resources/assets/hamsters/textures/block/bowl/lime.png create mode 100644 src/main/resources/assets/hamsters/textures/block/bowl/magenta.png create mode 100644 src/main/resources/assets/hamsters/textures/block/bowl/orange.png create mode 100644 src/main/resources/assets/hamsters/textures/block/bowl/pink.png create mode 100644 src/main/resources/assets/hamsters/textures/block/bowl/purple.png create mode 100644 src/main/resources/assets/hamsters/textures/block/bowl/red.png create mode 100644 src/main/resources/assets/hamsters/textures/block/bowl/white.png create mode 100644 src/main/resources/assets/hamsters/textures/block/bowl/yellow.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/black.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/black_bottom.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/black_middle.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/black_top.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/blue.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/blue_bottom.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/blue_middle.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/blue_top.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/brown.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/brown_bottom.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/brown_middle.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/brown_top.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/cage.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/cage_bottom.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/cage_middle.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/cage_top.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/cyan.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/cyan_bottom.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/cyan_middle.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/cyan_top.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/gray.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/gray_bottom.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/gray_middle.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/gray_top.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/green.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/green_bottom.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/green_middle.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/green_top.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/light_blue.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/light_blue_bottom.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/light_blue_middle.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/light_blue_top.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/light_gray.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/light_gray_bottom.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/light_gray_middle.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/light_gray_top.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/lime.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/lime_bottom.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/lime_middle.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/lime_top.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/magenta.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/magenta_middle.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/magenta_top.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/mangenta_bottom.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/orange.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/orange_bottom.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/orange_middle.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/orange_top.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/pink.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/pink_bottom.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/pink_middle.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/pink_top.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/purple.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/purple_bottom.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/purple_middle.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/purple_top.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/red.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/red_bottom.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/red_middle.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/red_top.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/white.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/white_bottom.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/white_middle.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/white_top.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/yellow.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/yellow_bottom.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/yellow_middle.png create mode 100644 src/main/resources/assets/hamsters/textures/block/cage/yellow_top.png create mode 100644 src/main/resources/assets/hamsters/textures/entity/frank_scp.png create mode 100644 src/main/resources/assets/hamsters/textures/item/ball/black.png create mode 100644 src/main/resources/assets/hamsters/textures/item/ball/blue.png create mode 100644 src/main/resources/assets/hamsters/textures/item/ball/brown.png create mode 100644 src/main/resources/assets/hamsters/textures/item/ball/cyan.png create mode 100644 src/main/resources/assets/hamsters/textures/item/ball/gray.png create mode 100644 src/main/resources/assets/hamsters/textures/item/ball/green.png create mode 100644 src/main/resources/assets/hamsters/textures/item/ball/light_blue.png create mode 100644 src/main/resources/assets/hamsters/textures/item/ball/light_gray.png create mode 100644 src/main/resources/assets/hamsters/textures/item/ball/lime.png create mode 100644 src/main/resources/assets/hamsters/textures/item/ball/magenta.png create mode 100644 src/main/resources/assets/hamsters/textures/item/ball/orange.png create mode 100644 src/main/resources/assets/hamsters/textures/item/ball/pink.png create mode 100644 src/main/resources/assets/hamsters/textures/item/ball/purple.png create mode 100644 src/main/resources/assets/hamsters/textures/item/ball/red.png create mode 100644 src/main/resources/assets/hamsters/textures/item/ball/white.png create mode 100644 src/main/resources/assets/hamsters/textures/item/ball/yellow.png delete mode 100644 src/main/resources/assets/hamsters/textures/item/blue_hamster_bottle.png delete mode 100644 src/main/resources/assets/hamsters/textures/item/blue_hamster_bowl.png create mode 100644 src/main/resources/assets/hamsters/textures/item/bottle/black.png create mode 100644 src/main/resources/assets/hamsters/textures/item/bottle/blue.png create mode 100644 src/main/resources/assets/hamsters/textures/item/bottle/brown.png create mode 100644 src/main/resources/assets/hamsters/textures/item/bottle/cyan.png create mode 100644 src/main/resources/assets/hamsters/textures/item/bottle/gray.png create mode 100644 src/main/resources/assets/hamsters/textures/item/bottle/green.png create mode 100644 src/main/resources/assets/hamsters/textures/item/bottle/light_blue.png create mode 100644 src/main/resources/assets/hamsters/textures/item/bottle/light_gray.png create mode 100644 src/main/resources/assets/hamsters/textures/item/bottle/lime.png create mode 100644 src/main/resources/assets/hamsters/textures/item/bottle/magenta.png create mode 100644 src/main/resources/assets/hamsters/textures/item/bottle/orange.png create mode 100644 src/main/resources/assets/hamsters/textures/item/bottle/pink.png create mode 100644 src/main/resources/assets/hamsters/textures/item/bottle/purple.png create mode 100644 src/main/resources/assets/hamsters/textures/item/bottle/red.png create mode 100644 src/main/resources/assets/hamsters/textures/item/bottle/white.png create mode 100644 src/main/resources/assets/hamsters/textures/item/bottle/yellow.png create mode 100644 src/main/resources/assets/hamsters/textures/item/bowl/black.png create mode 100644 src/main/resources/assets/hamsters/textures/item/bowl/blue.png create mode 100644 src/main/resources/assets/hamsters/textures/item/bowl/brown.png create mode 100644 src/main/resources/assets/hamsters/textures/item/bowl/cyan.png create mode 100644 src/main/resources/assets/hamsters/textures/item/bowl/gray.png create mode 100644 src/main/resources/assets/hamsters/textures/item/bowl/green.png create mode 100644 src/main/resources/assets/hamsters/textures/item/bowl/light_blue.png create mode 100644 src/main/resources/assets/hamsters/textures/item/bowl/light_gray.png create mode 100644 src/main/resources/assets/hamsters/textures/item/bowl/lime.png create mode 100644 src/main/resources/assets/hamsters/textures/item/bowl/magenta.png create mode 100644 src/main/resources/assets/hamsters/textures/item/bowl/orange.png create mode 100644 src/main/resources/assets/hamsters/textures/item/bowl/pink.png create mode 100644 src/main/resources/assets/hamsters/textures/item/bowl/purple.png create mode 100644 src/main/resources/assets/hamsters/textures/item/bowl/red.png create mode 100644 src/main/resources/assets/hamsters/textures/item/bowl/white.png create mode 100644 src/main/resources/assets/hamsters/textures/item/bowl/yellow.png delete mode 100644 src/main/resources/assets/hamsters/textures/item/hamster_ball.png create mode 100644 src/main/resources/data/hamsters/advancements/recipes/cage_panel.json create mode 100644 src/main/resources/data/hamsters/recipes/cage_panel.json create mode 100644 src/main/resources/data/hamsters/tags/items/cage_panels.json diff --git a/src/main/java/com/starfish_studios/hamsters/HamstersVanillaIntegration.java b/src/main/java/com/starfish_studios/hamsters/HamstersVanillaIntegration.java index 1af3641..5f3a748 100644 --- a/src/main/java/com/starfish_studios/hamsters/HamstersVanillaIntegration.java +++ b/src/main/java/com/starfish_studios/hamsters/HamstersVanillaIntegration.java @@ -1,5 +1,6 @@ package com.starfish_studios.hamsters; +import com.starfish_studios.hamsters.block.CagePanelBlock; import com.starfish_studios.hamsters.client.renderer.*; import com.starfish_studios.hamsters.registry.HamstersBlocks; import com.starfish_studios.hamsters.registry.HamstersEntityType; @@ -37,15 +38,45 @@ private static void registerModelLayers() { EntityRendererRegistry.register(HamstersEntityType.HAMSTER, HamsterRenderer::new); EntityRendererRegistry.register(HamstersEntityType.HAMSTER_NEW, HamsterNewRenderer::new); EntityRendererRegistry.register(HamstersEntityType.HAMSTER_BALL, HamsterBallRenderer::new); + EntityRendererRegistry.register(HamstersEntityType.FRANK, FrankRenderer::new); } private static void registerBlockRenderLayers() { - // BlockRenderLayerMap.INSTANCE.putBlock(HamstersBlocks.TUNNEL, RenderType.translucent()); - BlockRenderLayerMap.INSTANCE.putBlock( - + BlockRenderLayerMap.INSTANCE.putBlocks(RenderType.cutout(), + HamstersBlocks.CAGE_PANEL, + HamstersBlocks.RED_CAGE_PANEL, + HamstersBlocks.ORANGE_CAGE_PANEL, + HamstersBlocks.YELLOW_CAGE_PANEL, + HamstersBlocks.LIME_CAGE_PANEL, + HamstersBlocks.GREEN_CAGE_PANEL, + HamstersBlocks.CYAN_CAGE_PANEL, + HamstersBlocks.BLUE_CAGE_PANEL, + HamstersBlocks.LIGHT_BLUE_CAGE_PANEL, + HamstersBlocks.PINK_CAGE_PANEL, + HamstersBlocks.MAGENTA_CAGE_PANEL, + HamstersBlocks.PURPLE_CAGE_PANEL, + HamstersBlocks.WHITE_CAGE_PANEL, + HamstersBlocks.LIGHT_GRAY_CAGE_PANEL, + HamstersBlocks.GRAY_CAGE_PANEL, + HamstersBlocks.BLACK_CAGE_PANEL, + HamstersBlocks.BROWN_CAGE_PANEL, + HamstersBlocks.RED_HAMSTER_BOWL, + HamstersBlocks.ORANGE_HAMSTER_BOWL, + HamstersBlocks.YELLOW_HAMSTER_BOWL, + HamstersBlocks.LIME_HAMSTER_BOWL, + HamstersBlocks.GREEN_HAMSTER_BOWL, + HamstersBlocks.CYAN_HAMSTER_BOWL, HamstersBlocks.BLUE_HAMSTER_BOWL, - - RenderType.cutout()); + HamstersBlocks.LIGHT_BLUE_HAMSTER_BOWL, + HamstersBlocks.PINK_HAMSTER_BOWL, + HamstersBlocks.MAGENTA_HAMSTER_BOWL, + HamstersBlocks.PURPLE_HAMSTER_BOWL, + HamstersBlocks.WHITE_HAMSTER_BOWL, + HamstersBlocks.LIGHT_GRAY_HAMSTER_BOWL, + HamstersBlocks.GRAY_HAMSTER_BOWL, + HamstersBlocks.BLACK_HAMSTER_BOWL, + HamstersBlocks.BROWN_HAMSTER_BOWL + ); } } diff --git a/src/main/java/com/starfish_studios/hamsters/block/CagePanelBlock.java b/src/main/java/com/starfish_studios/hamsters/block/CagePanelBlock.java new file mode 100644 index 0000000..e527401 --- /dev/null +++ b/src/main/java/com/starfish_studios/hamsters/block/CagePanelBlock.java @@ -0,0 +1,157 @@ +package com.starfish_studios.hamsters.block; + +import com.starfish_studios.hamsters.block.properties.CageType; +import com.starfish_studios.hamsters.registry.HamstersTags; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.context.BlockPlaceContext; +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.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.DirectionProperty; +import net.minecraft.world.level.block.state.properties.EnumProperty; +import net.minecraft.world.level.pathfinder.PathComputationType; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public class CagePanelBlock extends Block { + public static final DirectionProperty FACING = BlockStateProperties.HORIZONTAL_FACING; + public static final EnumProperty TYPE = EnumProperty.create("type", CageType.class); + + public static final VoxelShape NORTH_AABB = Block.box(0, 0, 15, 16, 16, 16); + public static final VoxelShape EAST_AABB = Block.box(0, 0, 0, 1, 16, 16); + public static final VoxelShape SOUTH_AABB = Block.box(0, 0, 0, 16, 16, 1); + public static final VoxelShape WEST_AABB = Block.box(15, 0, 0, 16, 16, 16); + + public static final VoxelShape NORTH_COLLISION_AABB = Block.box(0, 0, 15, 16, 24, 16); + public static final VoxelShape EAST_COLLISION_AABB = Block.box(0, 0, 0, 1, 24, 16); + public static final VoxelShape SOUTH_COLLISION_AABB = Block.box(0, 0, 0, 16, 24, 1); + public static final VoxelShape WEST_COLLISION_AABB = Block.box(15, 0, 0, 16, 24, 16); + + public CagePanelBlock(Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any() + .setValue(TYPE, CageType.NONE)); + } + + @Override + public @NotNull VoxelShape getShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) { + Direction direction = state.getValue(FACING); + return switch (direction) { + case EAST -> EAST_AABB; + case SOUTH -> SOUTH_AABB; + case WEST -> WEST_AABB; + default -> NORTH_AABB; + }; + } + + //getCollisionShape + @Override + public @NotNull VoxelShape getCollisionShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) { + Direction direction = state.getValue(FACING); + return switch (direction) { + case EAST -> EAST_COLLISION_AABB; + case SOUTH -> SOUTH_COLLISION_AABB; + case WEST -> WEST_COLLISION_AABB; + default -> NORTH_COLLISION_AABB; + }; + } + + @Override + public @NotNull InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) { + if (player.getItemInHand(hand).is(HamstersTags.CAGE_PANELS)) { + BlockPos above = pos.above(); + if (level.isEmptyBlock(above)) { + BlockItem blockItem = (BlockItem) player.getItemInHand(hand).getItem(); +// level.setBlock(above, state, 3); + level.setBlock(above, blockItem.getBlock().defaultBlockState().setValue(FACING, state.getValue(FACING)), 3); + level.playSound(null, pos, this.getSoundType(state).getPlaceSound(), SoundSource.BLOCKS, level.random.nextFloat() * 0.25F + 0.7F, level.random.nextFloat() * 0.1F + 0.9F); + return InteractionResult.SUCCESS; + } + } + return InteractionResult.PASS; + } + + + public float getShadeBrightness(BlockState blockState, BlockGetter blockGetter, BlockPos blockPos) { + return 1.0F; + } + + public boolean propagatesSkylightDown(BlockState blockState, BlockGetter blockGetter, BlockPos blockPos) { + return true; + } + + @Override + public boolean isPathfindable(BlockState state, BlockGetter reader, BlockPos pos, PathComputationType type) { + return false; + } + + @Nullable + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + Level level = context.getLevel(); + BlockPos pos = context.getClickedPos(); + Direction direction = context.getHorizontalDirection().getOpposite(); + + BlockState state = this.defaultBlockState().setValue(FACING, direction); + state = state.setValue(TYPE, getType(state, getRelativeTop(level, pos, direction), getRelativeBottom(level, pos, direction))); + return state; + } + + + public boolean skipRendering(BlockState blockState, BlockState blockState2, Direction direction) { +// return blockState2.is(this) && blockState2.getValue(FACING) == blockState.getValue(FACING); + return blockState2.getBlock() instanceof CagePanelBlock && blockState2.getValue(FACING) == blockState.getValue(FACING); + } + + @Override + public void neighborChanged(BlockState state, Level level, BlockPos pos, Block block, BlockPos fromPos, boolean isMoving) { + if (level.isClientSide) return; + + Direction direction = state.getValue(FACING); + CageType type = getType(state, getRelativeTop(level, pos, direction), getRelativeBottom(level, pos, direction)); + if (state.getValue(TYPE) == type) return; + + state = state.setValue(TYPE, type); + level.setBlock(pos, state, 3); + } + + public BlockState getRelativeTop(Level level, BlockPos pos, Direction direction) { + return level.getBlockState(pos.above()); + } + + public BlockState getRelativeBottom(Level level, BlockPos pos, Direction direction) { + return level.getBlockState(pos.below()); + } + + public CageType getType(BlockState state, BlockState above, BlockState below) { +// boolean shape_above_same = above.is(state.getBlock()) && state.getValue(FACING) == above.getValue(FACING); +// boolean shape_below_same = below.is(state.getBlock()) && state.getValue(FACING) == below.getValue(FACING); + + // Return the booleans the same as above but instead of state.getBlock, do it if they're an instanceof CagePanelBlock + boolean shape_above_same = above.getBlock() instanceof CagePanelBlock && state.getValue(FACING) == above.getValue(FACING); + boolean shape_below_same = below.getBlock() instanceof CagePanelBlock && state.getValue(FACING) == below.getValue(FACING); + + if (shape_above_same && !shape_below_same) return CageType.BOTTOM; + else if (!shape_above_same && shape_below_same) return CageType.TOP; + else if (shape_above_same) return CageType.MIDDLE; + return CageType.NONE; + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(TYPE, FACING); + } +} diff --git a/src/main/java/com/starfish_studios/hamsters/block/properties/CageType.java b/src/main/java/com/starfish_studios/hamsters/block/properties/CageType.java new file mode 100644 index 0000000..59e5b6e --- /dev/null +++ b/src/main/java/com/starfish_studios/hamsters/block/properties/CageType.java @@ -0,0 +1,24 @@ +package com.starfish_studios.hamsters.block.properties; + +import net.minecraft.util.StringRepresentable; + +public enum CageType implements StringRepresentable { + TOP("top"), + MIDDLE("middle"), + BOTTOM("bottom"), + NONE("none"); + + private final String name; + + private CageType(String type) { + this.name = type; + } + + public String toString() { + return this.name; + } + + public String getSerializedName() { + return this.name; + } +} \ No newline at end of file diff --git a/src/main/java/com/starfish_studios/hamsters/entity/Frank.java b/src/main/java/com/starfish_studios/hamsters/entity/Frank.java new file mode 100644 index 0000000..6be0793 --- /dev/null +++ b/src/main/java/com/starfish_studios/hamsters/entity/Frank.java @@ -0,0 +1,157 @@ +package com.starfish_studios.hamsters.entity; + +import com.starfish_studios.hamsters.entity.common.HamstersGeoEntity; +import com.starfish_studios.hamsters.entity.common.MMPathNavigatorGround; +import com.starfish_studios.hamsters.entity.common.SmartBodyHelper; +import com.starfish_studios.hamsters.registry.HamstersEntityType; +import com.starfish_studios.hamsters.registry.HamstersItems; +import net.minecraft.core.NonNullList; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.*; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.ai.control.BodyRotationControl; +import net.minecraft.world.entity.ai.goal.*; +import net.minecraft.world.entity.ai.navigation.PathNavigation; +import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec3; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache; +import software.bernie.geckolib.core.animation.AnimatableManager; +import software.bernie.geckolib.core.animation.AnimationController; +import software.bernie.geckolib.core.animation.AnimationState; +import software.bernie.geckolib.core.animation.RawAnimation; +import software.bernie.geckolib.core.object.PlayState; +import software.bernie.geckolib.util.GeckoLibUtil; + +import java.util.Objects; + +public class Frank extends Monster implements HamstersGeoEntity { + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + + protected static final RawAnimation IDLE = RawAnimation.begin().thenLoop("animation.frank.idle"); + protected static final RawAnimation WALK = RawAnimation.begin().thenLoop("animation.frank.walk"); + protected static final RawAnimation RUN = RawAnimation.begin().thenLoop("animation.frank.run"); + protected static final RawAnimation BITE = RawAnimation.begin().thenLoop("animation.frank.bite"); + + + public Frank(EntityType entityType, Level level) { + super(entityType, level); + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, 20.0) + .add(Attributes.MOVEMENT_SPEED, 0.27); + } + + // Goals + @Override + protected void registerGoals() { + super.registerGoals(); + this.goalSelector.addGoal(0, new FloatGoal(this)); + this.goalSelector.addGoal(1, new PanicGoal(this, 1.5)); + this.goalSelector.addGoal(2, new WaterAvoidingRandomStrollGoal(this, 1.0)); + this.goalSelector.addGoal(3, new RandomLookAroundGoal(this)); + } + + @Override + public void customServerAiStep() { + this.setSprinting(this.getMoveControl().getSpeedModifier() >= 1.5F); + super.customServerAiStep(); + } + + @Override + protected @NotNull PathNavigation createNavigation(@NotNull Level level) { + return new MMPathNavigatorGround(this, level); + } + + @Override + protected @NotNull BodyRotationControl createBodyControl() { + return new SmartBodyHelper(this); + } + + // region MISC + + @Override + protected void defineSynchedData() { + super.defineSynchedData(); + } + + @Override + public void readAdditionalSaveData(CompoundTag compoundTag) { + super.readAdditionalSaveData(compoundTag); + } + + @Override + public void addAdditionalSaveData(CompoundTag compoundTag) { + super.addAdditionalSaveData(compoundTag); + } + + @Override + public @NotNull ItemStack getItemBySlot(EquipmentSlot equipmentSlot) { + return ItemStack.EMPTY; + } + + @Override + public void setItemSlot(EquipmentSlot equipmentSlot, ItemStack itemStack) { + this.verifyEquippedItem(itemStack); + } + + @Override + public @NotNull HumanoidArm getMainArm() { + return HumanoidArm.RIGHT; + } + + // endregion + + + // region GECKOLIB + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllerRegistrar) { + controllerRegistrar.add(new AnimationController<>(this, "controller", 5, this::animController)); + controllerRegistrar.add(new AnimationController<>(this, "attack_controller", 5, this::attackController)); + } + + protected PlayState attackController(final AnimationState event) { + if (this.swinging && event.getController().getAnimationState().equals(AnimationController.State.STOPPED)) { + event.getController().forceAnimationReset(); + + event.getController().setAnimation(BITE); + this.swinging = false; + } + return PlayState.STOP; + } + + protected PlayState animController(final AnimationState event) { + if (event.isMoving()) { + event.setControllerSpeed(2.0F * event.getLimbSwingAmount()); + if (this.isSprinting()) { + event.setAnimation(RUN); + } else { + event.setAnimation(WALK); + } + } else { + event.setAnimation(IDLE); + } + return PlayState.CONTINUE; + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + // endregion +} diff --git a/src/main/java/com/starfish_studios/hamsters/entity/Hamster.java b/src/main/java/com/starfish_studios/hamsters/entity/Hamster.java index 7002934..5d2d3db 100644 --- a/src/main/java/com/starfish_studios/hamsters/entity/Hamster.java +++ b/src/main/java/com/starfish_studios/hamsters/entity/Hamster.java @@ -1,11 +1,12 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + package com.starfish_studios.hamsters.entity; -import com.google.common.collect.Lists; -import com.starfish_studios.hamsters.block.BowlBlock; import com.starfish_studios.hamsters.block.HamsterWheelBlock; -import com.starfish_studios.hamsters.block.entity.HamsterWheelBlockEntity; -import com.starfish_studios.hamsters.entity.common.MMPathNavigatorGround; -import com.starfish_studios.hamsters.entity.common.SmartBodyHelper; +import com.starfish_studios.hamsters.entity.common.SearchForItemsGoal; import com.starfish_studios.hamsters.registry.*; import net.minecraft.CrashReport; import net.minecraft.CrashReportCategory; @@ -14,16 +15,15 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.NbtUtils; import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.server.level.ServerLevel; import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundEvents; +import net.minecraft.tags.ItemTags; import net.minecraft.util.ByIdMap; import net.minecraft.util.RandomSource; -import net.minecraft.util.VisibleForDebug; import net.minecraft.world.DifficultyInstance; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; @@ -31,13 +31,9 @@ import net.minecraft.world.entity.*; import net.minecraft.world.entity.ai.attributes.AttributeSupplier; import net.minecraft.world.entity.ai.attributes.Attributes; -import net.minecraft.world.entity.ai.control.BodyRotationControl; import net.minecraft.world.entity.ai.control.LookControl; import net.minecraft.world.entity.ai.goal.*; -import net.minecraft.world.entity.ai.navigation.PathNavigation; import net.minecraft.world.entity.ai.targeting.TargetingConditions; -import net.minecraft.world.entity.ai.village.poi.PoiManager; -import net.minecraft.world.entity.ai.village.poi.PoiRecord; import net.minecraft.world.entity.animal.Animal; import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.player.Player; @@ -46,13 +42,10 @@ import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; -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.level.pathfinder.BlockPathTypes; -import net.minecraft.world.level.pathfinder.Path; +import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -68,18 +61,16 @@ import java.util.*; import java.util.function.IntFunction; import java.util.function.Predicate; -import java.util.stream.Stream; import static com.starfish_studios.hamsters.block.HamsterWheelBlock.FACING; +import static com.starfish_studios.hamsters.block.HamsterWheelBlock.ejectSeatedExceptPlayer; public class Hamster extends TamableAnimal implements GeoEntity { // region protected static final RawAnimation IDLE = RawAnimation.begin().thenLoop("animation.sf_nba.hamster.idle"); protected static final RawAnimation WALK = RawAnimation.begin().thenLoop("animation.sf_nba.hamster.walk"); - protected static final RawAnimation PINKIE_WALK = RawAnimation.begin().thenLoop("animation.sf_nba.hamster.pinkie_walk"); protected static final RawAnimation RUN = RawAnimation.begin().thenLoop("animation.sf_nba.hamster.run"); protected static final RawAnimation SLEEP = RawAnimation.begin().thenLoop("animation.sf_nba.hamster.sleep"); - protected static final RawAnimation DANCE = RawAnimation.begin().thenLoop("animation.sf_nba.hamster.dance2"); protected static final RawAnimation STANDING = RawAnimation.begin().thenLoop("animation.sf_nba.hamster.standing"); private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); @@ -87,32 +78,13 @@ public class Hamster extends TamableAnimal implements GeoEntity { private static final Ingredient FOOD_ITEMS = Ingredient.of(HamstersTags.HAMSTER_FOOD); private static final EntityDataAccessor DATA_INTERESTED = SynchedEntityData.defineId(Hamster.class, EntityDataSerializers.BOOLEAN); - private static final EntityDataAccessor VARIANT = SynchedEntityData.defineId(Hamster.class, EntityDataSerializers.INT); - private static final EntityDataAccessor MARKING = SynchedEntityData.defineId(Hamster.class, EntityDataSerializers.INT); + private static final EntityDataAccessor DATA_VARIANT = SynchedEntityData.defineId(Hamster.class, EntityDataSerializers.INT); private static final EntityDataAccessor FROM_HAND = SynchedEntityData.defineId(Hamster.class, EntityDataSerializers.BOOLEAN); private static final EntityDataAccessor WAIT_TIME_BEFORE_RUN = SynchedEntityData.defineId(Hamster.class, EntityDataSerializers.INT); private static final EntityDataAccessor WAIT_TIME_WHEN_RUNNING = SynchedEntityData.defineId(Hamster.class, EntityDataSerializers.INT); - private static final EntityDataAccessor INTERESTED_TICKS = SynchedEntityData.defineId(Hamster.class, EntityDataSerializers.INT); Hamster.HamsterGoToWheelGoal hamsterGoToWheelGoal; - - - @Nullable - private BlockPos jukebox; - private boolean hamsterDance; - - protected int interestedTicks; - // endregion - private static final int TICKS_BEFORE_GOING_TO_WHEEL = 2400; - public static final String TAG_WHEEL_POS = "WheelPos"; - private static final int COOLDOWN_BEFORE_LOCATING_NEW_WHEEL = 200; - int remainingCooldownBeforeLocatingNewWheel; - - int ticksWithoutWaterSinceExitingWheel; - @Nullable - BlockPos wheelPos; - public Hamster(EntityType entityType, Level level) { super(entityType, level); @@ -132,155 +104,87 @@ public Hamster(EntityType entityType, Level level) { // endregion } - - @Override - protected @NotNull PathNavigation createNavigation(@NotNull Level level) { - return new MMPathNavigatorGround(this, level); - } - - @Override - protected @NotNull BodyRotationControl createBodyControl() { - return new SmartBodyHelper(this); - } - - public void rideTick() { - super.rideTick(); - Entity var2 = this.getControlledVehicle(); - if (var2 instanceof HamsterBall hamsterBall) { - this.yBodyRot = hamsterBall.yBodyRot; - } - - } - // region BASIC ENTITY protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); - this.goalSelector.addGoal(1, new PanicGoal(this, 1.3)); - this.goalSelector.addGoal(2, new SitWhenOrderedToGoal(this)); - this.goalSelector.addGoal(3, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(4, new Hamster.HamsterEnterWheelGoal()); - this.goalSelector.addGoal(5, new Hamster.HamsterLocateWheelGoal()); - this.goalSelector.addGoal(5, new Hamster.HamsterGoToWheelGoal()); + this.goalSelector.addGoal(0, new PanicGoal(this, 1.3)); + this.goalSelector.addGoal(1, new SitWhenOrderedToGoal(this)); + this.goalSelector.addGoal(2, new BreedGoal(this, 1.0)); + this.goalSelector.addGoal(3, new SleepGoal()); + this.hamsterGoToWheelGoal = new HamsterGoToWheelGoal(); + this.goalSelector.addGoal(4, this.hamsterGoToWheelGoal); + this.goalSelector.addGoal(4, new SearchForItemsGoal(this, 1.25F, FOOD_ITEMS, 8.0D, 8.0D)); + this.goalSelector.addGoal(4, new TemptGoal(this, 1.25, FOOD_ITEMS, false)); + this.goalSelector.addGoal(5, new FollowParentGoal(this, 1.25)); this.goalSelector.addGoal(6, new WaterAvoidingRandomStrollGoal(this, 1.0)); this.goalSelector.addGoal(7, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(9, new RandomLookAroundGoal(this)); + this.goalSelector.addGoal(8, new RandomLookAroundGoal(this)); + this.goalSelector.addGoal(9, new RunInWheelGoal()); } -// protected void registerGoals() { -// this.goalSelector.addGoal(0, new FloatGoal(this)); -// this.goalSelector.addGoal(0, new PanicGoal(this, 1.3)); -// this.goalSelector.addGoal(1, new HamsterGoToBlockGoal()); -// this.goalSelector.addGoal(2, new SitWhenOrderedToGoal(this)); -// this.goalSelector.addGoal(3, new BreedGoal(this, 1.0)); -// this.goalSelector.addGoal(3, new SleepGoal()); -// this.hamsterGoToWheelGoal = new HamsterGoToWheelGoal(); -// this.goalSelector.addGoal(4, this.hamsterGoToWheelGoal); -// this.goalSelector.addGoal(4, new SearchForItemsGoal(this, 1.25F, FOOD_ITEMS, 8.0D, 8.0D)); -// this.goalSelector.addGoal(4, new TemptGoal(this, 1.25, FOOD_ITEMS, false)); -// this.goalSelector.addGoal(6, new FollowParentGoal(this, 1.25)); -// this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0)); -// this.goalSelector.addGoal(8, new LookAtPlayerGoal(this, Player.class, 6.0F)); -// this.goalSelector.addGoal(9, new RandomLookAroundGoal(this)); -// } - @Override public void customServerAiStep() { - if (!this.isBaby()) { - if (this.getMoveControl().hasWanted()) { - this.setSprinting(this.getMoveControl().getSpeedModifier() >= 1.3D); - } else { - this.setSprinting(false); - } + if (this.getMoveControl().hasWanted()) { + this.setSprinting(this.getMoveControl().getSpeedModifier() >= 1.3D); + } else { + this.setSprinting(false); } super.customServerAiStep(); } - @Override - public void travel(@NotNull Vec3 vec3) { - if (this.isBaby()) { - vec3 = vec3.scale(0.2D); - } - if (this.isHamsterDance()) { - this.setDeltaMovement(this.getDeltaMovement().multiply(0, 1, 0)); - vec3 = vec3.multiply(0, 1, 0); - } - super.travel(vec3); - } - public static AttributeSupplier.Builder createAttributes() { return Mob.createMobAttributes().add(Attributes.MAX_HEALTH, 5.0).add(Attributes.MOVEMENT_SPEED, 0.25).add(Attributes.ATTACK_DAMAGE, 1.5); } - public @NotNull InteractionResult mobInteract(Player player, @NotNull InteractionHand interactionHand) { + public InteractionResult mobInteract(Player player, InteractionHand interactionHand) { ItemStack itemStack = player.getItemInHand(interactionHand); - - - if (itemStack.is(HamstersItems.HAMSTER_BALL)) { - if (!this.level().isClientSide) { - HamsterBall hamsterBall = new HamsterBall(HamstersEntityType.HAMSTER_BALL, this.level()); - hamsterBall.setPos(this.getX(), this.getY(), this.getZ()); - this.level().addFreshEntity(hamsterBall); - this.startRiding(hamsterBall); - this.setPersistenceRequired(); - if (!player.isCreative()) { - itemStack.shrink(1); - } - - this.playSound(SoundEvents.ITEM_PICKUP, 0.4F, ((level().random.nextFloat() - level().random.nextFloat()) * 0.7F + 1.0F) * 1.5F); - - - } - return InteractionResult.SUCCESS; - } - - if (!this.isBaby()) { - if (this.level().isClientSide) { - if (this.isTame() && this.isOwnedBy(player)) { - return InteractionResult.SUCCESS; - } else { - return !this.isFood(itemStack) || !(this.getHealth() < this.getMaxHealth()) && this.isTame() ? InteractionResult.PASS : InteractionResult.SUCCESS; - } + if (this.level().isClientSide) { + if (this.isTame() && this.isOwnedBy(player)) { + return InteractionResult.SUCCESS; } else { - InteractionResult interactionResult; - if (this.isTame()) { - if (this.isOwnedBy(player) && this.isFood(itemStack) && (this.getHealth() < this.getMaxHealth())) { - this.usePlayerItem(player, interactionHand, itemStack); - this.heal(2.0F); - return InteractionResult.CONSUME; - } else if (this.isOwnedBy(player)) { - interactionResult = super.mobInteract(player, interactionHand); - if (!interactionResult.consumesAction() || this.isBaby()) { - this.setOrderedToSit(!this.isOrderedToSit()); - } - if (this.isOwnedBy(player) && player.isShiftKeyDown()) { - this.catchHamster(player); - } - return interactionResult; - } - } else if (this.isFood(itemStack)) { + return !this.isFood(itemStack) || !(this.getHealth() < this.getMaxHealth()) && this.isTame() ? InteractionResult.PASS : InteractionResult.SUCCESS; + } + } else { + InteractionResult interactionResult; + if (this.isTame()) { + if (this.isOwnedBy(player) && this.isFood(itemStack) && (this.getHealth() < this.getMaxHealth())) { this.usePlayerItem(player, interactionHand, itemStack); - if (this.random.nextInt(3) == 0) { - this.tame(player); - this.setOrderedToSit(true); - this.level().broadcastEntityEvent(this, (byte) 7); - } else { - this.level().broadcastEntityEvent(this, (byte) 6); - } - this.setPersistenceRequired(); + this.heal(2.0F); return InteractionResult.CONSUME; + } else if (this.isOwnedBy(player)) { + interactionResult = super.mobInteract(player, interactionHand); + if (!interactionResult.consumesAction() || this.isBaby()) { + this.setOrderedToSit(!this.isOrderedToSit()); + } + if (this.isOwnedBy(player) && player.isShiftKeyDown()) { + this.catchHamster(player); + } + return interactionResult; } + } else if (this.isFood(itemStack)) { + this.usePlayerItem(player, interactionHand, itemStack); + if (this.random.nextInt(3) == 0) { + this.tame(player); + this.setOrderedToSit(true); + this.level().broadcastEntityEvent(this, (byte)7); + } else { + this.level().broadcastEntityEvent(this, (byte)6); + } + + this.setPersistenceRequired(); + return InteractionResult.CONSUME; } } return super.mobInteract(player, interactionHand); } - protected float getStandingEyeHeight(@NotNull Pose pose, @NotNull EntityDimensions entityDimensions) { + protected float getStandingEyeHeight(Pose pose, EntityDimensions entityDimensions) { return this.isBaby() ? 0.2F : 0.3F; } - public boolean isFood(@NotNull ItemStack itemStack) { + public boolean isFood(ItemStack itemStack) { return FOOD_ITEMS.test(itemStack); } @@ -288,7 +192,7 @@ public boolean isFood(@NotNull ItemStack itemStack) { // region CATCHING - public void catchHamster(Player player) { + public InteractionResult catchHamster(Player player) { ItemStack output = this.getCaughtItemStack(); saveDefaultDataToItemTag(this, output); if (!player.getInventory().add(output)) { @@ -299,6 +203,7 @@ public void catchHamster(Player player) { } this.discard(); player.getInventory().add(output); + return InteractionResult.sidedSuccess(true); } private static void saveDefaultDataToItemTag(Hamster mob, ItemStack itemStack) { @@ -338,11 +243,13 @@ public ItemStack getCaughtItemStack() { // region SOUNDS + + protected SoundEvent getAmbientSound() { - return this.isSleeping() ? HamstersSoundEvents.HAMSTER_SLEEP : HamstersSoundEvents.HAMSTER_AMBIENT; + return HamstersSoundEvents.HAMSTER_AMBIENT; } - protected SoundEvent getHurtSound(@NotNull DamageSource damageSource) { + protected SoundEvent getHurtSound(DamageSource damageSource) { return HamstersSoundEvents.HAMSTER_HURT; } @@ -350,7 +257,7 @@ protected SoundEvent getDeathSound() { return HamstersSoundEvents.HAMSTER_DEATH; } - protected void playStepSound(@NotNull BlockPos blockPos, @NotNull BlockState blockState) { + protected void playStepSound(BlockPos blockPos, BlockState blockState) { this.playSound(SoundEvents.WOLF_STEP, 0.15F, 3.0F); } @@ -382,61 +289,35 @@ public boolean isInterested() { @Override protected void defineSynchedData() { super.defineSynchedData(); - this.entityData.define(VARIANT, 2); - this.entityData.define(MARKING, 0); + this.entityData.define(EAT_COUNTER, 0); + this.entityData.define(DATA_INTERESTED, false); + this.entityData.define(DATA_VARIANT, 2); + this.entityData.define(WAIT_TIME_BEFORE_RUN, 0); + this.entityData.define(WAIT_TIME_WHEN_RUNNING, 0); this.entityData.define(FROM_HAND, false); } @Override - public void readAdditionalSaveData(@NotNull CompoundTag compoundTag) { + public void readAdditionalSaveData(CompoundTag compoundTag) { super.readAdditionalSaveData(compoundTag); - this.wheelPos = null; - if (compoundTag.contains("WheelPos")) { - this.wheelPos = NbtUtils.readBlockPos(compoundTag.getCompound("WheelPos")); - } this.setVariant(Hamster.Variant.BY_ID[compoundTag.getInt("Variant")]); - this.setMarking(compoundTag.getInt("Marking")); - + this.setWaitTimeBeforeRunTicks(compoundTag.getInt("RunTicks")); + this.setWaitTimeWhenRunningTicks(compoundTag.getInt("RunningTicks")); this.setFromHand(compoundTag.getBoolean("FromHand")); } @Override - public void addAdditionalSaveData(@NotNull CompoundTag compoundTag) { + public void addAdditionalSaveData(CompoundTag compoundTag) { super.addAdditionalSaveData(compoundTag); - - if (this.hasWheel()) { - assert this.getHivePos() != null; - compoundTag.put("HivePos", NbtUtils.writeBlockPos(this.getHivePos())); - } - compoundTag.putInt("Variant", this.getVariant()); - compoundTag.putInt("Marking", this.getMarking()); + compoundTag.putInt("Variant", getVariant()); + compoundTag.putInt("RunTicks", this.getWaitTimeBeforeRunTicks()); + compoundTag.putInt("RunningTicks", this.getWaitTimeWhenRunningTicks()); compoundTag.putBoolean("FromHand", this.fromHand()); } - - @VisibleForDebug - public boolean hasWheel() { - return this.wheelPos != null; - } - - @Nullable - @VisibleForDebug - public BlockPos getHivePos() { - return this.wheelPos; - } - - public int getInterestedTicks() { - return this.entityData.get(INTERESTED_TICKS); - } - - public void setInterestedTicks(int ticks) { - this.entityData.set(INTERESTED_TICKS, ticks); - } - public int getWaitTimeBeforeRunTicks() { return this.entityData.get(WAIT_TIME_BEFORE_RUN); } - public void setWaitTimeBeforeRunTicks(int ticks) { this.entityData.set(WAIT_TIME_BEFORE_RUN, ticks); } @@ -450,24 +331,109 @@ public void setWaitTimeWhenRunningTicks(int ticks) { public boolean isSleeping() { - return this.getFlag(); + return this.getFlag(32); } public void setSleeping(boolean bl) { - this.setFlag(bl); + this.setFlag(32, bl); } - private void setFlag(boolean bl) { + private void setFlag(int i, boolean bl) { if (bl) { - this.entityData.set(DATA_FLAGS_ID, (byte)(this.entityData.get(DATA_FLAGS_ID) | 32)); + this.entityData.set(DATA_FLAGS_ID, (byte)(this.entityData.get(DATA_FLAGS_ID) | i)); } else { - this.entityData.set(DATA_FLAGS_ID, (byte)(this.entityData.get(DATA_FLAGS_ID) & ~32)); + this.entityData.set(DATA_FLAGS_ID, (byte)(this.entityData.get(DATA_FLAGS_ID) & ~i)); } } - private boolean getFlag() { - return (this.entityData.get(DATA_FLAGS_ID) & 32) != 0; + private static final EntityDataAccessor VARIANT = SynchedEntityData.defineId(Hamster.class, EntityDataSerializers.INT); + private static final EntityDataAccessor MARKING = SynchedEntityData.defineId(Hamster.class, EntityDataSerializers.INT); + + private boolean getFlag(int i) { + return (this.entityData.get(DATA_FLAGS_ID) & i) != 0; + } + + public int getMarking() { + return this.entityData.get(MARKING); + } + + public void setMarking(int i) { + this.entityData.set(MARKING, i); + } + + + public int getVariant() { + return this.entityData.get(VARIANT); + } + + public void setVariant(Hamster.Variant variant) { + this.entityData.set(VARIANT, variant.getId()); + } + + public enum Marking { + BLANK (0, "blank"), + BANDED (1, "banded"), + DOMINANT_SPOTS (2, "dominant_spots"), + ROAN (3, "roan"), + BELLY (4, "belly"); + + private static final IntFunction BY_ID = ByIdMap.continuous(Hamster.Marking::getId, values(), ByIdMap.OutOfBoundsStrategy.ZERO); + + private final int id; + private final String name; + + private Marking(int j, String string2) { + this.id = j; + this.name = string2; + } + + public int getId() { + return this.id; + } + + public static Hamster.Marking byId(int i) { + return BY_ID.apply(i); + } + + public String getName() { + return this.name; + } + + } + + public enum Variant { + WHITE (0, "white"), + CREAM (1, "cream"), + CHAMPAGNE (2, "champagne"), + SILVER_DOVE (3, "silver_dove"), + DOVE (4, "dove"), + CHOCOLATE (5, "chocolate"), + BLACK (6, "black"); + + public static final Hamster.Variant[] BY_ID = Arrays.stream(values()).sorted(Comparator.comparingInt(Hamster.Variant::getId)).toArray(Hamster.Variant[]::new); + private final int id; + private final String name; + + private Variant(int j, String string2) { + this.id = j; + this.name = string2; + } + + public int getId() { + return this.id; + } + + public String getName() { + return this.name; + } + + public static Hamster.Variant getTypeById(int id) { + for (Hamster.Variant type : values()) { + if (type.id == id) return type; + } + return Hamster.Variant.CHAMPAGNE; + } } void wakeUp() { @@ -476,13 +442,6 @@ void wakeUp() { public void tick() { super.tick(); - - if (Hamster.this.getInterestedTicks() < 400) { - Hamster.this.setInterestedTicks(Hamster.this.getInterestedTicks() + 1); - } else if (Hamster.this.getInterestedTicks() >= 400) { - Hamster.this.setInterestedTicks(0); - } - if (this.isEffectiveAi()) { if (this.isInWater() || this.getTarget() != null || this.level().isThundering()) { this.wakeUp(); @@ -495,26 +454,11 @@ public void tick() { } - public void setRecordPlayingNearby(@NotNull BlockPos blockPos, boolean bl) { - this.jukebox = blockPos; - this.hamsterDance = bl; - this.setSleeping(false); - } - - public boolean isHamsterDance() { - return this.hamsterDance; - } - @Override public void aiStep() { super.aiStep(); this.level(); - if (this.jukebox == null || !this.jukebox.closerToCenterThan(this.position(), 3.46) || !this.level().getBlockState(this.jukebox).is(Blocks.JUKEBOX)) { - this.hamsterDance = false; - this.jukebox = null; - } - this.blockPosition(); if (this.level().getBlockState(this.blockPosition()).is(HamstersBlocks.HAMSTER_WHEEL)) { this.setDeltaMovement(0, 0, 0); @@ -527,7 +471,6 @@ public void aiStep() { } if (this.isPassenger() && this.getVehicle() instanceof SeatEntity && this.getWaitTimeWhenRunningTicks() == 0) { this.setWaitTimeBeforeRunTicks(this.random.nextInt(400) + 1200); - this.stopRiding(); clearStates(); } @@ -568,33 +511,17 @@ public void aiStep() { // region BREEDING / VARIANTS / MIXING - public boolean canMate(@NotNull Animal animal) { + public boolean canMate(Animal animal) { if (!this.isTame()) { return false; - } else if (!(animal instanceof Hamster hamster)) { + } else if (!(animal instanceof Hamster)) { return false; } else { + Hamster hamster = (Hamster) animal; return hamster.isTame() && super.canMate(animal); } } - public int getMarking() { - return this.entityData.get(MARKING); - } - - public void setMarking(int i) { - this.entityData.set(MARKING, i); - } - - - public int getVariant() { - return this.entityData.get(VARIANT); - } - - public void setVariant(Hamster.Variant variant) { - this.entityData.set(VARIANT, variant.getId()); - } - public boolean fromHand() { return this.entityData.get(FROM_HAND); @@ -604,104 +531,13 @@ public void setFromHand(boolean fromHand) { this.entityData.set(FROM_HAND, fromHand); } - public enum Marking { - BLANK (0, "blank"), - BANDED (1, "banded"), - DOMINANT_SPOTS (2, "dominant_spots"), - ROAN (3, "roan"), - BELLY (4, "belly"); - - private static final IntFunction BY_ID = ByIdMap.continuous(Marking::getId, values(), ByIdMap.OutOfBoundsStrategy.ZERO); - - private final int id; - private final String name; - - private Marking(int j, String string2) { - this.id = j; - this.name = string2; - } - - public int getId() { - return this.id; - } - - public static Marking byId(int i) { - return BY_ID.apply(i); - } - - public String getName() { - return this.name; - } - - } - - public enum Variant { - WHITE (0, "white"), - CREAM (1, "cream"), - CHAMPAGNE (2, "champagne"), - SILVER_DOVE (3, "silver_dove"), - DOVE (4, "dove"), - CHOCOLATE (5, "chocolate"), - BLACK (6, "black"); - - public static final Hamster.Variant[] BY_ID = Arrays.stream(values()).sorted(Comparator.comparingInt(Variant::getId)).toArray(Variant[]::new); - private final int id; - private final String name; - - private Variant(int j, String string2) { - this.id = j; - this.name = string2; - } - - public int getId() { - return this.id; - } - - public String getName() { - return this.name; - } - - public static Variant getTypeById(int id) { - for (Variant type : values()) { - if (type.id == id) return type; - } - return Variant.CHAMPAGNE; - } - } - - @Nullable - @Override - public AgeableMob getBreedOffspring(@NotNull ServerLevel serverLevel, @NotNull AgeableMob ageableMob) { - Hamster hamster = HamstersEntityType.HAMSTER.create(serverLevel); - assert hamster != null; - if (ageableMob instanceof Hamster hamsterParent) { - hamster.setVariant(this.getOffspringVariant(this, hamsterParent)); - hamster.setMarking(this.getOffspringPattern(this, hamsterParent).getId()); - } - return hamster; - } - - private Marking getOffspringPattern(Hamster hamster, Hamster otherParent) { - Marking marking = Marking.byId(hamster.getMarking()); - Marking otherMarking = Marking.byId(otherParent.getMarking()); - - return this.random.nextBoolean() ? marking : otherMarking; - } - - private Variant getOffspringVariant(Hamster hamster, Hamster otherParent) { - Variant variant = Variant.getTypeById(hamster.getVariant()); - Variant otherVariant = Variant.getTypeById(otherParent.getVariant()); - - return this.random.nextBoolean() ? variant : otherVariant; - } - // endregion // region PICK UP ITEMS @Override - public boolean canTakeItem(@NotNull ItemStack pItemstack) { + public boolean canTakeItem(ItemStack pItemstack) { EquipmentSlot slot = getEquipmentSlotForItem(pItemstack); if (!this.getItemBySlot(slot).isEmpty()) { return false; @@ -725,7 +561,7 @@ protected void pickUpItem(ItemEntity pItemEntity) { } @Override - public boolean hurt(@NotNull DamageSource pSource, float pAmount) { + public boolean hurt(DamageSource pSource, float pAmount) { if (!this.getMainHandItem().isEmpty() && !this.level().isClientSide) { ItemEntity itemEntity = new ItemEntity(this.level(), this.getX() + this.getLookAngle().x, this.getY() + 1.0D, this.getZ() + this.getLookAngle().z, this.getMainHandItem()); itemEntity.setPickUpDelay(40); @@ -742,18 +578,23 @@ public boolean hurt(@NotNull DamageSource pSource, float pAmount) { // region SPAWNING @Override - public SpawnGroupData finalizeSpawn(@NotNull ServerLevelAccessor pLevel, @NotNull DifficultyInstance pDifficulty, @NotNull MobSpawnType pReason, @Nullable SpawnGroupData pSpawnData, @Nullable CompoundTag pDataTag) { + public SpawnGroupData finalizeSpawn(ServerLevelAccessor pLevel, DifficultyInstance pDifficulty, MobSpawnType pReason, @Nullable SpawnGroupData pSpawnData, @Nullable CompoundTag pDataTag) { this.populateDefaultEquipmentSlots(random, pDifficulty); if (pSpawnData == null) { RandomSource randomSource = pLevel.getRandom(); this.setVariant(Variant.values()[randomSource.nextInt(Variant.values().length)]); - this.setMarking(Marking.values()[randomSource.nextInt(Marking.values().length)].getId()); } return pSpawnData; } + @Nullable + @Override + public AgeableMob getBreedOffspring(ServerLevel serverLevel, AgeableMob ageableMob) { + return null; + } + @Override - protected void populateDefaultEquipmentSlots(RandomSource random, @NotNull DifficultyInstance pDifficulty) { + protected void populateDefaultEquipmentSlots(RandomSource random, DifficultyInstance pDifficulty) { if (random.nextFloat() < 0.2F) { float chance = random.nextFloat(); ItemStack stack; @@ -773,6 +614,7 @@ protected void populateDefaultEquipmentSlots(RandomSource random, @NotNull Diffi // endregion + // region GECKOLIB @Override @@ -781,15 +623,7 @@ public void registerControllers(AnimatableManager.ControllerRegistrar controller } protected PlayState animController(final AnimationState event) { - if (this.isPassenger() && this.getVehicle() instanceof HamsterBall hamsterBall && hamsterBall.getDeltaMovement().length() > 0.1) { - event.setAnimation(WALK); - return PlayState.CONTINUE; - } else - - if (this.isHamsterDance()) { - event.setAnimation(DANCE); - return PlayState.CONTINUE; - } else if (this.isSleeping()) { + if (this.isSleeping()) { event.setAnimation(SLEEP); } else if (this.isInterested() || this.isInSittingPose()) { event.setAnimation(STANDING); @@ -799,13 +633,9 @@ protected PlayState animController(final AnimationState e event.setAnimation(RUN); } else { event.setControllerSpeed(1.1F); - if (this.isBaby()) { - event.setAnimation(PINKIE_WALK); - } else { - event.setAnimation(WALK); - } + event.setAnimation(WALK); } - } else if (this.isPassenger() && this.getVehicle() instanceof SeatEntity) { + } else if (this.isPassenger() && this.getVehicle() instanceof SeatEntity ) { event.setControllerSpeed(1.4F); event.setAnimation(WALK); } else { @@ -858,18 +688,14 @@ protected boolean resetXRotOnTick() { } } - class HamsterGoToBlockGoal extends Goal { - + class HamsterGoToWheelGoal extends Goal { private final Predicate VALID_GATHERING_BLOCKS; @Nullable - private Vec3 blockPos; + private Vec3 wheelPos; - HamsterGoToBlockGoal() { + HamsterGoToWheelGoal() { this.VALID_GATHERING_BLOCKS = blockState -> { - if (blockState.is(HamstersTags.HAMSTER_BLOCKS)) { - if (blockState.getBlock() instanceof BowlBlock) { - return blockState.getBlock().defaultBlockState().hasProperty(BowlBlock.SEEDS) && (blockState.getValue(BowlBlock.SEEDS) > 0); - } + if (blockState.is(HamstersBlocks.HAMSTER_WHEEL)) { return !blockState.hasProperty(BlockStateProperties.WATERLOGGED) || !blockState.getValue(BlockStateProperties.WATERLOGGED); } return false; @@ -879,8 +705,9 @@ class HamsterGoToBlockGoal extends Goal { @Override public boolean canUse() { + Optional optional = this.findNearbyResource(); - if (optional.isPresent() && Hamster.this.getInterestedTicks() > 100) { + if (optional.isPresent() && !HamsterWheelBlock.isOccupied(Hamster.this.level(), optional.get()) && Hamster.this.getWaitTimeBeforeRunTicks() == 0) { Hamster.this.navigation.moveTo((double) optional.get().getX() + 0.5, optional.get().getY(), (double) optional.get().getZ() + 0.5, 1.2f); return !Hamster.this.level().isRaining() && !Hamster.this.isSleeping() && !Hamster.this.isInSittingPose(); } @@ -890,8 +717,8 @@ public boolean canUse() { @Override public boolean canContinueToUse() { Optional optional = this.findNearbyResource(); - if (optional.isPresent()) { - return !Hamster.this.isSleeping() && !Hamster.this.isInSittingPose() && getInterestedTicks() < 200; + if (optional.isPresent() && !HamsterWheelBlock.isOccupied(Hamster.this.level(), optional.get()) && Hamster.this.getWaitTimeBeforeRunTicks() == 0) { + return !Hamster.this.level().isRaining() && !Hamster.this.isSleeping() && !Hamster.this.isInSittingPose(); } return false; } @@ -910,51 +737,32 @@ public boolean requiresUpdateEveryTick() { public void tick() { Optional optional = this.findNearbyResource(); -// if (block.getBlock() instanceof BottleBlock) { -// if (Hamster.this.position().distanceTo(Vec3.atBottomCenterOf(optional.get())) <= 1.4) { -// if (Hamster.this.tickCount % 20 == 0) { -// Hamster.this.playSound(SoundEvents.GENERIC_DRINK, 0.5F, 1.3F); -// } -// } -// } - if (optional.isPresent()) { - BlockState block = Hamster.this.level().getBlockState(optional.get()); - - if (block.getBlock() instanceof BowlBlock) { - - if (block.getBlock().defaultBlockState().hasProperty(BowlBlock.SEEDS) && block.getValue(BowlBlock.SEEDS) > 0) { - if (Hamster.this.position().distanceTo(Vec3.atBottomCenterOf(optional.get())) <= 1.0) { - if (Hamster.this.getMainHandItem().isEmpty()) { - Hamster.this.level().setBlockAndUpdate(optional.get(), block.setValue(BowlBlock.SEEDS, block.getValue(BowlBlock.SEEDS) - 1)); - Hamster.this.setItemSlot(EquipmentSlot.MAINHAND, new ItemStack(Items.WHEAT_SEEDS)); - Hamster.this.playSound(SoundEvents.PARROT_EAT, 1.0F, 1.0F); - } - } - } - } + if (HamsterWheelBlock.isOccupied(Hamster.this.level(), optional.get())) { + stop(); + } + + if (!HamsterWheelBlock.isOccupied(Hamster.this.level(), optional.get()) && Hamster.this.getWaitTimeBeforeRunTicks() == 0) { Vec3 vec3 = Vec3.atBottomCenterOf(optional.get()); - if (vec3.distanceTo(Hamster.this.position()) > 0.7) { - blockPos = vec3; + if (vec3.distanceTo(Hamster.this.position()) > 1.4) { + wheelPos = vec3; this.setWantedPos(); return; } - if (blockPos == null) { - this.blockPos = vec3; + if (wheelPos == null) { + this.wheelPos = vec3; + } + if (Hamster.this.position().distanceTo(this.wheelPos) <= 1.4) { + Hamster.this.setWaitTimeWhenRunningTicks(Hamster.this.random.nextInt(300) + 100); + HamsterWheelBlock.sitDown(Hamster.this.level(), optional.get(), Hamster.this); + this.stop(); } } - super.tick(); - } private void setWantedPos() { - assert this.blockPos != null; - if (Hamster.this.level().getBlockState(Hamster.this.blockPosition()).getBlock() instanceof BowlBlock && (Hamster.this.level().getBlockState(Hamster.this.blockPosition()).getValue(BowlBlock.SEEDS) == 0)) { - return; - } else { - Hamster.this.getMoveControl().setWantedPosition(this.blockPos.x(), this.blockPos.y(), this.blockPos.z(), 0.7f); - } + Hamster.this.getMoveControl().setWantedPosition(this.wheelPos.x(), this.wheelPos.y(), this.wheelPos.z(), 0.7f); } @@ -966,9 +774,9 @@ private Optional findNearestBlock(Predicate predicate) { BlockPos blockPos = Hamster.this.blockPosition(); BlockPos.MutableBlockPos mutableBlockPos = new BlockPos.MutableBlockPos(); int i = 0; - while ((double) i <= 5.0) { + while ((double)i <= 5.0) { int j = 0; - while ((double) j < 5.0) { + while ((double)j < 5.0) { int k = 0; while (k <= j) { int l = k < j && k > -j ? j : 0; @@ -986,8 +794,22 @@ private Optional findNearestBlock(Predicate predicate) { i = i > 0 ? -i : 1 - i; } return Optional.empty(); + } + } + + private class RunInWheelGoal extends Goal { + + public RunInWheelGoal() { + super(); + this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK, Flag.JUMP)); + } + public boolean canUse() { + return !Hamster.this.isSleeping() && !Hamster.this.isInPowderSnow && (Hamster.this.isPassenger() && Hamster.this.getVehicle() instanceof SeatEntity); + } + public boolean canContinueToUse() { + return (Hamster.this.isPassenger() && Hamster.this.getVehicle() instanceof SeatEntity); } } @@ -1003,9 +825,7 @@ public SleepGoal() { } public boolean canUse() { - if (!isHamsterDance()) { - return false; - } else if (Hamster.this.xxa == 0.0F && Hamster.this.yya == 0.0F && Hamster.this.zza == 0.0F) { + if (Hamster.this.xxa == 0.0F && Hamster.this.yya == 0.0F && Hamster.this.zza == 0.0F) { return this.canSleep() || Hamster.this.isSleeping(); } else { return false; @@ -1060,211 +880,4 @@ public boolean test(LivingEntity livingEntity) { } } // endregion - - void pathfindTowards(BlockPos blockPos) { - Vec3 vec3 = Vec3.atBottomCenterOf(blockPos); - this.getNavigation().moveTo(vec3.x, vec3.y, vec3.z, 1.0); - } - - boolean isWheelValid(BlockPos blockPos) { - return this.level().isLoaded(blockPos) && this.level().getBlockState(blockPos).is(HamstersTags.HAMSTER_WHEELS); - } - - boolean closerThan(BlockPos blockPos, int i) { - return !blockPos.closerThan(this.blockPosition(), i); - } - - - boolean isTooFarAway(BlockPos blockPos) { - return this.closerThan(blockPos, 32); - } - - - - private abstract static class BaseHamsterGoal extends Goal { - BaseHamsterGoal() { - } - - public abstract boolean canHamsterUse(); - - public abstract boolean canBeeContinueToUse(); - - public boolean canUse() { - return this.canHamsterUse(); - } - - public boolean canContinueToUse() { - return this.canBeeContinueToUse(); - } - } - - class HamsterEnterWheelGoal extends Hamster.BaseHamsterGoal { - HamsterEnterWheelGoal() { - super(); - } - - public boolean canHamsterUse() { - return Hamster.this.wheelPos != null && Hamster.this.closerThan(Hamster.this.wheelPos, 2) && Hamster.this.isWheelValid(Hamster.this.wheelPos); - } - - public boolean canBeeContinueToUse() { - return false; - } - - public void start() { - assert Hamster.this.wheelPos != null; - Block block = Hamster.this.level().getBlockState(Hamster.this.wheelPos).getBlock(); - BlockEntity blockEntity = Hamster.this.level().getBlockEntity(Hamster.this.wheelPos); - if (block instanceof HamsterWheelBlock && blockEntity instanceof HamsterWheelBlockEntity) { - if (HamsterWheelBlock.isOccupied(Hamster.this.level(), Hamster.this.wheelPos)) { - Hamster.this.wheelPos = null; - } else { - HamsterWheelBlock.sitDown(Hamster.this.level(), Hamster.this.wheelPos, Hamster.this); - } - } - } - } - - class HamsterLocateWheelGoal extends Hamster.BaseHamsterGoal { - HamsterLocateWheelGoal() { - super(); - } - - public boolean canHamsterUse() { - return Hamster.this.remainingCooldownBeforeLocatingNewWheel == 0 && Hamster.this.wheelPos == null; - } - - public boolean canBeeContinueToUse() { - return false; - } - - public void start() { - Hamster.this.remainingCooldownBeforeLocatingNewWheel = 200; - BlockPos blockPos = findNearbyWheel(); - if (blockPos != null) { - Hamster.this.wheelPos = blockPos; - } - } - - @Nullable - private BlockPos findNearbyWheel() { - BlockPos blockPos = Hamster.this.blockPosition(); - PoiManager poiManager = ((ServerLevel)Hamster.this.level()).getPoiManager(); - Stream stream = poiManager.getInRange((holder) -> holder.is(HamstersPoiTypes.HAMSTER_WHEEL), blockPos, 20, PoiManager.Occupancy.ANY); - return stream.map(PoiRecord::getPos).filter(Hamster.this::isWheelValid).min(Comparator.comparingDouble((blockPos2) -> blockPos2.distSqr(blockPos))).orElse(null); - } - } - - @VisibleForDebug - public class HamsterGoToWheelGoal extends Hamster.BaseHamsterGoal { - public static final int MAX_TRAVELLING_TICKS = 600; - int travellingTicks; - private static final int MAX_BLACKLISTED_TARGETS = 3; - final List blacklistedTargets; - @Nullable - private Path lastPath; - private static final int TICKS_BEFORE_WHEEL_DROP = 60; - private int ticksStuck; - - HamsterGoToWheelGoal() { - super(); - this.travellingTicks = Hamster.this.level().random.nextInt(10); - this.blacklistedTargets = Lists.newArrayList(); - this.setFlags(EnumSet.of(Flag.MOVE)); - } - - public boolean canHamsterUse() { - return Hamster.this.wheelPos != null && !Hamster.this.hasRestriction() && !this.hasReachedTarget(Hamster.this.wheelPos) && Hamster.this.isWheelValid(Hamster.this.wheelPos); - } - - public boolean canBeeContinueToUse() { - return this.canHamsterUse(); - } - - public void start() { - this.travellingTicks = 0; - this.ticksStuck = 0; - super.start(); - } - - public void stop() { - this.travellingTicks = 0; - this.ticksStuck = 0; - Hamster.this.getNavigation().stop(); - Hamster.this.getNavigation().resetMaxVisitedNodesMultiplier(); - } - - public void tick() { - if (Hamster.this.wheelPos != null) { - ++this.travellingTicks; - if (this.travellingTicks > this.adjustedTickDelay(600)) { - this.dropAndBlacklistWheel(); - } else if (!Hamster.this.getNavigation().isInProgress()) { - if (!Hamster.this.closerThan(Hamster.this.wheelPos, 16)) { - if (Hamster.this.isTooFarAway(Hamster.this.wheelPos)) { - this.dropWheel(); - } else { - Hamster.this.pathfindTowards(Hamster.this.wheelPos); - } - } else { - boolean bl = this.pathfindDirectlyTowards(Hamster.this.wheelPos); - if (!bl) { - this.dropAndBlacklistWheel(); - } else if (this.lastPath != null && Hamster.this.getNavigation().getPath().sameAs(this.lastPath)) { - ++this.ticksStuck; - if (this.ticksStuck > 60) { - this.dropWheel(); - this.ticksStuck = 0; - } - } else { - this.lastPath = Hamster.this.getNavigation().getPath(); - } - } - } - } - } - private boolean pathfindDirectlyTowards(BlockPos blockPos) { - Hamster.this.getNavigation().setMaxVisitedNodesMultiplier(10.0F); - Hamster.this.getNavigation().moveTo(blockPos.getX(), blockPos.getY(), blockPos.getZ(), 1.0); - return Hamster.this.getNavigation().getPath() != null && Hamster.this.getNavigation().getPath().canReach(); - } - - boolean isTargetBlacklisted(BlockPos blockPos) { - return this.blacklistedTargets.contains(blockPos); - } - - private void blacklistTarget(BlockPos blockPos) { - this.blacklistedTargets.add(blockPos); - - while(this.blacklistedTargets.size() > 3) { - this.blacklistedTargets.remove(0); - } - } - - void clearBlacklist() { - this.blacklistedTargets.clear(); - } - - private void dropAndBlacklistWheel() { - if (Hamster.this.wheelPos != null) { - this.blacklistTarget(Hamster.this.wheelPos); - } - - this.dropWheel(); - } - - private void dropWheel() { - Hamster.this.wheelPos = null; - Hamster.this.remainingCooldownBeforeLocatingNewWheel = 200; - } - - private boolean hasReachedTarget(BlockPos blockPos) { - if (Hamster.this.closerThan(blockPos, 2)) { - return true; - } else { - Path path = Hamster.this.getNavigation().getPath(); - return path != null && path.getTarget().equals(blockPos) && path.canReach() && path.isDone(); - } - } - } } diff --git a/src/main/java/com/starfish_studios/hamsters/entity/HamsterBall.java b/src/main/java/com/starfish_studios/hamsters/entity/HamsterBall.java index 6baa38d..a7ce495 100644 --- a/src/main/java/com/starfish_studios/hamsters/entity/HamsterBall.java +++ b/src/main/java/com/starfish_studios/hamsters/entity/HamsterBall.java @@ -155,7 +155,7 @@ public void setItemSlot(EquipmentSlot equipmentSlot, ItemStack itemStack) { @Override public ItemStack getPickResult() { - return new ItemStack(HamstersItems.HAMSTER_BALL); + return new ItemStack(HamstersItems.BLUE_HAMSTER_BALL); } diff --git a/src/main/java/com/starfish_studios/hamsters/entity/HamsterNew.java b/src/main/java/com/starfish_studios/hamsters/entity/HamsterNew.java index eeb688c..6a19c59 100644 --- a/src/main/java/com/starfish_studios/hamsters/entity/HamsterNew.java +++ b/src/main/java/com/starfish_studios/hamsters/entity/HamsterNew.java @@ -20,10 +20,10 @@ import net.minecraft.tags.ItemTags; import net.minecraft.tags.PoiTypeTags; import net.minecraft.util.ByIdMap; +import net.minecraft.util.RandomSource; import net.minecraft.util.VisibleForDebug; -import net.minecraft.world.entity.AgeableMob; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.TamableAnimal; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.entity.*; import net.minecraft.world.entity.ai.attributes.AttributeSupplier; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.ai.control.BodyRotationControl; @@ -36,6 +36,7 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; +import net.minecraft.world.level.ServerLevelAccessor; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BeehiveBlockEntity; import net.minecraft.world.level.block.entity.BlockEntity; @@ -46,6 +47,10 @@ import software.bernie.geckolib.animatable.GeoEntity; import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache; import software.bernie.geckolib.core.animation.AnimatableManager; +import software.bernie.geckolib.core.animation.AnimationController; +import software.bernie.geckolib.core.animation.AnimationState; +import software.bernie.geckolib.core.animation.RawAnimation; +import software.bernie.geckolib.core.object.PlayState; import software.bernie.geckolib.util.GeckoLibUtil; import java.util.*; @@ -55,20 +60,15 @@ public class HamsterNew extends TamableAnimal implements GeoEntity { private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); - - private static final int TICKS_BEFORE_GOING_TO_WHEEL = 2400; - public static final String TAG_WHEEL_POS = "WheelPos"; - private static final int COOLDOWN_BEFORE_LOCATING_NEW_WHEEL = 200; - int remainingCooldownBeforeLocatingNewWheel; - + protected static final RawAnimation IDLE = RawAnimation.begin().thenLoop("animation.sf_nba.hamster.idle"); + protected static final RawAnimation WALK = RawAnimation.begin().thenLoop("animation.sf_nba.hamster.walk"); + protected static final RawAnimation RUN = RawAnimation.begin().thenLoop("animation.sf_nba.hamster.run"); + protected static final RawAnimation SLEEP = RawAnimation.begin().thenLoop("animation.sf_nba.hamster.sleep"); + protected static final RawAnimation STANDING = RawAnimation.begin().thenLoop("animation.sf_nba.hamster.standing"); private static final EntityDataAccessor VARIANT = SynchedEntityData.defineId(HamsterNew.class, EntityDataSerializers.INT); private static final EntityDataAccessor MARKING = SynchedEntityData.defineId(HamsterNew.class, EntityDataSerializers.INT); - - @Nullable - BlockPos wheelPos; - public HamsterNew(EntityType entityType, Level level) { super(entityType, level); } @@ -88,9 +88,9 @@ protected void registerGoals() { this.goalSelector.addGoal(1, new PanicGoal(this, 1.3)); this.goalSelector.addGoal(2, new SitWhenOrderedToGoal(this)); this.goalSelector.addGoal(3, new BreedGoal(this, 1.0)); - this.goalSelector.addGoal(4, new HamsterEnterWheelGoal()); - this.goalSelector.addGoal(5, new HamsterLocateWheelGoal()); - this.goalSelector.addGoal(5, new HamsterGoToWheelGoal()); +// this.goalSelector.addGoal(4, new HamsterEnterWheelGoal()); +// this.goalSelector.addGoal(5, new HamsterLocateWheelGoal()); +// this.goalSelector.addGoal(5, new HamsterGoToWheelGoal()); this.goalSelector.addGoal(6, new WaterAvoidingRandomStrollGoal(this, 1.0)); this.goalSelector.addGoal(7, new LookAtPlayerGoal(this, Player.class, 6.0F)); this.goalSelector.addGoal(9, new RandomLookAroundGoal(this)); @@ -102,19 +102,22 @@ public static AttributeSupplier.Builder createAttributes() { .add(Attributes.MOVEMENT_SPEED, 0.25D); } - @Nullable - @Override - public AgeableMob getBreedOffspring(@NotNull ServerLevel serverLevel, @NotNull AgeableMob ageableMob) { - return new HamsterNew(HamstersEntityType.HAMSTER, serverLevel); - } @Override - public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + public SpawnGroupData finalizeSpawn(ServerLevelAccessor pLevel, DifficultyInstance pDifficulty, MobSpawnType pReason, @Nullable SpawnGroupData pSpawnData, @Nullable CompoundTag pDataTag) { + this.populateDefaultEquipmentSlots(random, pDifficulty); + if (pSpawnData == null) { + RandomSource randomSource = pLevel.getRandom(); + this.setVariant(HamsterNew.Variant.values()[randomSource.nextInt(HamsterNew.Variant.values().length)]); + this.setMarking(HamsterNew.Marking.values()[randomSource.nextInt(HamsterNew.Marking.values().length)].getId()); + } + return pSpawnData; } + @Nullable @Override - public AnimatableInstanceCache getAnimatableInstanceCache() { - return geoCache; + public AgeableMob getBreedOffspring(@NotNull ServerLevel serverLevel, @NotNull AgeableMob ageableMob) { + return new HamsterNew(HamstersEntityType.HAMSTER, serverLevel); } void pathfindTowards(BlockPos blockPos) { @@ -123,6 +126,7 @@ void pathfindTowards(BlockPos blockPos) { } + // region DATA @Override protected void defineSynchedData() { @@ -134,10 +138,6 @@ protected void defineSynchedData() { @Override public void readAdditionalSaveData(@NotNull CompoundTag compoundTag) { super.readAdditionalSaveData(compoundTag); - this.wheelPos = null; - if (compoundTag.contains("WheelPos")) { - this.wheelPos = NbtUtils.readBlockPos(compoundTag.getCompound("WheelPos")); - } this.setVariant(HamsterNew.Variant.BY_ID[compoundTag.getInt("Variant")]); this.setMarking(compoundTag.getInt("Marking")); } @@ -145,29 +145,10 @@ public void readAdditionalSaveData(@NotNull CompoundTag compoundTag) { @Override public void addAdditionalSaveData(@NotNull CompoundTag compoundTag) { super.addAdditionalSaveData(compoundTag); - if (this.hasWheel()) { - assert this.getWheelPos() != null; - compoundTag.put("HivePos", NbtUtils.writeBlockPos(this.getWheelPos())); - } compoundTag.putInt("Variant", this.getVariant()); compoundTag.putInt("Marking", this.getMarking()); } - @VisibleForDebug - public boolean hasWheel() { - return this.wheelPos != null; - } - - @Nullable - @VisibleForDebug - public BlockPos getWheelPos() { - return this.wheelPos; - } - - boolean isWheelValid(BlockPos blockPos) { - return this.level().isLoaded(blockPos) && this.level().getBlockState(blockPos).is(HamstersTags.HAMSTER_WHEELS); - } - boolean closerThan(BlockPos blockPos, int i) { return !blockPos.closerThan(this.blockPosition(), i); } @@ -258,192 +239,42 @@ public static HamsterNew.Variant getTypeById(int id) { } } + // endregion + // region GECKOLIB - abstract static class BaseHamsterGoal extends Goal { - BaseHamsterGoal() { - } - - public abstract boolean canHamsterUse(); - - public abstract boolean canBeeContinueToUse(); - - public boolean canUse() { - return this.canHamsterUse(); - } - - public boolean canContinueToUse() { - return this.canBeeContinueToUse(); - } - } - - class HamsterEnterWheelGoal extends BaseHamsterGoal { - HamsterEnterWheelGoal() { - super(); - } - - public boolean canHamsterUse() { - return HamsterNew.this.wheelPos != null && HamsterNew.this.closerThan(HamsterNew.this.wheelPos, 2) && HamsterNew.this.isWheelValid(HamsterNew.this.wheelPos); - } - - public boolean canBeeContinueToUse() { - return false; - } - - public void start() { - assert HamsterNew.this.wheelPos != null; - Block block = HamsterNew.this.level().getBlockState(HamsterNew.this.wheelPos).getBlock(); - BlockEntity blockEntity = HamsterNew.this.level().getBlockEntity(HamsterNew.this.wheelPos); - if (block instanceof HamsterWheelBlock && blockEntity instanceof HamsterWheelBlockEntity) { - if (HamsterWheelBlock.isOccupied(HamsterNew.this.level(), HamsterNew.this.wheelPos)) { - HamsterNew.this.wheelPos = null; - } else { - HamsterWheelBlock.sitDown(HamsterNew.this.level(), HamsterNew.this.wheelPos, HamsterNew.this); - } - } - } + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllerRegistrar) { + controllerRegistrar.add(new AnimationController<>(this, "controller", 0, this::animController)); } - class HamsterLocateWheelGoal extends BaseHamsterGoal { - HamsterLocateWheelGoal() { - super(); - } - - public boolean canHamsterUse() { - return HamsterNew.this.remainingCooldownBeforeLocatingNewWheel == 0 && HamsterNew.this.wheelPos == null; - } - - public boolean canBeeContinueToUse() { - return false; - } - - public void start() { - HamsterNew.this.remainingCooldownBeforeLocatingNewWheel = 200; - BlockPos blockPos = findNearbyWheel(); - if (blockPos != null) { - HamsterNew.this.wheelPos = blockPos; + protected PlayState animController(final AnimationState event) { + if (this.isSleeping()) { + event.setAnimation(SLEEP); + } else if (this.isInSittingPose()) { + event.setAnimation(STANDING); + } else if (event.isMoving()) { + if (this.isSprinting()) { + event.setControllerSpeed(1.3F); + event.setAnimation(RUN); + } else { + event.setControllerSpeed(1.1F); + event.setAnimation(WALK); } + } else if (this.isPassenger() && this.getVehicle() instanceof SeatEntity ) { + event.setControllerSpeed(1.4F); + event.setAnimation(WALK); + } else { + event.setAnimation(IDLE); } - @Nullable - private BlockPos findNearbyWheel() { - BlockPos blockPos = HamsterNew.this.blockPosition(); - PoiManager poiManager = ((ServerLevel)HamsterNew.this.level()).getPoiManager(); - Stream stream = poiManager.getInRange((holder) -> holder.is(HamstersPoiTypes.HAMSTER_WHEEL), blockPos, 20, PoiManager.Occupancy.ANY); - return stream.map(PoiRecord::getPos).filter(HamsterNew.this::isWheelValid).min(Comparator.comparingDouble((blockPos2) -> blockPos2.distSqr(blockPos))).orElse(null); - } + return PlayState.CONTINUE; } - @VisibleForDebug - public class HamsterGoToWheelGoal extends BaseHamsterGoal { - public static final int MAX_TRAVELLING_TICKS = 600; - int travellingTicks; - private static final int MAX_BLACKLISTED_TARGETS = 3; - final List blacklistedTargets; - @Nullable - private Path lastPath; - private static final int TICKS_BEFORE_WHEEL_DROP = 60; - private int ticksStuck; - - HamsterGoToWheelGoal() { - super(); - this.travellingTicks = HamsterNew.this.level().random.nextInt(10); - this.blacklistedTargets = Lists.newArrayList(); - this.setFlags(EnumSet.of(Flag.MOVE)); - } - - public boolean canHamsterUse() { - return HamsterNew.this.wheelPos != null && !HamsterNew.this.hasRestriction() && !this.hasReachedTarget(HamsterNew.this.wheelPos) && HamsterNew.this.isWheelValid(HamsterNew.this.wheelPos); - } - - public boolean canBeeContinueToUse() { - return this.canHamsterUse(); - } - - public void start() { - this.travellingTicks = 0; - this.ticksStuck = 0; - super.start(); - } - - public void stop() { - this.travellingTicks = 0; - this.ticksStuck = 0; - HamsterNew.this.getNavigation().stop(); - HamsterNew.this.getNavigation().resetMaxVisitedNodesMultiplier(); - } - - public void tick() { - if (HamsterNew.this.wheelPos != null) { - ++this.travellingTicks; - if (this.travellingTicks > this.adjustedTickDelay(MAX_TRAVELLING_TICKS)) { - this.dropAndBlacklistWheel(); - } else if (!HamsterNew.this.getNavigation().isInProgress()) { - if (!HamsterNew.this.closerThan(HamsterNew.this.wheelPos, 16)) { - if (HamsterNew.this.isTooFarAway(HamsterNew.this.wheelPos)) { - this.dropWheel(); - } else { - HamsterNew.this.pathfindTowards(HamsterNew.this.wheelPos); - } - } else { - boolean bl = this.pathfindDirectlyTowards(HamsterNew.this.wheelPos); - if (!bl) { - this.dropAndBlacklistWheel(); - } else if (this.lastPath != null && Objects.requireNonNull(HamsterNew.this.getNavigation().getPath()).sameAs(this.lastPath)) { - ++this.ticksStuck; - if (this.ticksStuck > TICKS_BEFORE_WHEEL_DROP) { - this.dropWheel(); - this.ticksStuck = 0; - } - } else { - this.lastPath = HamsterNew.this.getNavigation().getPath(); - } - } - } - } - } - private boolean pathfindDirectlyTowards(BlockPos blockPos) { - HamsterNew.this.getNavigation().setMaxVisitedNodesMultiplier(10.0F); - HamsterNew.this.getNavigation().moveTo(blockPos.getX(), blockPos.getY(), blockPos.getZ(), 1.0); - return HamsterNew.this.getNavigation().getPath() != null && HamsterNew.this.getNavigation().getPath().canReach(); - } - - boolean isTargetBlacklisted(BlockPos blockPos) { - return this.blacklistedTargets.contains(blockPos); - } - - private void blacklistTarget(BlockPos blockPos) { - this.blacklistedTargets.add(blockPos); - - while(this.blacklistedTargets.size() > 3) { - this.blacklistedTargets.remove(0); - } - } - - void clearBlacklist() { - this.blacklistedTargets.clear(); - } - - private void dropAndBlacklistWheel() { - if (HamsterNew.this.wheelPos != null) { - this.blacklistTarget(HamsterNew.this.wheelPos); - } - - this.dropWheel(); - } - - private void dropWheel() { - HamsterNew.this.wheelPos = null; - HamsterNew.this.remainingCooldownBeforeLocatingNewWheel = 200; - } - - private boolean hasReachedTarget(BlockPos blockPos) { - if (HamsterNew.this.closerThan(blockPos, 2)) { - return true; - } else { - Path path = HamsterNew.this.getNavigation().getPath(); - return path != null && path.getTarget().equals(blockPos) && path.canReach() && path.isDone(); - } - } + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; } + + // endregion } diff --git a/src/main/java/com/starfish_studios/hamsters/entity/common/HamstersGeoEntity.java b/src/main/java/com/starfish_studios/hamsters/entity/common/HamstersGeoEntity.java index e383b58..a1c65e8 100644 --- a/src/main/java/com/starfish_studios/hamsters/entity/common/HamstersGeoEntity.java +++ b/src/main/java/com/starfish_studios/hamsters/entity/common/HamstersGeoEntity.java @@ -6,7 +6,7 @@ public interface HamstersGeoEntity extends GeoEntity { @Override default double getBoneResetTime() { - return 0; + return 5; } diff --git a/src/main/java/com/starfish_studios/hamsters/registry/HamstersBlocks.java b/src/main/java/com/starfish_studios/hamsters/registry/HamstersBlocks.java index aad7c50..969b077 100644 --- a/src/main/java/com/starfish_studios/hamsters/registry/HamstersBlocks.java +++ b/src/main/java/com/starfish_studios/hamsters/registry/HamstersBlocks.java @@ -1,27 +1,77 @@ package com.starfish_studios.hamsters.registry; import com.starfish_studios.hamsters.Hamsters; -import com.starfish_studios.hamsters.block.BottleBlock; -import com.starfish_studios.hamsters.block.BowlBlock; -import com.starfish_studios.hamsters.block.HamsterWheelBlock; -import com.starfish_studios.hamsters.block.TunnelBlock; +import com.starfish_studios.hamsters.block.*; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.core.Registry; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.*; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.material.PushReaction; public class HamstersBlocks { - public static final Block TUNNEL = register("tunnel", new TunnelBlock(FabricBlockSettings.copyOf(Blocks.GREEN_STAINED_GLASS))); + public static class BlockProperties { + public static FabricBlockSettings cagePanel = (FabricBlockSettings) FabricBlockSettings.create().strength(0.3F).noOcclusion().isSuffocating((state, world, pos) -> false); + } + +// public static final Block TUNNEL = register("tunnel", new TunnelBlock(BlockProperties.cagePanel)); public static final Block HAMSTER_WHEEL = register("hamster_wheel", new HamsterWheelBlock(FabricBlockSettings.create().strength(0.6F).noOcclusion().isSuffocating((state, world, pos) -> false).pushReaction(PushReaction.IGNORE))); + // RED, ORANGE, YELLOW, LIME, GREEN, CYAN, BLUE, LIGHT BLUE, PINK, MAGENTA, PURPLE, WHITE, LIGHT GRAY, GRAY, BLACK, BROWN + public static final Block CAGE_PANEL = register("cage_panel", new CagePanelBlock(BlockProperties.cagePanel)); + public static final Block RED_CAGE_PANEL = register("red_cage_panel", new CagePanelBlock(BlockProperties.cagePanel)); + public static final Block ORANGE_CAGE_PANEL = register("orange_cage_panel", new CagePanelBlock(BlockProperties.cagePanel)); + public static final Block YELLOW_CAGE_PANEL = register("yellow_cage_panel", new CagePanelBlock(BlockProperties.cagePanel)); + public static final Block LIME_CAGE_PANEL = register("lime_cage_panel", new CagePanelBlock(BlockProperties.cagePanel)); + public static final Block GREEN_CAGE_PANEL = register("green_cage_panel", new CagePanelBlock(BlockProperties.cagePanel)); + public static final Block CYAN_CAGE_PANEL = register("cyan_cage_panel", new CagePanelBlock(BlockProperties.cagePanel)); + public static final Block BLUE_CAGE_PANEL = register("blue_cage_panel", new CagePanelBlock(BlockProperties.cagePanel)); + public static final Block LIGHT_BLUE_CAGE_PANEL = register("light_blue_cage_panel", new CagePanelBlock(BlockProperties.cagePanel)); + public static final Block PINK_CAGE_PANEL = register("pink_cage_panel", new CagePanelBlock(BlockProperties.cagePanel)); + public static final Block MAGENTA_CAGE_PANEL = register("magenta_cage_panel", new CagePanelBlock(BlockProperties.cagePanel)); + public static final Block PURPLE_CAGE_PANEL = register("purple_cage_panel", new CagePanelBlock(BlockProperties.cagePanel)); + public static final Block WHITE_CAGE_PANEL = register("white_cage_panel", new CagePanelBlock(BlockProperties.cagePanel)); + public static final Block LIGHT_GRAY_CAGE_PANEL = register("light_gray_cage_panel", new CagePanelBlock(BlockProperties.cagePanel)); + public static final Block GRAY_CAGE_PANEL = register("gray_cage_panel", new CagePanelBlock(BlockProperties.cagePanel)); + public static final Block BLACK_CAGE_PANEL = register("black_cage_panel", new CagePanelBlock(BlockProperties.cagePanel)); + public static final Block BROWN_CAGE_PANEL = register("brown_cage_panel", new CagePanelBlock(BlockProperties.cagePanel)); + + public static final Block RED_HAMSTER_BOWL = register("red_hamster_bowl", new BowlBlock(FabricBlockSettings.create().strength(0.6F).noOcclusion().isSuffocating((state, world, pos) -> false).pushReaction(PushReaction.DESTROY))); + public static final Block ORANGE_HAMSTER_BOWL = register("orange_hamster_bowl", new BowlBlock(FabricBlockSettings.create().strength(0.6F).noOcclusion().isSuffocating((state, world, pos) -> false).pushReaction(PushReaction.DESTROY))); + public static final Block YELLOW_HAMSTER_BOWL = register("yellow_hamster_bowl", new BowlBlock(FabricBlockSettings.create().strength(0.6F).noOcclusion().isSuffocating((state, world, pos) -> false).pushReaction(PushReaction.DESTROY))); + public static final Block LIME_HAMSTER_BOWL = register("lime_hamster_bowl", new BowlBlock(FabricBlockSettings.create().strength(0.6F).noOcclusion().isSuffocating((state, world, pos) -> false).pushReaction(PushReaction.DESTROY))); + public static final Block GREEN_HAMSTER_BOWL = register("green_hamster_bowl", new BowlBlock(FabricBlockSettings.create().strength(0.6F).noOcclusion().isSuffocating((state, world, pos) -> false).pushReaction(PushReaction.DESTROY))); + public static final Block CYAN_HAMSTER_BOWL = register("cyan_hamster_bowl", new BowlBlock(FabricBlockSettings.create().strength(0.6F).noOcclusion().isSuffocating((state, world, pos) -> false).pushReaction(PushReaction.DESTROY))); public static final Block BLUE_HAMSTER_BOWL = register("blue_hamster_bowl", new BowlBlock(FabricBlockSettings.create().strength(0.6F).noOcclusion().isSuffocating((state, world, pos) -> false).pushReaction(PushReaction.DESTROY))); + public static final Block LIGHT_BLUE_HAMSTER_BOWL = register("light_blue_hamster_bowl", new BowlBlock(FabricBlockSettings.create().strength(0.6F).noOcclusion().isSuffocating((state, world, pos) -> false).pushReaction(PushReaction.DESTROY))); + public static final Block PINK_HAMSTER_BOWL = register("pink_hamster_bowl", new BowlBlock(FabricBlockSettings.create().strength(0.6F).noOcclusion().isSuffocating((state, world, pos) -> false).pushReaction(PushReaction.DESTROY))); + public static final Block MAGENTA_HAMSTER_BOWL = register("magenta_hamster_bowl", new BowlBlock(FabricBlockSettings.create().strength(0.6F).noOcclusion().isSuffocating((state, world, pos) -> false).pushReaction(PushReaction.DESTROY))); + public static final Block PURPLE_HAMSTER_BOWL = register("purple_hamster_bowl", new BowlBlock(FabricBlockSettings.create().strength(0.6F).noOcclusion().isSuffocating((state, world, pos) -> false).pushReaction(PushReaction.DESTROY))); + public static final Block WHITE_HAMSTER_BOWL = register("white_hamster_bowl", new BowlBlock(FabricBlockSettings.create().strength(0.6F).noOcclusion().isSuffocating((state, world, pos) -> false).pushReaction(PushReaction.DESTROY))); + public static final Block LIGHT_GRAY_HAMSTER_BOWL = register("light_gray_hamster_bowl", new BowlBlock(FabricBlockSettings.create().strength(0.6F).noOcclusion().isSuffocating((state, world, pos) -> false).pushReaction(PushReaction.DESTROY))); + public static final Block GRAY_HAMSTER_BOWL = register("gray_hamster_bowl", new BowlBlock(FabricBlockSettings.create().strength(0.6F).noOcclusion().isSuffocating((state, world, pos) -> false).pushReaction(PushReaction.DESTROY))); + public static final Block BLACK_HAMSTER_BOWL = register("black_hamster_bowl", new BowlBlock(FabricBlockSettings.create().strength(0.6F).noOcclusion().isSuffocating((state, world, pos) -> false).pushReaction(PushReaction.DESTROY))); + public static final Block BROWN_HAMSTER_BOWL = register("brown_hamster_bowl", new BowlBlock(FabricBlockSettings.create().strength(0.6F).noOcclusion().isSuffocating((state, world, pos) -> false).pushReaction(PushReaction.DESTROY))); + + public static final Block RED_HAMSTER_BOTTLE = register("red_hamster_bottle", new BottleBlock(FabricBlockSettings.create().strength(0.6F).noOcclusion().isSuffocating((state, world, pos) -> false).pushReaction(PushReaction.DESTROY))); + public static final Block ORANGE_HAMSTER_BOTTLE = register("orange_hamster_bottle", new BottleBlock(FabricBlockSettings.create().strength(0.6F).noOcclusion().isSuffocating((state, world, pos) -> false).pushReaction(PushReaction.DESTROY))); + public static final Block YELLOW_HAMSTER_BOTTLE = register("yellow_hamster_bottle", new BottleBlock(FabricBlockSettings.create().strength(0.6F).noOcclusion().isSuffocating((state, world, pos) -> false).pushReaction(PushReaction.DESTROY))); + public static final Block LIME_HAMSTER_BOTTLE = register("lime_hamster_bottle", new BottleBlock(FabricBlockSettings.create().strength(0.6F).noOcclusion().isSuffocating((state, world, pos) -> false).pushReaction(PushReaction.DESTROY))); + public static final Block GREEN_HAMSTER_BOTTLE = register("green_hamster_bottle", new BottleBlock(FabricBlockSettings.create().strength(0.6F).noOcclusion().isSuffocating((state, world, pos) -> false).pushReaction(PushReaction.DESTROY))); + public static final Block CYAN_HAMSTER_BOTTLE = register("cyan_hamster_bottle", new BottleBlock(FabricBlockSettings.create().strength(0.6F).noOcclusion().isSuffocating((state, world, pos) -> false).pushReaction(PushReaction.DESTROY))); public static final Block BLUE_HAMSTER_BOTTLE = register("blue_hamster_bottle", new BottleBlock(FabricBlockSettings.create().strength(0.6F).noOcclusion().isSuffocating((state, world, pos) -> false).pushReaction(PushReaction.DESTROY))); + public static final Block LIGHT_BLUE_HAMSTER_BOTTLE = register("light_blue_hamster_bottle", new BottleBlock(FabricBlockSettings.create().strength(0.6F).noOcclusion().isSuffocating((state, world, pos) -> false).pushReaction(PushReaction.DESTROY))); + public static final Block PINK_HAMSTER_BOTTLE = register("pink_hamster_bottle", new BottleBlock(FabricBlockSettings.create().strength(0.6F).noOcclusion().isSuffocating((state, world, pos) -> false).pushReaction(PushReaction.DESTROY))); + public static final Block MAGENTA_HAMSTER_BOTTLE = register("magenta_hamster_bottle", new BottleBlock(FabricBlockSettings.create().strength(0.6F).noOcclusion().isSuffocating((state, world, pos) -> false).pushReaction(PushReaction.DESTROY))); + public static final Block PURPLE_HAMSTER_BOTTLE = register("purple_hamster_bottle", new BottleBlock(FabricBlockSettings.create().strength(0.6F).noOcclusion().isSuffocating((state, world, pos) -> false).pushReaction(PushReaction.DESTROY))); + public static final Block WHITE_HAMSTER_BOTTLE = register("white_hamster_bottle", new BottleBlock(FabricBlockSettings.create().strength(0.6F).noOcclusion().isSuffocating((state, world, pos) -> false).pushReaction(PushReaction.DESTROY))); + public static final Block LIGHT_GRAY_HAMSTER_BOTTLE = register("light_gray_hamster_bottle", new BottleBlock(FabricBlockSettings.create().strength(0.6F).noOcclusion().isSuffocating((state, world, pos) -> false).pushReaction(PushReaction.DESTROY))); + public static final Block GRAY_HAMSTER_BOTTLE = register("gray_hamster_bottle", new BottleBlock(FabricBlockSettings.create().strength(0.6F).noOcclusion().isSuffocating((state, world, pos) -> false).pushReaction(PushReaction.DESTROY))); + public static final Block BLACK_HAMSTER_BOTTLE = register("black_hamster_bottle", new BottleBlock(FabricBlockSettings.create().strength(0.6F).noOcclusion().isSuffocating((state, world, pos) -> false).pushReaction(PushReaction.DESTROY))); + public static final Block BROWN_HAMSTER_BOTTLE = register("brown_hamster_bottle", new BottleBlock(FabricBlockSettings.create().strength(0.6F).noOcclusion().isSuffocating((state, world, pos) -> false).pushReaction(PushReaction.DESTROY))); + private static Block register(String id, Block block) { return Registry.register(BuiltInRegistries.BLOCK, new ResourceLocation(Hamsters.MOD_ID, id), block); diff --git a/src/main/java/com/starfish_studios/hamsters/registry/HamstersCreativeModeTab.java b/src/main/java/com/starfish_studios/hamsters/registry/HamstersCreativeModeTab.java index 362d1d7..0bba750 100644 --- a/src/main/java/com/starfish_studios/hamsters/registry/HamstersCreativeModeTab.java +++ b/src/main/java/com/starfish_studios/hamsters/registry/HamstersCreativeModeTab.java @@ -10,6 +10,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.ItemLike; +import static com.starfish_studios.hamsters.registry.HamstersBlocks.CAGE_PANEL; import static com.starfish_studios.hamsters.registry.HamstersBlocks.HAMSTER_WHEEL; import static com.starfish_studios.hamsters.registry.HamstersItems.*; @@ -18,48 +19,82 @@ public class HamstersCreativeModeTab { @SuppressWarnings("unused") public static final CreativeModeTab ITEM_GROUP = register("item_group", FabricItemGroup.builder().icon(HAMSTER_SPAWN_EGG::getDefaultInstance).title(Component.translatable("itemGroup.hamsters.tab")).displayItems((featureFlagSet, output) -> { - output.accept(TUNNEL); - output.accept(HamstersItems.HAMSTER_WHEEL); - output.accept(HamstersItems.BLUE_HAMSTER_BOWL); - output.accept(HamstersItems.BLUE_HAMSTER_BOTTLE); - output.accept(HamstersItems.HAMSTER_BALL); +// output.accept(TUNNEL); + output.accept(HAMSTER_WHEEL); + +// // RED, ORANGE, YELLOW, LIME, GREEN, CYAN, BLUE, LIGHT BLUE, PINK, MAGENTA, PURPLE, WHITE, LIGHT GRAY, GRAY, BLACK, BROWN + output.accept(CAGE_PANEL); + output.accept(RED_CAGE_PANEL); + output.accept(ORANGE_CAGE_PANEL); + output.accept(YELLOW_CAGE_PANEL); + output.accept(LIME_CAGE_PANEL); + output.accept(GREEN_CAGE_PANEL); + output.accept(CYAN_CAGE_PANEL); + output.accept(BLUE_CAGE_PANEL); + output.accept(LIGHT_BLUE_CAGE_PANEL); + output.accept(PINK_CAGE_PANEL); + output.accept(MAGENTA_CAGE_PANEL); + output.accept(PURPLE_CAGE_PANEL); + output.accept(WHITE_CAGE_PANEL); + output.accept(LIGHT_GRAY_CAGE_PANEL); + output.accept(GRAY_CAGE_PANEL); + output.accept(BLACK_CAGE_PANEL); + output.accept(BROWN_CAGE_PANEL); + + output.accept(RED_HAMSTER_BOWL); + output.accept(ORANGE_HAMSTER_BOWL); + output.accept(YELLOW_HAMSTER_BOWL); + output.accept(LIME_HAMSTER_BOWL); + output.accept(GREEN_HAMSTER_BOWL); + output.accept(CYAN_HAMSTER_BOWL); + output.accept(BLUE_HAMSTER_BOWL); + output.accept(LIGHT_BLUE_HAMSTER_BOWL); + output.accept(PINK_HAMSTER_BOWL); + output.accept(MAGENTA_HAMSTER_BOWL); + output.accept(PURPLE_HAMSTER_BOWL); + output.accept(WHITE_HAMSTER_BOWL); + output.accept(LIGHT_GRAY_HAMSTER_BOWL); + output.accept(GRAY_HAMSTER_BOWL); + output.accept(BLACK_HAMSTER_BOWL); + output.accept(BROWN_HAMSTER_BOWL); + + output.accept(RED_HAMSTER_BOTTLE); + output.accept(ORANGE_HAMSTER_BOTTLE); + output.accept(YELLOW_HAMSTER_BOTTLE); + output.accept(LIME_HAMSTER_BOTTLE); + output.accept(GREEN_HAMSTER_BOTTLE); + output.accept(CYAN_HAMSTER_BOTTLE); + output.accept(BLUE_HAMSTER_BOTTLE); + output.accept(LIGHT_BLUE_HAMSTER_BOTTLE); + output.accept(PINK_HAMSTER_BOTTLE); + output.accept(MAGENTA_HAMSTER_BOTTLE); + output.accept(PURPLE_HAMSTER_BOTTLE); + output.accept(WHITE_HAMSTER_BOTTLE); + output.accept(LIGHT_GRAY_HAMSTER_BOTTLE); + output.accept(GRAY_HAMSTER_BOTTLE); + output.accept(BLACK_HAMSTER_BOTTLE); + output.accept(BROWN_HAMSTER_BOTTLE); + + output.accept(RED_HAMSTER_BALL); + output.accept(ORANGE_HAMSTER_BALL); + output.accept(YELLOW_HAMSTER_BALL); + output.accept(LIME_HAMSTER_BALL); + output.accept(GREEN_HAMSTER_BALL); + output.accept(CYAN_HAMSTER_BALL); + output.accept(BLUE_HAMSTER_BALL); + output.accept(LIGHT_BLUE_HAMSTER_BALL); + output.accept(PINK_HAMSTER_BALL); + output.accept(MAGENTA_HAMSTER_BALL); + output.accept(PURPLE_HAMSTER_BALL); + output.accept(WHITE_HAMSTER_BALL); + output.accept(LIGHT_GRAY_HAMSTER_BALL); + output.accept(GRAY_HAMSTER_BALL); + output.accept(BLACK_HAMSTER_BALL); + output.accept(BROWN_HAMSTER_BALL); output.accept(HAMSTER_SPAWN_EGG); output.accept(HAMSTER_NEW_SPAWN_EGG); - - // TODO: Not very pretty right now. Maybe there's a better way to do this? - - ItemStack item0 = new ItemStack(HAMSTER); - item0.getOrCreateTag().putInt("Variant", 0); - output.accept(item0); - - ItemStack item1 = new ItemStack(HAMSTER); - item1.getOrCreateTag().putInt("Variant", 1); - output.accept(item1); - - ItemStack item2 = new ItemStack(HAMSTER); - item2.getOrCreateTag().putInt("Variant", 2); - output.accept(item2); - - ItemStack item3 = new ItemStack(HAMSTER); - item3.getOrCreateTag().putInt("Variant", 3); - output.accept(item3); - - ItemStack item4 = new ItemStack(HAMSTER); - item4.getOrCreateTag().putInt("Variant", 4); - output.accept(item4); - - ItemStack item5 = new ItemStack(HAMSTER); - item5.getOrCreateTag().putInt("Variant", 5); - output.accept(item5); - - ItemStack item6 = new ItemStack(HAMSTER); - item6.getOrCreateTag().putInt("Variant", 6); - output.accept(item6); - - - }).build() ); diff --git a/src/main/java/com/starfish_studios/hamsters/registry/HamstersEntityType.java b/src/main/java/com/starfish_studios/hamsters/registry/HamstersEntityType.java index 30c77fd..b79501b 100644 --- a/src/main/java/com/starfish_studios/hamsters/registry/HamstersEntityType.java +++ b/src/main/java/com/starfish_studios/hamsters/registry/HamstersEntityType.java @@ -27,6 +27,16 @@ public class HamstersEntityType { .trackRangeChunks(10) ); + public static final EntityType FRANK = register( + "frank", + FabricEntityTypeBuilder.createMob() + .entityFactory(Frank::new) + .defaultAttributes(Frank::createAttributes) + .spawnGroup(MobCategory.MONSTER) + .dimensions(EntityDimensions.scalable(2.0F, 2.5F)) + .trackRangeChunks(10) + ); + public static final EntityType HAMSTER_NEW = register( "hamster_new", FabricEntityTypeBuilder.createMob() diff --git a/src/main/java/com/starfish_studios/hamsters/registry/HamstersItems.java b/src/main/java/com/starfish_studios/hamsters/registry/HamstersItems.java index 618a793..5875805 100644 --- a/src/main/java/com/starfish_studios/hamsters/registry/HamstersItems.java +++ b/src/main/java/com/starfish_studios/hamsters/registry/HamstersItems.java @@ -14,25 +14,104 @@ import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.Item; import net.minecraft.world.item.SpawnEggItem; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.NoteBlockInstrument; import net.minecraft.world.level.material.Fluid; import net.minecraft.world.level.material.Fluids; +import net.minecraft.world.level.material.MapColor; +import net.minecraft.world.level.material.PushReaction; import java.util.function.Supplier; public class HamstersItems { + public static class ItemProperties { + public static FabricItemSettings hamsterBallItem = (FabricItemSettings) new FabricItemSettings().stacksTo(1); + public static FabricItemSettings hamsterBottleItem = new FabricItemSettings(); + public static FabricItemSettings hamsterBowlItem = new FabricItemSettings(); + } + public static final Item HAMSTER_SPAWN_EGG = register("hamster_spawn_egg", new SpawnEggItem(HamstersEntityType.HAMSTER, 16747824, 16775119, new FabricItemSettings())); public static final Item HAMSTER_NEW_SPAWN_EGG = register("hamster_new_spawn_egg", new SpawnEggItem(HamstersEntityType.HAMSTER_NEW, 16747824, 16775119, new FabricItemSettings())); - public static final Item TUNNEL = register("tunnel", new BlockItem(HamstersBlocks.TUNNEL, new FabricItemSettings())); +// public static final Item TUNNEL = register("tunnel", new BlockItem(HamstersBlocks.TUNNEL, new FabricItemSettings())); public static final Item HAMSTER = register("hamster", new HamsterItem(new FabricItemSettings().stacksTo(1))); - public static final BlockItem BLUE_HAMSTER_BOWL = (BlockItem) register("blue_hamster_bowl", new BlockItem(HamstersBlocks.BLUE_HAMSTER_BOWL, new FabricItemSettings())); - public static final BlockItem BLUE_HAMSTER_BOTTLE = (BlockItem) register("blue_hamster_bottle", new BlockItem(HamstersBlocks.BLUE_HAMSTER_BOTTLE, new FabricItemSettings())); - public static final Item HAMSTER_BALL = register("hamster_ball", new HamsterBallItem(new FabricItemSettings().stacksTo(1))); + // RED, ORANGE, YELLOW, LIME, GREEN, CYAN, BLUE, LIGHT BLUE, PINK, MAGENTA, PURPLE, WHITE, LIGHT GRAY, GRAY, BLACK, BROWN + + public static final Item CAGE_PANEL = register("cage_panel", new BlockItem(HamstersBlocks.CAGE_PANEL, new FabricItemSettings())); + public static final Item RED_CAGE_PANEL = register("red_cage_panel", new BlockItem(HamstersBlocks.RED_CAGE_PANEL, new FabricItemSettings())); + public static final Item ORANGE_CAGE_PANEL = register("orange_cage_panel", new BlockItem(HamstersBlocks.ORANGE_CAGE_PANEL, new FabricItemSettings())); + public static final Item YELLOW_CAGE_PANEL = register("yellow_cage_panel", new BlockItem(HamstersBlocks.YELLOW_CAGE_PANEL, new FabricItemSettings())); + public static final Item LIME_CAGE_PANEL = register("lime_cage_panel", new BlockItem(HamstersBlocks.LIME_CAGE_PANEL, new FabricItemSettings())); + public static final Item GREEN_CAGE_PANEL = register("green_cage_panel", new BlockItem(HamstersBlocks.GREEN_CAGE_PANEL, new FabricItemSettings())); + public static final Item CYAN_CAGE_PANEL = register("cyan_cage_panel", new BlockItem(HamstersBlocks.CYAN_CAGE_PANEL, new FabricItemSettings())); + public static final Item BLUE_CAGE_PANEL = register("blue_cage_panel", new BlockItem(HamstersBlocks.BLUE_CAGE_PANEL, new FabricItemSettings())); + public static final Item LIGHT_BLUE_CAGE_PANEL = register("light_blue_cage_panel", new BlockItem(HamstersBlocks.LIGHT_BLUE_CAGE_PANEL, new FabricItemSettings())); + public static final Item PINK_CAGE_PANEL = register("pink_cage_panel", new BlockItem(HamstersBlocks.PINK_CAGE_PANEL, new FabricItemSettings())); + public static final Item MAGENTA_CAGE_PANEL = register("magenta_cage_panel", new BlockItem(HamstersBlocks.MAGENTA_CAGE_PANEL, new FabricItemSettings())); + public static final Item PURPLE_CAGE_PANEL = register("purple_cage_panel", new BlockItem(HamstersBlocks.PURPLE_CAGE_PANEL, new FabricItemSettings())); + public static final Item WHITE_CAGE_PANEL = register("white_cage_panel", new BlockItem(HamstersBlocks.WHITE_CAGE_PANEL, new FabricItemSettings())); + public static final Item LIGHT_GRAY_CAGE_PANEL = register("light_gray_cage_panel", new BlockItem(HamstersBlocks.LIGHT_GRAY_CAGE_PANEL, new FabricItemSettings())); + public static final Item GRAY_CAGE_PANEL = register("gray_cage_panel", new BlockItem(HamstersBlocks.GRAY_CAGE_PANEL, new FabricItemSettings())); + public static final Item BLACK_CAGE_PANEL = register("black_cage_panel", new BlockItem(HamstersBlocks.BLACK_CAGE_PANEL, new FabricItemSettings())); + public static final Item BROWN_CAGE_PANEL = register("brown_cage_panel", new BlockItem(HamstersBlocks.BROWN_CAGE_PANEL, new FabricItemSettings())); + + public static final Item RED_HAMSTER_BALL = register("red_hamster_ball", new HamsterBallItem(ItemProperties.hamsterBallItem)); + public static final Item ORANGE_HAMSTER_BALL = register("orange_hamster_ball", new HamsterBallItem(ItemProperties.hamsterBallItem)); + public static final Item YELLOW_HAMSTER_BALL = register("yellow_hamster_ball", new HamsterBallItem(ItemProperties.hamsterBallItem)); + public static final Item LIME_HAMSTER_BALL = register("lime_hamster_ball", new HamsterBallItem(ItemProperties.hamsterBallItem)); + public static final Item GREEN_HAMSTER_BALL = register("green_hamster_ball", new HamsterBallItem(ItemProperties.hamsterBallItem)); + public static final Item CYAN_HAMSTER_BALL = register("cyan_hamster_ball", new HamsterBallItem(ItemProperties.hamsterBallItem)); + public static final Item BLUE_HAMSTER_BALL = register("blue_hamster_ball", new HamsterBallItem(ItemProperties.hamsterBallItem)); + public static final Item LIGHT_BLUE_HAMSTER_BALL = register("light_blue_hamster_ball", new HamsterBallItem(ItemProperties.hamsterBallItem)); + public static final Item PINK_HAMSTER_BALL = register("pink_hamster_ball", new HamsterBallItem(ItemProperties.hamsterBallItem)); + public static final Item MAGENTA_HAMSTER_BALL = register("magenta_hamster_ball", new HamsterBallItem(ItemProperties.hamsterBallItem)); + public static final Item PURPLE_HAMSTER_BALL = register("purple_hamster_ball", new HamsterBallItem(ItemProperties.hamsterBallItem)); + public static final Item WHITE_HAMSTER_BALL = register("white_hamster_ball", new HamsterBallItem(ItemProperties.hamsterBallItem)); + public static final Item LIGHT_GRAY_HAMSTER_BALL = register("light_gray_hamster_ball", new HamsterBallItem(ItemProperties.hamsterBallItem)); + public static final Item GRAY_HAMSTER_BALL = register("gray_hamster_ball", new HamsterBallItem(ItemProperties.hamsterBallItem)); + public static final Item BLACK_HAMSTER_BALL = register("black_hamster_ball", new HamsterBallItem(ItemProperties.hamsterBallItem)); + public static final Item BROWN_HAMSTER_BALL = register("brown_hamster_ball", new HamsterBallItem(ItemProperties.hamsterBallItem)); public static final BlockItem HAMSTER_WHEEL = (BlockItem) register("hamster_wheel", new HamsterWheelItem(HamstersBlocks.HAMSTER_WHEEL, new FabricItemSettings())); + public static final Item RED_HAMSTER_BOTTLE = register("red_hamster_bottle", new BlockItem(HamstersBlocks.RED_HAMSTER_BOTTLE, ItemProperties.hamsterBottleItem)); + public static final Item ORANGE_HAMSTER_BOTTLE = register("orange_hamster_bottle", new BlockItem(HamstersBlocks.ORANGE_HAMSTER_BOTTLE, ItemProperties.hamsterBottleItem)); + public static final Item YELLOW_HAMSTER_BOTTLE = register("yellow_hamster_bottle", new BlockItem(HamstersBlocks.YELLOW_HAMSTER_BOTTLE, ItemProperties.hamsterBottleItem)); + public static final Item LIME_HAMSTER_BOTTLE = register("lime_hamster_bottle", new BlockItem(HamstersBlocks.LIME_HAMSTER_BOTTLE, ItemProperties.hamsterBottleItem)); + public static final Item GREEN_HAMSTER_BOTTLE = register("green_hamster_bottle", new BlockItem(HamstersBlocks.GREEN_HAMSTER_BOTTLE, ItemProperties.hamsterBottleItem)); + public static final Item CYAN_HAMSTER_BOTTLE = register("cyan_hamster_bottle", new BlockItem(HamstersBlocks.CYAN_HAMSTER_BOTTLE, ItemProperties.hamsterBottleItem)); + public static final Item BLUE_HAMSTER_BOTTLE = register("blue_hamster_bottle", new BlockItem(HamstersBlocks.BLUE_HAMSTER_BOTTLE, ItemProperties.hamsterBottleItem)); + public static final Item LIGHT_BLUE_HAMSTER_BOTTLE = register("light_blue_hamster_bottle", new BlockItem(HamstersBlocks.LIGHT_BLUE_HAMSTER_BOTTLE, ItemProperties.hamsterBottleItem)); + public static final Item PINK_HAMSTER_BOTTLE = register("pink_hamster_bottle", new BlockItem(HamstersBlocks.PINK_HAMSTER_BOTTLE, ItemProperties.hamsterBottleItem)); + public static final Item MAGENTA_HAMSTER_BOTTLE = register("magenta_hamster_bottle", new BlockItem(HamstersBlocks.MAGENTA_HAMSTER_BOTTLE, ItemProperties.hamsterBottleItem)); + public static final Item PURPLE_HAMSTER_BOTTLE = register("purple_hamster_bottle", new BlockItem(HamstersBlocks.PURPLE_HAMSTER_BOTTLE, ItemProperties.hamsterBottleItem)); + public static final Item WHITE_HAMSTER_BOTTLE = register("white_hamster_bottle", new BlockItem(HamstersBlocks.WHITE_HAMSTER_BOTTLE, ItemProperties.hamsterBottleItem)); + public static final Item LIGHT_GRAY_HAMSTER_BOTTLE = register("light_gray_hamster_bottle", new BlockItem(HamstersBlocks.LIGHT_GRAY_HAMSTER_BOTTLE, ItemProperties.hamsterBottleItem)); + public static final Item GRAY_HAMSTER_BOTTLE = register("gray_hamster_bottle", new BlockItem(HamstersBlocks.GRAY_HAMSTER_BOTTLE, ItemProperties.hamsterBottleItem)); + public static final Item BLACK_HAMSTER_BOTTLE = register("black_hamster_bottle", new BlockItem(HamstersBlocks.BLACK_HAMSTER_BOTTLE, ItemProperties.hamsterBottleItem)); + public static final Item BROWN_HAMSTER_BOTTLE = register("brown_hamster_bottle", new BlockItem(HamstersBlocks.BROWN_HAMSTER_BOTTLE, ItemProperties.hamsterBottleItem)); + + public static final Item RED_HAMSTER_BOWL = register("red_hamster_bowl", new BlockItem(HamstersBlocks.RED_HAMSTER_BOWL, ItemProperties.hamsterBowlItem)); + public static final Item ORANGE_HAMSTER_BOWL = register("orange_hamster_bowl", new BlockItem(HamstersBlocks.ORANGE_HAMSTER_BOWL, ItemProperties.hamsterBowlItem)); + public static final Item YELLOW_HAMSTER_BOWL = register("yellow_hamster_bowl", new BlockItem(HamstersBlocks.YELLOW_HAMSTER_BOWL, ItemProperties.hamsterBowlItem)); + public static final Item LIME_HAMSTER_BOWL = register("lime_hamster_bowl", new BlockItem(HamstersBlocks.LIME_HAMSTER_BOWL, ItemProperties.hamsterBowlItem)); + public static final Item GREEN_HAMSTER_BOWL = register("green_hamster_bowl", new BlockItem(HamstersBlocks.GREEN_HAMSTER_BOWL, ItemProperties.hamsterBowlItem)); + public static final Item CYAN_HAMSTER_BOWL = register("cyan_hamster_bowl", new BlockItem(HamstersBlocks.CYAN_HAMSTER_BOWL, ItemProperties.hamsterBowlItem)); + public static final Item BLUE_HAMSTER_BOWL = register("blue_hamster_bowl", new BlockItem(HamstersBlocks.BLUE_HAMSTER_BOWL, ItemProperties.hamsterBowlItem)); + public static final Item LIGHT_BLUE_HAMSTER_BOWL = register("light_blue_hamster_bowl", new BlockItem(HamstersBlocks.LIGHT_BLUE_HAMSTER_BOWL, ItemProperties.hamsterBowlItem)); + public static final Item PINK_HAMSTER_BOWL = register("pink_hamster_bowl", new BlockItem(HamstersBlocks.PINK_HAMSTER_BOWL, ItemProperties.hamsterBowlItem)); + public static final Item MAGENTA_HAMSTER_BOWL = register("magenta_hamster_bowl", new BlockItem(HamstersBlocks.MAGENTA_HAMSTER_BOWL, ItemProperties.hamsterBowlItem)); + public static final Item PURPLE_HAMSTER_BOWL = register("purple_hamster_bowl", new BlockItem(HamstersBlocks.PURPLE_HAMSTER_BOWL, ItemProperties.hamsterBowlItem)); + public static final Item WHITE_HAMSTER_BOWL = register("white_hamster_bowl", new BlockItem(HamstersBlocks.WHITE_HAMSTER_BOWL, ItemProperties.hamsterBowlItem)); + public static final Item LIGHT_GRAY_HAMSTER_BOWL = register("light_gray_hamster_bowl", new BlockItem(HamstersBlocks.LIGHT_GRAY_HAMSTER_BOWL, ItemProperties.hamsterBowlItem)); + public static final Item GRAY_HAMSTER_BOWL = register("gray_hamster_bowl", new BlockItem(HamstersBlocks.GRAY_HAMSTER_BOWL, ItemProperties.hamsterBowlItem)); + public static final Item BLACK_HAMSTER_BOWL = register("black_hamster_bowl", new BlockItem(HamstersBlocks.BLACK_HAMSTER_BOWL, ItemProperties.hamsterBowlItem)); + public static final Item BROWN_HAMSTER_BOWL = register("brown_hamster_bowl", new BlockItem(HamstersBlocks.BROWN_HAMSTER_BOWL, ItemProperties.hamsterBowlItem)); //public static Supplier registerCaughtMobItem(String name, EntityType entitySupplier, Supplier fluidSupplier, SoundEvent soundSupplier, int variantAmount) { // return registerItem(name, () -> new HamsterItem(entitySupplier, fluidSupplier.get(), soundSupplier, variantAmount, new Item.Properties().stacksTo(1))); diff --git a/src/main/java/com/starfish_studios/hamsters/registry/HamstersTags.java b/src/main/java/com/starfish_studios/hamsters/registry/HamstersTags.java index f33ac47..9b312ec 100644 --- a/src/main/java/com/starfish_studios/hamsters/registry/HamstersTags.java +++ b/src/main/java/com/starfish_studios/hamsters/registry/HamstersTags.java @@ -14,6 +14,8 @@ public interface HamstersTags { + TagKey CAGE_PANELS = TagKey.create(Registries.ITEM, new ResourceLocation(MOD_ID, "cage_panels")); + TagKey HAMSTER_WHEELS = TagKey.create(Registries.BLOCK, new ResourceLocation(MOD_ID, "hamster_wheels")); TagKey HAMSTER_BLOCKS = TagKey.create(Registries.BLOCK, new ResourceLocation(MOD_ID, "hamster_blocks")); diff --git a/src/main/resources/assets/hamsters/animations/scp_frank.rp_anim.json b/src/main/resources/assets/hamsters/animations/scp_frank.rp_anim.json new file mode 100644 index 0000000..09eb906 --- /dev/null +++ b/src/main/resources/assets/hamsters/animations/scp_frank.rp_anim.json @@ -0,0 +1,3481 @@ +{ + "format_version": "1.8.0", + "animations": { + "animation.frank.bite": { + "loop": true, + "animation_length": 0.7917, + "bones": { + "hip": { + "rotation": { + "0.0": [-20, -5, 0], + "0.125": [-18.39, 15.44, 6.35], + "0.2083": [-17.06, 29.06, 10.58], + "0.25": [-17.97, 31.59, 11.36], + "0.3333": [-21.06, 29.06, 10.58], + "0.375": [-24.19, 31.19, 11.24], + "0.4167": [-21.06, 29.06, 10.58], + "0.5": [25, -5, 0], + "0.625": [25, -5, 0], + "0.75": [-9.27, -5, 0], + "0.7917": [-20.61, -5, 0] + }, + "position": { + "0.0": [0, 0, 0], + "0.2083": [0.6, 2, 12], + "0.4167": [0.6, 2, 12], + "0.5": [0, 0, 0], + "0.625": [0, 0, 0], + "0.7917": [0, 0, 0] + } + }, + "neck": { + "rotation": { + "0.0": ["5+ Math.sin((query.anim_time - 0.24) * 180) * -1", 7.5, 0], + "0.0833": [5.17476, 1.97743, 4.02002], + "0.375": ["-24.0933+ Math.sin((query.anim_time - 0.24) * 180) * -1", 0.86236, 12.36652], + "0.7917": ["5+ Math.sin((query.anim_time - 0.24) * 180) * -1", 7.5, 0] + } + }, + "arm_shoulder_left": { + "rotation": ["51.8397 + Math.cos((query.anim_time - 0.06) * 180) * 3", -17.33786, -16.23565], + "position": [0, 2.75, 0] + }, + "arm_left_2": { + "rotation": { + "0.0": [-2.35753, "-Math.cos((query.anim_time - 0.1) * 180) * 5.9077", "-108.3825+ Math.sin((query.anim_time - 0.1) * 180) * -2"], + "0.7917": [-2.35753, "-Math.cos((query.anim_time - 0.1) * 180) * 5.9077", "-108.3825+ Math.sin((query.anim_time - 0.1) * 180) * -2"] + } + }, + "hand_left": { + "rotation": [-27.5, -37.5, -15], + "position": [1.75, -1.5, 1.5] + }, + "arm_shoulder_right": { + "rotation": ["51.8397 + Math.sin((query.anim_time - 0.06) * 180) * 3", 17.33786, 16.23565], + "position": [0, 2.75, 0] + }, + "arm_right_2": { + "rotation": [-5.46465, "35.1939+Math.sin((query.anim_time - 0.2) * 180) * 5.9077", "103.8964+ Math.cos((query.anim_time - 0.2) * 180) * -2"] + }, + "hand_right": { + "rotation": [-32.5, 2.5, 30], + "position": [-1.75, -1.5, -2] + }, + "root": { + "position": [0, 0, 0] + }, + "chest": { + "rotation": { + "0.0": [22.95, 0, -5], + "0.125": [22.17, -12.2, -6.59], + "0.25": [14.6, -9.15, -6.08], + "0.375": [4.77, -3.62, -5.37], + "0.4167": [2.09, -2.44, -5.32], + "0.4583": [-10.92, -0.44, -7.09], + "0.5": [-4.11, 0.61, -8.99], + "0.5417": [2.71, 1.66, -10.88], + "0.625": [8.97, 1.11, -8.92], + "0.75": [18.41, 0.28, -5.98], + "0.7917": [21.6, 0, -5] + } + }, + "bone2": { + "rotation": [0, 0, 0] + }, + "jaw": { + "rotation": { + "0.0": ["-11.5 + Math.sin((query.anim_time - 0.0) * 180) * 5 + Math.sin((query.anim_time - 0.0) * 1440) * 1", 0, 0], + "0.2083": ["-11.5 + Math.sin((query.anim_time - 0.0) * 180) * 5 + Math.sin((query.anim_time - 0.0) * 1440) * 1", 0, 0], + "0.4583": [33.63, 0, 0], + "0.5": [1.71848, 3.73722, 3.32398], + "0.5417": ["-54.5 + Math.sin((query.anim_time - 0.0) * 180) * 5 + Math.sin((query.anim_time - 0.0) * 1440) * 1", 0, 0], + "0.7917": ["-11.5 + Math.sin((query.anim_time - 0.0) * 180) * 5 + Math.sin((query.anim_time - 0.0) * 1440) * 1", 0, 0] + } + }, + "arm_left_1": { + "rotation": { + "0.0": [-15, 10, 17.5], + "0.125": [-29.09, -16.97, 14.54], + "0.2083": [-39.02, -33.05, 9.49], + "0.25": [-42.14, -35.72, 4.52], + "0.375": [-48.75, -33.06, -15.27], + "0.4167": [-51.55, -31.59, -18.84], + "0.4583": [-71.59, -22.9, -9.36], + "0.5": [-62.74, -19.12, 3.31], + "0.625": [-20.5, -5.53, 46.35], + "0.75": [-14.92, 7.25, 24.67], + "0.7917": [-15, 10, 17.5] + } + }, + "index_left_1": { + "rotation": [15, 0, "80+ Math.sin((query.anim_time + 0.2) * 180) * 8"] + }, + "index_right_2": { + "rotation": [0, 0, 35] + }, + "pinky_right_1": { + "rotation": [-20, 27.5, "80+ Math.sin((query.anim_time + 0.1) * 180) * 8"] + }, + "pinky_right_2": { + "rotation": [0, 0, 32.5] + }, + "thumb_left_1": { + "rotation": [0, "27.5 + Math.sin((query.anim_time + 0.3) * 180) * 8", 0] + }, + "thumb_left_2": { + "rotation": [0, 0, -2.5] + }, + "arm_right_1": { + "rotation": { + "0.0": [12.5, 2.5, -17.5], + "0.125": [-1.56, 16.05, -14.7], + "0.2083": [-9.79, 24.04, -10.79], + "0.25": [-10.36, 25.09, -7.44], + "0.375": [-6.2, 22.73, 5.62], + "0.4167": [-7.69, 22.53, 8.54], + "0.4583": [-41.61, 28.37, 9.93], + "0.5": [-40.3, 25.51, 5.51], + "0.625": [-19.7, 11.27, -12.82], + "0.75": [6.47, 3.88, -17.08], + "0.7917": [12.5, 2.5, -17.5] + } + }, + "index_right_1": { + "rotation": [15, 0, "-80+ Math.sin((query.anim_time + 0.2) * 180) * 8"] + }, + "index_left_2": { + "rotation": [0, 0, -35] + }, + "pinky_left_1": { + "rotation": [-20, -27.5, "-80+ Math.sin((query.anim_time + 0.1) * 180) * 8"] + }, + "pinky_left_2": { + "rotation": [0, 0, -32.5] + }, + "thumb_right_1": { + "rotation": [0, "-27.5+ Math.sin((query.anim_time + 0.3) * 180) * 8", 0] + }, + "thumb_right_2": { + "rotation": [0, 0, -32.5] + }, + "small_arm_left_1": { + "rotation": [0, "Math.cos((query.anim_time - 0.4) * 180) * -12", 0] + }, + "small_arm_left_2": { + "rotation": [0, "Math.sin((query.anim_time - 0.5) * 180) * -12", 0] + }, + "small_arm_right_1": { + "rotation": [0, "Math.cos((query.anim_time - 0.4) * 180) * -12", 0] + }, + "small_arm_right_2": { + "rotation": [0, "Math.sin((query.anim_time - 0.5) * 180) * -12", 0] + }, + "leg_left_1": { + "rotation": { + "0.0": [0, -35, 0], + "0.2083": [-30.47047, -33.49427, 10.23348], + "0.4167": [-30.47047, -33.49427, 10.23348], + "0.5": [0, -35, 0] + }, + "position": { + "0.0": [0, 0, 1], + "0.2083": [0.5, 2.3, 10.6], + "0.4167": [0.5, 2.3, 10.6], + "0.5": [0, 0, 1] + } + }, + "leg_left_2": { + "rotation": { + "0.0": [6.5, 0, 0], + "0.2083": [-1.5, 0, 0], + "0.4167": [-1.5, 0, 0], + "0.5": [6.5, 0, 0] + }, + "position": { + "0.0": [0, 0, 0], + "0.5": [0, 0, 0] + } + }, + "foot_left": { + "rotation": { + "0.0": [7.5, 0, 0], + "0.2083": [38.5135, -2.10258, -5.96034], + "0.4167": [38.5135, -2.10258, -5.96034], + "0.5": [7.5, 0, 0] + } + }, + "leg_right_1": { + "rotation": { + "0.0": [-42.5, 22.5, -10], + "0.0833": [-41.35783, 34.97835, -7.79796], + "0.2083": [0.22875, 78.71341, 7.93255], + "0.4167": [0.22875, 78.71341, 7.93255], + "0.5": [-42.5, 22.5, -10], + "0.625": [-42.5, 22.5, -10], + "0.7917": [-42.5, 22.5, -10] + }, + "position": { + "0.0": [0, 0, -1], + "0.0833": [0, 2.1, 6.2], + "0.2083": [0, 4, 17], + "0.4167": [0, 4, 17], + "0.5": [0, 0, -1], + "0.625": [0, 0, -1], + "0.7917": [0, 0, -1] + } + }, + "leg_right_2": { + "rotation": { + "0.0": [10, 0, 0], + "0.2083": [-27, 0, 0], + "0.4167": [-27, 0, 0], + "0.5": [10, 0, 0] + }, + "position": { + "0.0": [0, 0, 0], + "0.5": [0, 0, 0] + } + }, + "foot_right": { + "rotation": { + "0.0": [37.5, 12.5, 0], + "0.2083": [62.5, 12.5, 0], + "0.4167": [62.5, 12.5, 0], + "0.5": [37.5, 12.5, 0] + } + }, + "headrot": { + "rotation": { + "0.0": ["-10+ Math.sin((query.anim_time - 0.2) * 180) * 4", -12.5, 0], + "0.0833": [-11.65569, -12.5, 0], + "0.2083": [-9.04409, -12.5, 0], + "0.5": ["-23+Math.sin((query.anim_time - 0.2) * 180) * 4", -12.5, 0], + "0.7917": ["-10+ Math.sin((query.anim_time - 0.2) * 180) * 4", -12.5, 0] + }, + "scale": { + "0.4167": [1, 1, 1], + "0.4583": [1, 1.35, 1], + "0.5": [1, 1, 1] + } + } + }, + "sound_effects": { + "0.25": { + "effect": "frank.attackBite" + } + } + }, + "animation.frank.walk": { + "loop": true, + "animation_length": 2, + "bones": { + "root": { + "rotation": [0, "Math.cos((query.anim_time - 0.0) * 180) * 2", 0], + "position": { + "0.0": [0, 0, 0], + "0.0417": [0, 0.08, 0], + "0.0833": [0, 0.2, 0], + "0.125": [0, 0.34, 0], + "0.1667": [0, 0.5, 0], + "0.2083": [0, 0.67, 0], + "0.25": [0, 0.84, 0], + "0.2917": [0, 1.01, 0], + "0.3333": [0, 1.17, 0], + "0.375": [0, 1.3, 0], + "0.4167": [0, 1.41, 0], + "0.4583": [0, 1.48, 0], + "0.5": [0, 1.5, 0], + "0.5417": [0, 1.47, 0], + "0.5833": [0, 1.39, 0], + "0.625": [0, 1.27, 0], + "0.6667": [0, 1.11, 0], + "0.7083": [0, 0.94, 0], + "0.75": [0, 0.75, 0], + "0.7917": [0, 0.56, 0], + "0.8333": [0, 0.39, 0], + "0.875": [0, 0.23, 0], + "0.9167": [0, 0.11, 0], + "0.9583": [0, 0.03, 0], + "1.0": [0, 0, 0], + "1.0417": [0, 0.03, 0], + "1.0833": [0, 0.11, 0], + "1.125": [0, 0.23, 0], + "1.1667": [0, 0.39, 0], + "1.2083": [0, 0.56, 0], + "1.25": [0, 0.75, 0], + "1.2917": [0, 0.94, 0], + "1.3333": [0, 1.11, 0], + "1.375": [0, 1.27, 0], + "1.4167": [0, 1.39, 0], + "1.4583": [0, 1.47, 0], + "1.5": [0, 1.5, 0], + "1.5417": [0, 1.48, 0], + "1.5833": [0, 1.41, 0], + "1.625": [0, 1.3, 0], + "1.6667": [0, 1.17, 0], + "1.7083": [0, 1.01, 0], + "1.75": [0, 0.84, 0], + "1.7917": [0, 0.67, 0], + "1.8333": [0, 0.5, 0], + "1.875": [0, 0.34, 0], + "1.9167": [0, 0.2, 0], + "1.9583": [0, 0.08, 0], + "2.0": [0, 0, 0] + } + }, + "hip": { + "rotation": [-20, 0, 0] + }, + "chest": { + "rotation": [22.5, "Math.sin((query.anim_time - 0.0) * 180) * 2", 0] + }, + "neck": { + "rotation": [5, "Math.sin((query.anim_time - 0.2) * 180) * 4", "Math.cos((query.anim_time - 0.0) * 180) * 2"] + }, + "bone2": { + "rotation": [0, 0, 0] + }, + "jaw": { + "rotation": ["-25 + Math.cos((query.anim_time - 0.0) * 720) * 1", 0, 0] + }, + "small_arm_left_1": { + "rotation": [0, "Math.cos((query.anim_time - 0.4) * 180) * -12", 0] + }, + "small_arm_left_2": { + "rotation": [0, "Math.sin((query.anim_time - 0.5) * 180) * -12", 0] + }, + "small_arm_right_1": { + "rotation": [0, "Math.cos((query.anim_time - 0.4) * 180) * -12", 0] + }, + "small_arm_right_2": { + "rotation": [0, "Math.sin((query.anim_time - 0.5) * 180) * -12", 0] + }, + "leg_left_1": { + "rotation": { + "0.0": [-42.5, -22.5, 10], + "0.0417": [-40.99, -22.8, 9.76], + "0.0833": [-39.11, -23.16, 9.47], + "0.125": [-36.88, -23.59, 9.13], + "0.1667": [-34.34, -24.07, 8.75], + "0.2083": [-31.54, -24.6, 8.32], + "0.25": [-28.52, -25.17, 7.87], + "0.2917": [-25.31, -25.77, 7.38], + "0.3333": [-21.95, -26.41, 6.87], + "0.375": [-18.48, -27.06, 6.35], + "0.4167": [-14.95, -27.73, 5.81], + "0.4583": [-11.38, -28.41, 5.27], + "0.5": [-7.82, -29.09, 4.73], + "0.5417": [-4.31, -29.77, 4.19], + "0.5833": [-0.89, -30.43, 3.65], + "0.625": [2.41, -31.08, 3.14], + "0.6667": [5.54, -31.7, 2.64], + "0.7083": [8.47, -32.29, 2.17], + "0.75": [11.16, -32.85, 1.72], + "0.7917": [13.57, -33.35, 1.32], + "0.8333": [15.65, -33.81, 0.95], + "0.875": [17.38, -34.21, 0.63], + "0.9167": [18.7, -34.55, 0.36], + "0.9583": [19.59, -34.81, 0.15], + "1.0": [20, -35, 0], + "1.0417": [19.39, -35.18, -0.14], + "1.0833": [17.1, -35.15, -0.12], + "1.125": [13.43, -34.93, 0.05], + "1.1667": [8.66, -34.57, 0.35], + "1.2083": [3.08, -34.07, 0.74], + "1.25": [-3.04, -33.49, 1.21], + "1.2917": [-9.39, -32.83, 1.74], + "1.3333": [-15.71, -32.13, 2.3], + "1.375": [-21.7, -31.43, 2.86], + "1.4167": [-27.07, -30.74, 3.41], + "1.4583": [-31.55, -30.1, 3.93], + "1.5": [-34.84, -29.53, 4.38], + "1.5417": [-37.15, -28.98, 4.82], + "1.5833": [-38.94, -28.37, 5.31], + "1.625": [-40.25, -27.72, 5.83], + "1.6667": [-41.17, -27.04, 6.37], + "1.7083": [-41.76, -26.36, 6.92], + "1.75": [-42.1, -25.67, 7.46], + "1.7917": [-42.24, -25.01, 7.99], + "1.8333": [-42.26, -24.38, 8.5], + "1.875": [-42.23, -23.8, 8.96], + "1.9167": [-42.21, -23.28, 9.37], + "1.9583": [-42.28, -22.84, 9.72], + "2.0": [-42.5, -22.5, 10] + }, + "position": { + "0.0": [0, 0, -1], + "0.0417": [0, 0, -0.98], + "0.0833": [0, 0, -0.95], + "0.125": [0, 0, -0.91], + "0.1667": [0, 0, -0.87], + "0.2083": [0, 0, -0.82], + "0.25": [0, 0, -0.77], + "0.2917": [0, 0, -0.72], + "0.3333": [0, 0, -0.67], + "0.375": [0, 0, -0.61], + "0.4167": [0, 0, -0.55], + "0.4583": [0, 0, -0.5], + "0.5": [0, 0, -0.44], + "0.5417": [0, 0, -0.38], + "0.5833": [0, 0, -0.33], + "0.625": [0, 0, -0.27], + "0.6667": [0, 0, -0.22], + "0.7083": [0, 0, -0.18], + "0.75": [0, 0, -0.13], + "0.7917": [0, 0, -0.09], + "0.8333": [0, 0, -0.06], + "0.875": [0, 0, -0.04], + "0.9167": [0, 0, -0.02], + "0.9583": [0, 0, 0], + "1.0": [0, 0, 0], + "1.0417": [0, 0, 0], + "1.0833": [0, 0, -0.02], + "1.125": [0, 0, -0.04], + "1.1667": [0, 0, -0.06], + "1.2083": [0, 0, -0.09], + "1.25": [0, 0, -0.13], + "1.2917": [0, 0, -0.18], + "1.3333": [0, 0, -0.22], + "1.375": [0, 0, -0.27], + "1.4167": [0, 0, -0.33], + "1.4583": [0, 0, -0.38], + "1.5": [0, 0, -0.44], + "1.5417": [0, 0, -0.5], + "1.5833": [0, 0, -0.55], + "1.625": [0, 0, -0.61], + "1.6667": [0, 0, -0.67], + "1.7083": [0, 0, -0.72], + "1.75": [0, 0, -0.77], + "1.7917": [0, 0, -0.82], + "1.8333": [0, 0, -0.87], + "1.875": [0, 0, -0.91], + "1.9167": [0, 0, -0.95], + "1.9583": [0, 0, -0.98], + "2.0": [0, 0, -1] + } + }, + "leg_left_2": { + "rotation": { + "0.0": [10, 0, 0], + "0.0417": [9.64, 0, 0], + "0.0833": [9.15, 0, 0], + "0.125": [8.54, 0, 0], + "0.1667": [7.81, 0, 0], + "0.2083": [7.01, 0, 0], + "0.25": [6.12, 0, 0], + "0.2917": [5.19, 0, 0], + "0.3333": [4.21, 0, 0], + "0.375": [3.21, 0, 0], + "0.4167": [2.2, 0, 0], + "0.4583": [1.2, 0, 0], + "0.5": [0.22, 0, 0], + "0.5417": [-0.71, 0, 0], + "0.5833": [-1.58, 0, 0], + "0.625": [-2.38, 0, 0], + "0.6667": [-3.09, 0, 0], + "0.7083": [-3.69, 0, 0], + "0.75": [-4.16, 0, 0], + "0.7917": [-4.5, 0, 0], + "0.8333": [-4.68, 0, 0], + "0.875": [-4.68, 0, 0], + "0.9167": [-4.5, 0, 0], + "0.9583": [-4.11, 0, 0], + "1.0": [-3.5, 0, 0], + "1.0417": [-1.37, 0, 0], + "1.0833": [1.95, 0, 0], + "1.125": [6.2, 0, 0], + "1.1667": [11.14, 0, 0], + "1.2083": [16.5, 0, 0], + "1.25": [22.04, 0, 0], + "1.2917": [27.51, 0, 0], + "1.3333": [32.65, 0, 0], + "1.375": [37.21, 0, 0], + "1.4167": [40.95, 0, 0], + "1.4583": [43.6, 0, 0], + "1.5": [44.91, 0, 0], + "1.5417": [44.81, 0, 0], + "1.5833": [43.51, 0, 0], + "1.625": [41.22, 0, 0], + "1.6667": [38.15, 0, 0], + "1.7083": [34.5, 0, 0], + "1.75": [30.48, 0, 0], + "1.7917": [26.29, 0, 0], + "1.8333": [22.14, 0, 0], + "1.875": [18.23, 0, 0], + "1.9167": [14.76, 0, 0], + "1.9583": [11.95, 0, 0], + "2.0": [10, 0, 0] + }, + "position": { + "1.0": [0, 0, 0], + "1.0417": [0, 0.03, 0.12], + "1.0833": [0, 0.07, 0.3], + "1.125": [0, 0.11, 0.51], + "1.1667": [0, 0.17, 0.75], + "1.2083": [0, 0.22, 1.01], + "1.25": [0, 0.28, 1.27], + "1.2917": [0, 0.34, 1.52], + "1.3333": [0, 0.39, 1.75], + "1.375": [0, 0.43, 1.95], + "1.4167": [0, 0.47, 2.11], + "1.4583": [0, 0.49, 2.21], + "1.5": [0, 0.5, 2.25], + "1.5417": [0, 0.49, 2.21], + "1.5833": [0, 0.47, 2.11], + "1.625": [0, 0.43, 1.95], + "1.6667": [0, 0.39, 1.75], + "1.7083": [0, 0.34, 1.52], + "1.75": [0, 0.28, 1.27], + "1.7917": [0, 0.22, 1.01], + "1.8333": [0, 0.17, 0.75], + "1.875": [0, 0.11, 0.51], + "1.9167": [0, 0.07, 0.3], + "1.9583": [0, 0.03, 0.12], + "2.0": [0, 0, 0] + } + }, + "foot_left": { + "rotation": { + "0.0": [37.5, -12.5, -5], + "0.0417": [36.57, -12.2, -4.88], + "0.0833": [35.38, -11.84, -4.74], + "0.125": [33.95, -11.41, -4.57], + "0.1667": [32.3, -10.93, -4.37], + "0.2083": [30.48, -10.4, -4.16], + "0.25": [28.5, -9.83, -3.93], + "0.2917": [26.4, -9.23, -3.69], + "0.3333": [24.21, -8.59, -3.44], + "0.375": [21.95, -7.94, -3.18], + "0.4167": [19.65, -7.27, -2.91], + "0.4583": [17.35, -6.59, -2.64], + "0.5": [15.07, -5.91, -2.36], + "0.5417": [12.84, -5.23, -2.09], + "0.5833": [10.69, -4.57, -1.83], + "0.625": [8.65, -3.92, -1.57], + "0.6667": [6.75, -3.3, -1.32], + "0.7083": [5.01, -2.71, -1.08], + "0.75": [3.48, -2.15, -0.86], + "0.7917": [2.16, -1.65, -0.66], + "0.8333": [1.1, -1.19, -0.48], + "0.875": [0.33, -0.79, -0.32], + "0.9167": [-0.13, -0.45, -0.18], + "0.9583": [-0.25, -0.19, -0.07], + "1.0": [0, 0, 0], + "1.0417": [1.79, 0.18, 0.07], + "1.0833": [5.17, 0.15, 0.06], + "1.125": [9.83, -0.07, -0.03], + "1.1667": [15.47, -0.43, -0.17], + "1.2083": [21.78, -0.93, -0.37], + "1.25": [28.45, -1.51, -0.61], + "1.2917": [35.18, -2.17, -0.87], + "1.3333": [41.65, -2.87, -1.15], + "1.375": [47.57, -3.57, -1.43], + "1.4167": [52.62, -4.26, -1.71], + "1.4583": [56.51, -4.9, -1.96], + "1.5": [58.91, -5.47, -2.19], + "1.5417": [59.87, -6.02, -2.41], + "1.5833": [59.74, -6.63, -2.65], + "1.625": [58.7, -7.28, -2.91], + "1.6667": [56.93, -7.96, -3.18], + "1.7083": [54.6, -8.64, -3.46], + "1.75": [51.89, -9.33, -3.73], + "1.7917": [48.97, -9.99, -4], + "1.8333": [46.03, -10.62, -4.25], + "1.875": [43.23, -11.2, -4.48], + "1.9167": [40.76, -11.72, -4.69], + "1.9583": [38.79, -12.16, -4.86], + "2.0": [37.5, -12.5, -5] + } + }, + "leg_right_1": { + "rotation": { + "0.0": [20, 35, 0], + "0.0417": [17.2, 34.74, -0.21], + "0.0833": [13.49, 34.42, -0.46], + "0.125": [9.04, 34.05, -0.76], + "0.1667": [4.03, 33.64, -1.09], + "0.2083": [-1.35, 33.19, -1.45], + "0.25": [-6.94, 32.7, -1.84], + "0.2917": [-12.56, 32.2, -2.25], + "0.3333": [-18.02, 31.67, -2.67], + "0.375": [-23.16, 31.14, -3.1], + "0.4167": [-27.8, 30.6, -3.53], + "0.4583": [-31.75, 30.06, -3.96], + "0.5": [-34.84, 29.53, -4.38], + "0.5417": [-37.35, 28.94, -4.85], + "0.5833": [-39.66, 28.22, -5.43], + "0.625": [-41.72, 27.42, -6.06], + "0.6667": [-43.49, 26.58, -6.74], + "0.7083": [-44.93, 25.72, -7.42], + "0.75": [-46, 24.89, -8.09], + "0.7917": [-46.67, 24.12, -8.7], + "0.8333": [-46.89, 23.45, -9.24], + "0.875": [-46.62, 22.92, -9.66], + "0.9167": [-45.83, 22.56, -9.95], + "0.9583": [-44.47, 22.41, -10.07], + "1.0": [-42.5, 22.5, -10], + "1.0417": [-41.19, 22.66, -9.87], + "1.0833": [-39.55, 22.9, -9.68], + "1.125": [-37.62, 23.21, -9.43], + "1.1667": [-35.42, 23.6, -9.12], + "1.2083": [-32.99, 24.04, -8.76], + "1.25": [-30.34, 24.54, -8.36], + "1.2917": [-27.52, 25.09, -7.92], + "1.3333": [-24.55, 25.68, -7.45], + "1.375": [-21.45, 26.31, -6.95], + "1.4167": [-18.27, 26.96, -6.43], + "1.4583": [-15.02, 27.63, -5.9], + "1.5": [-11.73, 28.31, -5.35], + "1.5417": [-8.44, 29, -4.8], + "1.5833": [-5.16, 29.69, -4.25], + "1.625": [-1.94, 30.37, -3.7], + "1.6667": [1.2, 31.04, -3.17], + "1.7083": [4.23, 31.68, -2.66], + "1.75": [7.13, 32.3, -2.16], + "1.7917": [9.85, 32.88, -1.7], + "1.8333": [12.39, 33.41, -1.27], + "1.875": [14.7, 33.9, -0.88], + "1.9167": [16.76, 34.33, -0.53], + "1.9583": [18.53, 34.7, -0.24], + "2.0": [20, 35, 0] + }, + "position": { + "0.0": [0, 0, 1], + "0.0417": [0, 0, 0.95], + "0.0833": [0, 0, 0.89], + "0.125": [0, 0, 0.82], + "0.1667": [0, 0, 0.74], + "0.2083": [0, 0, 0.65], + "0.25": [0, 0, 0.55], + "0.2917": [0, 0, 0.44], + "0.3333": [0, 0, 0.33], + "0.375": [0, 0, 0.22], + "0.4167": [0, 0, 0.11], + "0.4583": [0, 0, -0.01], + "0.5": [0, 0, -0.12], + "0.5417": [0, 0, -0.24], + "0.5833": [0, 0, -0.35], + "0.625": [0, 0, -0.46], + "0.6667": [0, 0, -0.56], + "0.7083": [0, 0, -0.65], + "0.75": [0, 0, -0.73], + "0.7917": [0, 0, -0.81], + "0.8333": [0, 0, -0.87], + "0.875": [0, 0, -0.93], + "0.9167": [0, 0, -0.97], + "0.9583": [0, 0, -0.99], + "1.0": [0, 0, -1], + "1.0417": [0, 0, -0.99], + "1.0833": [0, 0, -0.97], + "1.125": [0, 0, -0.93], + "1.1667": [0, 0, -0.88], + "1.2083": [0, 0, -0.81], + "1.25": [0, 0, -0.73], + "1.2917": [0, 0, -0.65], + "1.3333": [0, 0, -0.56], + "1.375": [0, 0, -0.46], + "1.4167": [0, 0, -0.35], + "1.4583": [0, 0, -0.24], + "1.5": [0, 0, -0.12], + "1.5417": [0, 0, -0.01], + "1.5833": [0, 0, 0.11], + "1.625": [0, 0, 0.22], + "1.6667": [0, 0, 0.33], + "1.7083": [0, 0, 0.44], + "1.75": [0, 0, 0.55], + "1.7917": [0, 0, 0.65], + "1.8333": [0, 0, 0.74], + "1.875": [0, 0, 0.82], + "1.9167": [0, 0, 0.89], + "1.9583": [0, 0, 0.95], + "2.0": [0, 0, 1] + } + }, + "leg_right_2": { + "rotation": { + "0.0": [-3.5, 0, 0], + "0.0417": [-0.9, 0, 0], + "0.0833": [2.73, 0, 0], + "0.125": [7.15, 0, 0], + "0.1667": [12.14, 0, 0], + "0.2083": [17.46, 0, 0], + "0.25": [22.89, 0, 0], + "0.2917": [28.19, 0, 0], + "0.3333": [33.15, 0, 0], + "0.375": [37.53, 0, 0], + "0.4167": [41.1, 0, 0], + "0.4583": [43.64, 0, 0], + "0.5": [44.91, 0, 0], + "0.5417": [44.85, 0, 0], + "0.5833": [43.67, 0, 0], + "0.625": [41.54, 0, 0], + "0.6667": [38.65, 0, 0], + "0.7083": [35.19, 0, 0], + "0.75": [31.32, 0, 0], + "0.7917": [27.25, 0, 0], + "0.8333": [23.14, 0, 0], + "0.875": [19.17, 0, 0], + "0.9167": [15.54, 0, 0], + "0.9583": [12.42, 0, 0], + "1.0": [10, 0, 0], + "1.0417": [9.02, 0, 0], + "1.0833": [8.08, 0, 0], + "1.125": [7.2, 0, 0], + "1.1667": [6.35, 0, 0], + "1.2083": [5.56, 0, 0], + "1.25": [4.8, 0, 0], + "1.2917": [4.09, 0, 0], + "1.3333": [3.41, 0, 0], + "1.375": [2.78, 0, 0], + "1.4167": [2.17, 0, 0], + "1.4583": [1.6, 0, 0], + "1.5": [1.07, 0, 0], + "1.5417": [0.56, 0, 0], + "1.5833": [0.08, 0, 0], + "1.625": [-0.37, 0, 0], + "1.6667": [-0.79, 0, 0], + "1.7083": [-1.2, 0, 0], + "1.75": [-1.58, 0, 0], + "1.7917": [-1.94, 0, 0], + "1.8333": [-2.28, 0, 0], + "1.875": [-2.6, 0, 0], + "1.9167": [-2.92, 0, 0], + "1.9583": [-3.21, 0, 0], + "2.0": [-3.5, 0, 0] + }, + "position": { + "0.0": [0, 0, 0], + "0.0417": [0, 0.03, 0.12], + "0.0833": [0, 0.07, 0.3], + "0.125": [0, 0.11, 0.51], + "0.1667": [0, 0.17, 0.75], + "0.2083": [0, 0.22, 1.01], + "0.25": [0, 0.28, 1.27], + "0.2917": [0, 0.34, 1.52], + "0.3333": [0, 0.39, 1.75], + "0.375": [0, 0.43, 1.95], + "0.4167": [0, 0.47, 2.11], + "0.4583": [0, 0.49, 2.21], + "0.5": [0, 0.5, 2.25], + "0.5417": [0, 0.49, 2.21], + "0.5833": [0, 0.47, 2.11], + "0.625": [0, 0.43, 1.95], + "0.6667": [0, 0.39, 1.75], + "0.7083": [0, 0.34, 1.52], + "0.75": [0, 0.28, 1.27], + "0.7917": [0, 0.22, 1.01], + "0.8333": [0, 0.17, 0.75], + "0.875": [0, 0.11, 0.51], + "0.9167": [0, 0.07, 0.3], + "0.9583": [0, 0.03, 0.12], + "1.0": [0, 0, 0], + "1.0417": [0, -0.01, -0.04], + "1.0833": [0, -0.02, -0.08], + "1.125": [0, -0.02, -0.11], + "1.1667": [0, -0.03, -0.13], + "1.2083": [0, -0.03, -0.15], + "1.25": [0, -0.04, -0.16], + "1.2917": [0, -0.04, -0.16], + "1.3333": [0, -0.04, -0.17], + "1.375": [0, -0.04, -0.16], + "1.4167": [0, -0.04, -0.16], + "1.4583": [0, -0.03, -0.15], + "1.5": [0, -0.03, -0.14], + "1.5417": [0, -0.03, -0.13], + "1.5833": [0, -0.03, -0.11], + "1.625": [0, -0.02, -0.1], + "1.6667": [0, -0.02, -0.08], + "1.7083": [0, -0.02, -0.07], + "1.75": [0, -0.01, -0.05], + "1.7917": [0, -0.01, -0.04], + "1.8333": [0, -0.01, -0.03], + "1.875": [0, 0, -0.02], + "1.9167": [0, 0, -0.01], + "1.9583": [0, 0, 0], + "2.0": [0, 0, 0] + } + }, + "foot_right": { + "rotation": { + "0.0": [0, 0, 0], + "0.0417": [3.1, 0.26, 0.1], + "0.0833": [7.34, 0.58, 0.23], + "0.125": [12.47, 0.95, 0.38], + "0.1667": [18.25, 1.36, 0.54], + "0.2083": [24.44, 1.81, 0.73], + "0.25": [30.79, 2.3, 0.92], + "0.2917": [37.08, 2.8, 1.12], + "0.3333": [43.04, 3.33, 1.33], + "0.375": [48.45, 3.86, 1.55], + "0.4167": [53.06, 4.4, 1.76], + "0.4583": [56.63, 4.94, 1.98], + "0.5": [58.91, 5.47, 2.19], + "0.5417": [59.99, 6.06, 2.43], + "0.5833": [60.18, 6.78, 2.71], + "0.625": [59.58, 7.58, 3.03], + "0.6667": [58.32, 8.42, 3.37], + "0.7083": [56.5, 9.28, 3.71], + "0.75": [54.23, 10.11, 4.04], + "0.7917": [51.63, 10.88, 4.35], + "0.8333": [48.8, 11.55, 4.62], + "0.875": [45.87, 12.08, 4.83], + "0.9167": [42.93, 12.44, 4.98], + "0.9583": [40.1, 12.59, 5.04], + "1.0": [37.5, 12.5, 5], + "1.0417": [36.21, 12.34, 4.94], + "1.0833": [34.82, 12.1, 4.84], + "1.125": [33.33, 11.79, 4.71], + "1.1667": [31.75, 11.4, 4.56], + "1.2083": [30.09, 10.96, 4.38], + "1.25": [28.38, 10.46, 4.18], + "1.2917": [26.61, 9.91, 3.96], + "1.3333": [24.8, 9.32, 3.73], + "1.375": [22.97, 8.69, 3.48], + "1.4167": [21.12, 8.04, 3.22], + "1.4583": [19.26, 7.37, 2.95], + "1.5": [17.41, 6.69, 2.68], + "1.5417": [15.58, 6, 2.4], + "1.5833": [13.78, 5.31, 2.12], + "1.625": [12.02, 4.63, 1.85], + "1.6667": [10.32, 3.96, 1.59], + "1.7083": [8.68, 3.32, 1.33], + "1.75": [7.12, 2.7, 1.08], + "1.7917": [5.64, 2.12, 0.85], + "1.8333": [4.27, 1.59, 0.63], + "1.875": [3, 1.1, 0.44], + "1.9167": [1.86, 0.67, 0.27], + "1.9583": [0.86, 0.3, 0.12], + "2.0": [0, 0, 0] + } + }, + "arm_shoulder_left": { + "rotation": ["40 + Math.sin((query.anim_time - 0.0) * 180) * -5", 0, 0] + }, + "arm_left_1": { + "rotation": [0, 0, 17.5] + }, + "arm_left_2": { + "rotation": [7.5, -37.5, "-90 + Math.sin((query.anim_time - 0.3) * 180) * 5"] + }, + "hand_left": { + "rotation": [-17.5, -22.5, 2.5], + "position": [1.75, -1.5, -2] + }, + "index_left_1": { + "rotation": [15, 0, "40+ Math.cos((query.anim_time - 0.0) * 360) * 4"] + }, + "index_right_2": { + "rotation": [0, 0, 35] + }, + "pinky_right_1": { + "rotation": [-20, 27.5, "22.5 + Math.cos((query.anim_time - 0.0) * 360) * 4"] + }, + "pinky_right_2": { + "rotation": [0, 0, 32.5] + }, + "thumb_left_1": { + "rotation": [0, 37.5, 0] + }, + "thumb_left_2": { + "rotation": [0, 0, "35+ Math.cos((query.anim_time - 0.0) * 360) * 4"] + }, + "arm_shoulder_right": { + "rotation": ["40 + Math.sin((query.anim_time - 0.0) * 180) * -5", 0, 0] + }, + "arm_right_1": { + "rotation": [0, 0, -17.5] + }, + "arm_right_2": { + "rotation": [7.5, 37.5, "90+ Math.sin((query.anim_time - 0.3) * 180) * 5"] + }, + "hand_right": { + "rotation": [-17.5, 22.5, -2.5], + "position": [-1.75, -1.5, -2] + }, + "index_right_1": { + "rotation": [15, 0, "-40+ Math.cos((query.anim_time - 0.0) * 360) * 4"] + }, + "index_left_2": { + "rotation": [0, 0, -35] + }, + "pinky_left_1": { + "rotation": [-20, -27.5, "-22.5+ Math.cos((query.anim_time - 0.0) * 360) * 4"] + }, + "pinky_left_2": { + "rotation": [0, 0, -32.5] + }, + "thumb_right_1": { + "rotation": [0, -37.5, 0] + }, + "thumb_right_2": { + "rotation": [0, 0, "-35+ Math.cos((query.anim_time - 0.0) * 360) * 4"] + }, + "headrot": { + "rotation": [-10, "Math.sin((query.anim_time - 0.1) * 180) * -3", 0] + } + }, + "sound_effects": { + "0.0": { + "effect": "frank.footstep" + }, + "1.0": { + "effect": "frank.footstep" + } + } + }, + "animation.frank.run": { + "loop": true, + "animation_length": 1, + "bones": { + "root": { + "rotation": [0, "Math.cos((query.anim_time - 0.0) * 360) * 5", 0], + "position": { + "0.0": [0, 0, 0], + "0.0417": [0, 0.2, 0], + "0.0833": [0, 0.5, 0], + "0.125": [0, 0.84, 0], + "0.1667": [0, 1.17, 0], + "0.2083": [0, 1.41, 0], + "0.25": [0, 1.5, 0], + "0.2917": [0, 1.39, 0], + "0.3333": [0, 1.11, 0], + "0.375": [0, 0.75, 0], + "0.4167": [0, 0.39, 0], + "0.4583": [0, 0.11, 0], + "0.5": [0, 0, 0], + "0.5417": [0, 0.11, 0], + "0.5833": [0, 0.39, 0], + "0.625": [0, 0.75, 0], + "0.6667": [0, 1.11, 0], + "0.7083": [0, 1.39, 0], + "0.75": [0, 1.5, 0], + "0.7917": [0, 1.41, 0], + "0.8333": [0, 1.17, 0], + "0.875": [0, 0.84, 0], + "0.9167": [0, 0.5, 0], + "0.9583": [0, 0.2, 0], + "1.0": [0, 0, 0] + } + }, + "hip": { + "rotation": [-7.50152, -0.0019, 0.08722] + }, + "chest": { + "rotation": [20, "Math.cos((query.anim_time - 0.0) * 360) * 6", 0] + }, + "neck": { + "rotation": [2.5, "Math.sin((query.anim_time - 0.2) * 360) * 4", "Math.cos((query.anim_time - 0.0) * 360) * 5"] + }, + "bone2": { + "rotation": [0, 0, 0] + }, + "jaw": { + "rotation": ["11 + Math.sin((query.anim_time - 0.0) * 360) * 5 + Math.sin((query.anim_time - 0.0) * 2880) * 1", 0, 0] + }, + "small_arm_left_1": { + "rotation": [0, "Math.cos((query.anim_time - 0.4) * 360) * -12", 0] + }, + "small_arm_left_2": { + "rotation": [0, "Math.sin((query.anim_time - 0.5) * 360) * -12", 0] + }, + "small_arm_right_1": { + "rotation": [0, "Math.cos((query.anim_time - 0.4) * 360) * -12", 0] + }, + "small_arm_right_2": { + "rotation": [0, "Math.sin((query.anim_time - 0.5) * 360) * -12", 0] + }, + "leg_left_1": { + "rotation": { + "0.0": [-42.5, -22.5, 10], + "0.0417": [-39.11, -23.16, 9.47], + "0.0833": [-34.34, -24.07, 8.75], + "0.125": [-28.52, -25.17, 7.87], + "0.1667": [-21.95, -26.41, 6.87], + "0.2083": [-14.95, -27.73, 5.81], + "0.25": [-7.82, -29.09, 4.73], + "0.2917": [-0.89, -30.43, 3.65], + "0.3333": [5.54, -31.7, 2.64], + "0.375": [11.16, -32.85, 1.72], + "0.4167": [15.65, -33.81, 0.95], + "0.4583": [18.7, -34.55, 0.36], + "0.5": [20, -35, 0], + "0.5417": [17.1, -35.15, -0.12], + "0.5833": [8.66, -34.57, 0.35], + "0.625": [-3.03, -33.49, 1.21], + "0.6667": [-15.71, -32.13, 2.3], + "0.7083": [-27.07, -30.74, 3.41], + "0.75": [-34.84, -29.53, 4.38], + "0.7917": [-38.94, -28.37, 5.31], + "0.8333": [-41.17, -27.04, 6.37], + "0.875": [-42.1, -25.67, 7.46], + "0.9167": [-42.26, -24.38, 8.5], + "0.9583": [-42.21, -23.28, 9.37], + "1.0": [-42.5, -22.5, 10] + }, + "position": { + "0.0": [0, 0, -1], + "0.0417": [0, -0.01, -0.95], + "0.0833": [0, -0.02, -0.88], + "0.125": [0, -0.04, -0.79], + "0.1667": [0, -0.06, -0.7], + "0.2083": [0, -0.09, -0.6], + "0.25": [0, -0.11, -0.49], + "0.2917": [0, -0.12, -0.39], + "0.3333": [0, -0.13, -0.29], + "0.375": [0, -0.12, -0.19], + "0.4167": [0, -0.1, -0.11], + "0.4583": [0, -0.06, -0.05], + "0.5": [0, 0, 0], + "0.5417": [0, 0.23, 0.05], + "0.5833": [0, 0.58, 0.07], + "0.625": [0, 0.98, 0.06], + "0.6667": [0, 1.36, 0.02], + "0.7083": [0, 1.64, -0.04], + "0.75": [0, 1.75, -0.12], + "0.7917": [0, 1.64, -0.23], + "0.8333": [0, 1.36, -0.39], + "0.875": [0, 0.98, -0.57], + "0.9167": [0, 0.58, -0.74], + "0.9583": [0, 0.23, -0.9], + "1.0": [0, 0, -1] + } + }, + "leg_left_2": { + "rotation": { + "0.0": [10, 0, 0], + "0.0417": [9.15, 0, 0], + "0.0833": [7.81, 0, 0], + "0.125": [6.12, 0, 0], + "0.1667": [4.21, 0, 0], + "0.2083": [2.2, 0, 0], + "0.25": [0.22, 0, 0], + "0.2917": [-1.58, 0, 0], + "0.3333": [-3.09, 0, 0], + "0.375": [-4.16, 0, 0], + "0.4167": [-4.68, 0, 0], + "0.4583": [-4.5, 0, 0], + "0.5": [-3.5, 0, 0], + "0.5417": [1.95, 0, 0], + "0.5833": [11.14, 0, 0], + "0.625": [22.04, 0, 0], + "0.6667": [32.65, 0, 0], + "0.7083": [40.95, 0, 0], + "0.75": [44.91, 0, 0], + "0.7917": [43.51, 0, 0], + "0.8333": [38.15, 0, 0], + "0.875": [30.48, 0, 0], + "0.9167": [22.14, 0, 0], + "0.9583": [14.76, 0, 0], + "1.0": [10, 0, 0] + }, + "position": { + "0.5": [0, 0, 0], + "0.5417": [0, 0.07, 0.3], + "0.5833": [0, 0.17, 0.75], + "0.625": [0, 0.28, 1.27], + "0.6667": [0, 0.39, 1.75], + "0.7083": [0, 0.47, 2.11], + "0.75": [0, 0.5, 2.25], + "0.7917": [0, 0.47, 2.11], + "0.8333": [0, 0.39, 1.75], + "0.875": [0, 0.28, 1.27], + "0.9167": [0, 0.17, 0.75], + "0.9583": [0, 0.07, 0.3], + "1.0": [0, 0, 0] + } + }, + "foot_left": { + "rotation": { + "0.0": [37.5, -12.5, -5], + "0.0417": [35.38, -11.84, -4.74], + "0.0833": [32.3, -10.93, -4.37], + "0.125": [28.5, -9.83, -3.93], + "0.1667": [24.21, -8.59, -3.44], + "0.2083": [19.65, -7.27, -2.91], + "0.25": [15.07, -5.91, -2.36], + "0.2917": [10.69, -4.57, -1.83], + "0.3333": [6.75, -3.3, -1.32], + "0.375": [3.48, -2.15, -0.86], + "0.4167": [1.1, -1.19, -0.48], + "0.4583": [-0.13, -0.45, -0.18], + "0.5": [0, 0, 0], + "0.5417": [5.17, 0.15, 0.06], + "0.5833": [15.47, -0.43, -0.17], + "0.625": [28.45, -1.51, -0.61], + "0.6667": [41.65, -2.87, -1.15], + "0.7083": [52.62, -4.26, -1.71], + "0.75": [58.91, -5.47, -2.19], + "0.7917": [59.74, -6.63, -2.65], + "0.8333": [56.93, -7.96, -3.18], + "0.875": [51.89, -9.33, -3.73], + "0.9167": [46.03, -10.62, -4.25], + "0.9583": [40.76, -11.72, -4.69], + "1.0": [37.5, -12.5, -5] + } + }, + "leg_right_1": { + "rotation": { + "0.0": [47.5, 35, 0], + "0.0417": [39.22, 34.22, -0.63], + "0.0833": [27.29, 33.12, -1.5], + "0.125": [13.4, 31.83, -2.54], + "0.1667": [-0.76, 30.46, -3.63], + "0.2083": [-13.5, 29.13, -4.69], + "0.25": [-23.12, 27.97, -5.62], + "0.2917": [-29.99, 26.84, -6.53], + "0.3333": [-35.53, 25.61, -7.51], + "0.375": [-39.65, 24.43, -8.46], + "0.4167": [-42.25, 23.42, -9.26], + "0.4583": [-43.23, 22.74, -9.81], + "0.5": [-42.5, 22.5, -10], + "0.5417": [-39.55, 22.82, -9.75], + "0.5833": [-34.34, 23.6, -9.12], + "0.625": [-27.52, 24.7, -8.24], + "0.6667": [-19.71, 25.97, -7.22], + "0.7083": [-11.57, 27.25, -6.2], + "0.75": [-3.71, 28.41, -5.27], + "0.7917": [4.7, 29.55, -4.36], + "0.8333": [14.34, 30.8, -3.36], + "0.875": [24.32, 32.07, -2.34], + "0.9167": [33.76, 33.27, -1.39], + "0.9583": [41.78, 34.28, -0.58], + "1.0": [47.5, 35, 0] + }, + "position": { + "0.0": [0, 0, 1], + "0.0417": [0, 0.23, 0.88], + "0.0833": [0, 0.58, 0.7], + "0.125": [0, 0.98, 0.5], + "0.1667": [0, 1.36, 0.28], + "0.2083": [0, 1.64, 0.07], + "0.25": [0, 1.75, -0.12], + "0.2917": [0, 1.64, -0.31], + "0.3333": [0, 1.36, -0.54], + "0.375": [0, 0.98, -0.75], + "0.4167": [0, 0.58, -0.93], + "0.4583": [0, 0.23, -1.02], + "0.5": [0, 0, -1], + "0.5417": [0, -0.06, -0.93], + "0.5833": [0, -0.1, -0.81], + "0.625": [0, -0.12, -0.66], + "0.6667": [0, -0.13, -0.47], + "0.7083": [0, -0.12, -0.27], + "0.75": [0, -0.11, -0.06], + "0.7917": [0, -0.09, 0.16], + "0.8333": [0, -0.06, 0.37], + "0.875": [0, -0.04, 0.57], + "0.9167": [0, -0.02, 0.75], + "0.9583": [0, -0.01, 0.89], + "1.0": [0, 0, 1] + } + }, + "leg_right_2": { + "rotation": { + "0.0": [-28.5, 0, 0], + "0.0417": [-19.16, 0, 0], + "0.0833": [-5.21, 0, 0], + "0.125": [10.81, 0, 0], + "0.1667": [26.33, 0, 0], + "0.2083": [38.8, 0, 0], + "0.25": [45.66, 0, 0], + "0.2917": [45.76, 0, 0], + "0.3333": [40.92, 0, 0], + "0.375": [33.03, 0, 0], + "0.4167": [23.98, 0, 0], + "0.4583": [15.67, 0, 0], + "0.5": [10, 0, 0], + "0.5417": [7.2, 0, 0], + "0.5833": [5.79, 0, 0], + "0.625": [5.13, 0, 0], + "0.6667": [4.55, 0, 0], + "0.7083": [3.4, 0, 0], + "0.75": [1.02, 0, 0], + "0.7917": [-3.05, 0, 0], + "0.8333": [-8.39, 0, 0], + "0.875": [-14.3, 0, 0], + "0.9167": [-20.09, 0, 0], + "0.9583": [-25.05, 0, 0], + "1.0": [-28.5, 0, 0] + }, + "position": { + "0.0": [0, 0, 0], + "0.0417": [0, 0, 0.33], + "0.0833": [0, 0, 0.83], + "0.125": [0, 0, 1.41], + "0.1667": [0, 0, 1.94], + "0.2083": [0, 0, 2.34], + "0.25": [0, 0, 2.5], + "0.2917": [0, 0, 2.34], + "0.3333": [0, 0, 1.94], + "0.375": [0, 0, 1.41], + "0.4167": [0, 0, 0.83], + "0.4583": [0, 0, 0.33], + "0.5": [0, 0, 0], + "0.5417": [0, 0, -0.09], + "0.5833": [0, 0, -0.14], + "0.625": [0, 0, -0.18], + "0.6667": [0, 0, -0.19], + "0.7083": [0, 0, -0.18], + "0.75": [0, 0, -0.16], + "0.7917": [0, 0, -0.13], + "0.8333": [0, 0, -0.09], + "0.875": [0, 0, -0.06], + "0.9167": [0, 0, -0.03], + "0.9583": [0, 0, -0.01], + "1.0": [0, 0, 0] + } + }, + "foot_right": { + "rotation": { + "0.0": [0, 0, 0], + "0.0417": [2.01, 0.66, 0.26], + "0.0833": [4.79, 1.57, 0.63], + "0.125": [8.18, 2.67, 1.07], + "0.1667": [12, 3.91, 1.56], + "0.2083": [16.08, 5.23, 2.09], + "0.25": [20.24, 6.59, 2.64], + "0.2917": [24.33, 7.93, 3.17], + "0.3333": [28.16, 9.2, 3.68], + "0.375": [31.56, 10.35, 4.14], + "0.4167": [34.37, 11.31, 4.52], + "0.4583": [36.41, 12.05, 4.82], + "0.5": [37.5, 12.5, 5], + "0.5417": [36.95, 12.65, 5.06], + "0.5833": [33.7, 12.07, 4.83], + "0.625": [28.74, 10.99, 4.39], + "0.6667": [23.07, 9.63, 3.85], + "0.7083": [17.69, 8.24, 3.29], + "0.75": [13.59, 7.03, 2.81], + "0.7917": [10.57, 5.87, 2.35], + "0.8333": [7.79, 4.54, 1.82], + "0.875": [5.3, 3.17, 1.27], + "0.9167": [3.14, 1.88, 0.75], + "0.9583": [1.36, 0.78, 0.31], + "1.0": [0, 0, 0] + } + }, + "arm_shoulder_left": { + "rotation": ["65 + Math.sin((query.anim_time - 0.0) * 360) * -5", 0, 0] + }, + "arm_left_1": { + "rotation": [0, 0, 17.5] + }, + "arm_left_2": { + "rotation": [7.5, -50, "-105 + Math.sin((query.anim_time - 0.3) * 360) * 5"] + }, + "hand_left": { + "rotation": [-17.5, -22.5, -25], + "position": [1.75, -1.5, -2] + }, + "index_left_1": { + "rotation": [15, 0, "40+ Math.cos((query.anim_time - 0.0) * 360) * 4"] + }, + "index_right_2": { + "rotation": [0, 0, 35] + }, + "pinky_right_1": { + "rotation": [-20, 27.5, "22.5 + Math.cos((query.anim_time - 0.0) * 360) * 4"] + }, + "pinky_right_2": { + "rotation": [0, 0, 32.5] + }, + "thumb_left_1": { + "rotation": [0, 37.5, 0] + }, + "thumb_left_2": { + "rotation": [0, 0, "35+ Math.cos((query.anim_time - 0.0) * 360) * 4"] + }, + "arm_shoulder_right": { + "rotation": ["65 + Math.sin((query.anim_time - 0.0) * 360) * -5", 0, 0] + }, + "arm_right_1": { + "rotation": [0, 0, -17.5] + }, + "arm_right_2": { + "rotation": [7.5, 50, "105+ Math.sin((query.anim_time - 0.3) * 360) * 5"] + }, + "hand_right": { + "rotation": [-17.5, 22.5, 25], + "position": [-1.75, -1.5, -2] + }, + "index_right_1": { + "rotation": [15, 0, "-40+ Math.cos((query.anim_time - 0.0) * 360) * 4"] + }, + "index_left_2": { + "rotation": [0, 0, -35] + }, + "pinky_left_1": { + "rotation": [-20, -27.5, "-22.5+ Math.cos((query.anim_time - 0.0) * 360) * 4"] + }, + "pinky_left_2": { + "rotation": [0, 0, -32.5] + }, + "thumb_right_1": { + "rotation": [0, -37.5, 0] + }, + "thumb_right_2": { + "rotation": [0, 0, "-35+ Math.cos((query.anim_time - 0.0) * 360) * 4"] + }, + "headrot": { + "rotation": [-22.5, "Math.sin((query.anim_time - 0.1) * 360) * -1", "Math.cos((query.anim_time - 0.4) * 360) * -5"] + } + }, + "sound_effects": { + "0.0": { + "effect": "frank.footstep" + }, + "0.5": { + "effect": "frank.footstep" + } + } + }, + "animation.frank.run_slam": { + "loop": false, + "animation_length": 1, + "bones": { + "root": { + "rotation": [0, "Math.cos((query.anim_time - 0.0) * 360) * 5", 0], + "position": { + "0.0": [0, 0, 0], + "0.0417": [0, 0.2, 0], + "0.0833": [0, 0.5, 0], + "0.125": [0, 0.84, 0], + "0.1667": [0, 1.17, 0], + "0.2083": [0, 1.41, 0], + "0.25": [0, 1.5, 0], + "0.2917": [0.01, 1.39, 0.01], + "0.3333": [0.03, 1.11, -0.02], + "0.375": [0, 0.75, -0.06], + "0.4167": [-0.07, 0.39, 0.02], + "0.4583": [-0.04, 0.11, 0.06], + "0.5": [0, 0, 0], + "0.5417": [-0.33, 0.39, 0.33], + "0.5833": [-0.14, 1.11, 0.2], + "0.625": [0.87, 1.5, -0.92], + "0.6667": [0.74, 1.46, -0.49], + "0.7083": [-0.31, 1.34, 0.71], + "0.75": [-0.78, 1.17, 0.55], + "0.7917": [-0.22, 0.96, -0.39], + "0.8333": [0.37, 0.73, -0.42], + "0.875": [0.29, 0.5, 0.13], + "0.9167": [-0.03, 0.29, 0.19], + "0.9583": [-0.08, 0.12, -0.01], + "1.0": [0, 0, 0] + } + }, + "hip": { + "rotation": { + "0.0": [-7.5, 0, 0.09], + "0.0417": [-8.73, 0, 0.09], + "0.0833": [-10.72, 0, 0.09], + "0.125": [-13.05, 0, 0.09], + "0.1667": [-15.31, 0, 0.09], + "0.2083": [-17.08, 0, 0.09], + "0.25": [-17.95, 0, 0.09], + "0.2917": [-17.5, 0, 0.09], + "0.3333": [-14.77, 0, 0.09], + "0.375": [-10.09, 0, 0.09], + "0.4167": [-4.38, 0, 0.09], + "0.4583": [1.48, 0, 0.09], + "0.5": [6.57, 0, 0.09], + "0.5417": [10, 0, 0.09], + "0.5833": [12.04, 0, 0.09], + "0.625": [12.82, 0, 0.09], + "0.6667": [12.58, 0, 0.09], + "0.7083": [11.56, 0, 0.09], + "0.75": [10, 0, 0.09], + "0.7917": [7.89, 0, 0.09], + "0.8333": [4.81, 0, 0.09], + "0.875": [1.25, 0, 0.09], + "0.9167": [-2.32, 0, 0.09], + "0.9583": [-5.4, 0, 0.09], + "1.0": [-7.5, 0, 0.09] + } + }, + "chest": { + "rotation": { + "0.0833": [20, 5.2, 0], + "0.125": [19.53, 4.24, 0], + "0.1667": [18.86, 3, 0], + "0.2083": [18.08, 1.55, 0], + "0.25": [17.23, 0, 0], + "0.2917": [16.39, -1.55, 0], + "0.3333": [15.63, -3, 0], + "0.375": [15, -4.24, 0], + "0.4167": [14.32, -5.2, 0], + "0.4583": [13.61, -5.8, 0], + "0.5": [12.97, -6, 0], + "0.5417": [12.5, -5.8, 0], + "0.5833": [12.31, -5.2, 0], + "0.625": [12.5, -4.24, 0], + "0.6667": [12.94, -3, 0], + "0.7083": [13.64, -1.55, 0], + "0.75": [14.54, 0, 0], + "0.7917": [15.56, 1.55, 0], + "0.8333": [16.63, 3, 0], + "0.875": [17.69, 4.24, 0], + "0.9167": [18.65, 5.2, 0], + "0.9583": [19.44, 5.8, 0], + "1.0": [20, 6, 0] + } + }, + "neck": { + "rotation": { + "0.0833": [2.5, -2.68, 4.33], + "0.125": [1.8, -1.82, 3.54], + "0.1667": [0.83, -0.83, 2.5], + "0.2083": [-0.32, 0.21, 1.29], + "0.25": [-1.57, 1.24, 0], + "0.2917": [-2.82, 2.18, -1.29], + "0.3333": [-3.99, 2.97, -2.5], + "0.375": [-5, 3.56, -3.54], + "0.4167": [-6.18, 3.91, -4.33], + "0.4583": [-7.5, 3.99, -4.83], + "0.5": [-8.75, 3.8, -5], + "0.5417": [-9.72, 3.35, -4.83], + "0.5833": [-10.21, 2.68, -4.33], + "0.625": [-10, 1.82, -3.54], + "0.6667": [-9.31, 0.83, -2.5], + "0.7083": [-8.16, -0.21, -1.29], + "0.75": [-6.67, -1.24, 0], + "0.7917": [-4.96, -2.18, 1.29], + "0.8333": [-3.16, -2.97, 2.5], + "0.875": [-1.39, -3.56, 3.54], + "0.9167": [0.23, -3.91, 4.33], + "0.9583": [1.56, -3.99, 4.83], + "1.0": [2.5, -3.8, 5] + } + }, + "head": { + "rotation": { + "0.0": [-22.5, 0.59, 4.05], + "0.1667": [-22.5, -0.41, -0.52], + "0.2083": [-21.15, -0.63, -1.79], + "0.25": [-19.11, -0.81, -2.94], + "0.2917": [-16.71, -0.93, -3.89], + "0.3333": [-14.26, -0.99, -4.57], + "0.375": [-12.11, -0.99, -4.94], + "0.4167": [-10.58, -0.91, -4.97], + "0.4583": [-10, -0.78, -4.67], + "0.5": [-10.78, -0.59, -4.05], + "0.5417": [-12.78, -0.36, -3.15], + "0.5833": [-15.47, -0.1, -2.03], + "0.625": [-18.33, 0.16, -0.78], + "0.6667": [-20.85, 0.41, 0.52], + "0.7083": [-22.5, 0.63, 1.79], + "0.75": [-23.16, 0.81, 2.94], + "0.7917": [-23.41, 0.93, 3.89], + "0.8333": [-23.37, 0.99, 4.57], + "0.875": [-23.16, 0.99, 4.94], + "0.9167": [-22.86, 0.91, 4.97], + "0.9583": [-22.61, 0.78, 4.67], + "1.0": [-22.5, 0.59, 4.05] + } + }, + "bone2": { + "rotation": [0, 0, 0] + }, + "jaw": { + "rotation": { + "0.0": ["11 + Math.sin((query.anim_time - 0.0) * 360) * 5 + Math.sin((query.anim_time - 0.0) * 2880) * 1", 0, 0], + "0.3333": [-39.92564, -1.47497, -1.53982], + "0.5": [27.47302, 2.52357, -0.79223], + "0.875": ["11 + Math.sin((query.anim_time - 0.0) * 360) * 5 + Math.sin((query.anim_time - 0.0) * 2880) * 1", 0, 0] + } + }, + "small_arm_left_1": { + "rotation": [0, "Math.cos((query.anim_time - 0.4) * 360) * -12", 0] + }, + "small_arm_left_2": { + "rotation": [0, "Math.sin((query.anim_time - 0.5) * 360) * -12", 0] + }, + "small_arm_right_1": { + "rotation": [0, "Math.cos((query.anim_time - 0.4) * 360) * -12", 0] + }, + "small_arm_right_2": { + "rotation": [0, "Math.sin((query.anim_time - 0.5) * 360) * -12", 0] + }, + "leg_left_1": { + "rotation": { + "0.0": [-42.5, -22.5, 10], + "0.0417": [-39.11, -23.16, 9.47], + "0.0833": [-34.34, -24.07, 8.75], + "0.125": [-28.52, -25.17, 7.87], + "0.1667": [-21.95, -26.41, 6.87], + "0.2083": [-14.95, -27.73, 5.81], + "0.25": [-7.82, -29.09, 4.73], + "0.2917": [-0.89, -30.43, 3.65], + "0.3333": [5.54, -31.7, 2.64], + "0.375": [11.16, -32.85, 1.72], + "0.4167": [15.65, -33.81, 0.95], + "0.4583": [18.7, -34.55, 0.36], + "0.5": [20, -35, 0], + "0.5417": [17.1, -35.15, -0.12], + "0.5833": [8.66, -34.57, 0.35], + "0.625": [-3.03, -33.49, 1.21], + "0.6667": [-15.71, -32.13, 2.3], + "0.7083": [-27.07, -30.74, 3.41], + "0.75": [-34.84, -29.53, 4.38], + "0.7917": [-38.94, -28.37, 5.31], + "0.8333": [-41.17, -27.04, 6.37], + "0.875": [-42.1, -25.67, 7.46], + "0.9167": [-42.26, -24.38, 8.5], + "0.9583": [-42.21, -23.28, 9.37], + "1.0": [-42.5, -22.5, 10] + }, + "position": { + "0.0": [0, 0, -1], + "0.0417": [0, -0.01, -0.95], + "0.0833": [0, -0.02, -0.88], + "0.125": [0, -0.04, -0.79], + "0.1667": [0, -0.06, -0.7], + "0.2083": [0, -0.09, -0.6], + "0.25": [0, -0.11, -0.49], + "0.2917": [0, -0.12, -0.39], + "0.3333": [0, -0.13, -0.29], + "0.375": [0, -0.12, -0.19], + "0.4167": [0, -0.1, -0.11], + "0.4583": [0, -0.06, -0.05], + "0.5": [0, 0, 0], + "0.5417": [0, 0.23, 0.05], + "0.5833": [0, 0.58, 0.07], + "0.625": [0, 0.98, 0.06], + "0.6667": [0, 1.36, 0.02], + "0.7083": [0, 1.64, -0.04], + "0.75": [0, 1.75, -0.12], + "0.7917": [0, 1.64, -0.23], + "0.8333": [0, 1.36, -0.39], + "0.875": [0, 0.98, -0.57], + "0.9167": [0, 0.58, -0.74], + "0.9583": [0, 0.23, -0.9], + "1.0": [0, 0, -1] + } + }, + "leg_left_2": { + "rotation": { + "0.0": [10, 0, 0], + "0.0417": [9.15, 0, 0], + "0.0833": [7.81, 0, 0], + "0.125": [6.12, 0, 0], + "0.1667": [4.21, 0, 0], + "0.2083": [2.2, 0, 0], + "0.25": [0.22, 0, 0], + "0.2917": [-1.58, 0, 0], + "0.3333": [-3.09, 0, 0], + "0.375": [-4.16, 0, 0], + "0.4167": [-4.68, 0, 0], + "0.4583": [-4.5, 0, 0], + "0.5": [-3.5, 0, 0], + "0.5417": [1.95, 0, 0], + "0.5833": [11.14, 0, 0], + "0.625": [22.04, 0, 0], + "0.6667": [32.65, 0, 0], + "0.7083": [40.95, 0, 0], + "0.75": [44.91, 0, 0], + "0.7917": [43.51, 0, 0], + "0.8333": [38.15, 0, 0], + "0.875": [30.48, 0, 0], + "0.9167": [22.14, 0, 0], + "0.9583": [14.76, 0, 0], + "1.0": [10, 0, 0] + }, + "position": { + "0.5": [0, 0, 0], + "0.5417": [0, 0.07, 0.3], + "0.5833": [0, 0.17, 0.75], + "0.625": [0, 0.28, 1.27], + "0.6667": [0, 0.39, 1.75], + "0.7083": [0, 0.47, 2.11], + "0.75": [0, 0.5, 2.25], + "0.7917": [0, 0.47, 2.11], + "0.8333": [0, 0.39, 1.75], + "0.875": [0, 0.28, 1.27], + "0.9167": [0, 0.17, 0.75], + "0.9583": [0, 0.07, 0.3], + "1.0": [0, 0, 0] + } + }, + "foot_left": { + "rotation": { + "0.0": [37.5, -12.5, -5], + "0.0417": [35.38, -11.84, -4.74], + "0.0833": [32.3, -10.93, -4.37], + "0.125": [28.5, -9.83, -3.93], + "0.1667": [24.21, -8.59, -3.44], + "0.2083": [19.65, -7.27, -2.91], + "0.25": [15.07, -5.91, -2.36], + "0.2917": [10.69, -4.57, -1.83], + "0.3333": [6.75, -3.3, -1.32], + "0.375": [3.48, -2.15, -0.86], + "0.4167": [1.1, -1.19, -0.48], + "0.4583": [-0.13, -0.45, -0.18], + "0.5": [0, 0, 0], + "0.5417": [5.17, 0.15, 0.06], + "0.5833": [15.47, -0.43, -0.17], + "0.625": [28.45, -1.51, -0.61], + "0.6667": [41.65, -2.87, -1.15], + "0.7083": [52.62, -4.26, -1.71], + "0.75": [58.91, -5.47, -2.19], + "0.7917": [59.74, -6.63, -2.65], + "0.8333": [56.93, -7.96, -3.18], + "0.875": [51.89, -9.33, -3.73], + "0.9167": [46.03, -10.62, -4.25], + "0.9583": [40.76, -11.72, -4.69], + "1.0": [37.5, -12.5, -5] + } + }, + "leg_right_1": { + "rotation": { + "0.0": [47.5, 35, 0], + "0.0417": [39.22, 34.22, -0.63], + "0.0833": [27.29, 33.12, -1.5], + "0.125": [13.4, 31.83, -2.54], + "0.1667": [-0.76, 30.46, -3.63], + "0.2083": [-13.5, 29.13, -4.69], + "0.25": [-23.12, 27.97, -5.62], + "0.2917": [-29.99, 26.84, -6.53], + "0.3333": [-35.53, 25.61, -7.51], + "0.375": [-39.65, 24.43, -8.46], + "0.4167": [-42.25, 23.42, -9.26], + "0.4583": [-43.23, 22.74, -9.81], + "0.5": [-42.5, 22.5, -10], + "0.5417": [-39.55, 22.82, -9.75], + "0.5833": [-34.34, 23.6, -9.12], + "0.625": [-27.52, 24.7, -8.24], + "0.6667": [-19.71, 25.97, -7.22], + "0.7083": [-11.57, 27.25, -6.2], + "0.75": [-3.71, 28.41, -5.27], + "0.7917": [4.7, 29.55, -4.36], + "0.8333": [14.34, 30.8, -3.36], + "0.875": [24.32, 32.07, -2.34], + "0.9167": [33.76, 33.27, -1.39], + "0.9583": [41.78, 34.28, -0.58], + "1.0": [47.5, 35, 0] + }, + "position": { + "0.0": [0, 0, 1], + "0.0417": [0, 0, 0.89], + "0.0833": [0, 0, 0.74], + "0.125": [0, 0, 0.55], + "0.1667": [0, 0, 0.33], + "0.2083": [0, 0, 0.11], + "0.25": [0, 0, -0.12], + "0.2917": [0, 0, -0.35], + "0.3333": [0, 0, -0.56], + "0.375": [0, 0, -0.73], + "0.4167": [0, 0, -0.87], + "0.4583": [0, 0, -0.97], + "0.5": [0, 0, -1], + "0.5417": [0, 0, -0.97], + "0.5833": [0, 0, -0.88], + "0.625": [0, 0, -0.73], + "0.6667": [0, 0, -0.56], + "0.7083": [0, 0, -0.35], + "0.75": [0, 0, -0.13], + "0.7917": [0, 0, 0.11], + "0.8333": [0, 0, 0.33], + "0.875": [0, 0, 0.55], + "0.9167": [0, 0, 0.74], + "0.9583": [0, 0, 0.89], + "1.0": [0, 0, 1] + } + }, + "leg_right_2": { + "rotation": { + "0.0": [-28.5, 0, 0], + "0.0417": [-19.16, 0, 0], + "0.0833": [-5.21, 0, 0], + "0.125": [10.81, 0, 0], + "0.1667": [26.33, 0, 0], + "0.2083": [38.8, 0, 0], + "0.25": [45.66, 0, 0], + "0.2917": [45.76, 0, 0], + "0.3333": [40.92, 0, 0], + "0.375": [33.03, 0, 0], + "0.4167": [23.98, 0, 0], + "0.4583": [15.67, 0, 0], + "0.5": [10, 0, 0], + "0.5417": [7.2, 0, 0], + "0.5833": [5.79, 0, 0], + "0.625": [5.13, 0, 0], + "0.6667": [4.55, 0, 0], + "0.7083": [3.4, 0, 0], + "0.75": [1.02, 0, 0], + "0.7917": [-3.05, 0, 0], + "0.8333": [-8.39, 0, 0], + "0.875": [-14.3, 0, 0], + "0.9167": [-20.09, 0, 0], + "0.9583": [-25.05, 0, 0], + "1.0": [-28.5, 0, 0] + }, + "position": { + "0.0": [0, 0, 0], + "0.0417": [0, 0, 0.33], + "0.0833": [0, 0, 0.83], + "0.125": [0, 0, 1.41], + "0.1667": [0, 0, 1.94], + "0.2083": [0, 0, 2.34], + "0.25": [0, 0, 2.5], + "0.2917": [0, 0, 2.34], + "0.3333": [0, 0, 1.94], + "0.375": [0, 0, 1.41], + "0.4167": [0, 0, 0.83], + "0.4583": [0, 0, 0.33], + "0.5": [0, 0, 0], + "0.5417": [0, 0, -0.09], + "0.5833": [0, 0, -0.14], + "0.625": [0, 0, -0.18], + "0.6667": [0, 0, -0.19], + "0.7083": [0, 0, -0.18], + "0.75": [0, 0, -0.16], + "0.7917": [0, 0, -0.13], + "0.8333": [0, 0, -0.09], + "0.875": [0, 0, -0.06], + "0.9167": [0, 0, -0.03], + "0.9583": [0, 0, -0.01], + "1.0": [0, 0, 0] + } + }, + "foot_right": { + "rotation": { + "0.0": [0, 0, 0], + "0.0417": [2.01, 0.66, 0.26], + "0.0833": [4.79, 1.57, 0.63], + "0.125": [8.18, 2.67, 1.07], + "0.1667": [12, 3.91, 1.56], + "0.2083": [16.08, 5.23, 2.09], + "0.25": [20.24, 6.59, 2.64], + "0.2917": [24.33, 7.93, 3.17], + "0.3333": [28.16, 9.2, 3.68], + "0.375": [31.56, 10.35, 4.14], + "0.4167": [34.37, 11.31, 4.52], + "0.4583": [36.41, 12.05, 4.82], + "0.5": [37.5, 12.5, 5], + "0.5417": [36.95, 12.65, 5.06], + "0.5833": [33.7, 12.07, 4.83], + "0.625": [28.74, 10.99, 4.39], + "0.6667": [23.07, 9.63, 3.85], + "0.7083": [17.69, 8.24, 3.29], + "0.75": [13.59, 7.03, 2.81], + "0.7917": [10.57, 5.87, 2.35], + "0.8333": [7.79, 4.54, 1.82], + "0.875": [5.3, 3.17, 1.27], + "0.9167": [3.14, 1.88, 0.75], + "0.9583": [1.36, 0.78, 0.31], + "1.0": [0, 0, 0] + } + }, + "arm_shoulder_left": { + "rotation": { + "0.0833": [62.5, 0, 0], + "0.125": [47.89, -1.13, -0.26], + "0.1667": [27, -2.86, -0.66], + "0.2083": [2.9, -4.89, -1.13], + "0.25": [-21.46, -6.94, -1.61], + "0.2917": [-43.22, -8.72, -2.03], + "0.3333": [-59.5, -9.95, -2.34], + "0.375": [-67.35, -10.34, -2.47], + "0.4167": [-57.73, -8.59, -2.21], + "0.4583": [-29.38, -4.9, -1.54], + "0.5": [3.12, -0.89, -0.81], + "0.5417": [24.97, 1.82, -0.31], + "0.5833": [29.45, 2.47, -0.2], + "0.625": [30.43, 2.76, -0.16], + "0.6667": [29.11, 2.76, -0.17], + "0.7083": [26.68, 2.58, -0.22], + "0.75": [24.38, 2.31, -0.27], + "0.7917": [23.43, 2.02, -0.31], + "0.8333": [24.97, 1.82, -0.31], + "0.875": [33.82, 1.45, -0.25], + "0.9167": [46.24, 0.91, -0.15], + "0.9583": [57.9, 0.37, -0.06], + "1.0": [65, 0, 0] + }, + "position": { + "0.0833": [0, 0, 0], + "0.125": [0, 0.19, 0.15], + "0.1667": [0, 0.47, 0.4], + "0.2083": [0, 0.81, 0.68], + "0.25": [0, 1.15, 0.96], + "0.2917": [0, 1.45, 1.18], + "0.3333": [0, 1.67, 1.3], + "0.375": [0, 1.75, 1.25], + "0.4167": [0, 1.52, 0.68], + "0.4583": [0, 0.98, -0.3], + "0.5": [0, 0.4, -1.31], + "0.5417": [0, 0, -2], + "0.5833": [0, -0.09, -2.19], + "0.625": [0, -0.13, -2.3], + "0.6667": [0, -0.12, -2.33], + "0.7083": [0, -0.09, -2.31], + "0.75": [0, -0.05, -2.24], + "0.7917": [0, -0.02, -2.13], + "0.8333": [0, 0, -2], + "0.875": [0, 0, -1.59], + "0.9167": [0, 0, -1], + "0.9583": [0, 0, -0.41], + "1.0": [0, 0, 0] + } + }, + "arm_left_1": { + "rotation": { + "0.0833": [0, 0, 17.5], + "0.125": [0.07, 0.07, 17.46], + "0.1667": [0.23, 0.22, 17.37], + "0.2083": [0.41, 0.39, 17.27], + "0.25": [0.54, 0.52, 17.19], + "0.2917": [0.56, 0.55, 17.18], + "0.3333": [0.41, 0.39, 17.27], + "0.375": [0, 0, 17.5], + "0.4167": [-1.76, -1.7, 18.49], + "0.4583": [-4.36, -4.21, 19.96], + "0.5": [-6.72, -6.49, 21.28], + "0.5417": [-7.75, -7.49, 21.86], + "0.5833": [-7.39, -7.14, 21.66], + "0.625": [-6.44, -6.22, 21.13], + "0.6667": [-5.11, -4.93, 20.38], + "0.7083": [-3.59, -3.47, 19.52], + "0.75": [-2.1, -2.03, 18.68], + "0.7917": [-0.84, -0.81, 17.97], + "0.8333": [0, 0, 17.5], + "0.875": [0.54, 0.53, 17.19], + "0.9167": [0.48, 0.47, 17.23], + "0.9583": [0.18, 0.18, 17.4], + "1.0": [0, 0, 17.5] + } + }, + "arm_left_2": { + "rotation": { + "0.0833": [7.5, -50, -109.89], + "0.125": [7.6, -46.13, -103.88], + "0.1667": [7.74, -40.54, -95.12], + "0.2083": [7.9, -33.94, -84.97], + "0.25": [8.08, -26.99, -74.76], + "0.2917": [8.24, -20.38, -65.71], + "0.3333": [8.38, -14.8, -58.89], + "0.375": [8.48, -10.93, -55.24], + "0.4167": [8.55, -8.18, -56.55], + "0.4583": [8.54, -8.48, -63.65], + "0.5": [8.5, -10.01, -72.12], + "0.5417": [8.48, -10.93, -77.74], + "0.5833": [8.49, -10.58, -78.73], + "0.625": [8.51, -9.79, -78.72], + "0.6667": [8.53, -8.87, -78.08], + "0.7083": [8.55, -8.19, -77.21], + "0.75": [8.55, -8.08, -76.53], + "0.7917": [8.53, -8.87, -76.52], + "0.8333": [8.48, -10.93, -77.74], + "0.875": [8.28, -18.86, -83.74], + "0.9167": [7.99, -30.46, -93.04], + "0.9583": [7.7, -42.06, -102.81], + "1.0": [7.5, -50, -109.76] + } + }, + "hand_left": { + "rotation": { + "0.0833": [-17.5, -22.5, -25], + "0.125": [-16.72, -22.92, -28.12], + "0.1667": [-15.46, -23.7, -33.27], + "0.2083": [-13.98, -24.61, -39.29], + "0.25": [-12.55, -25.41, -45.04], + "0.2917": [-11.42, -25.87, -49.37], + "0.3333": [-10.86, -25.77, -51.13], + "0.375": [-11.14, -24.87, -49.17], + "0.4167": [-14.19, -20.64, -34.03], + "0.4583": [-19.35, -14.19, -9.22], + "0.5": [-24.72, -7.67, 16.34], + "0.5417": [-28.36, -3.22, 33.75], + "0.5833": [-29.26703, -3.40818, 36.60642], + "0.6667": [-29.83035, -5.25829, 36.67221], + "0.75": [-29.66, -1.18, 40.45], + "0.7917": [-29.08, -2.01, 37.55], + "0.8333": [-28.36, -3.22, 33.75], + "0.875": [-26.16, -7.13, 21.81], + "0.9167": [-22.93, -12.86, 4.37], + "0.9583": [-19.71, -18.58, -13.07], + "1.0": [-17.5, -22.5, -25] + }, + "position": { + "0.0833": [1.75, -1.5, -2], + "0.125": [1.75, -1.34, -1.8], + "0.1667": [1.75, -1.11, -1.52], + "0.2083": [1.75, -0.83, -1.18], + "0.25": [1.75, -0.55, -0.82], + "0.2917": [1.75, -0.29, -0.48], + "0.3333": [1.75, -0.1, -0.2], + "0.375": [1.75, 0, 0], + "0.4167": [1.75, -0.1, 0.14], + "0.4583": [1.75, -0.41, 0.12], + "0.5": [1.75, -0.76, 0.05], + "0.5417": [1.75, -1, 0], + "0.5833": [1.75, -1.05, 0.02], + "0.625": [1.75, -1.06, 0.06], + "0.6667": [1.75, -1.04, 0.1], + "0.7083": [1.75, -1.02, 0.14], + "0.75": [1.75, -0.99, 0.15], + "0.7917": [1.75, -0.98, 0.1], + "0.8333": [1.75, -1, 0], + "0.875": [1.75, -1.1, -0.41], + "0.9167": [1.75, -1.25, -1], + "0.9583": [1.75, -1.4, -1.59], + "1.0": [1.75, -1.5, -2] + } + }, + "index_left_1": { + "rotation": [15, 0, "40+ Math.cos((query.anim_time - 0.0) * 360) * 4"] + }, + "index_right_2": { + "rotation": { + "0.0833": [0, 0, 35], + "0.125": [-0.26, 0.01, 35.78], + "0.1667": [-0.87, 0.03, 37.59], + "0.2083": [-1.56, 0.05, 39.66], + "0.25": [-2.09, 0.06, 41.22], + "0.2917": [-2.17, 0.06, 41.48], + "0.3333": [-1.56, 0.05, 39.66], + "0.375": [0, 0, 35], + "0.4167": [6.76, -0.2, 14.87], + "0.4583": [16.77, -0.49, -14.97], + "0.5": [25.86, -0.75, -42.04], + "0.5417": [29.82, -0.86, -53.84], + "0.5833": [29.24, -0.85, -52.11], + "0.625": [27.63, -0.8, -47.3], + "0.6667": [25.18, -0.73, -40.02], + "0.7083": [22.11, -0.64, -30.88], + "0.75": [18.62, -0.54, -20.47], + "0.7917": [14.9, -0.43, -9.39], + "0.8333": [11.16, -0.32, 1.76], + "0.875": [7.6, -0.22, 12.37], + "0.9167": [4.41, -0.13, 21.85], + "0.9583": [1.81, -0.05, 29.59], + "1.0": [0, 0, 35] + } + }, + "pinky_right_1": { + "rotation": [-20, 27.5, "22.5 + Math.cos((query.anim_time - 0.0) * 360) * 4"] + }, + "pinky_right_2": { + "rotation": { + "0.0833": [0, 0, 32.5], + "0.125": [0.02, -0.18, 33.09], + "0.1667": [0.07, -0.59, 34.48], + "0.2083": [0.13, -1.07, 36.06], + "0.25": [0.18, -1.42, 37.24], + "0.2917": [0.19, -1.48, 37.44], + "0.3333": [0.13, -1.07, 36.06], + "0.375": [0, 0, 32.5], + "0.4167": [-0.58, 4.6, 17.15], + "0.4583": [-1.43, 11.42, -5.62], + "0.5": [-2.2, 17.61, -26.27], + "0.5417": [-2.54, 20.3, -35.27], + "0.5833": [-2.49, 19.91, -33.94], + "0.625": [-2.35, 18.81, -30.28], + "0.6667": [-2.15, 17.14, -24.73], + "0.7083": [-1.88, 15.05, -17.75], + "0.75": [-1.59, 12.68, -9.81], + "0.7917": [-1.27, 10.14, -1.36], + "0.8333": [-0.95, 7.6, 7.14], + "0.875": [-0.65, 5.17, 15.24], + "0.9167": [-0.38, 3, 22.47], + "0.9583": [-0.15, 1.24, 28.38], + "1.0": [0, 0, 32.5] + } + }, + "thumb_left_1": { + "rotation": { + "0.0833": [0, 37.5, 0], + "0.125": [1.99, 37.88, 2.03], + "0.1667": [6.65, 38.77, 6.76], + "0.2083": [11.97, 39.79, 12.17], + "0.25": [15.96, 40.56, 16.23], + "0.2917": [16.62, 40.68, 16.9], + "0.3333": [11.97, 39.79, 12.17], + "0.375": [0, 37.5, 0], + "0.4167": [-51.67, 27.6, -52.54], + "0.4583": [-128.28, 12.93, -130.44], + "0.5": [-197.77, -0.38, -201.09], + "0.5417": [-228.06, -6.18, -231.89], + "0.5833": [-223.6, -5.33, -227.36], + "0.625": [-211.27, -2.97, -214.81], + "0.6667": [-192.59, 0.61, -195.82], + "0.7083": [-169.12, 5.11, -171.96], + "0.75": [-142.39, 10.23, -144.78], + "0.7917": [-113.94, 15.67, -115.86], + "0.8333": [-85.33, 21.16, -86.76], + "0.875": [-58.09, 26.37, -59.06], + "0.9167": [-33.75, 31.03, -34.32], + "0.9583": [-13.88, 34.84, -14.11], + "1.0": [0, 37.5, 0] + } + }, + "thumb_left_2": { + "rotation": { + "0.0833": [0, 0, 38.46], + "0.125": [0.06, 0.2, 38.59], + "0.1667": [0.2, 0.66, 39.52], + "0.2083": [0.36, 1.18, 40.51], + "0.25": [0.48, 1.58, 40.9], + "0.2917": [0.5, 1.64, 40.03], + "0.3333": [0.36, 1.18, 37.32], + "0.375": [0, 0, 32.17], + "0.4167": [-1.57, -5.11, 13.22], + "0.4583": [-3.89, -12.69, -14.1], + "0.5": [-5.99, -19.57, -38.62], + "0.5417": [-6.91, -22.56, -49.29], + "0.5833": [-6.77, -22.12, -47.71], + "0.625": [-6.4, -20.9, -43.29], + "0.6667": [-5.83, -19.05, -36.49], + "0.7083": [-5.12, -16.73, -27.77], + "0.75": [-4.31, -14.09, -17.62], + "0.7917": [-3.45, -11.27, -6.59], + "0.8333": [-2.59, -8.44, 4.72], + "0.875": [-1.76, -5.75, 15.64], + "0.9167": [-1.02, -3.34, 25.48], + "0.9583": [-0.42, -1.37, 33.5], + "1.0": [0, 0, 39] + } + }, + "arm_shoulder_right": { + "rotation": { + "0.0": [65, 0, 0], + "0.0417": [49.91, 1.13, 0.26], + "0.0833": [28.39, 2.86, 0.66], + "0.125": [3.67, 4.89, 1.13], + "0.1667": [-21.18, 6.94, 1.61], + "0.2083": [-43.22, 8.72, 2.03], + "0.25": [-59.57, 9.95, 2.34], + "0.2917": [-67.35, 10.34, 2.47], + "0.3333": [-57.6, 8.59, 2.21], + "0.375": [-29.24, 4.9, 1.54], + "0.4167": [3.18, 0.89, 0.81], + "0.4583": [24.97, -1.82, 0.31], + "0.5": [29.47, -2.47, 0.2], + "0.5417": [30.5, -2.76, 0.16], + "0.5833": [29.2, -2.76, 0.17], + "0.625": [26.77, -2.58, 0.22], + "0.6667": [24.43, -2.31, 0.27], + "0.7083": [23.43, -2.02, 0.31], + "0.75": [24.97, -1.82, 0.31], + "0.7917": [30.37, -1.6, 0.27], + "0.8333": [38.12, -1.28, 0.22], + "0.875": [46.75, -0.91, 0.15], + "0.9167": [54.9, -0.54, 0.09], + "0.9583": [61.32, -0.22, 0.04], + "1.0": [65, 0, 0] + }, + "position": { + "0.0": [0, 0, 0], + "0.0417": [0, 0.19, 0.15], + "0.0833": [0, 0.47, 0.4], + "0.125": [0, 0.81, 0.68], + "0.1667": [0, 1.15, 0.96], + "0.2083": [0, 1.45, 1.18], + "0.25": [0, 1.67, 1.3], + "0.2917": [0, 1.75, 1.25], + "0.3333": [0, 1.52, 0.68], + "0.375": [0, 0.98, -0.3], + "0.4167": [0, 0.4, -1.31], + "0.4583": [0, 0, -2], + "0.5": [0, -0.09, -2.19], + "0.5417": [0, -0.13, -2.3], + "0.5833": [0, -0.12, -2.33], + "0.625": [0, -0.09, -2.31], + "0.6667": [0, -0.05, -2.24], + "0.7083": [0, -0.02, -2.13], + "0.75": [0, 0, -2], + "0.7917": [0, 0, -1.76], + "0.8333": [0, 0, -1.41], + "0.875": [0, 0, -1], + "0.9167": [0, 0, -0.59], + "0.9583": [0, 0, -0.24], + "1.0": [0, 0, 0] + } + }, + "arm_right_1": { + "rotation": { + "0.0": [0, 0, -17.5], + "0.0417": [0, 0, -17.5], + "0.0833": [0, 0, -17.5], + "0.125": [0, 0, -17.5], + "0.1667": [0, 0, -17.5], + "0.2083": [0, 0, -17.5], + "0.25": [0, 0, -17.5], + "0.2917": [0, 0, -17.5], + "0.3333": [0, 0, -17.5], + "0.375": [0, 0, -17.5], + "0.4167": [0, 0, -17.5], + "0.4583": [0, 0, -17.5], + "0.5": [0, 0, -17.5], + "0.5417": [0, 0, -17.5], + "0.5833": [0, 0, -17.5], + "0.625": [0, 0, -17.5], + "0.6667": [0, 0, -17.5], + "0.7083": [0, 0, -17.5], + "0.75": [0, 0, -17.5], + "0.7917": [0, 0, -17.5], + "0.8333": [0, 0, -17.5], + "0.875": [0, 0, -17.5], + "0.9167": [0, 0, -17.5], + "0.9583": [0, 0, -17.5], + "1.0": [0, 0, -17.5] + } + }, + "arm_right_2": { + "rotation": { + "0.0": [7.5, 50, 100.24], + "0.0417": [7.6, 46.13, 95.37], + "0.0833": [7.74, 40.54, 88.6], + "0.125": [7.9, 33.94, 80.74], + "0.1667": [8.08, 26.99, 72.6], + "0.2083": [8.24, 20.38, 64.99], + "0.25": [8.38, 14.8, 58.84], + "0.2917": [8.48, 10.93, 55.24], + "0.3333": [8.55, 8.18, 56.24], + "0.375": [8.54, 8.48, 63.24], + "0.4167": [8.5, 10.01, 71.93], + "0.4583": [8.48, 10.93, 77.74], + "0.5": [8.49, 10.58, 78.64], + "0.5417": [6.09462, 12.38329, 85.88043], + "0.6667": [8.55, 8.08, 76.14], + "0.7083": [8.53, 8.87, 76.37], + "0.75": [8.48, 10.93, 77.74], + "0.7917": [8.28, 18.86, 83.33], + "0.8333": [7.99, 30.46, 90.85], + "0.875": [7.7, 42.06, 97.65], + "0.9167": [7.5, 50, 101.65] + } + }, + "hand_right": { + "rotation": { + "0.0": [-17.5, 22.5, 25], + "0.0417": [-16.72, 22.92, 28.12], + "0.0833": [-15.46, 23.7, 33.27], + "0.125": [-13.98, 24.61, 39.29], + "0.1667": [-12.55, 25.41, 45.04], + "0.2083": [-11.42, 25.87, 49.37], + "0.25": [-10.86, 25.77, 51.13], + "0.2917": [-11.14, 24.87, 49.17], + "0.3333": [-14.19, 20.64, 34.03], + "0.375": [-19.35, 14.19, 9.22], + "0.4167": [-24.72, 7.67, -16.34], + "0.4583": [-28.36, 3.22, -33.75], + "0.5": [-28.67063, 7.87025, -30.54724], + "0.6667": [-29.66, 1.18, -40.45], + "0.7083": [-29.08, 2.01, -37.55], + "0.75": [-28.36, 3.22, -33.75], + "0.7917": [-27.06, 5.54, -26.68], + "0.8333": [-25.14, 8.93, -16.34], + "0.875": [-22.93, 12.86, -4.37], + "0.9167": [-20.72, 16.79, 7.59], + "0.9583": [-18.81, 20.18, 17.93], + "1.0": [-17.5, 22.5, 25] + }, + "position": { + "0.0": [-1.75, -1.5, -2], + "0.0417": [-1.75, -1.34, -1.8], + "0.0833": [-1.75, -1.11, -1.52], + "0.125": [-1.75, -0.83, -1.18], + "0.1667": [-1.75, -0.55, -0.82], + "0.2083": [-1.75, -0.29, -0.48], + "0.25": [-1.75, -0.1, -0.2], + "0.2917": [-1.75, 0, 0], + "0.3333": [-1.75, -0.1, 0.14], + "0.375": [-1.75, -0.41, 0.13], + "0.4167": [-1.75, -0.76, 0.05], + "0.4583": [-1.75, -1, 0], + "0.5": [-1.75, -1.05, 0.02], + "0.5417": [-1.75, -1.06, 0.06], + "0.5833": [-1.75, -1.04, 0.1], + "0.625": [-1.75, -1.02, 0.14], + "0.6667": [-1.75, -0.99, 0.15], + "0.7083": [-1.75, -0.98, 0.1], + "0.75": [-1.75, -1, 0], + "0.7917": [-1.75, -1.06, -0.24], + "0.8333": [-1.75, -1.15, -0.59], + "0.875": [-1.75, -1.25, -1], + "0.9167": [-1.75, -1.35, -1.41], + "0.9583": [-1.75, -1.44, -1.76], + "1.0": [-1.75, -1.5, -2] + } + }, + "index_right_1": { + "rotation": [15, 0, "-40+ Math.cos((query.anim_time - 0.0) * 360) * 4"] + }, + "index_left_2": { + "rotation": { + "0.0": [0, 0, -35], + "0.0417": [-0.26, -0.01, -35.78], + "0.0833": [-0.87, -0.03, -37.59], + "0.125": [-1.56, -0.05, -39.66], + "0.1667": [-2.09, -0.06, -41.22], + "0.2083": [-2.17, -0.06, -41.48], + "0.25": [-1.56, -0.05, -39.66], + "0.2917": [0, 0, -35], + "0.3333": [6.76, 0.2, -14.87], + "0.375": [16.77, 0.49, 14.97], + "0.4167": [25.86, 0.75, 42.04], + "0.4583": [29.82, 0.86, 53.84], + "0.5": [29.4, 0.85, 52.59], + "0.5417": [28.22, 0.82, 49.07], + "0.5833": [26.4, 0.76, 43.65], + "0.625": [24.07, 0.7, 36.7], + "0.6667": [21.34, 0.62, 28.57], + "0.7083": [18.34, 0.53, 19.63], + "0.75": [15.19, 0.44, 10.25], + "0.7917": [12.01, 0.35, 0.79], + "0.8333": [8.93, 0.26, -8.39], + "0.875": [6.07, 0.18, -16.92], + "0.9167": [3.54, 0.1, -24.45], + "0.9583": [1.48, 0.04, -30.59], + "1.0": [0, 0, -35] + } + }, + "pinky_left_1": { + "rotation": [-20, -27.5, "-22.5+ Math.cos((query.anim_time - 0.0) * 360) * 4"] + }, + "pinky_left_2": { + "rotation": { + "0.0": [0, 0, -32.5], + "0.0417": [0.02, 0.18, -33.09], + "0.0833": [0.07, 0.59, -34.48], + "0.125": [0.13, 1.07, -36.06], + "0.1667": [0.18, 1.42, -37.24], + "0.2083": [0.19, 1.48, -37.44], + "0.25": [0.13, 1.07, -36.06], + "0.2917": [0, 0, -32.5], + "0.3333": [-0.58, -4.6, -17.15], + "0.375": [-1.43, -11.42, 5.62], + "0.4167": [-2.2, -17.61, 26.27], + "0.4583": [-2.54, -20.3, 35.27], + "0.5": [-2.5, -20.02, 34.31], + "0.5417": [-2.4, -19.21, 31.63], + "0.5833": [-2.25, -17.97, 27.49], + "0.625": [-2.05, -16.38, 22.19], + "0.6667": [-1.82, -14.53, 15.99], + "0.7083": [-1.56, -12.48, 9.17], + "0.75": [-1.29, -10.34, 2.02], + "0.7917": [-1.02, -8.18, -5.2], + "0.8333": [-0.76, -6.08, -12.2], + "0.875": [-0.52, -4.13, -18.71], + "0.9167": [-0.3, -2.41, -24.45], + "0.9583": [-0.13, -1.01, -29.14], + "1.0": [0, 0, -32.5] + } + }, + "thumb_right_1": { + "rotation": { + "0.0": [0, -37.5, 0], + "0.0417": [1.99, -37.88, -2.03], + "0.0833": [6.65, -38.77, -6.76], + "0.125": [11.97, -39.79, -12.17], + "0.1667": [15.96, -40.56, -16.23], + "0.2083": [16.62, -40.68, -16.9], + "0.25": [11.97, -39.79, -12.17], + "0.2917": [0, -37.5, 0], + "0.3333": [-51.67, -27.6, 52.54], + "0.375": [-128.28, -12.93, 130.44], + "0.4167": [-197.77, 0.38, 201.09], + "0.4583": [-228.06, 6.18, 231.89], + "0.5": [-224.84, 5.57, 228.62], + "0.5417": [-215.81, 3.84, 219.43], + "0.5833": [-201.9, 1.17, 205.29], + "0.625": [-184.05, -2.25, 187.14], + "0.6667": [-163.18, -6.24, 165.92], + "0.7083": [-140.24, -10.64, 142.59], + "0.75": [-116.16, -15.25, 118.11], + "0.7917": [-91.87, -19.9, 93.41], + "0.8333": [-68.3, -24.42, 69.45], + "0.875": [-46.4, -28.61, 47.18], + "0.9167": [-27.09, -32.31, 27.55], + "0.9583": [-11.31, -35.33, 11.5], + "1.0": [0, -37.5, 0] + } + }, + "thumb_right_2": { + "rotation": { + "0.0": [0, 0, -31], + "0.0417": [0.06, -0.2, -31.84], + "0.0833": [0.2, -0.66, -33.89], + "0.125": [0.36, -1.18, -36.45], + "0.1667": [0.48, -1.58, -38.76], + "0.2083": [0.5, -1.64, -40.03], + "0.25": [0.36, -1.18, -39.42], + "0.2917": [0, 0, -36.04], + "0.3333": [-1.57, 5.11, -17.45], + "0.375": [-3.89, 12.69, 11.17], + "0.4167": [-5.99, 19.57, 37.63], + "0.4583": [-6.91, 22.56, 49.29], + "0.5": [-6.81, 22.24, 48.04], + "0.5417": [-6.54, 21.35, 44.55], + "0.5833": [-6.12, 19.97, 39.22], + "0.625": [-5.58, 18.21, 32.47], + "0.6667": [-4.94, 16.14, 24.74], + "0.7083": [-4.25, 13.87, 16.43], + "0.75": [-3.52, 11.49, 7.93], + "0.7917": [-2.78, 9.09, -0.43], + "0.8333": [-2.07, 6.76, -8.36], + "0.875": [-1.41, 4.59, -15.6], + "0.9167": [-0.82, 2.68, -21.93], + "0.9583": [-0.34, 1.12, -27.15], + "1.0": [0, 0, -31] + } + } + }, + "sound_effects": { + "0.0": { + "effect": "frank.footstep" + }, + "0.5": { + "effect": "frank.footstep" + } + } + }, + "animation.frank.idle": { + "loop": true, + "animation_length": 2, + "bones": { + "root": { + "position": [0, "-1 + Math.cos((query.anim_time - 0.0) * 180) * 1", 0] + }, + "hip": { + "rotation": ["-20 + Math.sin((query.anim_time - 0.0) * 180) * -1", -5, 0] + }, + "chest": { + "rotation": ["22.5+ Math.sin((query.anim_time - 0.15) * 180) * -1", 0, -5] + }, + "neck": { + "rotation": ["5+ Math.sin((query.anim_time - 0.24) * 180) * -1", 7.5, 0] + }, + "bone2": { + "rotation": [0, 0, 0] + }, + "jaw": { + "rotation": ["-11.5 + Math.sin((query.anim_time - 0.0) * 180) * 5 + Math.sin((query.anim_time - 0.0) * 1440) * 1", 0, 0] + }, + "small_arm_left_1": { + "rotation": [0, "Math.cos((query.anim_time - 0.4) * 180) * -12", 0] + }, + "small_arm_left_2": { + "rotation": [0, "Math.sin((query.anim_time - 0.5) * 180) * -12", 0] + }, + "small_arm_right_1": { + "rotation": [0, "Math.cos((query.anim_time - 0.4) * 180) * -12", 0] + }, + "small_arm_right_2": { + "rotation": [0, "Math.sin((query.anim_time - 0.5) * 180) * -12", 0] + }, + "leg_left_1": { + "rotation": { + "0.0": [0, -35, 0], + "0.0417": [0, -34.88, 0], + "0.0833": [0, -34.73, 0], + "0.125": [0, -34.55, 0], + "0.1667": [0, -34.34, 0], + "0.2083": [0, -34.11, 0], + "0.25": [0, -33.87, 0], + "0.2917": [0, -33.61, 0], + "0.3333": [0, -33.33, 0], + "0.375": [0, -33.05, 0], + "0.4167": [0, -32.76, 0], + "0.4583": [0, -32.48, 0], + "0.5": [0, -32.19, 0], + "0.5417": [0, -31.9, 0], + "0.5833": [0, -31.63, 0], + "0.625": [0, -31.36, 0], + "0.6667": [0, -31.11, 0], + "0.7083": [0, -30.88, 0], + "0.75": [0, -30.66, 0], + "0.7917": [0, -30.47, 0], + "0.8333": [0, -30.31, 0], + "0.875": [0, -30.18, 0], + "0.9167": [0, -30.08, 0], + "0.9583": [0, -30.02, 0], + "1.0": [0, -30, 0], + "1.0417": [0, -30.02, 0], + "1.0833": [0, -30.08, 0], + "1.125": [0, -30.18, 0], + "1.1667": [0, -30.31, 0], + "1.2083": [0, -30.47, 0], + "1.25": [0, -30.66, 0], + "1.2917": [0, -30.88, 0], + "1.3333": [0, -31.11, 0], + "1.375": [0, -31.36, 0], + "1.4167": [0, -31.63, 0], + "1.4583": [0, -31.9, 0], + "1.5": [0, -32.19, 0], + "1.5417": [0, -32.48, 0], + "1.5833": [0, -32.76, 0], + "1.625": [0, -33.05, 0], + "1.6667": [0, -33.33, 0], + "1.7083": [0, -33.61, 0], + "1.75": [0, -33.87, 0], + "1.7917": [0, -34.11, 0], + "1.8333": [0, -34.34, 0], + "1.875": [0, -34.55, 0], + "1.9167": [0, -34.73, 0], + "1.9583": [0, -34.88, 0], + "2.0": [0, -35, 0] + }, + "position": { + "0.0": [0, 0, 1], + "0.0417": [0.01, 0.01, 0.97], + "0.0833": [0.02, 0.02, 0.94], + "0.125": [0.04, 0.03, 0.9], + "0.1667": [0.05, 0.04, 0.85], + "0.2083": [0.07, 0.05, 0.8], + "0.25": [0.09, 0.07, 0.75], + "0.2917": [0.11, 0.08, 0.69], + "0.3333": [0.13, 0.1, 0.63], + "0.375": [0.16, 0.12, 0.57], + "0.4167": [0.18, 0.13, 0.51], + "0.4583": [0.2, 0.15, 0.44], + "0.5": [0.23, 0.17, 0.38], + "0.5417": [0.25, 0.19, 0.32], + "0.5833": [0.27, 0.2, 0.26], + "0.625": [0.29, 0.22, 0.2], + "0.6667": [0.31, 0.23, 0.14], + "0.7083": [0.33, 0.25, 0.09], + "0.75": [0.35, 0.26, 0.05], + "0.7917": [0.36, 0.27, 0], + "0.8333": [0.38, 0.28, -0.03], + "0.875": [0.39, 0.29, -0.06], + "0.9167": [0.39, 0.3, -0.08], + "0.9583": [0.4, 0.3, -0.1], + "1.0": [0.4, 0.3, -0.1], + "1.0417": [0.4, 0.3, -0.1], + "1.0833": [0.39, 0.3, -0.08], + "1.125": [0.39, 0.29, -0.06], + "1.1667": [0.38, 0.28, -0.03], + "1.2083": [0.36, 0.27, 0], + "1.25": [0.35, 0.26, 0.05], + "1.2917": [0.33, 0.25, 0.09], + "1.3333": [0.31, 0.23, 0.14], + "1.375": [0.29, 0.22, 0.2], + "1.4167": [0.27, 0.2, 0.26], + "1.4583": [0.25, 0.19, 0.32], + "1.5": [0.22, 0.17, 0.38], + "1.5417": [0.2, 0.15, 0.44], + "1.5833": [0.18, 0.13, 0.51], + "1.625": [0.16, 0.12, 0.57], + "1.6667": [0.13, 0.1, 0.63], + "1.7083": [0.11, 0.08, 0.69], + "1.75": [0.09, 0.07, 0.75], + "1.7917": [0.07, 0.05, 0.8], + "1.8333": [0.05, 0.04, 0.85], + "1.875": [0.04, 0.03, 0.9], + "1.9167": [0.02, 0.02, 0.94], + "1.9583": [0.01, 0.01, 0.97], + "2.0": [0, 0, 1] + } + }, + "leg_left_2": { + "rotation": { + "0.0": [6.5, 0, 0], + "0.0417": [6.68, 0, 0], + "0.0833": [6.91, 0, 0], + "0.125": [7.18, 0, 0], + "0.1667": [7.49, 0, 0], + "0.2083": [7.83, 0, 0], + "0.25": [8.2, 0, 0], + "0.2917": [8.59, 0, 0], + "0.3333": [9, 0, 0], + "0.375": [9.42, 0, 0], + "0.4167": [9.85, 0, 0], + "0.4583": [10.29, 0, 0], + "0.5": [10.72, 0, 0], + "0.5417": [11.14, 0, 0], + "0.5833": [11.56, 0, 0], + "0.625": [11.96, 0, 0], + "0.6667": [12.33, 0, 0], + "0.7083": [12.68, 0, 0], + "0.75": [13, 0, 0], + "0.7917": [13.29, 0, 0], + "0.8333": [13.53, 0, 0], + "0.875": [13.73, 0, 0], + "0.9167": [13.88, 0, 0], + "0.9583": [13.97, 0, 0], + "1.0": [14, 0, 0], + "1.0417": [13.97, 0, 0], + "1.0833": [13.88, 0, 0], + "1.125": [13.73, 0, 0], + "1.1667": [13.53, 0, 0], + "1.2083": [13.29, 0, 0], + "1.25": [13, 0, 0], + "1.2917": [12.68, 0, 0], + "1.3333": [12.33, 0, 0], + "1.375": [11.96, 0, 0], + "1.4167": [11.56, 0, 0], + "1.4583": [11.14, 0, 0], + "1.5": [10.72, 0, 0], + "1.5417": [10.29, 0, 0], + "1.5833": [9.85, 0, 0], + "1.625": [9.42, 0, 0], + "1.6667": [9, 0, 0], + "1.7083": [8.59, 0, 0], + "1.75": [8.2, 0, 0], + "1.7917": [7.83, 0, 0], + "1.8333": [7.49, 0, 0], + "1.875": [7.18, 0, 0], + "1.9167": [6.91, 0, 0], + "1.9583": [6.68, 0, 0], + "2.0": [6.5, 0, 0] + }, + "position": { + "0.0": [0, 0, 0], + "0.0417": [0, 0.01, 0.01], + "0.0833": [0, 0.02, 0.02], + "0.125": [0, 0.04, 0.03], + "0.1667": [0, 0.05, 0.04], + "0.2083": [0, 0.07, 0.05], + "0.25": [0, 0.09, 0.07], + "0.2917": [0, 0.11, 0.08], + "0.3333": [0, 0.13, 0.1], + "0.375": [0, 0.16, 0.12], + "0.4167": [0, 0.18, 0.13], + "0.4583": [0, 0.2, 0.15], + "0.5": [0, 0.23, 0.17], + "0.5417": [0, 0.25, 0.19], + "0.5833": [0, 0.27, 0.2], + "0.625": [0, 0.29, 0.22], + "0.6667": [0, 0.31, 0.23], + "0.7083": [0, 0.33, 0.25], + "0.75": [0, 0.35, 0.26], + "0.7917": [0, 0.36, 0.27], + "0.8333": [0, 0.38, 0.28], + "0.875": [0, 0.39, 0.29], + "0.9167": [0, 0.39, 0.3], + "0.9583": [0, 0.4, 0.3], + "1.0": [0, 0.4, 0.3], + "1.0417": [0, 0.4, 0.3], + "1.0833": [0, 0.39, 0.3], + "1.125": [0, 0.39, 0.29], + "1.1667": [0, 0.38, 0.28], + "1.2083": [0, 0.36, 0.27], + "1.25": [0, 0.35, 0.26], + "1.2917": [0, 0.33, 0.25], + "1.3333": [0, 0.31, 0.23], + "1.375": [0, 0.29, 0.22], + "1.4167": [0, 0.27, 0.2], + "1.4583": [0, 0.25, 0.19], + "1.5": [0, 0.22, 0.17], + "1.5417": [0, 0.2, 0.15], + "1.5833": [0, 0.18, 0.13], + "1.625": [0, 0.16, 0.12], + "1.6667": [0, 0.13, 0.1], + "1.7083": [0, 0.11, 0.08], + "1.75": [0, 0.09, 0.07], + "1.7917": [0, 0.07, 0.05], + "1.8333": [0, 0.05, 0.04], + "1.875": [0, 0.04, 0.03], + "1.9167": [0, 0.02, 0.02], + "1.9583": [0, 0.01, 0.01], + "2.0": [0, 0, 0] + } + }, + "foot_left": { + "rotation": { + "0.0": [7.5, 0, 0], + "0.0417": [7.38, 0, 0], + "0.0833": [7.23, 0, 0], + "0.125": [7.05, 0, 0], + "0.1667": [6.84, 0, 0], + "0.2083": [6.61, 0, 0], + "0.25": [6.37, 0, 0], + "0.2917": [6.11, 0, 0], + "0.3333": [5.83, 0, 0], + "0.375": [5.55, 0, 0], + "0.4167": [5.26, 0, 0], + "0.4583": [4.98, 0, 0], + "0.5": [4.69, 0, 0], + "0.5417": [4.4, 0, 0], + "0.5833": [4.13, 0, 0], + "0.625": [3.86, 0, 0], + "0.6667": [3.61, 0, 0], + "0.7083": [3.38, 0, 0], + "0.75": [3.16, 0, 0], + "0.7917": [2.97, 0, 0], + "0.8333": [2.81, 0, 0], + "0.875": [2.68, 0, 0], + "0.9167": [2.58, 0, 0], + "0.9583": [2.52, 0, 0], + "1.0": [2.5, 0, 0], + "1.0417": [2.52, 0, 0], + "1.0833": [2.58, 0, 0], + "1.125": [2.68, 0, 0], + "1.1667": [2.81, 0, 0], + "1.2083": [2.97, 0, 0], + "1.25": [3.16, 0, 0], + "1.2917": [3.38, 0, 0], + "1.3333": [3.61, 0, 0], + "1.375": [3.86, 0, 0], + "1.4167": [4.13, 0, 0], + "1.4583": [4.4, 0, 0], + "1.5": [4.69, 0, 0], + "1.5417": [4.98, 0, 0], + "1.5833": [5.26, 0, 0], + "1.625": [5.55, 0, 0], + "1.6667": [5.83, 0, 0], + "1.7083": [6.11, 0, 0], + "1.75": [6.37, 0, 0], + "1.7917": [6.61, 0, 0], + "1.8333": [6.84, 0, 0], + "1.875": [7.05, 0, 0], + "1.9167": [7.23, 0, 0], + "1.9583": [7.38, 0, 0], + "2.0": [7.5, 0, 0] + } + }, + "leg_right_1": { + "rotation": { + "0.0": [-42.5, 22.5, -10], + "0.0417": [-42.8, 22.5, -10], + "0.0833": [-43.18, 22.5, -10], + "0.125": [-43.64, 22.5, -10], + "0.1667": [-44.15, 22.5, -10], + "0.2083": [-44.72, 22.5, -10], + "0.25": [-45.33, 22.5, -10], + "0.2917": [-45.98, 22.5, -10], + "0.3333": [-46.67, 22.5, -10], + "0.375": [-47.37, 22.5, -10], + "0.4167": [-48.09, 22.5, -10], + "0.4583": [-48.81, 22.5, -10], + "0.5": [-49.53, 22.5, -10], + "0.5417": [-50.24, 22.5, -10], + "0.5833": [-50.93, 22.5, -10], + "0.625": [-51.59, 22.5, -10], + "0.6667": [-52.22, 22.5, -10], + "0.7083": [-52.81, 22.5, -10], + "0.75": [-53.34, 22.5, -10], + "0.7917": [-53.81, 22.5, -10], + "0.8333": [-54.22, 22.5, -10], + "0.875": [-54.55, 22.5, -10], + "0.9167": [-54.79, 22.5, -10], + "0.9583": [-54.95, 22.5, -10], + "1.0": [-55, 22.5, -10], + "1.0417": [-54.95, 22.5, -10], + "1.0833": [-54.79, 22.5, -10], + "1.125": [-54.55, 22.5, -10], + "1.1667": [-54.22, 22.5, -10], + "1.2083": [-53.81, 22.5, -10], + "1.25": [-53.34, 22.5, -10], + "1.2917": [-52.81, 22.5, -10], + "1.3333": [-52.22, 22.5, -10], + "1.375": [-51.59, 22.5, -10], + "1.4167": [-50.93, 22.5, -10], + "1.4583": [-50.24, 22.5, -10], + "1.5": [-49.53, 22.5, -10], + "1.5417": [-48.81, 22.5, -10], + "1.5833": [-48.09, 22.5, -10], + "1.625": [-47.37, 22.5, -10], + "1.6667": [-46.67, 22.5, -10], + "1.7083": [-45.98, 22.5, -10], + "1.75": [-45.33, 22.5, -10], + "1.7917": [-44.72, 22.5, -10], + "1.8333": [-44.15, 22.5, -10], + "1.875": [-43.64, 22.5, -10], + "1.9167": [-43.18, 22.5, -10], + "1.9583": [-42.8, 22.5, -10], + "2.0": [-42.5, 22.5, -10] + }, + "position": { + "0.0": [0, 0, -1], + "0.0417": [-0.01, 0.01, -1], + "0.0833": [-0.03, 0.03, -1], + "0.125": [-0.05, 0.05, -1], + "0.1667": [-0.07, 0.07, -1], + "0.2083": [-0.09, 0.09, -1], + "0.25": [-0.11, 0.11, -1], + "0.2917": [-0.14, 0.14, -1], + "0.3333": [-0.17, 0.17, -1], + "0.375": [-0.19, 0.19, -1], + "0.4167": [-0.22, 0.22, -1], + "0.4583": [-0.25, 0.25, -1], + "0.5": [-0.28, 0.28, -1], + "0.5417": [-0.31, 0.31, -1], + "0.5833": [-0.34, 0.34, -1], + "0.625": [-0.36, 0.36, -1], + "0.6667": [-0.39, 0.39, -1], + "0.7083": [-0.41, 0.41, -1], + "0.75": [-0.43, 0.43, -1], + "0.7917": [-0.45, 0.45, -1], + "0.8333": [-0.47, 0.47, -1], + "0.875": [-0.48, 0.48, -1], + "0.9167": [-0.49, 0.49, -1], + "0.9583": [-0.5, 0.5, -1], + "1.0": [-0.5, 0.5, -1], + "1.0417": [-0.5, 0.5, -1], + "1.0833": [-0.49, 0.49, -1], + "1.125": [-0.48, 0.48, -1], + "1.1667": [-0.47, 0.47, -1], + "1.2083": [-0.45, 0.45, -1], + "1.25": [-0.43, 0.43, -1], + "1.2917": [-0.41, 0.41, -1], + "1.3333": [-0.39, 0.39, -1], + "1.375": [-0.36, 0.36, -1], + "1.4167": [-0.34, 0.34, -1], + "1.4583": [-0.31, 0.31, -1], + "1.5": [-0.28, 0.28, -1], + "1.5417": [-0.25, 0.25, -1], + "1.5833": [-0.22, 0.22, -1], + "1.625": [-0.19, 0.19, -1], + "1.6667": [-0.17, 0.17, -1], + "1.7083": [-0.14, 0.14, -1], + "1.75": [-0.11, 0.11, -1], + "1.7917": [-0.09, 0.09, -1], + "1.8333": [-0.07, 0.07, -1], + "1.875": [-0.05, 0.05, -1], + "1.9167": [-0.03, 0.03, -1], + "1.9583": [-0.01, 0.01, -1], + "2.0": [0, 0, -1] + } + }, + "leg_right_2": { + "rotation": { + "0.0": [10, 0, 0], + "0.0417": [10.36, 0, 0], + "0.0833": [10.82, 0, 0], + "0.125": [11.36, 0, 0], + "0.1667": [11.98, 0, 0], + "0.2083": [12.66, 0, 0], + "0.25": [13.4, 0, 0], + "0.2917": [14.18, 0, 0], + "0.3333": [15, 0, 0], + "0.375": [15.84, 0, 0], + "0.4167": [16.71, 0, 0], + "0.4583": [17.57, 0, 0], + "0.5": [18.44, 0, 0], + "0.5417": [19.29, 0, 0], + "0.5833": [20.12, 0, 0], + "0.625": [20.91, 0, 0], + "0.6667": [21.67, 0, 0], + "0.7083": [22.37, 0, 0], + "0.75": [23.01, 0, 0], + "0.7917": [23.58, 0, 0], + "0.8333": [24.06, 0, 0], + "0.875": [24.46, 0, 0], + "0.9167": [24.75, 0, 0], + "0.9583": [24.94, 0, 0], + "1.0": [25, 0, 0], + "1.0417": [24.94, 0, 0], + "1.0833": [24.75, 0, 0], + "1.125": [24.46, 0, 0], + "1.1667": [24.06, 0, 0], + "1.2083": [23.58, 0, 0], + "1.25": [23.01, 0, 0], + "1.2917": [22.37, 0, 0], + "1.3333": [21.67, 0, 0], + "1.375": [20.91, 0, 0], + "1.4167": [20.12, 0, 0], + "1.4583": [19.29, 0, 0], + "1.5": [18.44, 0, 0], + "1.5417": [17.57, 0, 0], + "1.5833": [16.71, 0, 0], + "1.625": [15.84, 0, 0], + "1.6667": [15, 0, 0], + "1.7083": [14.18, 0, 0], + "1.75": [13.4, 0, 0], + "1.7917": [12.66, 0, 0], + "1.8333": [11.98, 0, 0], + "1.875": [11.36, 0, 0], + "1.9167": [10.82, 0, 0], + "1.9583": [10.36, 0, 0], + "2.0": [10, 0, 0] + }, + "position": { + "0.0": [0, 0, 0], + "0.0417": [0, 0, 0.02], + "0.0833": [0, 0, 0.05], + "0.125": [0, 0, 0.09], + "0.1667": [0, 0, 0.13], + "0.2083": [0, 0, 0.18], + "0.25": [0, 0, 0.23], + "0.2917": [0, 0, 0.28], + "0.3333": [0, 0, 0.33], + "0.375": [0, 0, 0.39], + "0.4167": [0, 0, 0.45], + "0.4583": [0, 0, 0.5], + "0.5": [0, 0, 0.56], + "0.5417": [0, 0, 0.62], + "0.5833": [0, 0, 0.67], + "0.625": [0, 0, 0.73], + "0.6667": [0, 0, 0.78], + "0.7083": [0, 0, 0.82], + "0.75": [0, 0, 0.87], + "0.7917": [0, 0, 0.91], + "0.8333": [0, 0, 0.94], + "0.875": [0, 0, 0.96], + "0.9167": [0, 0, 0.98], + "0.9583": [0, 0, 1], + "1.0": [0, 0, 1], + "1.0417": [0, 0, 1], + "1.0833": [0, 0, 0.98], + "1.125": [0, 0, 0.96], + "1.1667": [0, 0, 0.94], + "1.2083": [0, 0, 0.91], + "1.25": [0, 0, 0.87], + "1.2917": [0, 0, 0.82], + "1.3333": [0, 0, 0.78], + "1.375": [0, 0, 0.73], + "1.4167": [0, 0, 0.67], + "1.4583": [0, 0, 0.62], + "1.5": [0, 0, 0.56], + "1.5417": [0, 0, 0.5], + "1.5833": [0, 0, 0.45], + "1.625": [0, 0, 0.39], + "1.6667": [0, 0, 0.33], + "1.7083": [0, 0, 0.28], + "1.75": [0, 0, 0.23], + "1.7917": [0, 0, 0.18], + "1.8333": [0, 0, 0.13], + "1.875": [0, 0, 0.09], + "1.9167": [0, 0, 0.05], + "1.9583": [0, 0, 0.02], + "2.0": [0, 0, 0] + } + }, + "foot_right": { + "rotation": { + "0.0": [37.5, 12.5, 0], + "0.0417": [37.5, 12.5, 0], + "0.0833": [37.5, 12.5, 0], + "0.125": [37.5, 12.5, 0], + "0.1667": [37.5, 12.5, 0], + "0.2083": [37.5, 12.5, 0], + "0.25": [37.5, 12.5, 0], + "0.2917": [37.5, 12.5, 0], + "0.3333": [37.5, 12.5, 0], + "0.375": [37.5, 12.5, 0], + "0.4167": [37.5, 12.5, 0], + "0.4583": [37.5, 12.5, 0], + "0.5": [37.5, 12.5, 0], + "0.5417": [37.5, 12.5, 0], + "0.5833": [37.5, 12.5, 0], + "0.625": [37.5, 12.5, 0], + "0.6667": [37.5, 12.5, 0], + "0.7083": [37.5, 12.5, 0], + "0.75": [37.5, 12.5, 0], + "0.7917": [37.5, 12.5, 0], + "0.8333": [37.5, 12.5, 0], + "0.875": [37.5, 12.5, 0], + "0.9167": [37.5, 12.5, 0], + "0.9583": [37.5, 12.5, 0], + "1.0": [37.5, 12.5, 0], + "1.0417": [37.5, 12.5, 0], + "1.0833": [37.5, 12.5, 0], + "1.125": [37.5, 12.5, 0], + "1.1667": [37.5, 12.5, 0], + "1.2083": [37.5, 12.5, 0], + "1.25": [37.5, 12.5, 0], + "1.2917": [37.5, 12.5, 0], + "1.3333": [37.5, 12.5, 0], + "1.375": [37.5, 12.5, 0], + "1.4167": [37.5, 12.5, 0], + "1.4583": [37.5, 12.5, 0], + "1.5": [37.5, 12.5, 0], + "1.5417": [37.5, 12.5, 0], + "1.5833": [37.5, 12.5, 0], + "1.625": [37.5, 12.5, 0], + "1.6667": [37.5, 12.5, 0], + "1.7083": [37.5, 12.5, 0], + "1.75": [37.5, 12.5, 0], + "1.7917": [37.5, 12.5, 0], + "1.8333": [37.5, 12.5, 0], + "1.875": [37.5, 12.5, 0], + "1.9167": [37.5, 12.5, 0], + "1.9583": [37.5, 12.5, 0], + "2.0": [37.5, 12.5, 0] + } + }, + "arm_shoulder_left": { + "rotation": ["51.8397 + Math.cos((query.anim_time - 0.06) * 180) * 3", -17.33786, -16.23565], + "position": [0, 2.75, 0] + }, + "arm_left_1": { + "rotation": [-15, 10, 17.5] + }, + "arm_left_2": { + "rotation": [-2.35753, "-Math.cos((query.anim_time - 0.1) * 180) * 5.9077", "-108.3825+ Math.sin((query.anim_time - 0.1) * 180) * -2"] + }, + "hand_left": { + "rotation": [-27.5, -37.5, -15], + "position": { + "0.0": { + "post": [1.75, -1.5, 1.5], + "lerp_mode": "catmullrom" + } + } + }, + "index_left_1": { + "rotation": [15, 0, "80+ Math.sin((query.anim_time + 0.2) * 180) * 8"] + }, + "index_right_2": { + "rotation": [0, 0, 35] + }, + "pinky_right_1": { + "rotation": [-20, 27.5, "80+ Math.sin((query.anim_time + 0.1) * 180) * 8"] + }, + "pinky_right_2": { + "rotation": [0, 0, 32.5] + }, + "thumb_left_1": { + "rotation": [0, "27.5 + Math.sin((query.anim_time + 0.3) * 180) * 8", 0] + }, + "thumb_left_2": { + "rotation": [0, 0, -2.5] + }, + "arm_shoulder_right": { + "rotation": ["51.8397 + Math.sin((query.anim_time - 0.06) * 180) * 3", 17.33786, 16.23565], + "position": [0, 2.75, 0] + }, + "arm_right_1": { + "rotation": [12.5, 2.5, -17.5] + }, + "arm_right_2": { + "rotation": [-5.46465, "35.1939+Math.sin((query.anim_time - 0.2) * 180) * 5.9077", "103.8964+ Math.cos((query.anim_time - 0.2) * 180) * -2"] + }, + "hand_right": { + "rotation": [-32.5, 2.5, 30], + "position": { + "0.0": { + "post": [-1.75, -1.5, -2], + "lerp_mode": "catmullrom" + } + } + }, + "index_right_1": { + "rotation": [15, 0, "-80+ Math.sin((query.anim_time + 0.2) * 180) * 8"] + }, + "index_left_2": { + "rotation": [0, 0, -35] + }, + "pinky_left_1": { + "rotation": [-20, -27.5, "-80+ Math.sin((query.anim_time + 0.1) * 180) * 8"] + }, + "pinky_left_2": { + "rotation": [0, 0, -32.5] + }, + "thumb_right_1": { + "rotation": [0, "-27.5+ Math.sin((query.anim_time + 0.3) * 180) * 8", 0] + }, + "thumb_right_2": { + "rotation": [0, 0, -32.5] + }, + "headrot": { + "rotation": ["-10+ Math.sin((query.anim_time - 0.2) * 180) * 4", -12.5, 0] + } + } + }, + "animation.frank.idle_event": { + "loop": true, + "animation_length": 4, + "bones": { + "root": { + "position": [0, 0, 0] + }, + "hip": { + "rotation": { + "0.0": [-20, -5, 0], + "0.125": [-20.27, -10.9, -0.72], + "0.25": [-20.35, -16.81, -1.45], + "0.375": [-20.27, -22.71, -2.17], + "0.5": [-20.07, -28.61, -2.89], + "0.625": [-19.84, -34.51, -3.62], + "0.6667": [-19.76, -36.48, -3.86], + "0.75": [-19.64, -37.93, -3.95], + "0.875": [-19.44, -39.81, -4.03], + "1.0": [-19.22, -41.1, -4], + "1.125": [-18.99, -41.52, -3.84], + "1.25": [-18.75, -40.82, -3.51], + "1.375": [-18.53, -38.74, -2.99], + "1.5": [-18.38, -34.99, -2.25], + "1.625": [-18.29, -26.08, -0.7], + "1.75": [-18.28, -12.88, 1.52], + "1.875": [-18.3, 1.77, 3.92], + "2.0": [-18.35, 15.03, 6.03], + "2.125": [-18.41, 24.07, 7.38], + "2.1667": [-18.43, 25.65, 7.58], + "2.25": [-18.45, 26.43, 7.64], + "2.375": [-18.46, 26.52, 7.52], + "2.5": [-18.48, 25.53, 7.19], + "2.625": [-18.5, 23.64, 6.7], + "2.75": [-18.53, 21.07, 6.08], + "2.875": [-18.58, 18.04, 5.37], + "3.0": [-18.64, 14.73, 4.62], + "3.125": [-18.72, 11.38, 3.86], + "3.25": [-18.79, 8.18, 3.15], + "3.375": [-18.84, 5.34, 2.5], + "3.5": [-18.88, 3.06, 1.98], + "3.5833": [-18.9, 1.97, 1.72], + "3.625": [-18.92, 1.27, 1.55], + "3.75": [-19.06, -0.82, 1.03], + "3.875": [-19.4, -2.91, 0.52], + "4.0": [-20, -5, 0] + }, + "position": { + "0.0": [0, 0, 0], + "0.6667": [0, -1.5, 0], + "1.0": [0, -1.7, 0], + "1.5": [0, -0.6, 0], + "1.8333": [1.5, 1.05, -3.65], + "2.1667": [3, 1.1, -7.3], + "3.0": [2.9, 0.4, -7.27], + "3.3333": [2.93, 0.53, -7.25], + "4.0": [0, 0, 0] + } + }, + "chest": { + "rotation": { + "0.0": [22.95, 0, -5], + "0.125": [21.19, 4.5, -6.34], + "0.2083": [20.26, 7.5, -7.24], + "0.25": [20.19, 6.83, -6.71], + "0.375": [20.06, 3.21, -4.16], + "0.5": [19.97, -1.99, -0.68], + "0.625": [19.91, -7.69, 3.06], + "0.75": [19.88, -12.78, 6.37], + "0.875": [19.91, -16.19, 8.56], + "1.0": [20.01, -18.3, 9.79], + "1.125": [20.2, -19.19, 10.1], + "1.25": [20.43, -18.75, 9.57], + "1.375": [20.68, -16.91, 8.25], + "1.4167": [20.75, -15.97, 7.65], + "1.5": [20.81, -15.14, 7.14], + "1.625": [20.9, -13.47, 6.14], + "1.75": [20.99, -11.4, 4.91], + "1.875": [21.09, -9.02, 3.52], + "2.0": [21.18, -6.42, 2], + "2.125": [21.28, -3.71, 0.42], + "2.25": [21.38, -0.97, -1.18], + "2.375": [21.48, 1.7, -2.75], + "2.5": [21.58, 4.2, -4.23], + "2.625": [21.68, 6.44, -5.56], + "2.75": [21.78, 8.32, -6.71], + "2.875": [21.88, 9.74, -7.61], + "2.9583": [21.94, 10.4, -8.05], + "3.0": [22.01, 10.84, -8.39], + "3.125": [22.23, 10.95, -8.76], + "3.25": [22.45, 9.68, -8.41], + "3.375": [22.63, 7.64, -7.64], + "3.5": [22.8, 5.44, -6.77], + "3.625": [22.95, 3.7, -6.1], + "3.6667": [23, 3.33, -5.98], + "3.75": [23.11, 2.5, -5.74], + "3.875": [23.16, 1.25, -5.37], + "4.0": [22.95, 0, -5] + } + }, + "neck": { + "rotation": { + "0.0": [5.68, 7.5, 0], + "0.125": [5.19, 7.32, 2.21], + "0.25": [4.97, 7.13, 4.41], + "0.2917": [4.97, 7.07, 5.15], + "0.375": [5.01, 6.97, 6.35], + "0.5": [5.07, 6.77, 8.65], + "0.625": [5.12, 6.55, 11.23], + "0.75": [5.15, 6.34, 13.81], + "0.875": [5.2, 6.15, 16.05], + "1.0": [5.3, 6.01, 17.64], + "1.125": [5.62, 5.79, 19.08], + "1.25": [6.04, 5.63, 19.46], + "1.375": [6.36, 5.78, 18.78], + "1.4167": [6.41, 5.95, 18.33], + "1.5": [6.41, 7.26, 15.63], + "1.625": [6.11, 9.7, 9.49], + "1.6667": [5.96, 10.04, 7.42], + "1.75": [5.89, 10.05, 6.6], + "1.875": [5.76, 9.95, 5.25], + "2.0": [5.6, 9.75, 3.79], + "2.125": [5.43, 9.45, 2.27], + "2.25": [5.25, 9.1, 0.74], + "2.375": [5.07, 8.72, -0.75], + "2.5": [4.9, 8.34, -2.14], + "2.625": [4.76, 7.97, -3.37], + "2.75": [4.65, 7.65, -4.41], + "2.875": [4.57, 7.41, -5.19], + "2.9583": [4.55, 7.3, -5.55], + "3.0": [4.55, 7.24, -5.73], + "3.125": [4.65, 7.14, -5.74], + "3.25": [4.84, 7.15, -5.13], + "3.375": [5.07, 7.21, -4.15], + "3.5": [5.29, 7.31, -3.04], + "3.625": [5.5, 7.4, -2.01], + "3.75": [5.65, 7.45, -1.33], + "3.875": [5.78, 7.48, -0.66], + "4.0": [5.68, 7.5, 0] + } + }, + "head": { + "rotation": { + "0.0": [-12.35, -12.5, 0], + "0.125": [-11.56, -12.07, 6.85], + "0.2083": [-11.98, -11.78, 11.41], + "0.25": [-12.13, -10.65, 13.12], + "0.375": [-12.16, -5.39, 18.02], + "0.4583": [-11.92, -2.6, 18.99], + "0.5": [-11.68, -1.82, 17.78], + "0.625": [-10.76, -1.35, 9.58], + "0.6667": [-11, -1.28, 7.54], + "0.75": [-11.35, -1.21, 6.99], + "0.875": [-12.17, -1.13, 6.72], + "1.0": [-13.21, -1.08, 6.82], + "1.125": [-14.34, -1.06, 6.94], + "1.25": [-15.45, -1.03, 6.76], + "1.375": [-16.38, -1, 5.92], + "1.4583": [-16.85, -0.97, 4.83], + "1.5": [-17.41, -0.78, 1.02], + "1.625": [-18.04, -0.17, -15.23], + "1.6667": [-18.38, -0.54, -18.01], + "1.75": [-18.55, -0.77, -18.27], + "1.875": [-18.87, -1.22, -18.21], + "2.0": [-19.25, -1.79, -17.69], + "2.125": [-19.67, -2.44, -16.8], + "2.25": [-20.1, -3.14, -15.62], + "2.375": [-20.52, -3.89, -14.26], + "2.5": [-20.89, -4.64, -12.8], + "2.625": [-21.2, -5.39, -11.34], + "2.75": [-21.42, -6.09, -9.97], + "2.875": [-21.52, -6.73, -8.78], + "3.0": [-21.48, -7.28, -7.86], + "3.125": [-21.06, -8.13, -6.58], + "3.25": [-20.23, -8.89, -5.43], + "3.375": [-19.08, -9.58, -4.4], + "3.5": [-17.81, -10.19, -3.48], + "3.625": [-16.66, -10.73, -2.67], + "3.75": [-15.83, -11.2, -1.96], + "3.875": [-14.62, -11.85, -0.98], + "4.0": [-12.35, -12.5, 0] + } + }, + "bone2": { + "rotation": [0, 0, 0] + }, + "jaw": { + "rotation": ["-11.5 + Math.sin((query.anim_time - 0.0) * 180) * 5 + Math.sin((query.anim_time - 0.0) * 1440) * 1", 0, 0] + }, + "small_arm_left_1": { + "rotation": [0, "Math.cos((query.anim_time - 0.4) * 180) * -12", 0] + }, + "small_arm_left_2": { + "rotation": [0, "Math.sin((query.anim_time - 0.5) * 180) * -12", 0] + }, + "small_arm_right_1": { + "rotation": [0, "Math.cos((query.anim_time - 0.4) * 180) * -12", 0] + }, + "small_arm_right_2": { + "rotation": [0, "Math.sin((query.anim_time - 0.5) * 180) * -12", 0] + }, + "leg_left_1": { + "rotation": { + "0.0": [0, -35, 0], + "0.2083": [0, -35, 0], + "0.375": [-6.91181, -58.09834, -0.99476], + "0.5833": [22.3293, -66.16898, -12.93287], + "1.5": [22.3293, -66.16898, -12.93287], + "1.7083": [33.26796, -52.81606, -4.71359], + "1.9167": [0.32738, -34.64897, -17.92691], + "2.1667": [-18.13777, -10.33981, 1.12986], + "3.3333": [-18.13777, -10.33981, 1.12986], + "3.625": [-28.13777, -10.33981, 1.12986], + "3.7917": [-24.96918, -27.45933, -4.52261], + "4.0": [0, -35, 0] + }, + "position": { + "0.0": [0, 0, 1], + "0.2083": [0, 0, 1], + "0.375": [0, 0.6, 2.6], + "0.5833": [0, 0, 4.6], + "1.5": [0, 0, 4.6], + "1.7083": [1, 0, 0.7], + "1.9167": [2.32, 1.46, -3.25], + "2.1667": [3.9, 1.5, -8], + "3.3333": [3.9, 1.5, -8], + "3.625": [3.1, 1.5, -3.5], + "3.7917": [1.72, 1.23, -1.5], + "4.0": [0, 0, 1] + } + }, + "leg_left_2": { + "rotation": { + "0.0": [6.5, 0, 0], + "0.2083": [6.5, 0, 0], + "0.375": [17.5, 0, 0], + "0.5833": [6.5, 0, 0], + "1.5": [6.5, 0, 0], + "1.7083": [-5.5, 0, 0], + "1.9167": [9.5, 0, 0], + "2.2083": [-0.5, 0, 0], + "3.3333": [-0.5, 0, 0], + "3.625": [-3.28141, 5.21612, -2.41088], + "3.7917": [11.06588, 2.89784, -1.33938], + "4.0": [6.5, 0, 0] + }, + "position": [0, 0, 0] + }, + "foot_left": { + "rotation": { + "0.0": [7.5, 0, 0], + "1.9167": [7.5, 0, 0], + "2.2083": [20.5, 0, 0], + "3.3333": [20.5, 0, 0], + "3.625": [31.81, 0, 0], + "4.0": [7.5, 0, 0] + } + }, + "leg_right_1": { + "rotation": { + "0.0": [-42.5, 22.5, -10], + "1.5": [-42.5, 22.5, -10], + "2.1667": [-22.48219, 41.38205, -6.20802], + "3.3333": [-22.48219, 41.38205, -6.20802], + "4.0": [-42.5, 22.5, -10] + }, + "position": { + "0.0": [0, 0, -1], + "1.5": [0, 0, -1], + "2.1667": [2.5, 1.9, -4.9], + "3.3333": [2.5, 1.9, -4.9], + "4.0": [0, 0, -1] + } + }, + "leg_right_2": { + "rotation": { + "0.0": [10, 0, 0], + "1.5": [10, 0, 0], + "2.1667": [-2.55101, -2.67201, -0.69958], + "3.3333": [-2.55101, -2.67201, -0.69958], + "4.0": [10, 0, 0] + }, + "position": [0, 0, 0] + }, + "foot_right": { + "rotation": { + "0.0": [37.5, 12.5, 0], + "1.5": [37.5, 12.5, 0], + "2.1667": [35.89105, 12.52216, -1.40111], + "3.3333": [35.89105, 12.52216, -1.40111], + "4.0": [37.5, 12.5, 0] + } + }, + "arm_shoulder_left": { + "rotation": ["51.8397 + Math.cos((query.anim_time - 0.06) * 180) * 3", -17.33786, -16.23565], + "position": [0, 2.75, 0] + }, + "arm_left_1": { + "rotation": { + "0.0": [-15, 10, 17.5], + "0.125": [-19.08, 4.74, 20.07], + "0.25": [-25.09, -2.93, 23.83], + "0.375": [-31.86, -11.66, 28.09], + "0.5": [-38.25, -20.09, 32.14], + "0.625": [-43.09, -26.87, 35.29], + "0.6667": [-44.16, -28.53, 36.02], + "0.75": [-45.06, -30.25, 36.76], + "0.875": [-45.86, -32.69, 37.85], + "1.0": [-46.11, -34.86, 38.83], + "1.125": [-45.95, -36.7, 39.63], + "1.25": [-45.53, -38.11, 40.17], + "1.375": [-44.97, -39.02, 40.37], + "1.5": [-44.41, -39.34, 40.16], + "1.625": [-44, -38.98, 39.46], + "1.75": [-43.88, -37.87, 38.18], + "1.7917": [-43.93, -37.31, 37.62], + "1.875": [-44.16, -35.89, 36.23], + "2.0": [-44.83, -32.72, 33.26], + "2.125": [-45.76, -28.58, 29.48], + "2.25": [-46.81, -23.74, 25.16], + "2.375": [-47.84, -18.5, 20.59], + "2.5": [-48.73, -13.13, 16.03], + "2.625": [-49.32, -7.91, 11.77], + "2.75": [-49.49, -3.14, 8.09], + "2.875": [-49.09, 0.92, 5.26], + "3.0": [-47.99, 3.96, 3.56], + "3.125": [-45.42, 6.44, 3.1], + "3.25": [-41.58, 8.09, 4], + "3.375": [-36.88, 9.07, 5.89], + "3.5": [-31.75, 9.56, 8.4], + "3.625": [-26.58, 9.73, 11.19], + "3.75": [-21.8, 9.74, 13.87], + "3.875": [-17.8, 9.78, 16.1], + "4.0": [-15, 10, 17.5] + } + }, + "arm_left_2": { + "rotation": { + "0.0": [-2.36, -5.62, -107.76], + "0.125": [-4.44, -5.85, -112.11], + "0.1667": [-5.14, -5.84, -113.3], + "0.25": [-4.56, -6.63, -110.77], + "0.375": [-3.25, -8.29, -105.35], + "0.5": [-1.55, -10.39, -98.47], + "0.625": [0.42, -12.73, -90.68], + "0.75": [2.52, -15.12, -82.47], + "0.875": [4.6, -17.41, -74.33], + "1.0": [6.54, -19.51, -66.74], + "1.125": [8.2, -21.39, -60.2], + "1.25": [9.43, -23.02, -55.21], + "1.2917": [9.72, -23.5, -53.98], + "1.375": [10.6, -25.4, -50.68], + "1.5": [11.59, -28.68, -48.05], + "1.625": [11.96, -31.53, -47.77], + "1.75": [11.43, -32.93, -49.4], + "1.875": [9.77, -31.83, -52.47], + "1.9167": [8.91, -30.73, -53.74], + "2.0": [7.96, -29.33, -55.03], + "2.125": [6.02, -26.3, -57.52], + "2.25": [3.6, -22.38, -60.56], + "2.375": [0.82, -17.82, -64.03], + "2.5": [-2.18, -12.88, -67.81], + "2.625": [-5.28, -7.8, -71.8], + "2.75": [-8.33, -2.75, -75.89], + "2.875": [-11.21, 2.1, -79.97], + "3.0": [-13.79, 6.59, -83.9], + "3.125": [-15.94, 10.55, -87.55], + "3.25": [-17.51, 13.73, -90.75], + "3.375": [-18.39, 15.86, -93.37], + "3.5": [-15.18, 13.05, -95.99], + "3.625": [-11.98, 9.33, -98.58], + "3.75": [-8.77, 4.73, -101.31], + "3.875": [-5.56, -0.42, -104.34], + "4.0": [-2.36, -5.62, -107.76] + } + }, + "hand_left": { + "rotation": [-27.5, -37.5, -15], + "position": [1.75, -1.5, 1.5] + }, + "index_left_1": { + "rotation": [15, 0, "80+ Math.sin((query.anim_time + 0.2) * 180) * 8"] + }, + "index_right_2": { + "rotation": [0, 0, 35] + }, + "pinky_right_1": { + "rotation": [-20, 27.5, "80+ Math.sin((query.anim_time + 0.1) * 180) * 8"] + }, + "pinky_right_2": { + "rotation": [0, 0, 32.5] + }, + "thumb_left_1": { + "rotation": [0, "27.5 + Math.sin((query.anim_time + 0.3) * 180) * 8", 0] + }, + "thumb_left_2": { + "rotation": [0, 0, -2.5] + }, + "arm_shoulder_right": { + "rotation": ["51.8397 + Math.sin((query.anim_time - 0.06) * 180) * 3", 17.33786, 16.23565], + "position": [0, 2.75, 0] + }, + "arm_right_1": { + "rotation": { + "0.0": [12.5, 2.5, -17.5], + "0.125": [9.61, 5.47, -19.43], + "0.25": [5.36, 9.97, -22.33], + "0.375": [0.56, 14.93, -25.55], + "0.5": [-3.98, 19.26, -28.41], + "0.625": [-7.46, 21.89, -30.26], + "0.6667": [-8.25, 22.2, -30.54], + "0.75": [-9.15, 21.88, -30.46], + "0.875": [-9.75, 19.68, -29.24], + "1.0": [-9.72, 16.22, -27.24], + "1.125": [-9.35, 12.39, -25.06], + "1.25": [-8.96, 9.08, -23.33], + "1.375": [-8.83, 7.19, -22.65], + "1.4583": [-9.03, 7.15, -23.09], + "1.5": [-9.17, 7.41, -23.45], + "1.625": [-9.69, 8.96, -25.14], + "1.75": [-10.36, 11.47, -27.61], + "1.875": [-11.12, 14.65, -30.63], + "2.0": [-11.94, 18.23, -33.95], + "2.125": [-12.76, 21.96, -37.35], + "2.25": [-13.54, 25.56, -40.59], + "2.375": [-14.23, 28.75, -43.44], + "2.5": [-14.79, 31.28, -45.67], + "2.625": [-15.17, 32.87, -47.04], + "2.75": [-15.75, 33.88, -47.76], + "2.875": [-16.37, 33.66, -47.24], + "3.0": [-16.74, 32.47, -45.76], + "3.125": [-16.54, 30.55, -43.62], + "3.25": [-15.48, 28.14, -41.1], + "3.3333": [-14.15, 26.39, -39.36], + "3.375": [-13.13, 25.33, -38.34], + "3.5": [-8.66, 21.08, -34.38], + "3.625": [-2.83, 15.85, -29.6], + "3.75": [3.33, 10.47, -24.72], + "3.875": [8.79, 5.75, -20.45], + "4.0": [12.5, 2.5, -17.5] + } + }, + "arm_right_2": { + "rotation": { + "0.0": [-5.46, 31.72, 102.28], + "0.125": [-6.63, 39.28, 99.05], + "0.25": [-7.79, 45.99, 96.14], + "0.375": [-8.95, 51.59, 93.33], + "0.5": [-10.11, 56.15, 90.42], + "0.5417": [-10.5, 57.5, 89.39], + "0.625": [-11.56, 57.73, 87.38], + "0.75": [-13.32, 57.66, 83.39], + "0.875": [-15.3, 57.13, 78.84], + "1.0": [-17.52, 56.09, 74.39], + "1.125": [-20, 54.43, 70.64], + "1.25": [-22.78, 52.08, 68.19], + "1.375": [-25.87, 49.09, 67.61], + "1.4167": [-26.98, 47.97, 67.93], + "1.5": [-33.15, 41.08, 73.06], + "1.625": [-45.13, 26.47, 88.17], + "1.75": [-55.12, 13.44, 103.47], + "1.8333": [-57.78, 9.38, 108.93], + "1.875": [-57.76, 9.25, 109.27], + "2.0": [-56.74, 10.02, 109.25], + "2.125": [-54.54, 12.22, 107.94], + "2.25": [-51.43, 15.48, 105.67], + "2.375": [-47.69, 19.41, 102.8], + "2.5": [-43.61, 23.61, 99.67], + "2.625": [-39.47, 27.71, 96.62], + "2.75": [-35.56, 31.31, 94.02], + "2.875": [-32.16, 34.02, 92.19], + "2.9583": [-30.31, 35.15, 91.58], + "3.0": [-29.03, 35.67, 91.41], + "3.125": [-25.42, 36.06, 91.86], + "3.25": [-22.16, 35.28, 93.38], + "3.375": [-19.21, 33.95, 95.52], + "3.5": [-16.56, 32.52, 97.79], + "3.625": [-14.16, 31.4, 99.67], + "3.6667": [-13.42, 31.18, 100.1], + "3.75": [-11.43, 30.72, 100.97], + "3.875": [-8.45, 30.54, 101.82], + "4.0": [-5.46, 31.72, 102.28] + } + }, + "hand_right": { + "rotation": [-32.5, 2.5, 30], + "position": [-1.75, -1.5, -2] + }, + "index_right_1": { + "rotation": [15, 0, "-80+ Math.sin((query.anim_time + 0.2) * 180) * 8"] + }, + "index_left_2": { + "rotation": [0, 0, -35] + }, + "pinky_left_1": { + "rotation": [-20, -27.5, "-80+ Math.sin((query.anim_time + 0.1) * 180) * 8"] + }, + "pinky_left_2": { + "rotation": [0, 0, -32.5] + }, + "thumb_right_1": { + "rotation": [0, "-27.5+ Math.sin((query.anim_time + 0.3) * 180) * 8", 0] + }, + "thumb_right_2": { + "rotation": [0, 0, -32.5] + } + }, + "sound_effects": { + "0.0": { + "effect": "frank.idle_event" + } + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/hamsters/blockstates/black_cage_panel.json b/src/main/resources/assets/hamsters/blockstates/black_cage_panel.json new file mode 100644 index 0000000..035bbd6 --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/black_cage_panel.json @@ -0,0 +1,64 @@ +{ + "variants": { + "facing=north,type=none": { + "model": "hamsters:block/cage_panel/black" + }, + "facing=north,type=top": { + "model": "hamsters:block/cage_panel/black_top" + }, + "facing=north,type=middle": { + "model": "hamsters:block/cage_panel/black_middle" + }, + "facing=north,type=bottom": { + "model": "hamsters:block/cage_panel/black_bottom" + }, + "facing=east,type=none": { + "model": "hamsters:block/cage_panel/black", + "y": 90 + }, + "facing=east,type=top": { + "model": "hamsters:block/cage_panel/black_top", + "y": 90 + }, + "facing=east,type=middle": { + "model": "hamsters:block/cage_panel/black_middle", + "y": 90 + }, + "facing=east,type=bottom": { + "model": "hamsters:block/cage_panel/black_bottom", + "y": 90 + }, + "facing=south,type=none": { + "model": "hamsters:block/cage_panel/black", + "y": 180 + }, + "facing=south,type=top": { + "model": "hamsters:block/cage_panel/black_top", + "y": 180 + }, + "facing=south,type=middle": { + "model": "hamsters:block/cage_panel/black_middle", + "y": 180 + }, + "facing=south,type=bottom": { + "model": "hamsters:block/cage_panel/black_bottom", + "y": 180 + }, + "facing=west,type=none": { + "model": "hamsters:block/cage_panel/black", + "y": 270 + }, + "facing=west,type=top": { + "model": "hamsters:block/cage_panel/black_top", + "y": 270 + }, + "facing=west,type=middle": { + "model": "hamsters:block/cage_panel/black_middle", + "y": 270 + }, + "facing=west,type=bottom": { + "model": "hamsters:block/cage_panel/black_bottom", + "y": 270 + } + } +} diff --git a/src/main/resources/assets/hamsters/blockstates/black_hamster_bottle.json b/src/main/resources/assets/hamsters/blockstates/black_hamster_bottle.json new file mode 100644 index 0000000..a515654 --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/black_hamster_bottle.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=north": { + "model": "hamsters:block/bottle/black" + }, + "facing=east": { + "model": "hamsters:block/bottle/black", + "y": 90 + }, + "facing=south": { + "model": "hamsters:block/bottle/black", + "y": 180 + }, + "facing=west": { + "model": "hamsters:block/bottle/black", + "y": 270 + } + } +} diff --git a/src/main/resources/assets/hamsters/blockstates/black_hamster_bowl.json b/src/main/resources/assets/hamsters/blockstates/black_hamster_bowl.json new file mode 100644 index 0000000..600e6fd --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/black_hamster_bowl.json @@ -0,0 +1,33 @@ +{ + "multipart": [ + { + "apply": { + "model": "hamsters:block/bowl/black" + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_1" + }, + "when": { + "seeds": 1 + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_2" + }, + "when": { + "seeds": 2 + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_3" + }, + "when": { + "seeds": 3 + } + } + ] +} diff --git a/src/main/resources/assets/hamsters/blockstates/blue_cage_panel.json b/src/main/resources/assets/hamsters/blockstates/blue_cage_panel.json new file mode 100644 index 0000000..4a49cc6 --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/blue_cage_panel.json @@ -0,0 +1,64 @@ +{ + "variants": { + "facing=north,type=none": { + "model": "hamsters:block/cage_panel/blue" + }, + "facing=north,type=top": { + "model": "hamsters:block/cage_panel/blue_top" + }, + "facing=north,type=middle": { + "model": "hamsters:block/cage_panel/blue_middle" + }, + "facing=north,type=bottom": { + "model": "hamsters:block/cage_panel/blue_bottom" + }, + "facing=east,type=none": { + "model": "hamsters:block/cage_panel/blue", + "y": 90 + }, + "facing=east,type=top": { + "model": "hamsters:block/cage_panel/blue_top", + "y": 90 + }, + "facing=east,type=middle": { + "model": "hamsters:block/cage_panel/blue_middle", + "y": 90 + }, + "facing=east,type=bottom": { + "model": "hamsters:block/cage_panel/blue_bottom", + "y": 90 + }, + "facing=south,type=none": { + "model": "hamsters:block/cage_panel/blue", + "y": 180 + }, + "facing=south,type=top": { + "model": "hamsters:block/cage_panel/blue_top", + "y": 180 + }, + "facing=south,type=middle": { + "model": "hamsters:block/cage_panel/blue_middle", + "y": 180 + }, + "facing=south,type=bottom": { + "model": "hamsters:block/cage_panel/blue_bottom", + "y": 180 + }, + "facing=west,type=none": { + "model": "hamsters:block/cage_panel/blue", + "y": 270 + }, + "facing=west,type=top": { + "model": "hamsters:block/cage_panel/blue_top", + "y": 270 + }, + "facing=west,type=middle": { + "model": "hamsters:block/cage_panel/blue_middle", + "y": 270 + }, + "facing=west,type=bottom": { + "model": "hamsters:block/cage_panel/blue_bottom", + "y": 270 + } + } +} diff --git a/src/main/resources/assets/hamsters/blockstates/blue_hamster_bottle.json b/src/main/resources/assets/hamsters/blockstates/blue_hamster_bottle.json index db0c5fd..5b637ab 100644 --- a/src/main/resources/assets/hamsters/blockstates/blue_hamster_bottle.json +++ b/src/main/resources/assets/hamsters/blockstates/blue_hamster_bottle.json @@ -1,5 +1,5 @@ { - "variants": { + "variants": { "facing=north": { "model": "hamsters:block/bottle/blue" }, @@ -15,5 +15,5 @@ "model": "hamsters:block/bottle/blue", "y": 270 } - } -} \ No newline at end of file + } +} diff --git a/src/main/resources/assets/hamsters/blockstates/blue_hamster_bowl.json b/src/main/resources/assets/hamsters/blockstates/blue_hamster_bowl.json index f40d344..96c30b8 100644 --- a/src/main/resources/assets/hamsters/blockstates/blue_hamster_bowl.json +++ b/src/main/resources/assets/hamsters/blockstates/blue_hamster_bowl.json @@ -1,33 +1,33 @@ { - "multipart": [ - { - "apply": { - "model": "hamsters:block/bowl/blue" - } - }, - { - "apply": { - "model": "hamsters:block/template/seeds_1" - }, - "when": { - "seeds": 1 - } - }, - { - "apply": { - "model": "hamsters:block/template/seeds_2" - }, - "when": { - "seeds": 2 - } - }, - { - "apply": { - "model": "hamsters:block/template/seeds_3" - }, - "when": { - "seeds": 3 - } - } - ] -} \ No newline at end of file + "multipart": [ + { + "apply": { + "model": "hamsters:block/bowl/blue" + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_1" + }, + "when": { + "seeds": 1 + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_2" + }, + "when": { + "seeds": 2 + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_3" + }, + "when": { + "seeds": 3 + } + } + ] +} diff --git a/src/main/resources/assets/hamsters/blockstates/brown_cage_panel.json b/src/main/resources/assets/hamsters/blockstates/brown_cage_panel.json new file mode 100644 index 0000000..99718f1 --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/brown_cage_panel.json @@ -0,0 +1,64 @@ +{ + "variants": { + "facing=north,type=none": { + "model": "hamsters:block/cage_panel/brown" + }, + "facing=north,type=top": { + "model": "hamsters:block/cage_panel/brown_top" + }, + "facing=north,type=middle": { + "model": "hamsters:block/cage_panel/brown_middle" + }, + "facing=north,type=bottom": { + "model": "hamsters:block/cage_panel/brown_bottom" + }, + "facing=east,type=none": { + "model": "hamsters:block/cage_panel/brown", + "y": 90 + }, + "facing=east,type=top": { + "model": "hamsters:block/cage_panel/brown_top", + "y": 90 + }, + "facing=east,type=middle": { + "model": "hamsters:block/cage_panel/brown_middle", + "y": 90 + }, + "facing=east,type=bottom": { + "model": "hamsters:block/cage_panel/brown_bottom", + "y": 90 + }, + "facing=south,type=none": { + "model": "hamsters:block/cage_panel/brown", + "y": 180 + }, + "facing=south,type=top": { + "model": "hamsters:block/cage_panel/brown_top", + "y": 180 + }, + "facing=south,type=middle": { + "model": "hamsters:block/cage_panel/brown_middle", + "y": 180 + }, + "facing=south,type=bottom": { + "model": "hamsters:block/cage_panel/brown_bottom", + "y": 180 + }, + "facing=west,type=none": { + "model": "hamsters:block/cage_panel/brown", + "y": 270 + }, + "facing=west,type=top": { + "model": "hamsters:block/cage_panel/brown_top", + "y": 270 + }, + "facing=west,type=middle": { + "model": "hamsters:block/cage_panel/brown_middle", + "y": 270 + }, + "facing=west,type=bottom": { + "model": "hamsters:block/cage_panel/brown_bottom", + "y": 270 + } + } +} diff --git a/src/main/resources/assets/hamsters/blockstates/brown_hamster_bottle.json b/src/main/resources/assets/hamsters/blockstates/brown_hamster_bottle.json new file mode 100644 index 0000000..0bcdda3 --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/brown_hamster_bottle.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=north": { + "model": "hamsters:block/bottle/brown" + }, + "facing=east": { + "model": "hamsters:block/bottle/brown", + "y": 90 + }, + "facing=south": { + "model": "hamsters:block/bottle/brown", + "y": 180 + }, + "facing=west": { + "model": "hamsters:block/bottle/brown", + "y": 270 + } + } +} diff --git a/src/main/resources/assets/hamsters/blockstates/brown_hamster_bowl.json b/src/main/resources/assets/hamsters/blockstates/brown_hamster_bowl.json new file mode 100644 index 0000000..ea50e39 --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/brown_hamster_bowl.json @@ -0,0 +1,33 @@ +{ + "multipart": [ + { + "apply": { + "model": "hamsters:block/bowl/brown" + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_1" + }, + "when": { + "seeds": 1 + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_2" + }, + "when": { + "seeds": 2 + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_3" + }, + "when": { + "seeds": 3 + } + } + ] +} diff --git a/src/main/resources/assets/hamsters/blockstates/cage_panel.json b/src/main/resources/assets/hamsters/blockstates/cage_panel.json new file mode 100644 index 0000000..86dfd9d --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/cage_panel.json @@ -0,0 +1,64 @@ +{ + "variants": { + "facing=north,type=none": { + "model": "hamsters:block/cage_panel/cage" + }, + "facing=north,type=top": { + "model": "hamsters:block/cage_panel/cage_top" + }, + "facing=north,type=middle": { + "model": "hamsters:block/cage_panel/cage_middle" + }, + "facing=north,type=bottom": { + "model": "hamsters:block/cage_panel/cage_bottom" + }, + "facing=east,type=none": { + "model": "hamsters:block/cage_panel/cage", + "y": 90 + }, + "facing=east,type=top": { + "model": "hamsters:block/cage_panel/cage_top", + "y": 90 + }, + "facing=east,type=middle": { + "model": "hamsters:block/cage_panel/cage_middle", + "y": 90 + }, + "facing=east,type=bottom": { + "model": "hamsters:block/cage_panel/cage_bottom", + "y": 90 + }, + "facing=south,type=none": { + "model": "hamsters:block/cage_panel/cage", + "y": 180 + }, + "facing=south,type=top": { + "model": "hamsters:block/cage_panel/cage_top", + "y": 180 + }, + "facing=south,type=middle": { + "model": "hamsters:block/cage_panel/cage_middle", + "y": 180 + }, + "facing=south,type=bottom": { + "model": "hamsters:block/cage_panel/cage_bottom", + "y": 180 + }, + "facing=west,type=none": { + "model": "hamsters:block/cage_panel/cage", + "y": 270 + }, + "facing=west,type=top": { + "model": "hamsters:block/cage_panel/cage_top", + "y": 270 + }, + "facing=west,type=middle": { + "model": "hamsters:block/cage_panel/cage_middle", + "y": 270 + }, + "facing=west,type=bottom": { + "model": "hamsters:block/cage_panel/cage_bottom", + "y": 270 + } + } +} diff --git a/src/main/resources/assets/hamsters/blockstates/cyan_cage_panel.json b/src/main/resources/assets/hamsters/blockstates/cyan_cage_panel.json new file mode 100644 index 0000000..f2917ea --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/cyan_cage_panel.json @@ -0,0 +1,64 @@ +{ + "variants": { + "facing=north,type=none": { + "model": "hamsters:block/cage_panel/cyan" + }, + "facing=north,type=top": { + "model": "hamsters:block/cage_panel/cyan_top" + }, + "facing=north,type=middle": { + "model": "hamsters:block/cage_panel/cyan_middle" + }, + "facing=north,type=bottom": { + "model": "hamsters:block/cage_panel/cyan_bottom" + }, + "facing=east,type=none": { + "model": "hamsters:block/cage_panel/cyan", + "y": 90 + }, + "facing=east,type=top": { + "model": "hamsters:block/cage_panel/cyan_top", + "y": 90 + }, + "facing=east,type=middle": { + "model": "hamsters:block/cage_panel/cyan_middle", + "y": 90 + }, + "facing=east,type=bottom": { + "model": "hamsters:block/cage_panel/cyan_bottom", + "y": 90 + }, + "facing=south,type=none": { + "model": "hamsters:block/cage_panel/cyan", + "y": 180 + }, + "facing=south,type=top": { + "model": "hamsters:block/cage_panel/cyan_top", + "y": 180 + }, + "facing=south,type=middle": { + "model": "hamsters:block/cage_panel/cyan_middle", + "y": 180 + }, + "facing=south,type=bottom": { + "model": "hamsters:block/cage_panel/cyan_bottom", + "y": 180 + }, + "facing=west,type=none": { + "model": "hamsters:block/cage_panel/cyan", + "y": 270 + }, + "facing=west,type=top": { + "model": "hamsters:block/cage_panel/cyan_top", + "y": 270 + }, + "facing=west,type=middle": { + "model": "hamsters:block/cage_panel/cyan_middle", + "y": 270 + }, + "facing=west,type=bottom": { + "model": "hamsters:block/cage_panel/cyan_bottom", + "y": 270 + } + } +} diff --git a/src/main/resources/assets/hamsters/blockstates/cyan_hamster_bottle.json b/src/main/resources/assets/hamsters/blockstates/cyan_hamster_bottle.json new file mode 100644 index 0000000..381f0f7 --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/cyan_hamster_bottle.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=north": { + "model": "hamsters:block/bottle/cyan" + }, + "facing=east": { + "model": "hamsters:block/bottle/cyan", + "y": 90 + }, + "facing=south": { + "model": "hamsters:block/bottle/cyan", + "y": 180 + }, + "facing=west": { + "model": "hamsters:block/bottle/cyan", + "y": 270 + } + } +} diff --git a/src/main/resources/assets/hamsters/blockstates/cyan_hamster_bowl.json b/src/main/resources/assets/hamsters/blockstates/cyan_hamster_bowl.json new file mode 100644 index 0000000..a2c17c2 --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/cyan_hamster_bowl.json @@ -0,0 +1,33 @@ +{ + "multipart": [ + { + "apply": { + "model": "hamsters:block/bowl/cyan" + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_1" + }, + "when": { + "seeds": 1 + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_2" + }, + "when": { + "seeds": 2 + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_3" + }, + "when": { + "seeds": 3 + } + } + ] +} diff --git a/src/main/resources/assets/hamsters/blockstates/gray_cage_panel.json b/src/main/resources/assets/hamsters/blockstates/gray_cage_panel.json new file mode 100644 index 0000000..fdf22de --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/gray_cage_panel.json @@ -0,0 +1,64 @@ +{ + "variants": { + "facing=north,type=none": { + "model": "hamsters:block/cage_panel/gray" + }, + "facing=north,type=top": { + "model": "hamsters:block/cage_panel/gray_top" + }, + "facing=north,type=middle": { + "model": "hamsters:block/cage_panel/gray_middle" + }, + "facing=north,type=bottom": { + "model": "hamsters:block/cage_panel/gray_bottom" + }, + "facing=east,type=none": { + "model": "hamsters:block/cage_panel/gray", + "y": 90 + }, + "facing=east,type=top": { + "model": "hamsters:block/cage_panel/gray_top", + "y": 90 + }, + "facing=east,type=middle": { + "model": "hamsters:block/cage_panel/gray_middle", + "y": 90 + }, + "facing=east,type=bottom": { + "model": "hamsters:block/cage_panel/gray_bottom", + "y": 90 + }, + "facing=south,type=none": { + "model": "hamsters:block/cage_panel/gray", + "y": 180 + }, + "facing=south,type=top": { + "model": "hamsters:block/cage_panel/gray_top", + "y": 180 + }, + "facing=south,type=middle": { + "model": "hamsters:block/cage_panel/gray_middle", + "y": 180 + }, + "facing=south,type=bottom": { + "model": "hamsters:block/cage_panel/gray_bottom", + "y": 180 + }, + "facing=west,type=none": { + "model": "hamsters:block/cage_panel/gray", + "y": 270 + }, + "facing=west,type=top": { + "model": "hamsters:block/cage_panel/gray_top", + "y": 270 + }, + "facing=west,type=middle": { + "model": "hamsters:block/cage_panel/gray_middle", + "y": 270 + }, + "facing=west,type=bottom": { + "model": "hamsters:block/cage_panel/gray_bottom", + "y": 270 + } + } +} diff --git a/src/main/resources/assets/hamsters/blockstates/gray_hamster_bottle.json b/src/main/resources/assets/hamsters/blockstates/gray_hamster_bottle.json new file mode 100644 index 0000000..52818c7 --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/gray_hamster_bottle.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=north": { + "model": "hamsters:block/bottle/gray" + }, + "facing=east": { + "model": "hamsters:block/bottle/gray", + "y": 90 + }, + "facing=south": { + "model": "hamsters:block/bottle/gray", + "y": 180 + }, + "facing=west": { + "model": "hamsters:block/bottle/gray", + "y": 270 + } + } +} diff --git a/src/main/resources/assets/hamsters/blockstates/gray_hamster_bowl.json b/src/main/resources/assets/hamsters/blockstates/gray_hamster_bowl.json new file mode 100644 index 0000000..a84b1fc --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/gray_hamster_bowl.json @@ -0,0 +1,33 @@ +{ + "multipart": [ + { + "apply": { + "model": "hamsters:block/bowl/gray" + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_1" + }, + "when": { + "seeds": 1 + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_2" + }, + "when": { + "seeds": 2 + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_3" + }, + "when": { + "seeds": 3 + } + } + ] +} diff --git a/src/main/resources/assets/hamsters/blockstates/green_cage_panel.json b/src/main/resources/assets/hamsters/blockstates/green_cage_panel.json new file mode 100644 index 0000000..6f87712 --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/green_cage_panel.json @@ -0,0 +1,64 @@ +{ + "variants": { + "facing=north,type=none": { + "model": "hamsters:block/cage_panel/green" + }, + "facing=north,type=top": { + "model": "hamsters:block/cage_panel/green_top" + }, + "facing=north,type=middle": { + "model": "hamsters:block/cage_panel/green_middle" + }, + "facing=north,type=bottom": { + "model": "hamsters:block/cage_panel/green_bottom" + }, + "facing=east,type=none": { + "model": "hamsters:block/cage_panel/green", + "y": 90 + }, + "facing=east,type=top": { + "model": "hamsters:block/cage_panel/green_top", + "y": 90 + }, + "facing=east,type=middle": { + "model": "hamsters:block/cage_panel/green_middle", + "y": 90 + }, + "facing=east,type=bottom": { + "model": "hamsters:block/cage_panel/green_bottom", + "y": 90 + }, + "facing=south,type=none": { + "model": "hamsters:block/cage_panel/green", + "y": 180 + }, + "facing=south,type=top": { + "model": "hamsters:block/cage_panel/green_top", + "y": 180 + }, + "facing=south,type=middle": { + "model": "hamsters:block/cage_panel/green_middle", + "y": 180 + }, + "facing=south,type=bottom": { + "model": "hamsters:block/cage_panel/green_bottom", + "y": 180 + }, + "facing=west,type=none": { + "model": "hamsters:block/cage_panel/green", + "y": 270 + }, + "facing=west,type=top": { + "model": "hamsters:block/cage_panel/green_top", + "y": 270 + }, + "facing=west,type=middle": { + "model": "hamsters:block/cage_panel/green_middle", + "y": 270 + }, + "facing=west,type=bottom": { + "model": "hamsters:block/cage_panel/green_bottom", + "y": 270 + } + } +} diff --git a/src/main/resources/assets/hamsters/blockstates/green_hamster_bottle.json b/src/main/resources/assets/hamsters/blockstates/green_hamster_bottle.json new file mode 100644 index 0000000..a9b2bba --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/green_hamster_bottle.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=north": { + "model": "hamsters:block/bottle/green" + }, + "facing=east": { + "model": "hamsters:block/bottle/green", + "y": 90 + }, + "facing=south": { + "model": "hamsters:block/bottle/green", + "y": 180 + }, + "facing=west": { + "model": "hamsters:block/bottle/green", + "y": 270 + } + } +} diff --git a/src/main/resources/assets/hamsters/blockstates/green_hamster_bowl.json b/src/main/resources/assets/hamsters/blockstates/green_hamster_bowl.json new file mode 100644 index 0000000..66506fd --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/green_hamster_bowl.json @@ -0,0 +1,33 @@ +{ + "multipart": [ + { + "apply": { + "model": "hamsters:block/bowl/green" + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_1" + }, + "when": { + "seeds": 1 + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_2" + }, + "when": { + "seeds": 2 + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_3" + }, + "when": { + "seeds": 3 + } + } + ] +} diff --git a/src/main/resources/assets/hamsters/blockstates/light_blue_cage_panel.json b/src/main/resources/assets/hamsters/blockstates/light_blue_cage_panel.json new file mode 100644 index 0000000..b0651d1 --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/light_blue_cage_panel.json @@ -0,0 +1,64 @@ +{ + "variants": { + "facing=north,type=none": { + "model": "hamsters:block/cage_panel/light_blue" + }, + "facing=north,type=top": { + "model": "hamsters:block/cage_panel/light_blue_top" + }, + "facing=north,type=middle": { + "model": "hamsters:block/cage_panel/light_blue_middle" + }, + "facing=north,type=bottom": { + "model": "hamsters:block/cage_panel/light_blue_bottom" + }, + "facing=east,type=none": { + "model": "hamsters:block/cage_panel/light_blue", + "y": 90 + }, + "facing=east,type=top": { + "model": "hamsters:block/cage_panel/light_blue_top", + "y": 90 + }, + "facing=east,type=middle": { + "model": "hamsters:block/cage_panel/light_blue_middle", + "y": 90 + }, + "facing=east,type=bottom": { + "model": "hamsters:block/cage_panel/light_blue_bottom", + "y": 90 + }, + "facing=south,type=none": { + "model": "hamsters:block/cage_panel/light_blue", + "y": 180 + }, + "facing=south,type=top": { + "model": "hamsters:block/cage_panel/light_blue_top", + "y": 180 + }, + "facing=south,type=middle": { + "model": "hamsters:block/cage_panel/light_blue_middle", + "y": 180 + }, + "facing=south,type=bottom": { + "model": "hamsters:block/cage_panel/light_blue_bottom", + "y": 180 + }, + "facing=west,type=none": { + "model": "hamsters:block/cage_panel/light_blue", + "y": 270 + }, + "facing=west,type=top": { + "model": "hamsters:block/cage_panel/light_blue_top", + "y": 270 + }, + "facing=west,type=middle": { + "model": "hamsters:block/cage_panel/light_blue_middle", + "y": 270 + }, + "facing=west,type=bottom": { + "model": "hamsters:block/cage_panel/light_blue_bottom", + "y": 270 + } + } +} diff --git a/src/main/resources/assets/hamsters/blockstates/light_blue_hamster_bottle.json b/src/main/resources/assets/hamsters/blockstates/light_blue_hamster_bottle.json new file mode 100644 index 0000000..108e58f --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/light_blue_hamster_bottle.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=north": { + "model": "hamsters:block/bottle/light_blue" + }, + "facing=east": { + "model": "hamsters:block/bottle/light_blue", + "y": 90 + }, + "facing=south": { + "model": "hamsters:block/bottle/light_blue", + "y": 180 + }, + "facing=west": { + "model": "hamsters:block/bottle/light_blue", + "y": 270 + } + } +} diff --git a/src/main/resources/assets/hamsters/blockstates/light_blue_hamster_bowl.json b/src/main/resources/assets/hamsters/blockstates/light_blue_hamster_bowl.json new file mode 100644 index 0000000..462cb85 --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/light_blue_hamster_bowl.json @@ -0,0 +1,33 @@ +{ + "multipart": [ + { + "apply": { + "model": "hamsters:block/bowl/light_blue" + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_1" + }, + "when": { + "seeds": 1 + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_2" + }, + "when": { + "seeds": 2 + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_3" + }, + "when": { + "seeds": 3 + } + } + ] +} diff --git a/src/main/resources/assets/hamsters/blockstates/light_gray_cage_panel.json b/src/main/resources/assets/hamsters/blockstates/light_gray_cage_panel.json new file mode 100644 index 0000000..9cc39bd --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/light_gray_cage_panel.json @@ -0,0 +1,64 @@ +{ + "variants": { + "facing=north,type=none": { + "model": "hamsters:block/cage_panel/light_gray" + }, + "facing=north,type=top": { + "model": "hamsters:block/cage_panel/light_gray_top" + }, + "facing=north,type=middle": { + "model": "hamsters:block/cage_panel/light_gray_middle" + }, + "facing=north,type=bottom": { + "model": "hamsters:block/cage_panel/light_gray_bottom" + }, + "facing=east,type=none": { + "model": "hamsters:block/cage_panel/light_gray", + "y": 90 + }, + "facing=east,type=top": { + "model": "hamsters:block/cage_panel/light_gray_top", + "y": 90 + }, + "facing=east,type=middle": { + "model": "hamsters:block/cage_panel/light_gray_middle", + "y": 90 + }, + "facing=east,type=bottom": { + "model": "hamsters:block/cage_panel/light_gray_bottom", + "y": 90 + }, + "facing=south,type=none": { + "model": "hamsters:block/cage_panel/light_gray", + "y": 180 + }, + "facing=south,type=top": { + "model": "hamsters:block/cage_panel/light_gray_top", + "y": 180 + }, + "facing=south,type=middle": { + "model": "hamsters:block/cage_panel/light_gray_middle", + "y": 180 + }, + "facing=south,type=bottom": { + "model": "hamsters:block/cage_panel/light_gray_bottom", + "y": 180 + }, + "facing=west,type=none": { + "model": "hamsters:block/cage_panel/light_gray", + "y": 270 + }, + "facing=west,type=top": { + "model": "hamsters:block/cage_panel/light_gray_top", + "y": 270 + }, + "facing=west,type=middle": { + "model": "hamsters:block/cage_panel/light_gray_middle", + "y": 270 + }, + "facing=west,type=bottom": { + "model": "hamsters:block/cage_panel/light_gray_bottom", + "y": 270 + } + } +} diff --git a/src/main/resources/assets/hamsters/blockstates/light_gray_hamster_bottle.json b/src/main/resources/assets/hamsters/blockstates/light_gray_hamster_bottle.json new file mode 100644 index 0000000..f5fed06 --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/light_gray_hamster_bottle.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=north": { + "model": "hamsters:block/bottle/light_gray" + }, + "facing=east": { + "model": "hamsters:block/bottle/light_gray", + "y": 90 + }, + "facing=south": { + "model": "hamsters:block/bottle/light_gray", + "y": 180 + }, + "facing=west": { + "model": "hamsters:block/bottle/light_gray", + "y": 270 + } + } +} diff --git a/src/main/resources/assets/hamsters/blockstates/light_gray_hamster_bowl.json b/src/main/resources/assets/hamsters/blockstates/light_gray_hamster_bowl.json new file mode 100644 index 0000000..5e862ea --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/light_gray_hamster_bowl.json @@ -0,0 +1,33 @@ +{ + "multipart": [ + { + "apply": { + "model": "hamsters:block/bowl/light_gray" + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_1" + }, + "when": { + "seeds": 1 + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_2" + }, + "when": { + "seeds": 2 + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_3" + }, + "when": { + "seeds": 3 + } + } + ] +} diff --git a/src/main/resources/assets/hamsters/blockstates/lime_cage_panel.json b/src/main/resources/assets/hamsters/blockstates/lime_cage_panel.json new file mode 100644 index 0000000..c326b7d --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/lime_cage_panel.json @@ -0,0 +1,64 @@ +{ + "variants": { + "facing=north,type=none": { + "model": "hamsters:block/cage_panel/lime" + }, + "facing=north,type=top": { + "model": "hamsters:block/cage_panel/lime_top" + }, + "facing=north,type=middle": { + "model": "hamsters:block/cage_panel/lime_middle" + }, + "facing=north,type=bottom": { + "model": "hamsters:block/cage_panel/lime_bottom" + }, + "facing=east,type=none": { + "model": "hamsters:block/cage_panel/lime", + "y": 90 + }, + "facing=east,type=top": { + "model": "hamsters:block/cage_panel/lime_top", + "y": 90 + }, + "facing=east,type=middle": { + "model": "hamsters:block/cage_panel/lime_middle", + "y": 90 + }, + "facing=east,type=bottom": { + "model": "hamsters:block/cage_panel/lime_bottom", + "y": 90 + }, + "facing=south,type=none": { + "model": "hamsters:block/cage_panel/lime", + "y": 180 + }, + "facing=south,type=top": { + "model": "hamsters:block/cage_panel/lime_top", + "y": 180 + }, + "facing=south,type=middle": { + "model": "hamsters:block/cage_panel/lime_middle", + "y": 180 + }, + "facing=south,type=bottom": { + "model": "hamsters:block/cage_panel/lime_bottom", + "y": 180 + }, + "facing=west,type=none": { + "model": "hamsters:block/cage_panel/lime", + "y": 270 + }, + "facing=west,type=top": { + "model": "hamsters:block/cage_panel/lime_top", + "y": 270 + }, + "facing=west,type=middle": { + "model": "hamsters:block/cage_panel/lime_middle", + "y": 270 + }, + "facing=west,type=bottom": { + "model": "hamsters:block/cage_panel/lime_bottom", + "y": 270 + } + } +} diff --git a/src/main/resources/assets/hamsters/blockstates/lime_hamster_bottle.json b/src/main/resources/assets/hamsters/blockstates/lime_hamster_bottle.json new file mode 100644 index 0000000..294e8e8 --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/lime_hamster_bottle.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=north": { + "model": "hamsters:block/bottle/lime" + }, + "facing=east": { + "model": "hamsters:block/bottle/lime", + "y": 90 + }, + "facing=south": { + "model": "hamsters:block/bottle/lime", + "y": 180 + }, + "facing=west": { + "model": "hamsters:block/bottle/lime", + "y": 270 + } + } +} diff --git a/src/main/resources/assets/hamsters/blockstates/lime_hamster_bowl.json b/src/main/resources/assets/hamsters/blockstates/lime_hamster_bowl.json new file mode 100644 index 0000000..70d2d67 --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/lime_hamster_bowl.json @@ -0,0 +1,33 @@ +{ + "multipart": [ + { + "apply": { + "model": "hamsters:block/bowl/lime" + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_1" + }, + "when": { + "seeds": 1 + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_2" + }, + "when": { + "seeds": 2 + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_3" + }, + "when": { + "seeds": 3 + } + } + ] +} diff --git a/src/main/resources/assets/hamsters/blockstates/magenta_cage_panel.json b/src/main/resources/assets/hamsters/blockstates/magenta_cage_panel.json new file mode 100644 index 0000000..e029164 --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/magenta_cage_panel.json @@ -0,0 +1,64 @@ +{ + "variants": { + "facing=north,type=none": { + "model": "hamsters:block/cage_panel/magenta" + }, + "facing=north,type=top": { + "model": "hamsters:block/cage_panel/magenta_top" + }, + "facing=north,type=middle": { + "model": "hamsters:block/cage_panel/magenta_middle" + }, + "facing=north,type=bottom": { + "model": "hamsters:block/cage_panel/magenta_bottom" + }, + "facing=east,type=none": { + "model": "hamsters:block/cage_panel/magenta", + "y": 90 + }, + "facing=east,type=top": { + "model": "hamsters:block/cage_panel/magenta_top", + "y": 90 + }, + "facing=east,type=middle": { + "model": "hamsters:block/cage_panel/magenta_middle", + "y": 90 + }, + "facing=east,type=bottom": { + "model": "hamsters:block/cage_panel/magenta_bottom", + "y": 90 + }, + "facing=south,type=none": { + "model": "hamsters:block/cage_panel/magenta", + "y": 180 + }, + "facing=south,type=top": { + "model": "hamsters:block/cage_panel/magenta_top", + "y": 180 + }, + "facing=south,type=middle": { + "model": "hamsters:block/cage_panel/magenta_middle", + "y": 180 + }, + "facing=south,type=bottom": { + "model": "hamsters:block/cage_panel/magenta_bottom", + "y": 180 + }, + "facing=west,type=none": { + "model": "hamsters:block/cage_panel/magenta", + "y": 270 + }, + "facing=west,type=top": { + "model": "hamsters:block/cage_panel/magenta_top", + "y": 270 + }, + "facing=west,type=middle": { + "model": "hamsters:block/cage_panel/magenta_middle", + "y": 270 + }, + "facing=west,type=bottom": { + "model": "hamsters:block/cage_panel/magenta_bottom", + "y": 270 + } + } +} diff --git a/src/main/resources/assets/hamsters/blockstates/magenta_hamster_bottle.json b/src/main/resources/assets/hamsters/blockstates/magenta_hamster_bottle.json new file mode 100644 index 0000000..44c1716 --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/magenta_hamster_bottle.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=north": { + "model": "hamsters:block/bottle/magenta" + }, + "facing=east": { + "model": "hamsters:block/bottle/magenta", + "y": 90 + }, + "facing=south": { + "model": "hamsters:block/bottle/magenta", + "y": 180 + }, + "facing=west": { + "model": "hamsters:block/bottle/magenta", + "y": 270 + } + } +} diff --git a/src/main/resources/assets/hamsters/blockstates/magenta_hamster_bowl.json b/src/main/resources/assets/hamsters/blockstates/magenta_hamster_bowl.json new file mode 100644 index 0000000..821646b --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/magenta_hamster_bowl.json @@ -0,0 +1,33 @@ +{ + "multipart": [ + { + "apply": { + "model": "hamsters:block/bowl/magenta" + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_1" + }, + "when": { + "seeds": 1 + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_2" + }, + "when": { + "seeds": 2 + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_3" + }, + "when": { + "seeds": 3 + } + } + ] +} diff --git a/src/main/resources/assets/hamsters/blockstates/orange_cage_panel.json b/src/main/resources/assets/hamsters/blockstates/orange_cage_panel.json new file mode 100644 index 0000000..520cc58 --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/orange_cage_panel.json @@ -0,0 +1,64 @@ +{ + "variants": { + "facing=north,type=none": { + "model": "hamsters:block/cage_panel/orange" + }, + "facing=north,type=top": { + "model": "hamsters:block/cage_panel/orange_top" + }, + "facing=north,type=middle": { + "model": "hamsters:block/cage_panel/orange_middle" + }, + "facing=north,type=bottom": { + "model": "hamsters:block/cage_panel/orange_bottom" + }, + "facing=east,type=none": { + "model": "hamsters:block/cage_panel/orange", + "y": 90 + }, + "facing=east,type=top": { + "model": "hamsters:block/cage_panel/orange_top", + "y": 90 + }, + "facing=east,type=middle": { + "model": "hamsters:block/cage_panel/orange_middle", + "y": 90 + }, + "facing=east,type=bottom": { + "model": "hamsters:block/cage_panel/orange_bottom", + "y": 90 + }, + "facing=south,type=none": { + "model": "hamsters:block/cage_panel/orange", + "y": 180 + }, + "facing=south,type=top": { + "model": "hamsters:block/cage_panel/orange_top", + "y": 180 + }, + "facing=south,type=middle": { + "model": "hamsters:block/cage_panel/orange_middle", + "y": 180 + }, + "facing=south,type=bottom": { + "model": "hamsters:block/cage_panel/orange_bottom", + "y": 180 + }, + "facing=west,type=none": { + "model": "hamsters:block/cage_panel/orange", + "y": 270 + }, + "facing=west,type=top": { + "model": "hamsters:block/cage_panel/orange_top", + "y": 270 + }, + "facing=west,type=middle": { + "model": "hamsters:block/cage_panel/orange_middle", + "y": 270 + }, + "facing=west,type=bottom": { + "model": "hamsters:block/cage_panel/orange_bottom", + "y": 270 + } + } +} diff --git a/src/main/resources/assets/hamsters/blockstates/orange_hamster_bottle.json b/src/main/resources/assets/hamsters/blockstates/orange_hamster_bottle.json new file mode 100644 index 0000000..3f9a493 --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/orange_hamster_bottle.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=north": { + "model": "hamsters:block/bottle/orange" + }, + "facing=east": { + "model": "hamsters:block/bottle/orange", + "y": 90 + }, + "facing=south": { + "model": "hamsters:block/bottle/orange", + "y": 180 + }, + "facing=west": { + "model": "hamsters:block/bottle/orange", + "y": 270 + } + } +} diff --git a/src/main/resources/assets/hamsters/blockstates/orange_hamster_bowl.json b/src/main/resources/assets/hamsters/blockstates/orange_hamster_bowl.json new file mode 100644 index 0000000..d8d0a7f --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/orange_hamster_bowl.json @@ -0,0 +1,33 @@ +{ + "multipart": [ + { + "apply": { + "model": "hamsters:block/bowl/orange" + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_1" + }, + "when": { + "seeds": 1 + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_2" + }, + "when": { + "seeds": 2 + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_3" + }, + "when": { + "seeds": 3 + } + } + ] +} diff --git a/src/main/resources/assets/hamsters/blockstates/pink_cage_panel.json b/src/main/resources/assets/hamsters/blockstates/pink_cage_panel.json new file mode 100644 index 0000000..daa9c7d --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/pink_cage_panel.json @@ -0,0 +1,64 @@ +{ + "variants": { + "facing=north,type=none": { + "model": "hamsters:block/cage_panel/pink" + }, + "facing=north,type=top": { + "model": "hamsters:block/cage_panel/pink_top" + }, + "facing=north,type=middle": { + "model": "hamsters:block/cage_panel/pink_middle" + }, + "facing=north,type=bottom": { + "model": "hamsters:block/cage_panel/pink_bottom" + }, + "facing=east,type=none": { + "model": "hamsters:block/cage_panel/pink", + "y": 90 + }, + "facing=east,type=top": { + "model": "hamsters:block/cage_panel/pink_top", + "y": 90 + }, + "facing=east,type=middle": { + "model": "hamsters:block/cage_panel/pink_middle", + "y": 90 + }, + "facing=east,type=bottom": { + "model": "hamsters:block/cage_panel/pink_bottom", + "y": 90 + }, + "facing=south,type=none": { + "model": "hamsters:block/cage_panel/pink", + "y": 180 + }, + "facing=south,type=top": { + "model": "hamsters:block/cage_panel/pink_top", + "y": 180 + }, + "facing=south,type=middle": { + "model": "hamsters:block/cage_panel/pink_middle", + "y": 180 + }, + "facing=south,type=bottom": { + "model": "hamsters:block/cage_panel/pink_bottom", + "y": 180 + }, + "facing=west,type=none": { + "model": "hamsters:block/cage_panel/pink", + "y": 270 + }, + "facing=west,type=top": { + "model": "hamsters:block/cage_panel/pink_top", + "y": 270 + }, + "facing=west,type=middle": { + "model": "hamsters:block/cage_panel/pink_middle", + "y": 270 + }, + "facing=west,type=bottom": { + "model": "hamsters:block/cage_panel/pink_bottom", + "y": 270 + } + } +} diff --git a/src/main/resources/assets/hamsters/blockstates/pink_hamster_bottle.json b/src/main/resources/assets/hamsters/blockstates/pink_hamster_bottle.json new file mode 100644 index 0000000..f612f96 --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/pink_hamster_bottle.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=north": { + "model": "hamsters:block/bottle/pink" + }, + "facing=east": { + "model": "hamsters:block/bottle/pink", + "y": 90 + }, + "facing=south": { + "model": "hamsters:block/bottle/pink", + "y": 180 + }, + "facing=west": { + "model": "hamsters:block/bottle/pink", + "y": 270 + } + } +} diff --git a/src/main/resources/assets/hamsters/blockstates/pink_hamster_bowl.json b/src/main/resources/assets/hamsters/blockstates/pink_hamster_bowl.json new file mode 100644 index 0000000..ac0e714 --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/pink_hamster_bowl.json @@ -0,0 +1,33 @@ +{ + "multipart": [ + { + "apply": { + "model": "hamsters:block/bowl/pink" + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_1" + }, + "when": { + "seeds": 1 + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_2" + }, + "when": { + "seeds": 2 + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_3" + }, + "when": { + "seeds": 3 + } + } + ] +} diff --git a/src/main/resources/assets/hamsters/blockstates/purple_cage_panel.json b/src/main/resources/assets/hamsters/blockstates/purple_cage_panel.json new file mode 100644 index 0000000..c75810d --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/purple_cage_panel.json @@ -0,0 +1,64 @@ +{ + "variants": { + "facing=north,type=none": { + "model": "hamsters:block/cage_panel/purple" + }, + "facing=north,type=top": { + "model": "hamsters:block/cage_panel/purple_top" + }, + "facing=north,type=middle": { + "model": "hamsters:block/cage_panel/purple_middle" + }, + "facing=north,type=bottom": { + "model": "hamsters:block/cage_panel/purple_bottom" + }, + "facing=east,type=none": { + "model": "hamsters:block/cage_panel/purple", + "y": 90 + }, + "facing=east,type=top": { + "model": "hamsters:block/cage_panel/purple_top", + "y": 90 + }, + "facing=east,type=middle": { + "model": "hamsters:block/cage_panel/purple_middle", + "y": 90 + }, + "facing=east,type=bottom": { + "model": "hamsters:block/cage_panel/purple_bottom", + "y": 90 + }, + "facing=south,type=none": { + "model": "hamsters:block/cage_panel/purple", + "y": 180 + }, + "facing=south,type=top": { + "model": "hamsters:block/cage_panel/purple_top", + "y": 180 + }, + "facing=south,type=middle": { + "model": "hamsters:block/cage_panel/purple_middle", + "y": 180 + }, + "facing=south,type=bottom": { + "model": "hamsters:block/cage_panel/purple_bottom", + "y": 180 + }, + "facing=west,type=none": { + "model": "hamsters:block/cage_panel/purple", + "y": 270 + }, + "facing=west,type=top": { + "model": "hamsters:block/cage_panel/purple_top", + "y": 270 + }, + "facing=west,type=middle": { + "model": "hamsters:block/cage_panel/purple_middle", + "y": 270 + }, + "facing=west,type=bottom": { + "model": "hamsters:block/cage_panel/purple_bottom", + "y": 270 + } + } +} diff --git a/src/main/resources/assets/hamsters/blockstates/purple_hamster_bottle.json b/src/main/resources/assets/hamsters/blockstates/purple_hamster_bottle.json new file mode 100644 index 0000000..25d2e0e --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/purple_hamster_bottle.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=north": { + "model": "hamsters:block/bottle/purple" + }, + "facing=east": { + "model": "hamsters:block/bottle/purple", + "y": 90 + }, + "facing=south": { + "model": "hamsters:block/bottle/purple", + "y": 180 + }, + "facing=west": { + "model": "hamsters:block/bottle/purple", + "y": 270 + } + } +} diff --git a/src/main/resources/assets/hamsters/blockstates/purple_hamster_bowl.json b/src/main/resources/assets/hamsters/blockstates/purple_hamster_bowl.json new file mode 100644 index 0000000..f426d5f --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/purple_hamster_bowl.json @@ -0,0 +1,33 @@ +{ + "multipart": [ + { + "apply": { + "model": "hamsters:block/bowl/purple" + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_1" + }, + "when": { + "seeds": 1 + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_2" + }, + "when": { + "seeds": 2 + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_3" + }, + "when": { + "seeds": 3 + } + } + ] +} diff --git a/src/main/resources/assets/hamsters/blockstates/red_cage_panel.json b/src/main/resources/assets/hamsters/blockstates/red_cage_panel.json new file mode 100644 index 0000000..71cd8a9 --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/red_cage_panel.json @@ -0,0 +1,64 @@ +{ + "variants": { + "facing=north,type=none": { + "model": "hamsters:block/cage_panel/red" + }, + "facing=north,type=top": { + "model": "hamsters:block/cage_panel/red_top" + }, + "facing=north,type=middle": { + "model": "hamsters:block/cage_panel/red_middle" + }, + "facing=north,type=bottom": { + "model": "hamsters:block/cage_panel/red_bottom" + }, + "facing=east,type=none": { + "model": "hamsters:block/cage_panel/red", + "y": 90 + }, + "facing=east,type=top": { + "model": "hamsters:block/cage_panel/red_top", + "y": 90 + }, + "facing=east,type=middle": { + "model": "hamsters:block/cage_panel/red_middle", + "y": 90 + }, + "facing=east,type=bottom": { + "model": "hamsters:block/cage_panel/red_bottom", + "y": 90 + }, + "facing=south,type=none": { + "model": "hamsters:block/cage_panel/red", + "y": 180 + }, + "facing=south,type=top": { + "model": "hamsters:block/cage_panel/red_top", + "y": 180 + }, + "facing=south,type=middle": { + "model": "hamsters:block/cage_panel/red_middle", + "y": 180 + }, + "facing=south,type=bottom": { + "model": "hamsters:block/cage_panel/red_bottom", + "y": 180 + }, + "facing=west,type=none": { + "model": "hamsters:block/cage_panel/red", + "y": 270 + }, + "facing=west,type=top": { + "model": "hamsters:block/cage_panel/red_top", + "y": 270 + }, + "facing=west,type=middle": { + "model": "hamsters:block/cage_panel/red_middle", + "y": 270 + }, + "facing=west,type=bottom": { + "model": "hamsters:block/cage_panel/red_bottom", + "y": 270 + } + } +} diff --git a/src/main/resources/assets/hamsters/blockstates/red_hamster_bottle.json b/src/main/resources/assets/hamsters/blockstates/red_hamster_bottle.json new file mode 100644 index 0000000..4a3c0a2 --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/red_hamster_bottle.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=north": { + "model": "hamsters:block/bottle/red" + }, + "facing=east": { + "model": "hamsters:block/bottle/red", + "y": 90 + }, + "facing=south": { + "model": "hamsters:block/bottle/red", + "y": 180 + }, + "facing=west": { + "model": "hamsters:block/bottle/red", + "y": 270 + } + } +} diff --git a/src/main/resources/assets/hamsters/blockstates/red_hamster_bowl.json b/src/main/resources/assets/hamsters/blockstates/red_hamster_bowl.json new file mode 100644 index 0000000..ce930c8 --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/red_hamster_bowl.json @@ -0,0 +1,33 @@ +{ + "multipart": [ + { + "apply": { + "model": "hamsters:block/bowl/red" + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_1" + }, + "when": { + "seeds": 1 + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_2" + }, + "when": { + "seeds": 2 + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_3" + }, + "when": { + "seeds": 3 + } + } + ] +} diff --git a/src/main/resources/assets/hamsters/blockstates/white_cage_panel.json b/src/main/resources/assets/hamsters/blockstates/white_cage_panel.json new file mode 100644 index 0000000..1660a37 --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/white_cage_panel.json @@ -0,0 +1,20 @@ +{ + "variants": { + "facing=north,type=none": { "model": "hamsters:block/cage_panel/white" }, + "facing=north,type=top": { "model": "hamsters:block/cage_panel/white_top" }, + "facing=north,type=middle": { "model": "hamsters:block/cage_panel/white_middle" }, + "facing=north,type=bottom": { "model": "hamsters:block/cage_panel/white_bottom" }, + "facing=east,type=none": { "model": "hamsters:block/cage_panel/white", "y": 90 }, + "facing=east,type=top": { "model": "hamsters:block/cage_panel/white_top", "y": 90 }, + "facing=east,type=middle": { "model": "hamsters:block/cage_panel/white_middle", "y": 90 }, + "facing=east,type=bottom": { "model": "hamsters:block/cage_panel/white_bottom", "y": 90 }, + "facing=south,type=none": { "model": "hamsters:block/cage_panel/white", "y": 180 }, + "facing=south,type=top": { "model": "hamsters:block/cage_panel/white_top", "y": 180 }, + "facing=south,type=middle": { "model": "hamsters:block/cage_panel/white_middle", "y": 180 }, + "facing=south,type=bottom": { "model": "hamsters:block/cage_panel/white_bottom", "y": 180 }, + "facing=west,type=none": { "model": "hamsters:block/cage_panel/white", "y": 270 }, + "facing=west,type=top": { "model": "hamsters:block/cage_panel/white_top", "y": 270 }, + "facing=west,type=middle": { "model": "hamsters:block/cage_panel/white_middle", "y": 270 }, + "facing=west,type=bottom": { "model": "hamsters:block/cage_panel/white_bottom", "y": 270 } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/hamsters/blockstates/white_hamster_bottle.json b/src/main/resources/assets/hamsters/blockstates/white_hamster_bottle.json new file mode 100644 index 0000000..ede0e00 --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/white_hamster_bottle.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=north": { + "model": "hamsters:block/bottle/white" + }, + "facing=east": { + "model": "hamsters:block/bottle/white", + "y": 90 + }, + "facing=south": { + "model": "hamsters:block/bottle/white", + "y": 180 + }, + "facing=west": { + "model": "hamsters:block/bottle/white", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/hamsters/blockstates/white_hamster_bowl.json b/src/main/resources/assets/hamsters/blockstates/white_hamster_bowl.json new file mode 100644 index 0000000..4c8d38a --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/white_hamster_bowl.json @@ -0,0 +1,33 @@ +{ + "multipart": [ + { + "apply": { + "model": "hamsters:block/bowl/white" + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_1" + }, + "when": { + "seeds": 1 + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_2" + }, + "when": { + "seeds": 2 + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_3" + }, + "when": { + "seeds": 3 + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/hamsters/blockstates/wno.py b/src/main/resources/assets/hamsters/blockstates/wno.py new file mode 100644 index 0000000..ab70171 --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/wno.py @@ -0,0 +1,108 @@ +import json +import os + + +################################################################# + +def ensure_outputs_exist(): + for file in os.walk(_cwd + f"\\{input_path}\\"): + try: + os.mkdir(file[0].replace(input_path, output_path)) + except: + continue + +# these 2 are for looping/replacing through every single key and value in a dict +def dict_replace_value(d, old, new): + x = {} + for k, v in d.items(): + if isinstance(v, dict): + v = dict_replace_value(v, old, new) + elif isinstance(v, list): + v = list_replace_value(v, old, new) + elif isinstance(v, str): + if not old is None and not new is None: + v = v.replace(old, new) + v = v.replace("{namespace}",f"{namespace}") + x[k] = v + return x + +def list_replace_value(l, old, new): + x = [] + for e in l: + if isinstance(e, list): + e = list_replace_value(e, old, new) + elif isinstance(e, dict): + e = dict_replace_value(e, old, new) + elif isinstance(e, str): + if not old is None and not new is None: + e = e.replace(old, new) + e = e.replace("{namespace}",f"{namespace}") + x.append(e) + return x + +################################################################# + + +colors = [ + "orange", + "magenta", + "light_blue", + "yellow", + "lime", + "pink", + "gray", + "light_gray", + "cyan", + "purple", + "blue", + "brown", + "green", + "red", + "black" +] + +woods = [ + "spruce", + "birch", + "jungle", + "acacia", + "dark_oak", + "mangrove", + "crimson", + "warped", + "bamboo", + "cherry" +] + +namespace = "another_furniture" + +cwd = os.getcwd() + + +process_specific = input("process specific file (or enter to skip): ") +if process_specific == "oak": + typea = "oak" + files_to_process = [f for f in os.listdir(cwd) if os.path.isfile(os.path.join(cwd, f)) and f.startswith("oak")] +elif process_specific != "": + files_to_process = [process_specific + ".json"] +else: + typea = "white" + files_to_process = [f for f in os.listdir(cwd) if os.path.isfile(os.path.join(cwd, f)) and f.startswith("white")] + +for file in files_to_process: + should_process = input("should process file " + file + "? ") + if should_process == "" or should_process.lower() == "y" or should_process.lower() == "yes": + f = open(file, "r") + data = json.loads(f.read()) + if "white" in file: + for color in colors: + new_data = dict_replace_value(data, "white", color) + with open(file.replace("white", color), "w+") as f: + f.write(json.dumps(new_data, indent=4) + "\n") + elif "oak" in file: + for wood in woods: + new_data = dict_replace_value(data, "oak", wood) + with open(file.replace("oak", wood), "w+") as f: + f.write(json.dumps(new_data, indent=4) + "\n") + + diff --git a/src/main/resources/assets/hamsters/blockstates/yellow_cage_panel.json b/src/main/resources/assets/hamsters/blockstates/yellow_cage_panel.json new file mode 100644 index 0000000..c8ac103 --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/yellow_cage_panel.json @@ -0,0 +1,64 @@ +{ + "variants": { + "facing=north,type=none": { + "model": "hamsters:block/cage_panel/yellow" + }, + "facing=north,type=top": { + "model": "hamsters:block/cage_panel/yellow_top" + }, + "facing=north,type=middle": { + "model": "hamsters:block/cage_panel/yellow_middle" + }, + "facing=north,type=bottom": { + "model": "hamsters:block/cage_panel/yellow_bottom" + }, + "facing=east,type=none": { + "model": "hamsters:block/cage_panel/yellow", + "y": 90 + }, + "facing=east,type=top": { + "model": "hamsters:block/cage_panel/yellow_top", + "y": 90 + }, + "facing=east,type=middle": { + "model": "hamsters:block/cage_panel/yellow_middle", + "y": 90 + }, + "facing=east,type=bottom": { + "model": "hamsters:block/cage_panel/yellow_bottom", + "y": 90 + }, + "facing=south,type=none": { + "model": "hamsters:block/cage_panel/yellow", + "y": 180 + }, + "facing=south,type=top": { + "model": "hamsters:block/cage_panel/yellow_top", + "y": 180 + }, + "facing=south,type=middle": { + "model": "hamsters:block/cage_panel/yellow_middle", + "y": 180 + }, + "facing=south,type=bottom": { + "model": "hamsters:block/cage_panel/yellow_bottom", + "y": 180 + }, + "facing=west,type=none": { + "model": "hamsters:block/cage_panel/yellow", + "y": 270 + }, + "facing=west,type=top": { + "model": "hamsters:block/cage_panel/yellow_top", + "y": 270 + }, + "facing=west,type=middle": { + "model": "hamsters:block/cage_panel/yellow_middle", + "y": 270 + }, + "facing=west,type=bottom": { + "model": "hamsters:block/cage_panel/yellow_bottom", + "y": 270 + } + } +} diff --git a/src/main/resources/assets/hamsters/blockstates/yellow_hamster_bottle.json b/src/main/resources/assets/hamsters/blockstates/yellow_hamster_bottle.json new file mode 100644 index 0000000..d6b0854 --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/yellow_hamster_bottle.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=north": { + "model": "hamsters:block/bottle/yellow" + }, + "facing=east": { + "model": "hamsters:block/bottle/yellow", + "y": 90 + }, + "facing=south": { + "model": "hamsters:block/bottle/yellow", + "y": 180 + }, + "facing=west": { + "model": "hamsters:block/bottle/yellow", + "y": 270 + } + } +} diff --git a/src/main/resources/assets/hamsters/blockstates/yellow_hamster_bowl.json b/src/main/resources/assets/hamsters/blockstates/yellow_hamster_bowl.json new file mode 100644 index 0000000..04200d2 --- /dev/null +++ b/src/main/resources/assets/hamsters/blockstates/yellow_hamster_bowl.json @@ -0,0 +1,33 @@ +{ + "multipart": [ + { + "apply": { + "model": "hamsters:block/bowl/yellow" + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_1" + }, + "when": { + "seeds": 1 + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_2" + }, + "when": { + "seeds": 2 + } + }, + { + "apply": { + "model": "hamsters:block/template/seeds_3" + }, + "when": { + "seeds": 3 + } + } + ] +} diff --git a/src/main/resources/assets/hamsters/geo/entity/frank_scp.geo.json b/src/main/resources/assets/hamsters/geo/entity/frank_scp.geo.json new file mode 100644 index 0000000..ba2339f --- /dev/null +++ b/src/main/resources/assets/hamsters/geo/entity/frank_scp.geo.json @@ -0,0 +1,357 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.sf.scp_survival.wendigo", + "texture_width": 144, + "texture_height": 144, + "visible_bounds_width": 9, + "visible_bounds_height": 5, + "visible_bounds_offset": [0, 1.5, 0] + }, + "bones": [ + { + "name": "root", + "pivot": [0, 0, 0] + }, + { + "name": "hip", + "parent": "root", + "pivot": [0, 15.75, 17.75], + "rotation": [35, 0, 0], + "cubes": [ + {"origin": [-4.5, 15.5, 15], "size": [9, 12, 5], "uv": [0, 78]} + ] + }, + { + "name": "chest", + "parent": "hip", + "pivot": [0, 26.5, 18.5], + "rotation": [22.5, 0, 0], + "cubes": [ + {"origin": [-6, 26.5, 14], "size": [12, 9, 7], "uv": [64, 64]} + ] + }, + { + "name": "neck", + "parent": "chest", + "pivot": [0, 35, 19.5], + "rotation": [22.5, 0, 0], + "cubes": [ + {"origin": [-9.5, 34.5, 12], "size": [19, 11, 13], "uv": [0, 54]} + ] + }, + { + "name": "headrot", + "parent": "neck", + "pivot": [0, 44, 15.5], + "rotation": [-72.5, 0, 0] + }, + { + "name": "head", + "parent": "headrot", + "pivot": [0, 44, 15.5], + "cubes": [ + {"origin": [-10.5, 38.5, -3], "size": [21, 18, 21], "uv": [0, 0]}, + {"origin": [-10.5, 34.5, 4], "size": [21, 4, 4], "inflate": -0.02, "uv": [0, 114]} + ] + }, + { + "name": "bone2", + "parent": "head", + "pivot": [0, 38.025, -2.375], + "cubes": [ + {"origin": [0.5, 37.525, -3], "size": [2, 1, 1], "uv": [3, 106], "mirror": true}, + {"origin": [-2.5, 37.525, -3], "size": [2, 1, 1], "inflate": -0.02, "uv": [3, 106]}, + {"origin": [-5.5, 37.525, -3], "size": [2, 1, 1], "inflate": -0.02, "uv": [3, 106]}, + {"origin": [-8.5, 37.525, -3], "size": [2, 1, 1], "inflate": -0.02, "uv": [3, 106]}, + {"origin": [-10.5, 37.525, -3], "size": [1, 1, 2], "inflate": -0.02, "uv": [12, 100]}, + {"origin": [3.5, 37.525, -3], "size": [2, 1, 1], "inflate": -0.02, "uv": [3, 106], "mirror": true}, + {"origin": [6.5, 37.525, -3], "size": [2, 1, 1], "inflate": -0.02, "uv": [3, 106], "mirror": true}, + {"origin": [9.5, 37.525, -3], "size": [1, 1, 2], "inflate": -0.02, "uv": [12, 100], "mirror": true} + ] + }, + { + "name": "jaw", + "parent": "head", + "pivot": [0, 37.5, 4], + "rotation": [39.9844, 0, 0], + "cubes": [ + {"origin": [-10.5, 34.5, -3], "size": [21, 3, 8], "uv": [19, 125]}, + {"origin": [-8.5, 37.5, -3], "size": [2, 1, 1], "uv": [3, 100]}, + {"origin": [-10.5, 37.5, -3], "size": [1, 1, 2], "uv": [12, 100]}, + {"origin": [9.5, 37.5, -3], "size": [1, 1, 2], "uv": [12, 100], "mirror": true}, + {"origin": [-5.5, 37.5, -3], "size": [2, 1, 1], "uv": [3, 100]}, + {"origin": [-2.5, 37.5, -3], "size": [2, 1, 1], "uv": [3, 100]}, + {"origin": [0.5, 37.5, -3], "size": [2, 1, 1], "uv": [3, 100], "mirror": true}, + {"origin": [3.5, 37.5, -3], "size": [2, 1, 1], "uv": [3, 100], "mirror": true}, + {"origin": [6.5, 37.5, -3], "size": [2, 1, 1], "uv": [3, 100], "mirror": true} + ] + }, + { + "name": "arm_shoulder_left", + "parent": "head", + "pivot": [10.5, 44, 15.5] + }, + { + "name": "arm_left_1", + "parent": "arm_shoulder_left", + "pivot": [10.5, 44, 10.5], + "rotation": [55, 22, 27], + "cubes": [ + {"origin": [5.5, 40, 6.5], "size": [27, 8, 8], "uv": [63, 0]} + ] + }, + { + "name": "arm_left_2", + "parent": "arm_left_1", + "pivot": [32.5, 44, 11], + "rotation": [-27.5, 30, -25], + "cubes": [ + {"origin": [31.5, 40.5, 7], "size": [32, 7, 7], "uv": [0, 40]} + ] + }, + { + "name": "hand_left", + "parent": "arm_left_2", + "pivot": [62, 44.5, 10.5], + "rotation": [-7.5, 0, -35], + "cubes": [ + {"origin": [57.5, 41.5, 6.5], "size": [12, 5, 8], "uv": [76, 32]} + ] + }, + { + "name": "index_left_1", + "parent": "hand_left", + "pivot": [69.5, 43.5, 8], + "rotation": [-12.51293, 18.75494, -27.54639], + "cubes": [ + {"origin": [68.5, 42, 6.5], "size": [8, 3, 3], "inflate": 0.02, "uv": [70, 80]} + ] + }, + { + "name": "index_right_2", + "parent": "index_left_1", + "pivot": [76.5, 45, 8], + "rotation": [0, 0, 50], + "cubes": [ + {"origin": [76.5, 42, 6.5], "size": [12, 3, 3], "uv": [28, 78]} + ] + }, + { + "name": "pinky_right_1", + "parent": "hand_left", + "pivot": [68.5, 43.5, 14], + "rotation": [23.5, -35, -32], + "cubes": [ + {"origin": [67.5, 42, 12.5], "size": [8, 3, 3], "inflate": 0.02, "uv": [70, 80]} + ] + }, + { + "name": "pinky_right_2", + "parent": "pinky_right_1", + "pivot": [75.5, 45, 14], + "rotation": [0, 0, 50], + "cubes": [ + {"origin": [75.5, 42, 12.5], "size": [12, 3, 3], "uv": [28, 78]} + ] + }, + { + "name": "thumb_left_1", + "parent": "hand_left", + "pivot": [64.5, 43.5, 7], + "rotation": [-98.59321, 59.75682, -101.14303], + "cubes": [ + {"origin": [63.5, 42, 5.5], "size": [8, 3, 3], "inflate": 0.02, "uv": [70, 80]} + ] + }, + { + "name": "thumb_left_2", + "parent": "thumb_left_1", + "pivot": [71.5, 45, 7], + "rotation": [0, 0, 50], + "cubes": [ + {"origin": [71.5, 42, 5.5], "size": [12, 3, 3], "uv": [28, 78]} + ] + }, + { + "name": "arm_shoulder_right", + "parent": "head", + "pivot": [-10.5, 44, 15.5] + }, + { + "name": "arm_right_1", + "parent": "arm_shoulder_right", + "pivot": [-10.5, 44, 10.5], + "rotation": [55, -22, -27], + "cubes": [ + {"origin": [-32.5, 40, 6.5], "size": [27, 8, 8], "uv": [63, 0], "mirror": true} + ] + }, + { + "name": "arm_right_2", + "parent": "arm_right_1", + "pivot": [-32.5, 44, 11], + "rotation": [-27.5, -30, 25], + "cubes": [ + {"origin": [-63.5, 40.5, 7], "size": [32, 7, 7], "uv": [0, 40], "mirror": true} + ] + }, + { + "name": "hand_right", + "parent": "arm_right_2", + "pivot": [-62, 44.5, 10.5], + "rotation": [-7.5, 0, 35], + "cubes": [ + {"origin": [-69.5, 41.5, 6.5], "size": [12, 5, 8], "uv": [76, 32], "mirror": true} + ] + }, + { + "name": "index_right_1", + "parent": "hand_right", + "pivot": [-69.5, 43.5, 8], + "rotation": [-12.51293, -18.75494, 27.54639], + "cubes": [ + {"origin": [-76.5, 42, 6.5], "size": [8, 3, 3], "inflate": 0.02, "uv": [70, 80], "mirror": true} + ] + }, + { + "name": "index_left_2", + "parent": "index_right_1", + "pivot": [-76.5, 45, 8], + "rotation": [0, 0, -50], + "cubes": [ + {"origin": [-88.5, 42, 6.5], "size": [12, 3, 3], "uv": [28, 78], "mirror": true} + ] + }, + { + "name": "pinky_left_1", + "parent": "hand_right", + "pivot": [-68.5, 43.5, 14], + "rotation": [23.5, 35, 32], + "cubes": [ + {"origin": [-75.5, 42, 12.5], "size": [8, 3, 3], "inflate": 0.02, "uv": [70, 80], "mirror": true} + ] + }, + { + "name": "pinky_left_2", + "parent": "pinky_left_1", + "pivot": [-75.5, 45, 14], + "rotation": [0, 0, -50], + "cubes": [ + {"origin": [-87.5, 42, 12.5], "size": [12, 3, 3], "uv": [28, 78], "mirror": true} + ] + }, + { + "name": "thumb_right_1", + "parent": "hand_right", + "pivot": [-64.5, 43.5, 7], + "rotation": [-98.59321, -59.75682, 101.14303], + "cubes": [ + {"origin": [-71.5, 42, 5.5], "size": [8, 3, 3], "inflate": 0.02, "uv": [70, 80], "mirror": true} + ] + }, + { + "name": "thumb_right_2", + "parent": "thumb_right_1", + "pivot": [-71.5, 45, 7], + "rotation": [0, 0, -50], + "cubes": [ + {"origin": [-83.5, 42, 5.5], "size": [12, 3, 3], "uv": [28, 78], "mirror": true} + ] + }, + { + "name": "small_arm_left_1", + "parent": "chest", + "pivot": [6, 31, 16.5], + "rotation": [25.5, 57, 45.5], + "cubes": [ + {"origin": [4.5, 29.5, 15], "size": [10, 3, 3], "inflate": 0.02, "uv": [78, 45]} + ] + }, + { + "name": "small_arm_left_2", + "parent": "small_arm_left_1", + "pivot": [14.5, 31, 18], + "rotation": [0, 27.5, 0], + "cubes": [ + {"origin": [14.5, 29.5, 15], "size": [3, 3, 3], "uv": [0, 54]} + ] + }, + { + "name": "small_arm_right_1", + "parent": "chest", + "pivot": [-6, 31, 16.5], + "rotation": [25.5, -57, -45.5], + "cubes": [ + {"origin": [-14.5, 29.5, 15], "size": [10, 3, 3], "inflate": 0.02, "uv": [101, 48], "mirror": true} + ] + }, + { + "name": "small_arm_right_2", + "parent": "small_arm_right_1", + "pivot": [-14.5, 31, 18], + "rotation": [0, -27.5, 0], + "cubes": [ + {"origin": [-17.5, 29.5, 15], "size": [3, 3, 3], "uv": [0, 54], "mirror": true} + ] + }, + { + "name": "leg_left_1", + "parent": "root", + "pivot": [3.75, 16.5, 16.5], + "rotation": [-25, 17, -25], + "cubes": [ + {"origin": [1.25, 5.5, 15], "size": [4, 12, 4], "inflate": 0.02, "uv": [54, 80]} + ] + }, + { + "name": "leg_left_2", + "parent": "leg_left_1", + "pivot": [3.75, 5.5, 15], + "rotation": [80, 0, 0], + "cubes": [ + {"origin": [1.25, -8.5, 15], "size": [4, 14, 4], "uv": [0, 0]} + ] + }, + { + "name": "foot_left", + "parent": "leg_left_2", + "pivot": [3.75, -8.5, 16], + "rotation": [-60, 20.5, 14], + "cubes": [ + {"origin": [1.25, -10.5, 12], "size": [4, 2, 4], "uv": [84, 16]} + ] + }, + { + "name": "leg_right_1", + "parent": "root", + "pivot": [-3.75, 16.5, 16.5], + "rotation": [-25, -17, 25], + "cubes": [ + {"origin": [-5.25, 5.5, 15], "size": [4, 12, 4], "inflate": 0.02, "uv": [54, 80], "mirror": true} + ] + }, + { + "name": "leg_right_2", + "parent": "leg_right_1", + "pivot": [-3.75, 5.5, 15], + "rotation": [80, 0, 0], + "cubes": [ + {"origin": [-5.25, -8.5, 15], "size": [4, 14, 4], "uv": [0, 0], "mirror": true} + ] + }, + { + "name": "foot_right", + "parent": "leg_right_2", + "pivot": [-3.75, -8.5, 16], + "rotation": [-60, -20.5, -14], + "cubes": [ + {"origin": [-5.25, -10.5, 12], "size": [4, 2, 4], "uv": [84, 16], "mirror": true} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/hamsters/lang/en_us.json b/src/main/resources/assets/hamsters/lang/en_us.json index 240288a..b48bd04 100644 --- a/src/main/resources/assets/hamsters/lang/en_us.json +++ b/src/main/resources/assets/hamsters/lang/en_us.json @@ -13,9 +13,74 @@ "block.hamsters.tunnel": "Tunnel", "block.hamsters.hamster_wheel": "Hamster Wheel", - "block.hamsters.blue_hamster_bowl": "Blue Hamster Bowl", - "block.hamsters.blue_hamster_bottle": "Blue Hamster Bottle", - "item.hamsters.hamster_ball": "Hamster Ball", + "block.hamsters.cage_panel": "Cage Panel", + "block.hamsters.red_cage_panel": "Red Cage Panel", + "block.hamsters.orange_cage_panel": "Orange Cage Panel", + "block.hamsters.yellow_cage_panel": "Yellow Cage Panel", + "block.hamsters.lime_cage_panel": "Lime Cage Panel", + "block.hamsters.green_cage_panel": "Green Cage Panel", + "block.hamsters.cyan_cage_panel": "Cyan Cage Panel", + "block.hamsters.blue_cage_panel": "Blue Cage Panel", + "block.hamsters.light_blue_cage_panel": "Light Blue Cage Panel", + "block.hamsters.pink_cage_panel": "Pink Cage Panel", + "block.hamsters.magenta_cage_panel": "Magenta Cage Panel", + "block.hamsters.purple_cage_panel": "Purple Cage Panel", + "block.hamsters.white_cage_panel": "White Cage Panel", + "block.hamsters.light_gray_cage_panel": "Light Gray Cage Panel", + "block.hamsters.gray_cage_panel": "Gray Cage Panel", + "block.hamsters.black_cage_panel": "Black Cage Panel", + "block.hamsters.brown_cage_panel": "Brown Cage Panel", + + "item.hamsters.red_hamster_ball": "Red Hamster Ball", + "item.hamsters.orange_hamster_ball": "Orange Hamster Ball", + "item.hamsters.yellow_hamster_ball": "Yellow Hamster Ball", + "item.hamsters.lime_hamster_ball": "Lime Hamster Ball", + "item.hamsters.green_hamster_ball": "Green Hamster Ball", + "item.hamsters.cyan_hamster_ball": "Cyan Hamster Ball", + "item.hamsters.blue_hamster_ball": "Blue Hamster Ball", + "item.hamsters.light_blue_hamster_ball": "Light Blue Hamster Ball", + "item.hamsters.pink_hamster_ball": "Pink Hamster Ball", + "item.hamsters.magenta_hamster_ball": "Magenta Hamster Ball", + "item.hamsters.purple_hamster_ball": "Purple Hamster Ball", + "item.hamsters.white_hamster_ball": "White Hamster Ball", + "item.hamsters.light_gray_hamster_ball": "Light Gray Hamster Ball", + "item.hamsters.gray_hamster_ball": "Gray Hamster Ball", + "item.hamsters.black_hamster_ball": "Black Hamster Ball", + "item.hamsters.brown_hamster_ball": "Brown Hamster Ball", + + "block.hamsters.red_hamster_bowl": "Red Hamster Bowl", + "block.hamsters.orange_hamster_bowl": "Orange Hamster Bowl", + "block.hamsters.yellow_hamster_bowl": "Yellow Hamster Bowl", + "block.hamsters.lime_hamster_bowl": "Lime Hamster Bowl", + "block.hamsters.green_hamster_bowl": "Green Hamster Bowl", + "block.hamsters.cyan_hamster_bowl": "Cyan Hamster Bowl", + "block.hamsters.blue_hamster_bowl": "Blue Hamster Bowl", + "block.hamsters.light_blue_hamster_bowl": "Light Blue Hamster Bowl", + "block.hamsters.pink_hamster_bowl": "Pink Hamster Bowl", + "block.hamsters.magenta_hamster_bowl": "Magenta Hamster Bowl", + "block.hamsters.purple_hamster_bowl": "Purple Hamster Bowl", + "block.hamsters.white_hamster_bowl": "White Hamster Bowl", + "block.hamsters.light_gray_hamster_bowl": "Light Gray Hamster Bowl", + "block.hamsters.gray_hamster_bowl": "Gray Hamster Bowl", + "block.hamsters.black_hamster_bowl": "Black Hamster Bowl", + "block.hamsters.brown_hamster_bowl": "Brown Hamster Bowl", + + "block.hamsters.red_hamster_bottle": "Red Hamster Bottle", + "block.hamsters.orange_hamster_bottle": "Orange Hamster Bottle", + "block.hamsters.yellow_hamster_bottle": "Yellow Hamster Bottle", + "block.hamsters.lime_hamster_bottle": "Lime Hamster Bottle", + "block.hamsters.green_hamster_bottle": "Green Hamster Bottle", + "block.hamsters.cyan_hamster_bottle": "Cyan Hamster Bottle", + "block.hamsters.blue_hamster_bottle": "Blue Hamster Bottle", + "block.hamsters.light_blue_hamster_bottle": "Light Blue Hamster Bottle", + "block.hamsters.pink_hamster_bottle": "Pink Hamster Bottle", + "block.hamsters.magenta_hamster_bottle": "Magenta Hamster Bottle", + "block.hamsters.purple_hamster_bottle": "Purple Hamster Bottle", + "block.hamsters.white_hamster_bottle": "White Hamster Bottle", + "block.hamsters.light_gray_hamster_bottle": "Light Gray Hamster Bottle", + "block.hamsters.gray_hamster_bottle": "Gray Hamster Bottle", + "block.hamsters.black_hamster_bottle": "Black Hamster Bottle", + "block.hamsters.brown_hamster_bottle": "Brown Hamster Bottle", "hamsters.subtitles.hamster.ambient": "Hamster squeaks", "hamsters.subtitles.hamster.hurt": "Hamster hurts", diff --git a/src/main/resources/assets/hamsters/models/block/bottle/black.json b/src/main/resources/assets/hamsters/models/block/bottle/black.json new file mode 100644 index 0000000..7d7b1f8 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/bottle/black.json @@ -0,0 +1,6 @@ +{ + "parent": "hamsters:block/template/bottle", + "textures": { + "all": "hamsters:block/bottle/black" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/bottle/blue.json b/src/main/resources/assets/hamsters/models/block/bottle/blue.json index a6035a8..7922f47 100644 --- a/src/main/resources/assets/hamsters/models/block/bottle/blue.json +++ b/src/main/resources/assets/hamsters/models/block/bottle/blue.json @@ -1,6 +1,6 @@ { - "parent": "hamsters:block/template/bottle", - "textures": { - "bowl": "hamsters:block/bottle/blue" - } -} \ No newline at end of file + "parent": "hamsters:block/template/bottle", + "textures": { + "all": "hamsters:block/bottle/blue" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/bottle/brown.json b/src/main/resources/assets/hamsters/models/block/bottle/brown.json new file mode 100644 index 0000000..a1b324d --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/bottle/brown.json @@ -0,0 +1,6 @@ +{ + "parent": "hamsters:block/template/bottle", + "textures": { + "all": "hamsters:block/bottle/brown" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/bottle/cyan.json b/src/main/resources/assets/hamsters/models/block/bottle/cyan.json new file mode 100644 index 0000000..c645cc3 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/bottle/cyan.json @@ -0,0 +1,6 @@ +{ + "parent": "hamsters:block/template/bottle", + "textures": { + "all": "hamsters:block/bottle/cyan" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/bottle/gray.json b/src/main/resources/assets/hamsters/models/block/bottle/gray.json new file mode 100644 index 0000000..2d2d337 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/bottle/gray.json @@ -0,0 +1,6 @@ +{ + "parent": "hamsters:block/template/bottle", + "textures": { + "all": "hamsters:block/bottle/gray" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/bottle/green.json b/src/main/resources/assets/hamsters/models/block/bottle/green.json new file mode 100644 index 0000000..831dd9b --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/bottle/green.json @@ -0,0 +1,6 @@ +{ + "parent": "hamsters:block/template/bottle", + "textures": { + "all": "hamsters:block/bottle/green" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/bottle/light_blue.json b/src/main/resources/assets/hamsters/models/block/bottle/light_blue.json new file mode 100644 index 0000000..5c3ec89 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/bottle/light_blue.json @@ -0,0 +1,6 @@ +{ + "parent": "hamsters:block/template/bottle", + "textures": { + "all": "hamsters:block/bottle/light_blue" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/bottle/light_gray.json b/src/main/resources/assets/hamsters/models/block/bottle/light_gray.json new file mode 100644 index 0000000..06eb133 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/bottle/light_gray.json @@ -0,0 +1,6 @@ +{ + "parent": "hamsters:block/template/bottle", + "textures": { + "all": "hamsters:block/bottle/light_gray" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/bottle/lime.json b/src/main/resources/assets/hamsters/models/block/bottle/lime.json new file mode 100644 index 0000000..b46e408 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/bottle/lime.json @@ -0,0 +1,6 @@ +{ + "parent": "hamsters:block/template/bottle", + "textures": { + "all": "hamsters:block/bottle/lime" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/bottle/magenta.json b/src/main/resources/assets/hamsters/models/block/bottle/magenta.json new file mode 100644 index 0000000..b4519e2 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/bottle/magenta.json @@ -0,0 +1,6 @@ +{ + "parent": "hamsters:block/template/bottle", + "textures": { + "all": "hamsters:block/bottle/magenta" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/bottle/orange.json b/src/main/resources/assets/hamsters/models/block/bottle/orange.json new file mode 100644 index 0000000..f5691ab --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/bottle/orange.json @@ -0,0 +1,6 @@ +{ + "parent": "hamsters:block/template/bottle", + "textures": { + "all": "hamsters:block/bottle/orange" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/bottle/pink.json b/src/main/resources/assets/hamsters/models/block/bottle/pink.json new file mode 100644 index 0000000..ad147e9 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/bottle/pink.json @@ -0,0 +1,6 @@ +{ + "parent": "hamsters:block/template/bottle", + "textures": { + "all": "hamsters:block/bottle/pink" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/bottle/purple.json b/src/main/resources/assets/hamsters/models/block/bottle/purple.json new file mode 100644 index 0000000..7b0e0c2 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/bottle/purple.json @@ -0,0 +1,6 @@ +{ + "parent": "hamsters:block/template/bottle", + "textures": { + "all": "hamsters:block/bottle/purple" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/bottle/red.json b/src/main/resources/assets/hamsters/models/block/bottle/red.json new file mode 100644 index 0000000..6ef7da5 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/bottle/red.json @@ -0,0 +1,6 @@ +{ + "parent": "hamsters:block/template/bottle", + "textures": { + "all": "hamsters:block/bottle/red" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/bottle/white.json b/src/main/resources/assets/hamsters/models/block/bottle/white.json new file mode 100644 index 0000000..cc9a615 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/bottle/white.json @@ -0,0 +1,6 @@ +{ + "parent": "hamsters:block/template/bottle", + "textures": { + "all": "hamsters:block/bottle/white" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/hamsters/models/block/bottle/wno.py b/src/main/resources/assets/hamsters/models/block/bottle/wno.py new file mode 100644 index 0000000..ab70171 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/bottle/wno.py @@ -0,0 +1,108 @@ +import json +import os + + +################################################################# + +def ensure_outputs_exist(): + for file in os.walk(_cwd + f"\\{input_path}\\"): + try: + os.mkdir(file[0].replace(input_path, output_path)) + except: + continue + +# these 2 are for looping/replacing through every single key and value in a dict +def dict_replace_value(d, old, new): + x = {} + for k, v in d.items(): + if isinstance(v, dict): + v = dict_replace_value(v, old, new) + elif isinstance(v, list): + v = list_replace_value(v, old, new) + elif isinstance(v, str): + if not old is None and not new is None: + v = v.replace(old, new) + v = v.replace("{namespace}",f"{namespace}") + x[k] = v + return x + +def list_replace_value(l, old, new): + x = [] + for e in l: + if isinstance(e, list): + e = list_replace_value(e, old, new) + elif isinstance(e, dict): + e = dict_replace_value(e, old, new) + elif isinstance(e, str): + if not old is None and not new is None: + e = e.replace(old, new) + e = e.replace("{namespace}",f"{namespace}") + x.append(e) + return x + +################################################################# + + +colors = [ + "orange", + "magenta", + "light_blue", + "yellow", + "lime", + "pink", + "gray", + "light_gray", + "cyan", + "purple", + "blue", + "brown", + "green", + "red", + "black" +] + +woods = [ + "spruce", + "birch", + "jungle", + "acacia", + "dark_oak", + "mangrove", + "crimson", + "warped", + "bamboo", + "cherry" +] + +namespace = "another_furniture" + +cwd = os.getcwd() + + +process_specific = input("process specific file (or enter to skip): ") +if process_specific == "oak": + typea = "oak" + files_to_process = [f for f in os.listdir(cwd) if os.path.isfile(os.path.join(cwd, f)) and f.startswith("oak")] +elif process_specific != "": + files_to_process = [process_specific + ".json"] +else: + typea = "white" + files_to_process = [f for f in os.listdir(cwd) if os.path.isfile(os.path.join(cwd, f)) and f.startswith("white")] + +for file in files_to_process: + should_process = input("should process file " + file + "? ") + if should_process == "" or should_process.lower() == "y" or should_process.lower() == "yes": + f = open(file, "r") + data = json.loads(f.read()) + if "white" in file: + for color in colors: + new_data = dict_replace_value(data, "white", color) + with open(file.replace("white", color), "w+") as f: + f.write(json.dumps(new_data, indent=4) + "\n") + elif "oak" in file: + for wood in woods: + new_data = dict_replace_value(data, "oak", wood) + with open(file.replace("oak", wood), "w+") as f: + f.write(json.dumps(new_data, indent=4) + "\n") + + diff --git a/src/main/resources/assets/hamsters/models/block/bottle/yellow.json b/src/main/resources/assets/hamsters/models/block/bottle/yellow.json new file mode 100644 index 0000000..70d1dae --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/bottle/yellow.json @@ -0,0 +1,6 @@ +{ + "parent": "hamsters:block/template/bottle", + "textures": { + "all": "hamsters:block/bottle/yellow" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/bowl/black.json b/src/main/resources/assets/hamsters/models/block/bowl/black.json new file mode 100644 index 0000000..31485e1 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/bowl/black.json @@ -0,0 +1,6 @@ +{ + "parent": "hamsters:block/template/bowl", + "textures": { + "all": "hamsters:block/bowl/black" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/bowl/blue.json b/src/main/resources/assets/hamsters/models/block/bowl/blue.json index 35d8f3e..60c0e8f 100644 --- a/src/main/resources/assets/hamsters/models/block/bowl/blue.json +++ b/src/main/resources/assets/hamsters/models/block/bowl/blue.json @@ -1,6 +1,6 @@ { - "parent": "hamsters:block/template/bowl", - "textures": { - "bowl": "hamsters:block/bowl/blue" - } -} \ No newline at end of file + "parent": "hamsters:block/template/bowl", + "textures": { + "all": "hamsters:block/bowl/blue" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/bowl/brown.json b/src/main/resources/assets/hamsters/models/block/bowl/brown.json new file mode 100644 index 0000000..750ac6e --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/bowl/brown.json @@ -0,0 +1,6 @@ +{ + "parent": "hamsters:block/template/bowl", + "textures": { + "all": "hamsters:block/bowl/brown" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/bowl/cyan.json b/src/main/resources/assets/hamsters/models/block/bowl/cyan.json new file mode 100644 index 0000000..fa0b84f --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/bowl/cyan.json @@ -0,0 +1,6 @@ +{ + "parent": "hamsters:block/template/bowl", + "textures": { + "all": "hamsters:block/bowl/cyan" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/bowl/gray.json b/src/main/resources/assets/hamsters/models/block/bowl/gray.json new file mode 100644 index 0000000..8a9c364 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/bowl/gray.json @@ -0,0 +1,6 @@ +{ + "parent": "hamsters:block/template/bowl", + "textures": { + "all": "hamsters:block/bowl/gray" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/bowl/green.json b/src/main/resources/assets/hamsters/models/block/bowl/green.json new file mode 100644 index 0000000..5513e3c --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/bowl/green.json @@ -0,0 +1,6 @@ +{ + "parent": "hamsters:block/template/bowl", + "textures": { + "all": "hamsters:block/bowl/green" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/bowl/light_blue.json b/src/main/resources/assets/hamsters/models/block/bowl/light_blue.json new file mode 100644 index 0000000..2be9a2f --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/bowl/light_blue.json @@ -0,0 +1,6 @@ +{ + "parent": "hamsters:block/template/bowl", + "textures": { + "all": "hamsters:block/bowl/light_blue" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/bowl/light_gray.json b/src/main/resources/assets/hamsters/models/block/bowl/light_gray.json new file mode 100644 index 0000000..66122a9 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/bowl/light_gray.json @@ -0,0 +1,6 @@ +{ + "parent": "hamsters:block/template/bowl", + "textures": { + "all": "hamsters:block/bowl/light_gray" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/bowl/lime.json b/src/main/resources/assets/hamsters/models/block/bowl/lime.json new file mode 100644 index 0000000..4281cc6 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/bowl/lime.json @@ -0,0 +1,6 @@ +{ + "parent": "hamsters:block/template/bowl", + "textures": { + "all": "hamsters:block/bowl/lime" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/bowl/magenta.json b/src/main/resources/assets/hamsters/models/block/bowl/magenta.json new file mode 100644 index 0000000..392e803 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/bowl/magenta.json @@ -0,0 +1,6 @@ +{ + "parent": "hamsters:block/template/bowl", + "textures": { + "all": "hamsters:block/bowl/magenta" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/bowl/orange.json b/src/main/resources/assets/hamsters/models/block/bowl/orange.json new file mode 100644 index 0000000..5ad46c9 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/bowl/orange.json @@ -0,0 +1,6 @@ +{ + "parent": "hamsters:block/template/bowl", + "textures": { + "all": "hamsters:block/bowl/orange" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/bowl/pink.json b/src/main/resources/assets/hamsters/models/block/bowl/pink.json new file mode 100644 index 0000000..c0b04b5 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/bowl/pink.json @@ -0,0 +1,6 @@ +{ + "parent": "hamsters:block/template/bowl", + "textures": { + "all": "hamsters:block/bowl/pink" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/bowl/purple.json b/src/main/resources/assets/hamsters/models/block/bowl/purple.json new file mode 100644 index 0000000..7d87e7f --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/bowl/purple.json @@ -0,0 +1,6 @@ +{ + "parent": "hamsters:block/template/bowl", + "textures": { + "all": "hamsters:block/bowl/purple" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/bowl/red.json b/src/main/resources/assets/hamsters/models/block/bowl/red.json new file mode 100644 index 0000000..5d2c591 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/bowl/red.json @@ -0,0 +1,6 @@ +{ + "parent": "hamsters:block/template/bowl", + "textures": { + "all": "hamsters:block/bowl/red" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/bowl/white.json b/src/main/resources/assets/hamsters/models/block/bowl/white.json new file mode 100644 index 0000000..d9b4ff2 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/bowl/white.json @@ -0,0 +1,6 @@ +{ + "parent": "hamsters:block/template/bowl", + "textures": { + "all": "hamsters:block/bowl/white" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/hamsters/models/block/bowl/wno.py b/src/main/resources/assets/hamsters/models/block/bowl/wno.py new file mode 100644 index 0000000..ab70171 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/bowl/wno.py @@ -0,0 +1,108 @@ +import json +import os + + +################################################################# + +def ensure_outputs_exist(): + for file in os.walk(_cwd + f"\\{input_path}\\"): + try: + os.mkdir(file[0].replace(input_path, output_path)) + except: + continue + +# these 2 are for looping/replacing through every single key and value in a dict +def dict_replace_value(d, old, new): + x = {} + for k, v in d.items(): + if isinstance(v, dict): + v = dict_replace_value(v, old, new) + elif isinstance(v, list): + v = list_replace_value(v, old, new) + elif isinstance(v, str): + if not old is None and not new is None: + v = v.replace(old, new) + v = v.replace("{namespace}",f"{namespace}") + x[k] = v + return x + +def list_replace_value(l, old, new): + x = [] + for e in l: + if isinstance(e, list): + e = list_replace_value(e, old, new) + elif isinstance(e, dict): + e = dict_replace_value(e, old, new) + elif isinstance(e, str): + if not old is None and not new is None: + e = e.replace(old, new) + e = e.replace("{namespace}",f"{namespace}") + x.append(e) + return x + +################################################################# + + +colors = [ + "orange", + "magenta", + "light_blue", + "yellow", + "lime", + "pink", + "gray", + "light_gray", + "cyan", + "purple", + "blue", + "brown", + "green", + "red", + "black" +] + +woods = [ + "spruce", + "birch", + "jungle", + "acacia", + "dark_oak", + "mangrove", + "crimson", + "warped", + "bamboo", + "cherry" +] + +namespace = "another_furniture" + +cwd = os.getcwd() + + +process_specific = input("process specific file (or enter to skip): ") +if process_specific == "oak": + typea = "oak" + files_to_process = [f for f in os.listdir(cwd) if os.path.isfile(os.path.join(cwd, f)) and f.startswith("oak")] +elif process_specific != "": + files_to_process = [process_specific + ".json"] +else: + typea = "white" + files_to_process = [f for f in os.listdir(cwd) if os.path.isfile(os.path.join(cwd, f)) and f.startswith("white")] + +for file in files_to_process: + should_process = input("should process file " + file + "? ") + if should_process == "" or should_process.lower() == "y" or should_process.lower() == "yes": + f = open(file, "r") + data = json.loads(f.read()) + if "white" in file: + for color in colors: + new_data = dict_replace_value(data, "white", color) + with open(file.replace("white", color), "w+") as f: + f.write(json.dumps(new_data, indent=4) + "\n") + elif "oak" in file: + for wood in woods: + new_data = dict_replace_value(data, "oak", wood) + with open(file.replace("oak", wood), "w+") as f: + f.write(json.dumps(new_data, indent=4) + "\n") + + diff --git a/src/main/resources/assets/hamsters/models/block/bowl/yellow.json b/src/main/resources/assets/hamsters/models/block/bowl/yellow.json new file mode 100644 index 0000000..c1b41e0 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/bowl/yellow.json @@ -0,0 +1,6 @@ +{ + "parent": "hamsters:block/template/bowl", + "textures": { + "all": "hamsters:block/bowl/yellow" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/black.json b/src/main/resources/assets/hamsters/models/block/cage_panel/black.json new file mode 100644 index 0000000..2be438a --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/black.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/black", + "particle": "hamsters:block/cage/black_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/black_bottom.json b/src/main/resources/assets/hamsters/models/block/cage_panel/black_bottom.json new file mode 100644 index 0000000..239f4ee --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/black_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/black_bottom", + "particle": "hamsters:block/cage/black_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/black_middle.json b/src/main/resources/assets/hamsters/models/block/cage_panel/black_middle.json new file mode 100644 index 0000000..d81931c --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/black_middle.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/black_middle", + "particle": "hamsters:block/cage/black_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/black_top.json b/src/main/resources/assets/hamsters/models/block/cage_panel/black_top.json new file mode 100644 index 0000000..054bac3 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/black_top.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/black_top", + "particle": "hamsters:block/cage/black_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/blue.json b/src/main/resources/assets/hamsters/models/block/cage_panel/blue.json new file mode 100644 index 0000000..7c82bd4 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/blue.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/blue", + "particle": "hamsters:block/cage/blue_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/blue_bottom.json b/src/main/resources/assets/hamsters/models/block/cage_panel/blue_bottom.json new file mode 100644 index 0000000..f60c398 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/blue_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/blue_bottom", + "particle": "hamsters:block/cage/blue_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/blue_middle.json b/src/main/resources/assets/hamsters/models/block/cage_panel/blue_middle.json new file mode 100644 index 0000000..50a9336 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/blue_middle.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/blue_middle", + "particle": "hamsters:block/cage/blue_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/blue_top.json b/src/main/resources/assets/hamsters/models/block/cage_panel/blue_top.json new file mode 100644 index 0000000..031ff92 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/blue_top.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/blue_top", + "particle": "hamsters:block/cage/blue_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/brown.json b/src/main/resources/assets/hamsters/models/block/cage_panel/brown.json new file mode 100644 index 0000000..d3e93fd --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/brown.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/brown", + "particle": "hamsters:block/cage/brown_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/brown_bottom.json b/src/main/resources/assets/hamsters/models/block/cage_panel/brown_bottom.json new file mode 100644 index 0000000..26cdd82 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/brown_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/brown_bottom", + "particle": "hamsters:block/cage/brown_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/brown_middle.json b/src/main/resources/assets/hamsters/models/block/cage_panel/brown_middle.json new file mode 100644 index 0000000..8d76ee3 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/brown_middle.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/brown_middle", + "particle": "hamsters:block/cage/brown_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/brown_top.json b/src/main/resources/assets/hamsters/models/block/cage_panel/brown_top.json new file mode 100644 index 0000000..604d617 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/brown_top.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/brown_top", + "particle": "hamsters:block/cage/brown_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/cage.json b/src/main/resources/assets/hamsters/models/block/cage_panel/cage.json new file mode 100644 index 0000000..4b6c8bd --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/cage.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/cage", + "particle": "hamsters:block/cage/cage_middle" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/cage_bottom.json b/src/main/resources/assets/hamsters/models/block/cage_panel/cage_bottom.json new file mode 100644 index 0000000..173ee4d --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/cage_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/cage_bottom", + "particle": "hamsters:block/cage/cage_middle" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/cage_middle.json b/src/main/resources/assets/hamsters/models/block/cage_panel/cage_middle.json new file mode 100644 index 0000000..abf80f6 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/cage_middle.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/cage_middle", + "particle": "hamsters:block/cage/cage_middle" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/cage_top.json b/src/main/resources/assets/hamsters/models/block/cage_panel/cage_top.json new file mode 100644 index 0000000..3d8e325 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/cage_top.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/cage_top", + "particle": "hamsters:block/cage/cage_middle" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/cyan.json b/src/main/resources/assets/hamsters/models/block/cage_panel/cyan.json new file mode 100644 index 0000000..2f72297 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/cyan.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/cyan", + "particle": "hamsters:block/cage/cyan_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/cyan_bottom.json b/src/main/resources/assets/hamsters/models/block/cage_panel/cyan_bottom.json new file mode 100644 index 0000000..f4de76f --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/cyan_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/cyan_bottom", + "particle": "hamsters:block/cage/cyan_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/cyan_middle.json b/src/main/resources/assets/hamsters/models/block/cage_panel/cyan_middle.json new file mode 100644 index 0000000..c23df64 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/cyan_middle.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/cyan_middle", + "particle": "hamsters:block/cage/cyan_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/cyan_top.json b/src/main/resources/assets/hamsters/models/block/cage_panel/cyan_top.json new file mode 100644 index 0000000..c354131 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/cyan_top.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/cyan_top", + "particle": "hamsters:block/cage/cyan_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/gray.json b/src/main/resources/assets/hamsters/models/block/cage_panel/gray.json new file mode 100644 index 0000000..abfa03c --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/gray.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/gray", + "particle": "hamsters:block/cage/gray_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/gray_bottom.json b/src/main/resources/assets/hamsters/models/block/cage_panel/gray_bottom.json new file mode 100644 index 0000000..d314899 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/gray_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/gray_bottom", + "particle": "hamsters:block/cage/gray_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/gray_middle.json b/src/main/resources/assets/hamsters/models/block/cage_panel/gray_middle.json new file mode 100644 index 0000000..4ab1fb4 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/gray_middle.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/gray_middle", + "particle": "hamsters:block/cage/gray_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/gray_top.json b/src/main/resources/assets/hamsters/models/block/cage_panel/gray_top.json new file mode 100644 index 0000000..f3cfb0b --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/gray_top.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/gray_top", + "particle": "hamsters:block/cage/gray_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/green.json b/src/main/resources/assets/hamsters/models/block/cage_panel/green.json new file mode 100644 index 0000000..564f5ec --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/green.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/green", + "particle": "hamsters:block/cage/green_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/green_bottom.json b/src/main/resources/assets/hamsters/models/block/cage_panel/green_bottom.json new file mode 100644 index 0000000..1ef8843 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/green_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/green_bottom", + "particle": "hamsters:block/cage/green_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/green_middle.json b/src/main/resources/assets/hamsters/models/block/cage_panel/green_middle.json new file mode 100644 index 0000000..36db8c8 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/green_middle.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/green_middle", + "particle": "hamsters:block/cage/green_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/green_top.json b/src/main/resources/assets/hamsters/models/block/cage_panel/green_top.json new file mode 100644 index 0000000..1732554 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/green_top.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/green_top", + "particle": "hamsters:block/cage/green_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/light_blue.json b/src/main/resources/assets/hamsters/models/block/cage_panel/light_blue.json new file mode 100644 index 0000000..4e1ceb1 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/light_blue.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/light_blue", + "particle": "hamsters:block/cage/light_blue_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/light_blue_bottom.json b/src/main/resources/assets/hamsters/models/block/cage_panel/light_blue_bottom.json new file mode 100644 index 0000000..20392cf --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/light_blue_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/light_blue_bottom", + "particle": "hamsters:block/cage/light_blue_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/light_blue_middle.json b/src/main/resources/assets/hamsters/models/block/cage_panel/light_blue_middle.json new file mode 100644 index 0000000..2544849 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/light_blue_middle.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/light_blue_middle", + "particle": "hamsters:block/cage/light_blue_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/light_blue_top.json b/src/main/resources/assets/hamsters/models/block/cage_panel/light_blue_top.json new file mode 100644 index 0000000..9696ec9 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/light_blue_top.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/light_blue_top", + "particle": "hamsters:block/cage/light_blue_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/light_gray.json b/src/main/resources/assets/hamsters/models/block/cage_panel/light_gray.json new file mode 100644 index 0000000..08289c1 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/light_gray.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/light_gray", + "particle": "hamsters:block/cage/light_gray_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/light_gray_bottom.json b/src/main/resources/assets/hamsters/models/block/cage_panel/light_gray_bottom.json new file mode 100644 index 0000000..fb8fb82 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/light_gray_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/light_gray_bottom", + "particle": "hamsters:block/cage/light_gray_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/light_gray_middle.json b/src/main/resources/assets/hamsters/models/block/cage_panel/light_gray_middle.json new file mode 100644 index 0000000..18ba650 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/light_gray_middle.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/light_gray_middle", + "particle": "hamsters:block/cage/light_gray_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/light_gray_top.json b/src/main/resources/assets/hamsters/models/block/cage_panel/light_gray_top.json new file mode 100644 index 0000000..43b134f --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/light_gray_top.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/light_gray_top", + "particle": "hamsters:block/cage/light_gray_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/lime.json b/src/main/resources/assets/hamsters/models/block/cage_panel/lime.json new file mode 100644 index 0000000..57763b0 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/lime.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/lime", + "particle": "hamsters:block/cage/lime_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/lime_bottom.json b/src/main/resources/assets/hamsters/models/block/cage_panel/lime_bottom.json new file mode 100644 index 0000000..35f8eeb --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/lime_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/lime_bottom", + "particle": "hamsters:block/cage/lime_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/lime_middle.json b/src/main/resources/assets/hamsters/models/block/cage_panel/lime_middle.json new file mode 100644 index 0000000..052feba --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/lime_middle.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/lime_middle", + "particle": "hamsters:block/cage/lime_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/lime_top.json b/src/main/resources/assets/hamsters/models/block/cage_panel/lime_top.json new file mode 100644 index 0000000..11e4925 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/lime_top.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/lime_top", + "particle": "hamsters:block/cage/lime_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/magenta.json b/src/main/resources/assets/hamsters/models/block/cage_panel/magenta.json new file mode 100644 index 0000000..5bf34eb --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/magenta.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/magenta", + "particle": "hamsters:block/cage/magenta_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/magenta_bottom.json b/src/main/resources/assets/hamsters/models/block/cage_panel/magenta_bottom.json new file mode 100644 index 0000000..7b0c87d --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/magenta_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/magenta_bottom", + "particle": "hamsters:block/cage/magenta_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/magenta_middle.json b/src/main/resources/assets/hamsters/models/block/cage_panel/magenta_middle.json new file mode 100644 index 0000000..5aa6adf --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/magenta_middle.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/magenta_middle", + "particle": "hamsters:block/cage/magenta_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/magenta_top.json b/src/main/resources/assets/hamsters/models/block/cage_panel/magenta_top.json new file mode 100644 index 0000000..d6a7a6a --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/magenta_top.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/magenta_top", + "particle": "hamsters:block/cage/magenta_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/orange.json b/src/main/resources/assets/hamsters/models/block/cage_panel/orange.json new file mode 100644 index 0000000..ce3813f --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/orange.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/orange", + "particle": "hamsters:block/cage/orange_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/orange_bottom.json b/src/main/resources/assets/hamsters/models/block/cage_panel/orange_bottom.json new file mode 100644 index 0000000..067063e --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/orange_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/orange_bottom", + "particle": "hamsters:block/cage/orange_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/orange_middle.json b/src/main/resources/assets/hamsters/models/block/cage_panel/orange_middle.json new file mode 100644 index 0000000..8511f5a --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/orange_middle.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/orange_middle", + "particle": "hamsters:block/cage/orange_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/orange_top.json b/src/main/resources/assets/hamsters/models/block/cage_panel/orange_top.json new file mode 100644 index 0000000..7b0e16d --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/orange_top.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/orange_top", + "particle": "hamsters:block/cage/orange_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/pink.json b/src/main/resources/assets/hamsters/models/block/cage_panel/pink.json new file mode 100644 index 0000000..0d083d3 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/pink.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/pink", + "particle": "hamsters:block/cage/pink_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/pink_bottom.json b/src/main/resources/assets/hamsters/models/block/cage_panel/pink_bottom.json new file mode 100644 index 0000000..b333a79 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/pink_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/pink_bottom", + "particle": "hamsters:block/cage/pink_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/pink_middle.json b/src/main/resources/assets/hamsters/models/block/cage_panel/pink_middle.json new file mode 100644 index 0000000..a1cbc6b --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/pink_middle.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/pink_middle", + "particle": "hamsters:block/cage/pink_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/pink_top.json b/src/main/resources/assets/hamsters/models/block/cage_panel/pink_top.json new file mode 100644 index 0000000..5d77005 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/pink_top.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/pink_top", + "particle": "hamsters:block/cage/pink_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/purple.json b/src/main/resources/assets/hamsters/models/block/cage_panel/purple.json new file mode 100644 index 0000000..54ff4aa --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/purple.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/purple", + "particle": "hamsters:block/cage/purple_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/purple_bottom.json b/src/main/resources/assets/hamsters/models/block/cage_panel/purple_bottom.json new file mode 100644 index 0000000..9a6e515 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/purple_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/purple_bottom", + "particle": "hamsters:block/cage/purple_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/purple_middle.json b/src/main/resources/assets/hamsters/models/block/cage_panel/purple_middle.json new file mode 100644 index 0000000..ba0c677 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/purple_middle.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/purple_middle", + "particle": "hamsters:block/cage/purple_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/purple_top.json b/src/main/resources/assets/hamsters/models/block/cage_panel/purple_top.json new file mode 100644 index 0000000..79d4a4c --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/purple_top.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/purple_top", + "particle": "hamsters:block/cage/purple_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/red.json b/src/main/resources/assets/hamsters/models/block/cage_panel/red.json new file mode 100644 index 0000000..cf4750e --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/red.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/red", + "particle": "hamsters:block/cage/red_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/red_bottom.json b/src/main/resources/assets/hamsters/models/block/cage_panel/red_bottom.json new file mode 100644 index 0000000..f56ef0b --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/red_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/red_bottom", + "particle": "hamsters:block/cage/red_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/red_middle.json b/src/main/resources/assets/hamsters/models/block/cage_panel/red_middle.json new file mode 100644 index 0000000..5f95050 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/red_middle.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/red_middle", + "particle": "hamsters:block/cage/red_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/red_top.json b/src/main/resources/assets/hamsters/models/block/cage_panel/red_top.json new file mode 100644 index 0000000..6f70373 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/red_top.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/red_top", + "particle": "hamsters:block/cage/red_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/white.json b/src/main/resources/assets/hamsters/models/block/cage_panel/white.json new file mode 100644 index 0000000..8157b57 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/white.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/white", + "particle": "hamsters:block/cage/white_middle" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/white_bottom.json b/src/main/resources/assets/hamsters/models/block/cage_panel/white_bottom.json new file mode 100644 index 0000000..74f1791 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/white_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/white_bottom", + "particle": "hamsters:block/cage/white_middle" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/white_middle.json b/src/main/resources/assets/hamsters/models/block/cage_panel/white_middle.json new file mode 100644 index 0000000..e1334a6 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/white_middle.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/white_middle", + "particle": "hamsters:block/cage/white_middle" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/white_top.json b/src/main/resources/assets/hamsters/models/block/cage_panel/white_top.json new file mode 100644 index 0000000..e984634 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/white_top.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/white_top", + "particle": "hamsters:block/cage/white_middle" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/wno.py b/src/main/resources/assets/hamsters/models/block/cage_panel/wno.py new file mode 100644 index 0000000..ab70171 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/wno.py @@ -0,0 +1,108 @@ +import json +import os + + +################################################################# + +def ensure_outputs_exist(): + for file in os.walk(_cwd + f"\\{input_path}\\"): + try: + os.mkdir(file[0].replace(input_path, output_path)) + except: + continue + +# these 2 are for looping/replacing through every single key and value in a dict +def dict_replace_value(d, old, new): + x = {} + for k, v in d.items(): + if isinstance(v, dict): + v = dict_replace_value(v, old, new) + elif isinstance(v, list): + v = list_replace_value(v, old, new) + elif isinstance(v, str): + if not old is None and not new is None: + v = v.replace(old, new) + v = v.replace("{namespace}",f"{namespace}") + x[k] = v + return x + +def list_replace_value(l, old, new): + x = [] + for e in l: + if isinstance(e, list): + e = list_replace_value(e, old, new) + elif isinstance(e, dict): + e = dict_replace_value(e, old, new) + elif isinstance(e, str): + if not old is None and not new is None: + e = e.replace(old, new) + e = e.replace("{namespace}",f"{namespace}") + x.append(e) + return x + +################################################################# + + +colors = [ + "orange", + "magenta", + "light_blue", + "yellow", + "lime", + "pink", + "gray", + "light_gray", + "cyan", + "purple", + "blue", + "brown", + "green", + "red", + "black" +] + +woods = [ + "spruce", + "birch", + "jungle", + "acacia", + "dark_oak", + "mangrove", + "crimson", + "warped", + "bamboo", + "cherry" +] + +namespace = "another_furniture" + +cwd = os.getcwd() + + +process_specific = input("process specific file (or enter to skip): ") +if process_specific == "oak": + typea = "oak" + files_to_process = [f for f in os.listdir(cwd) if os.path.isfile(os.path.join(cwd, f)) and f.startswith("oak")] +elif process_specific != "": + files_to_process = [process_specific + ".json"] +else: + typea = "white" + files_to_process = [f for f in os.listdir(cwd) if os.path.isfile(os.path.join(cwd, f)) and f.startswith("white")] + +for file in files_to_process: + should_process = input("should process file " + file + "? ") + if should_process == "" or should_process.lower() == "y" or should_process.lower() == "yes": + f = open(file, "r") + data = json.loads(f.read()) + if "white" in file: + for color in colors: + new_data = dict_replace_value(data, "white", color) + with open(file.replace("white", color), "w+") as f: + f.write(json.dumps(new_data, indent=4) + "\n") + elif "oak" in file: + for wood in woods: + new_data = dict_replace_value(data, "oak", wood) + with open(file.replace("oak", wood), "w+") as f: + f.write(json.dumps(new_data, indent=4) + "\n") + + diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/yellow.json b/src/main/resources/assets/hamsters/models/block/cage_panel/yellow.json new file mode 100644 index 0000000..ae1a768 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/yellow.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/yellow", + "particle": "hamsters:block/cage/yellow_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/yellow_bottom.json b/src/main/resources/assets/hamsters/models/block/cage_panel/yellow_bottom.json new file mode 100644 index 0000000..59eed02 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/yellow_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/yellow_bottom", + "particle": "hamsters:block/cage/yellow_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/yellow_middle.json b/src/main/resources/assets/hamsters/models/block/cage_panel/yellow_middle.json new file mode 100644 index 0000000..b8c3969 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/yellow_middle.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/yellow_middle", + "particle": "hamsters:block/cage/yellow_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/cage_panel/yellow_top.json b/src/main/resources/assets/hamsters/models/block/cage_panel/yellow_top.json new file mode 100644 index 0000000..42c9b1b --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/cage_panel/yellow_top.json @@ -0,0 +1,7 @@ +{ + "parent": "hamsters:block/template/cage_panel", + "textures": { + "all": "hamsters:block/cage/yellow_top", + "particle": "hamsters:block/cage/yellow_middle" + } +} diff --git a/src/main/resources/assets/hamsters/models/block/template/bowl.json b/src/main/resources/assets/hamsters/models/block/template/bowl.json index a0e2645..1ad4b73 100644 --- a/src/main/resources/assets/hamsters/models/block/template/bowl.json +++ b/src/main/resources/assets/hamsters/models/block/template/bowl.json @@ -2,7 +2,7 @@ "credit": "Made with Blockbench", "texture_size": [32, 32], "textures": { - "bowl": "hamsters:block/bowl/blue" + "all": "hamsters:block/bowl/blue" }, "elements": [ { @@ -10,12 +10,12 @@ "to": [13, 3, 13], "rotation": {"angle": 0, "axis": "y", "origin": [8, 0, 8]}, "faces": { - "north": {"uv": [5, 0, 10, 1.5], "texture": "#bowl"}, - "east": {"uv": [5, 0, 10, 1.5], "texture": "#bowl"}, - "south": {"uv": [5, 0, 10, 1.5], "texture": "#bowl"}, - "west": {"uv": [5, 0, 10, 1.5], "texture": "#bowl"}, - "up": {"uv": [5, 5, 0, 0], "texture": "#bowl"}, - "down": {"uv": [5, 5, 0, 10], "texture": "#bowl"} + "north": {"uv": [5, 0, 10, 1.5], "texture": "#all"}, + "east": {"uv": [5, 0, 10, 1.5], "texture": "#all"}, + "south": {"uv": [5, 0, 10, 1.5], "texture": "#all"}, + "west": {"uv": [5, 0, 10, 1.5], "texture": "#all"}, + "up": {"uv": [5, 5, 0, 0], "texture": "#all"}, + "down": {"uv": [5, 5, 0, 10], "texture": "#all"} } }, { @@ -23,12 +23,12 @@ "to": [4, 3, 12], "rotation": {"angle": 0, "axis": "y", "origin": [16, 0, 8]}, "faces": { - "north": {"uv": [5.5, 0, 9.5, 1.5], "texture": "#bowl"}, - "east": {"uv": [5.5, 0, 9.5, 1.5], "texture": "#bowl"}, - "south": {"uv": [5.5, 0, 9.5, 1.5], "texture": "#bowl"}, - "west": {"uv": [5.5, 0, 9.5, 1.5], "texture": "#bowl"}, - "up": {"uv": [5, 5, 0, 0], "texture": "#bowl"}, - "down": {"uv": [5, 5, 0, 10], "texture": "#bowl"} + "north": {"uv": [5.5, 0, 9.5, 1.5], "texture": "#all"}, + "east": {"uv": [5.5, 0, 9.5, 1.5], "texture": "#all"}, + "south": {"uv": [5.5, 0, 9.5, 1.5], "texture": "#all"}, + "west": {"uv": [5.5, 0, 9.5, 1.5], "texture": "#all"}, + "up": {"uv": [5, 5, 0, 0], "texture": "#all"}, + "down": {"uv": [5, 5, 0, 10], "texture": "#all"} } } ], diff --git a/src/main/resources/assets/hamsters/models/block/template/cage_panel.json b/src/main/resources/assets/hamsters/models/block/template/cage_panel.json new file mode 100644 index 0000000..125bd72 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/template/cage_panel.json @@ -0,0 +1,53 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "particle": "hamsters:block/cage/cage_middle", + "all": "hamsters:block/cage/cage_middle" + }, + "elements": [ + { + "from": [0, 0, 15], + "to": [16, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 0, 14]}, + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#all"}, + "east": {"uv": [11, 0, 12, 16], "texture": "#all", "cullface": "east"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#all", "cullface": "south"}, + "west": {"uv": [3, 0, 4, 16], "texture": "#all", "cullface": "west"}, + "up": {"uv": [16, 0, 0, 1], "texture": "#all", "cullface": "up"}, + "down": {"uv": [16, 15, 0, 16], "texture": "#all", "cullface": "down"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "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] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/hamsters/models/block/template/cage_panel_bottom.json b/src/main/resources/assets/hamsters/models/block/template/cage_panel_bottom.json new file mode 100644 index 0000000..b951683 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/template/cage_panel_bottom.json @@ -0,0 +1,52 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "particle": "hamsters:block/cage_panel/blue", + "all": "hamsters:block/cage_panel/blue" + }, + "elements": [ + { + "from": [0, 0, 15], + "to": [16, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 0, 14]}, + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#all"}, + "east": {"uv": [15, 0, 16, 16], "texture": "#all", "cullface": "east"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#all", "cullface": "south"}, + "west": {"uv": [0, 0, 1, 16], "texture": "#all", "cullface": "west"}, + "down": {"uv": [0, 15, 16, 16], "texture": "#all", "cullface": "down"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "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] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/hamsters/models/block/template/cage_panel_top.json b/src/main/resources/assets/hamsters/models/block/template/cage_panel_top.json new file mode 100644 index 0000000..05a5723 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/block/template/cage_panel_top.json @@ -0,0 +1,37 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "particle": "hamsters:block/cage_panel/blue" + }, + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "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] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/hamsters/models/block/6_ways.json b/src/main/resources/assets/hamsters/models/block/tunnel/6_ways.json similarity index 100% rename from src/main/resources/assets/hamsters/models/block/6_ways.json rename to src/main/resources/assets/hamsters/models/block/tunnel/6_ways.json diff --git a/src/main/resources/assets/hamsters/models/block/base.json b/src/main/resources/assets/hamsters/models/block/tunnel/base.json similarity index 100% rename from src/main/resources/assets/hamsters/models/block/base.json rename to src/main/resources/assets/hamsters/models/block/tunnel/base.json diff --git a/src/main/resources/assets/hamsters/models/block/corner.json b/src/main/resources/assets/hamsters/models/block/tunnel/corner.json similarity index 100% rename from src/main/resources/assets/hamsters/models/block/corner.json rename to src/main/resources/assets/hamsters/models/block/tunnel/corner.json diff --git a/src/main/resources/assets/hamsters/models/block/one_way.json b/src/main/resources/assets/hamsters/models/block/tunnel/one_way.json similarity index 100% rename from src/main/resources/assets/hamsters/models/block/one_way.json rename to src/main/resources/assets/hamsters/models/block/tunnel/one_way.json diff --git a/src/main/resources/assets/hamsters/models/block/side.json b/src/main/resources/assets/hamsters/models/block/tunnel/side.json similarity index 100% rename from src/main/resources/assets/hamsters/models/block/side.json rename to src/main/resources/assets/hamsters/models/block/tunnel/side.json diff --git a/src/main/resources/assets/hamsters/models/block/t_shape.json b/src/main/resources/assets/hamsters/models/block/tunnel/t_shape.json similarity index 100% rename from src/main/resources/assets/hamsters/models/block/t_shape.json rename to src/main/resources/assets/hamsters/models/block/tunnel/t_shape.json diff --git a/src/main/resources/assets/hamsters/models/block/tunnel.json b/src/main/resources/assets/hamsters/models/block/tunnel/tunnel.json similarity index 100% rename from src/main/resources/assets/hamsters/models/block/tunnel.json rename to src/main/resources/assets/hamsters/models/block/tunnel/tunnel.json diff --git a/src/main/resources/assets/hamsters/models/item/black_cage_panel.json b/src/main/resources/assets/hamsters/models/item/black_cage_panel.json new file mode 100644 index 0000000..f3f4fc5 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/black_cage_panel.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "hamsters:block/cage/black" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/black_hamster_ball.json b/src/main/resources/assets/hamsters/models/item/black_hamster_ball.json new file mode 100644 index 0000000..51725f5 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/black_hamster_ball.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/ball/black" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/black_hamster_bottle.json b/src/main/resources/assets/hamsters/models/item/black_hamster_bottle.json new file mode 100644 index 0000000..eb28869 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/black_hamster_bottle.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/bottle/black" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/black_hamster_bowl.json b/src/main/resources/assets/hamsters/models/item/black_hamster_bowl.json new file mode 100644 index 0000000..4993450 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/black_hamster_bowl.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/bowl/black" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/blue_cage_panel.json b/src/main/resources/assets/hamsters/models/item/blue_cage_panel.json new file mode 100644 index 0000000..fa28dba --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/blue_cage_panel.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "hamsters:block/cage/blue" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/blue_hamster_ball.json b/src/main/resources/assets/hamsters/models/item/blue_hamster_ball.json new file mode 100644 index 0000000..1fb4fb8 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/blue_hamster_ball.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/ball/blue" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/blue_hamster_bottle.json b/src/main/resources/assets/hamsters/models/item/blue_hamster_bottle.json index 122d362..9010314 100644 --- a/src/main/resources/assets/hamsters/models/item/blue_hamster_bottle.json +++ b/src/main/resources/assets/hamsters/models/item/blue_hamster_bottle.json @@ -1,6 +1,6 @@ { - "parent": "minecraft:item/generated", - "textures": { - "layer0": "hamsters:item/blue_hamster_bottle" - } -} \ No newline at end of file + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/bottle/blue" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/blue_hamster_bowl.json b/src/main/resources/assets/hamsters/models/item/blue_hamster_bowl.json index 7ccd3d7..1bb62ec 100644 --- a/src/main/resources/assets/hamsters/models/item/blue_hamster_bowl.json +++ b/src/main/resources/assets/hamsters/models/item/blue_hamster_bowl.json @@ -1,6 +1,6 @@ { - "parent": "minecraft:item/generated", - "textures": { - "layer0": "hamsters:item/blue_hamster_bowl" - } -} \ No newline at end of file + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/bowl/blue" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/brown_cage_panel.json b/src/main/resources/assets/hamsters/models/item/brown_cage_panel.json new file mode 100644 index 0000000..77c9fa2 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/brown_cage_panel.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "hamsters:block/cage/brown" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/brown_hamster_ball.json b/src/main/resources/assets/hamsters/models/item/brown_hamster_ball.json new file mode 100644 index 0000000..437c9b4 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/brown_hamster_ball.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/ball/brown" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/brown_hamster_bottle.json b/src/main/resources/assets/hamsters/models/item/brown_hamster_bottle.json new file mode 100644 index 0000000..1d32975 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/brown_hamster_bottle.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/bottle/brown" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/brown_hamster_bowl.json b/src/main/resources/assets/hamsters/models/item/brown_hamster_bowl.json new file mode 100644 index 0000000..d3df5d0 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/brown_hamster_bowl.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/bowl/brown" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/cage_panel.json b/src/main/resources/assets/hamsters/models/item/cage_panel.json new file mode 100644 index 0000000..5396963 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/cage_panel.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "hamsters:block/cage/cage" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/cyan_cage_panel.json b/src/main/resources/assets/hamsters/models/item/cyan_cage_panel.json new file mode 100644 index 0000000..98478ce --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/cyan_cage_panel.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "hamsters:block/cage/cyan" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/cyan_hamster_ball.json b/src/main/resources/assets/hamsters/models/item/cyan_hamster_ball.json new file mode 100644 index 0000000..bbcdf2b --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/cyan_hamster_ball.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/ball/cyan" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/cyan_hamster_bottle.json b/src/main/resources/assets/hamsters/models/item/cyan_hamster_bottle.json new file mode 100644 index 0000000..1ceb9f9 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/cyan_hamster_bottle.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/bottle/cyan" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/cyan_hamster_bowl.json b/src/main/resources/assets/hamsters/models/item/cyan_hamster_bowl.json new file mode 100644 index 0000000..621c49d --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/cyan_hamster_bowl.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/bowl/cyan" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/gray_cage_panel.json b/src/main/resources/assets/hamsters/models/item/gray_cage_panel.json new file mode 100644 index 0000000..c0d8564 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/gray_cage_panel.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "hamsters:block/cage/gray" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/gray_hamster_ball.json b/src/main/resources/assets/hamsters/models/item/gray_hamster_ball.json new file mode 100644 index 0000000..6b7e84c --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/gray_hamster_ball.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/ball/gray" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/gray_hamster_bottle.json b/src/main/resources/assets/hamsters/models/item/gray_hamster_bottle.json new file mode 100644 index 0000000..dcc2ade --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/gray_hamster_bottle.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/bottle/gray" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/gray_hamster_bowl.json b/src/main/resources/assets/hamsters/models/item/gray_hamster_bowl.json new file mode 100644 index 0000000..743add7 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/gray_hamster_bowl.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/bowl/gray" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/green_cage_panel.json b/src/main/resources/assets/hamsters/models/item/green_cage_panel.json new file mode 100644 index 0000000..dc8fc6a --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/green_cage_panel.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "hamsters:block/cage/green" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/green_hamster_ball.json b/src/main/resources/assets/hamsters/models/item/green_hamster_ball.json new file mode 100644 index 0000000..6f35e06 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/green_hamster_ball.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/ball/green" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/green_hamster_bottle.json b/src/main/resources/assets/hamsters/models/item/green_hamster_bottle.json new file mode 100644 index 0000000..0fd2ece --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/green_hamster_bottle.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/bottle/green" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/green_hamster_bowl.json b/src/main/resources/assets/hamsters/models/item/green_hamster_bowl.json new file mode 100644 index 0000000..041ae21 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/green_hamster_bowl.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/bowl/green" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/light_blue_cage_panel.json b/src/main/resources/assets/hamsters/models/item/light_blue_cage_panel.json new file mode 100644 index 0000000..3387fc2 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/light_blue_cage_panel.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "hamsters:block/cage/light_blue" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/light_blue_hamster_ball.json b/src/main/resources/assets/hamsters/models/item/light_blue_hamster_ball.json new file mode 100644 index 0000000..a6fb6da --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/light_blue_hamster_ball.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/ball/light_blue" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/light_blue_hamster_bottle.json b/src/main/resources/assets/hamsters/models/item/light_blue_hamster_bottle.json new file mode 100644 index 0000000..9cc1374 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/light_blue_hamster_bottle.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/bottle/light_blue" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/light_blue_hamster_bowl.json b/src/main/resources/assets/hamsters/models/item/light_blue_hamster_bowl.json new file mode 100644 index 0000000..035223f --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/light_blue_hamster_bowl.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/bowl/light_blue" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/light_gray_cage_panel.json b/src/main/resources/assets/hamsters/models/item/light_gray_cage_panel.json new file mode 100644 index 0000000..d2a9161 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/light_gray_cage_panel.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "hamsters:block/cage/light_gray" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/light_gray_hamster_ball.json b/src/main/resources/assets/hamsters/models/item/light_gray_hamster_ball.json new file mode 100644 index 0000000..0ef4e12 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/light_gray_hamster_ball.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/ball/light_gray" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/light_gray_hamster_bottle.json b/src/main/resources/assets/hamsters/models/item/light_gray_hamster_bottle.json new file mode 100644 index 0000000..3d53522 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/light_gray_hamster_bottle.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/bottle/light_gray" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/light_gray_hamster_bowl.json b/src/main/resources/assets/hamsters/models/item/light_gray_hamster_bowl.json new file mode 100644 index 0000000..50bf159 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/light_gray_hamster_bowl.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/bowl/light_gray" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/lime_cage_panel.json b/src/main/resources/assets/hamsters/models/item/lime_cage_panel.json new file mode 100644 index 0000000..c773872 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/lime_cage_panel.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "hamsters:block/cage/lime" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/lime_hamster_ball.json b/src/main/resources/assets/hamsters/models/item/lime_hamster_ball.json new file mode 100644 index 0000000..dba0d33 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/lime_hamster_ball.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/ball/lime" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/lime_hamster_bottle.json b/src/main/resources/assets/hamsters/models/item/lime_hamster_bottle.json new file mode 100644 index 0000000..4e7c05b --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/lime_hamster_bottle.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/bottle/lime" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/lime_hamster_bowl.json b/src/main/resources/assets/hamsters/models/item/lime_hamster_bowl.json new file mode 100644 index 0000000..fc983f2 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/lime_hamster_bowl.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/bowl/lime" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/magenta_cage_panel.json b/src/main/resources/assets/hamsters/models/item/magenta_cage_panel.json new file mode 100644 index 0000000..04966eb --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/magenta_cage_panel.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "hamsters:block/cage/magenta" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/magenta_hamster_ball.json b/src/main/resources/assets/hamsters/models/item/magenta_hamster_ball.json new file mode 100644 index 0000000..331a59a --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/magenta_hamster_ball.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/ball/magenta" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/magenta_hamster_bottle.json b/src/main/resources/assets/hamsters/models/item/magenta_hamster_bottle.json new file mode 100644 index 0000000..74c2669 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/magenta_hamster_bottle.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/bottle/magenta" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/magenta_hamster_bowl.json b/src/main/resources/assets/hamsters/models/item/magenta_hamster_bowl.json new file mode 100644 index 0000000..8575ebc --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/magenta_hamster_bowl.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/bowl/magenta" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/orange_cage_panel.json b/src/main/resources/assets/hamsters/models/item/orange_cage_panel.json new file mode 100644 index 0000000..a5c7e0e --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/orange_cage_panel.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "hamsters:block/cage/orange" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/orange_hamster_ball.json b/src/main/resources/assets/hamsters/models/item/orange_hamster_ball.json new file mode 100644 index 0000000..9dd49c3 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/orange_hamster_ball.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/ball/orange" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/orange_hamster_bottle.json b/src/main/resources/assets/hamsters/models/item/orange_hamster_bottle.json new file mode 100644 index 0000000..d64c23a --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/orange_hamster_bottle.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/bottle/orange" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/orange_hamster_bowl.json b/src/main/resources/assets/hamsters/models/item/orange_hamster_bowl.json new file mode 100644 index 0000000..48d3ba8 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/orange_hamster_bowl.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/bowl/orange" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/pink_cage_panel.json b/src/main/resources/assets/hamsters/models/item/pink_cage_panel.json new file mode 100644 index 0000000..04c74ae --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/pink_cage_panel.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "hamsters:block/cage/pink" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/pink_hamster_ball.json b/src/main/resources/assets/hamsters/models/item/pink_hamster_ball.json new file mode 100644 index 0000000..ec2bbb2 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/pink_hamster_ball.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/ball/pink" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/pink_hamster_bottle.json b/src/main/resources/assets/hamsters/models/item/pink_hamster_bottle.json new file mode 100644 index 0000000..f6b404b --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/pink_hamster_bottle.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/bottle/pink" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/pink_hamster_bowl.json b/src/main/resources/assets/hamsters/models/item/pink_hamster_bowl.json new file mode 100644 index 0000000..2f78775 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/pink_hamster_bowl.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/bowl/pink" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/purple_cage_panel.json b/src/main/resources/assets/hamsters/models/item/purple_cage_panel.json new file mode 100644 index 0000000..128f56f --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/purple_cage_panel.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "hamsters:block/cage/purple" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/purple_hamster_ball.json b/src/main/resources/assets/hamsters/models/item/purple_hamster_ball.json new file mode 100644 index 0000000..e72bc34 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/purple_hamster_ball.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/ball/purple" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/purple_hamster_bottle.json b/src/main/resources/assets/hamsters/models/item/purple_hamster_bottle.json new file mode 100644 index 0000000..a539e7e --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/purple_hamster_bottle.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/bottle/purple" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/purple_hamster_bowl.json b/src/main/resources/assets/hamsters/models/item/purple_hamster_bowl.json new file mode 100644 index 0000000..abb47ec --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/purple_hamster_bowl.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/bowl/purple" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/red_cage_panel.json b/src/main/resources/assets/hamsters/models/item/red_cage_panel.json new file mode 100644 index 0000000..8ab4c2f --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/red_cage_panel.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "hamsters:block/cage/red" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/red_hamster_ball.json b/src/main/resources/assets/hamsters/models/item/red_hamster_ball.json new file mode 100644 index 0000000..df6e5d8 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/red_hamster_ball.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/ball/red" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/red_hamster_bottle.json b/src/main/resources/assets/hamsters/models/item/red_hamster_bottle.json new file mode 100644 index 0000000..5c40738 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/red_hamster_bottle.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/bottle/red" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/red_hamster_bowl.json b/src/main/resources/assets/hamsters/models/item/red_hamster_bowl.json new file mode 100644 index 0000000..1708f4a --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/red_hamster_bowl.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/bowl/red" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/white_cage_panel.json b/src/main/resources/assets/hamsters/models/item/white_cage_panel.json new file mode 100644 index 0000000..3e48c22 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/white_cage_panel.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "hamsters:block/cage/white" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/hamsters/models/item/white_hamster_ball.json b/src/main/resources/assets/hamsters/models/item/white_hamster_ball.json new file mode 100644 index 0000000..fb036de --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/white_hamster_ball.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/ball/white" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/hamsters/models/item/white_hamster_bottle.json b/src/main/resources/assets/hamsters/models/item/white_hamster_bottle.json new file mode 100644 index 0000000..4bf69d2 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/white_hamster_bottle.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/bottle/white" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/hamsters/models/item/white_hamster_bowl.json b/src/main/resources/assets/hamsters/models/item/white_hamster_bowl.json new file mode 100644 index 0000000..58c8b7e --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/white_hamster_bowl.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/bowl/white" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/hamsters/models/item/wno.py b/src/main/resources/assets/hamsters/models/item/wno.py new file mode 100644 index 0000000..ab70171 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/wno.py @@ -0,0 +1,108 @@ +import json +import os + + +################################################################# + +def ensure_outputs_exist(): + for file in os.walk(_cwd + f"\\{input_path}\\"): + try: + os.mkdir(file[0].replace(input_path, output_path)) + except: + continue + +# these 2 are for looping/replacing through every single key and value in a dict +def dict_replace_value(d, old, new): + x = {} + for k, v in d.items(): + if isinstance(v, dict): + v = dict_replace_value(v, old, new) + elif isinstance(v, list): + v = list_replace_value(v, old, new) + elif isinstance(v, str): + if not old is None and not new is None: + v = v.replace(old, new) + v = v.replace("{namespace}",f"{namespace}") + x[k] = v + return x + +def list_replace_value(l, old, new): + x = [] + for e in l: + if isinstance(e, list): + e = list_replace_value(e, old, new) + elif isinstance(e, dict): + e = dict_replace_value(e, old, new) + elif isinstance(e, str): + if not old is None and not new is None: + e = e.replace(old, new) + e = e.replace("{namespace}",f"{namespace}") + x.append(e) + return x + +################################################################# + + +colors = [ + "orange", + "magenta", + "light_blue", + "yellow", + "lime", + "pink", + "gray", + "light_gray", + "cyan", + "purple", + "blue", + "brown", + "green", + "red", + "black" +] + +woods = [ + "spruce", + "birch", + "jungle", + "acacia", + "dark_oak", + "mangrove", + "crimson", + "warped", + "bamboo", + "cherry" +] + +namespace = "another_furniture" + +cwd = os.getcwd() + + +process_specific = input("process specific file (or enter to skip): ") +if process_specific == "oak": + typea = "oak" + files_to_process = [f for f in os.listdir(cwd) if os.path.isfile(os.path.join(cwd, f)) and f.startswith("oak")] +elif process_specific != "": + files_to_process = [process_specific + ".json"] +else: + typea = "white" + files_to_process = [f for f in os.listdir(cwd) if os.path.isfile(os.path.join(cwd, f)) and f.startswith("white")] + +for file in files_to_process: + should_process = input("should process file " + file + "? ") + if should_process == "" or should_process.lower() == "y" or should_process.lower() == "yes": + f = open(file, "r") + data = json.loads(f.read()) + if "white" in file: + for color in colors: + new_data = dict_replace_value(data, "white", color) + with open(file.replace("white", color), "w+") as f: + f.write(json.dumps(new_data, indent=4) + "\n") + elif "oak" in file: + for wood in woods: + new_data = dict_replace_value(data, "oak", wood) + with open(file.replace("oak", wood), "w+") as f: + f.write(json.dumps(new_data, indent=4) + "\n") + + diff --git a/src/main/resources/assets/hamsters/models/item/yellow_cage_panel.json b/src/main/resources/assets/hamsters/models/item/yellow_cage_panel.json new file mode 100644 index 0000000..86c58a7 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/yellow_cage_panel.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "hamsters:block/cage/yellow" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/yellow_hamster_ball.json b/src/main/resources/assets/hamsters/models/item/yellow_hamster_ball.json new file mode 100644 index 0000000..72feb70 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/yellow_hamster_ball.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/ball/yellow" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/yellow_hamster_bottle.json b/src/main/resources/assets/hamsters/models/item/yellow_hamster_bottle.json new file mode 100644 index 0000000..5eefa08 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/yellow_hamster_bottle.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/bottle/yellow" + } +} diff --git a/src/main/resources/assets/hamsters/models/item/yellow_hamster_bowl.json b/src/main/resources/assets/hamsters/models/item/yellow_hamster_bowl.json new file mode 100644 index 0000000..ad2dfe1 --- /dev/null +++ b/src/main/resources/assets/hamsters/models/item/yellow_hamster_bowl.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hamsters:item/bowl/yellow" + } +} diff --git a/src/main/resources/assets/hamsters/textures/block/bottle/black.png b/src/main/resources/assets/hamsters/textures/block/bottle/black.png new file mode 100644 index 0000000000000000000000000000000000000000..616755f29debce8a87d8defe44b3dd7fdedd5d79 GIT binary patch literal 944 zcmV;h15f;kP)Px&YDq*vR9J=Wmd|e+MHI(B8&CWr?xx$?sf$x{abkoJRS;@}aS#VY)u<|`oai6W zLxghR#HsC(QwiLVI24IXl}iKV0-O+p2&pnBl5j#%64h~(DBfZ__GUP2X0z)ZJ8j4b z_X(Dn4)FjxwW^l?=*k&Ht5uf+$rSB&)7y7H{DA>J zzINSvukBU<_~+RcbU8J2DRc#)91J8=p2Kd?jUNQ>ir3%0!O!14(2fnhaTD?BPk(!a zuE4UETPC`+uW9ruA8PEc-yU}raIyFSLK&z)nM5=wAgcJFfT#66vQ}7_@&hh^{@M*~ za3#Py1-ca;h3B#9bvhF9gJY;m<@4gd*n+PUu2mpwxv5piB%-YE9j?+pb`rq@0!|8@ z+fr}5fPnCx23Oo`&(|v9Q?yp;-J5f%ysS8c8KLcswd zB1$Z7df)2K@k2~aO))n&7a&d33H32dj|9(zq2Ng^rR|8d50Z!Mu*PsuaGA>Q5I<;L|{UMVI*{O>C*0C9CT zEPoitI8r1fMtTT;!Vn}(q@^fD{k!sITiA);h zdVbx52s#G%;FCZ7e|LKq0PmlFq0g?NPorx{ZNSK+eS;cn)I;Om`GE7jc=h6NL3=hI#boSdFsiDp`j9bdX;{WJE;3QnHL*8mHt;Set zfa=q3mchA`a2^Waq|jTIM)L>(L~9z(c)yyj*Q2{=y}thu-DrXgD(WTG^AI` z)8n|3+<*CDHF84glhN@&n!^aaOgh?B(`KB<3gGt5+W<_ydRb&9FVJXq<$`*Ry{Pkh zcUQT0ceVF~^iRf}U6Ajbk6y9M%gYgN%NOn<)pAVB0nT4<4Q6;iJ4VGU;|UeV%MR*LDbr*Tyo+wr%Bk zo`13|O93jE%c<$D#XtgQI_-1BSv^ws;ZnIDAt*FQa$ h-YHITif0S|0Z^$uDoT*8TmS$707*qoLp0v1fPajifXGX=97?sEFrXyh z8vv2Jzt7LSdZN8V0yqW&YXAT)YMU6}$GbdF7x8oMhLrF0ZL3-V1UY6?006V`H@Bvu zR6ag^36{@yf!!gK1FKqb96E#$cL9qa@+gp=UVof^7Zp>vut|aF+9z|bKKUS7*!v)p z0TC5X6g~ij_J8>RzJ4u~3*NxU4-lJ(YODLWw zm|DA2va%$|5#=4&7yG7#3&3m4pE$_*WbW;vC^sathGanN>0&KxL$@BSNdt_RP109d(xS!BQz8hhQUs&a}XJG3ZMq)3s%jX!mgtq88VsmlNW002ov KPDHLkU;%Px&Oi4sRR9J=WmO*bDMHI(>YrJb*XPrTI8pXj9ki?asLg}HjAt{$CszTL%0Qdl$ zdIDAAg1F?=o;hF4oG6Z?7_!vyZk*w;oz0GSH*P|X z`Ae(ac{A_5|Gf9+%^GJam#Ebr5yrRkB>+hb#ulH&iP`-1Yh&}#&j7gIE|!_bGEFj; ziD_EeTGPs4Ss4I~IAe>SzJuqvQoL2vJ z4CQiKaVWe!>WBTW^;RHTZSO@4J^k@3Zk!*Ab@Kg^lT4tq)0G90$Mf7E?_q=;1N?q- zCire|`E#4?e<0!1kWlCW0cD^d@`1r5#Ld5Qo{0RpYq0c7GJ&%{tOtX*0xJo>Oya`c zXu?>ZOxb8O{kQw{KKyh50i~cEjb`a=C$QdeDTydCWe0qDCx1QBIfPC@+ztof zb#w-ujuh;N>nQj?x)ADwjV6?YA6kXcti`IkzsvC4aX8lq92ff2(%Cr#foM+k9UqkQ zMl*Vf8qL8iIvrM2Aywnm_Fn8U>|dwGaVdFm?^dKkhC5^0&S9u9DYn@ihjF$fz}@fe z0x&TlpwZ2ie^e13T*B0mUU zek^?Q@4g4XAJ6~9GWD_>ScH{I1%U1C?L#>SuuKy>cPbbcM4qne=>&vbq`j^8c-yuk z4sF|xI8eC_|9%aEx4Wy=L~I0X+on`10Z^@00T4nY*_5ugtL?NO?X6b$($Z?eSh#YP z`74(xm&=sPWrPrHY-}($HzxsVwHg4eR?AphTVrKq1;_EL_}|)NUe+JWg7B~Lq+hna zYg5cfE*bakyBGsEG#Sp3yZ~~?DcxmaUA(-7czHdRt~@aiP3dE z!!#|!b-M07*qoM6N<$g3M&Kg#Z8m literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/block/bottle/cyan.png b/src/main/resources/assets/hamsters/textures/block/bottle/cyan.png new file mode 100644 index 0000000000000000000000000000000000000000..e9bedbfe429d7e883f774ad2169a7958669faa59 GIT binary patch literal 1011 zcmVPx&tw}^dR9J=WmOpG8RUF4Z&pDf#_?)vHCz69jL=!VqL}5q~5Rz7iAwv-ou%ui-p~>}v5+;mUm8Z`Ah$8Byl&LhLvFrBT3vXb6 zSFhc4za3JF$^+ti4zx%pDi4sUw7Z}Kv%|Pk?+M-&&ptiL?_G4yOk`0$|M03S z2qRcdvuR?N{dJ$NR1VrZYdE^UR`sq4oSn*|I1Wyr;dsoSK+KW*`@U&f5bUXc$Gv)9DhE$dsoeXDHtV2x9i5Uo^Y!X}$1x1IbLL?!x%u-_ z;D&T=#zqqqwIAV>$;mceHyEKJ0d9PD1Ax;nz9I%rPhi&Dc3wa8zhLlNcbB+zZ>jT! zbZ^Gmzo5*Y=?^$AFE0mVn}7bs#h0HCM(F`%{(S_{eCj0t`u_gaeyFtY-r4?xNmwWp z>}+ebLj?!y*H9wiPGu?$mY-Kj;Sv*oCvLes;cC2 zIRJEB2SC%bZc9qhuzWl1M5J=x`_uAqLcFnXo)@0HKt7)*pU#Fn@y={ngnDvo0a3^ z`b&^Ef|!`bp@{55nx?B1$Hc5w%(kRaMb6jcT>Z z>guYSh_365j*hyzTCGMRk#O5^f)kwJQ6a8h|AEVwFC58vVPOG)cs%Y70Mj(x0kF5X h=MD#oq7aEh_#avPV95IU_?`d&002ovPDHLkV1li!;`#sp literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/block/bottle/gray.png b/src/main/resources/assets/hamsters/textures/block/bottle/gray.png new file mode 100644 index 0000000000000000000000000000000000000000..c034c3800e63af6c731ebb338bab4eae0c0b1642 GIT binary patch literal 913 zcmV;C18)3@P)Px&OG!jQR9J=WmcL6RXBfvnqwnnPsFN8My@6S_I^7f@!Nv_CLW*z!Invn}tHWaZ z6gdc2S>>7>>^~qWt~rD|NEwLLC6F{5NTHI1fEi^~%o!)FI~AK&+Rp7)2bvhpqW?|(`fOG`@tk{s0PjXW{GtvxaRYOVngMG>ZHCZ7;O(-lG_ zG9%Afyvc9rpd!Fq*iY*QytReKX0A^81>p{F1bMvxk4c*7K;Fs%Vhw9AfT5} z8rH2##|B_1PpHzPf~Wt>x3l`?+t*CsDzJ)IvlEMpiwqABV_BBg915jU34nuxgG9Fd z@+{-%ht(D4=jU^Stgf!+%3XULadL7Z9mgS#JMfr66j1X}G=d^bx>`GKyy^j2*kfn*ott?(kej?JLmVHIC( z!@N|!F8+@#q)x(M7ksyyS_RK4uzh;I%JkfI1lI^$7kbOmKE4EjY)$nQ52|^vo83jh z?%*T3eGDRPs8XuN+b_>@w_&fI8t0Yd*YBTYPDph!Mja6LD27UtVrw0Tl=)i%JZ(G$ z;LeA44d>2#w2#mA(su2WZ1CS-JmZfS&wEeE(=@d?&+`lc=Z)5EHkqED24He>Qe&!0QLR?l+}unPqtVEJ ns$YcV<>f2c-QWf{c(d>y>sL7Oat@BJ00000NkvXXu0mjf$+NUy literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/block/bottle/green.png b/src/main/resources/assets/hamsters/textures/block/bottle/green.png new file mode 100644 index 0000000000000000000000000000000000000000..15c578a5d63447be8ee9b96ecb152966bf2db80d GIT binary patch literal 1000 zcmV>P)Px&qDe$SR9J=Wm)&b4RT##9lT0QZo9RwWKO`kfaoemPY>a{nxMt3iS z%HC`R^*<0+L=eGi*}d_qf(m*itOXI5#hX}f+AK(EY3sIK5;n6Yo!QBFF*(Vc%p~3J z_OcHgPUb!5yzg_~k8@6x`ClL7n^*rMh%*ZSctqgx#d}d=uK&KEEdPBKfR+QX1jICm zYmi9Db2ZIx07{gy7d{5Z!AqxQd9~^jcrhQ78l+PG@0qbA z0JnDc=_M3|o;;T~Z;_U|;Kj{m0 z*6ogLtJVrBTKsW={Do*Em2acviSr+zx=p-f8XTt^_aK6X0lv7}O|)v&@Av&avTEp) z=mM%xkW6$2hX>(7 z)(ol+eW+cAQLcPYJjz-KoP?V@kTreR3QXu4TXuJs!Lg$-E)h5?^oFI;JOqJoOywO9 ziuvYFxQaG+1|QLlCaA%M!lmMStJaDv!`^w~J1QjCf4dSoA;rn)xS$%tD8fyGt=_bl zr0M}Ie!U35sdH~ACr%Y;G`sVH>l*Tz1;8ISuW;k$XT2w6=VYwk1NGf!!*}?~%1TIf z`>z|k_u5NgD+BP<`+on#lYam2KmJ2S;L_RQgOf0y&--la^+Op4|3#Dt+%L&AxN=&d zzWJ5LFCWQL!!SYy4Z{eNYsWVD{5l9N2Pr2aJzy9H*=!boa=8qEX`20XdM!uZX)mf( z>C%#NLYe>kb)M1QBA3gN%jGallil52W@l$TfYsGi0QUCwlFH^SsR%_rpQlo( zbmV7Fl=$w;rRc36fD50NP&1i~Qm@xB30tuE)s8!2b??aqZeq0O-1kt|!oS|Eg;=oOZhpfNeYNcE7V$(^TT|IR69v WW=e^E-7mTT0000Px&eMv+?R9J=Wmd|e+MHI(BX{m^WK{`BTBa(a`3~OMDgKw5Q*=OzH<~1Y-yPOmqNBFd;B>DW8oK z$OiH_fyZ5!vXLYftOLIMrTKA@@e!Vav>i^vN#;yD9T`Y>*?DZgBy2UV8FGi&-kw`hnyPs#?&ON)oK7( zmi51k1LV{U#;h9tmkf=b>&0}G7jN9>$xk1|gu1RL4C=a`Fc92+(dXARIL`*LTQk)I zx~@|$mjN(M69B_7#;qxP{XuM}qiDBdmsTt%ME&-++`MK{sZ^*`Dj0@AyWM7eeO&@< zZf*i_baW*4_xIV^*}=AL0JhXMw$wFQGW-~id$NsO+c9LWzq~JP+m@c^Ny9KCAdAJK ztX8Yk>-A8vP$)>x^Q3Lt@^}}r+W%EvmA{Fe>j_OmI1U2h&2bQ#hUmGT$f=pcxB|mO zGfk7#)l~qNmzQHqgHY6JHJZ(4D8JnOh3`LqH+}0TfU>Z#AS}y5*L4iTpwsEFy}cb0 zF-?=DrKNDpvMlE2=E5+X;~eLBUWiv~Z?oC_`Bande7picKC6<~{07i<`hIi!0JyG0 l-*xEshYuW8%`!8i@E@^;OaATkolO7$002ovPDHLkV1kpa%(4Ig literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/block/bottle/light_gray.png b/src/main/resources/assets/hamsters/textures/block/bottle/light_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..de85a858b6651959aea545aaf61c24e3ae70161e GIT binary patch literal 940 zcmV;d15^BoP)Px&W=TXrR9J=WmOXFVRuqOGI@G09i85hW6d*xC5!-5t0;v}pDe3|Rf(+gY)Kfcj z%-#$c0%XwUAsGr}$PaLbjQs&E+9g3g0A)!1k$R~i8IlY;ktv9xBi{}ZDN>~5*zr{O z1q6}rJ)ifSb1#)HAixZE>5kd{f z3K2ty7y#<9^PYf;eIe@bu5kH%rS}Hx_(j}F2Iu&RR z7r9&pfNHhjan-lSAwzHe{EItx9z;4>UHv(dUs+i}ZM9m`G_yF)d#~<(_#Fc@{`lQ{ zcAK(Zufd3^0m5DGgX$VE&8%l|6r$Gq&PO7dzcO+y``H5OmG5tPL{x+2j9!~m-yV}0 zTC3C{HN?3#D)rufx3N7kfKR_%M0FKhN7;l31|VEMSod1nA!mg9!Lm&X9ie0@`yoViBZ9?1Fi+MP(}9IU?_J|Vr6@vsHz4__oh ziW?gnA+Gl72|wQWYILd*xOeX%09UWh_3gev(*`xUwU|7)35&&IFWSSyQ#l9Fv^bNK zhWBooS!_GlmFm-{|8o8Mmdj3?dSjeIth;B1a8g99nf{1TrLMdxm*Uo zFpMZs0NLqu0+|kDf4}L!v;sY$tgZbrc-X9JPCr6?AQY;A4%R$AP>dpk1olTa#^&ZKvN3tZs;h5rD3!95nPx&vq?ljR9J=WmQ8FMMHI(>0>ylS)Utw}DZRY=;U@;Td2ibL zZZ&KGnp+ZvoEnA{x(mf!K+6hmK^J#<9QYs9`^bkPpLqwk5veN|-$Qx-{G=U0onX`I@6xY3 z4Dx^jhlRnkw9S1u5YB0E$D?vy-wL0i`qtj0cS|GJnw{R(ZfKhJO1?u5y2*Os`m@#SEr z@;amb1eD7!h41i{m6ed}{;l8maN)Hu%Lu&rjkEKavreXKw|c~VDYSsRT7eLVAHTRjE&UdSLV-e|fTn3|Z*Ma{KQ94RS62bp z+1U||MuUxw4GhBopq5ysmRy!v)*&DEWE;4)1Bl(WFG#~Mq;1<$(=-Xl>FH@%DwSAV zT=XVRO-)JLwxwYh^64(*j8&1RWJOq}6iP~nZd(eRD)&aW?dU91ig+@po9R@90{ud( zR;$d-%>hs>76YETsVJArtgWqi@|;oO+fROp-1%O(cCCVv$z+7C>!_-VrfD>rP1e`f zJx8k5Dzme*o=(?wCMG7lG#udwM|f6<&tAU4=YM^0Amdic>1>MPjCkCUce~K*IRl{6 nvFLQVSXS4wO(fzd${7CvL2zH%3xMQ(00000NkvXXu0mjfTb1md literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/block/bottle/magenta.png b/src/main/resources/assets/hamsters/textures/block/bottle/magenta.png new file mode 100644 index 0000000000000000000000000000000000000000..6cddfb653d07dcccea1c606868f14a14acbb0208 GIT binary patch literal 951 zcmV;o14#UdP)Px&aY;l$R9J=Wmb-5wRTRd5GoJVnd&0=%A#530>)1%JLMhmlmKX_vDAMo;K#?*u zNKl~_k75N)L<&H>M70&tLO}-w9b%0Hg+W3jUW!GL9mRKLHSgAho_4Cg$E(KWO{6e*@sq>oKiIN$OFO zktlIJqUa`cgG9stKnrvB@pGTk@m!IKB^7z2+a|TX%9WC?$bYVR0NUDBRsTVthY1t9 zfh5nT^5j!_07e5+Y+|S8o)EzC^+;m>b9O$cpPfJF0M3F${A_l{+vN?WvP@&jB9lJq&HjJyj~aX$9>Aq%3K-Hr5-lX6Y5-9wSM$E>^vGDjdXRpg zFL!22;q1Vra$(p7VTE-P9>iu+cO>G+Z78qnEch?Ba9o7aQO4?Dt;9kiN~1SCrGM`{ z$dv%j3!`aqI;RLAm{aw{lX6~f2D_-TZ9=TwcNi=y)GTKDPCd)qp;MRw?04OZKpgmN05~nlN^V>PyAbIoK3eE3+8l8}X z$=GUx@zN8)SM28IW(d2$h!O8r67 zYPC*94v^HN%ul5T>wGLt+g0nz_+|Aop1S#pA~a1iKxmp~fI#Nf|M_(i9Pdb}iO?G` zO_NL}13xPx&uSrBfR9J=WmQQFLRUF4ZZ+DvA$?Vvn$!2kvg=jY`sMs7dAc@c*QgUn*S{3nT z4@Hl9&{M&nR|SuPC#96$rDz2S9`rB;sY#T&5|XeZPra9&d z%g+4X`~803_xtmHBffk70+)aPo?hI0Hw7R`z^$uJl9h(n}Sm*$QjY%2vHsn z{?~Uy(dJ$}75a_$`T32+lH!#ciS^7MpMmB)K$Z-FzfYL=2znd?y!chO(3}g10k^z}rWBN;f<6)@Frws90(I{`MJrBB+2J61-V=+!JBb7u<;89nB%Sau zJdDn;?$EObZI~3whsERQLeEXOu?iuPKd^(v~6s`t&kPGTGO?^EwdDark~6uTkS&G^6v%`^}yOp2}E zaw+kz1i1dibpX!Jz9vqeeF3l4-PfzN=#P2 z^9ygk`f}XM5d3yY-~m%l2OR#qC(zT~^(!;R;YC=jRs*(9@|Vys=o*~K3e=b=83L~z z4T$zpHEI4EK341pU=ywsVNo~7Q&6=Qs5XkB85mkHSsU#Jjdp`(y9t2jxA8h{ jS{*;s&8E_v5-I)%ky>Qrmt0DY00000NkvXXu0mjf|3mc9 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/block/bottle/pink.png b/src/main/resources/assets/hamsters/textures/block/bottle/pink.png new file mode 100644 index 0000000000000000000000000000000000000000..13be84ce4e5f276f404c72f2776f968010890226 GIT binary patch literal 901 zcmV;01A6?4P)Px&KS@MER9J=WmcMJRQUXE|!_Y^O3u2K&^ZG(}Hely&?I_dPvj$Kd1Ul2&o z`#kUSeV<>i3^aK8!xI3hTl@9a4V@V8>8errXB~hz?jpoEC1Fu2SqLFAxRd|&1^!w~|UVnD_oC%x-*7(`%%;)zWap{tYZC}n5M*?pU_LiTB+OLmt8%;j> zojeAGZ=&c7g7MC*fUej_VF0_TO%w1nML5Xk2=d*b7AzPXd{qRpM-M|9W) zGi|6ss=nK=kF;$#s;9nnDRF*V$xTQ#84r74+GPwCCdJn32F$W20UrPS7=XDizA`S) zT_@}g_0o1>lz0CAA1k=eR!1jfG8y*|z`XroIcK=Gww9A^uRP_>jnm!ttKU8#20rjU z0${!MH$n{i^6sbQlZ(*vygu9g{ZlyyC<%*6`%3a%t++%{n9jQ_00000NkvXXu0mjfPJg!{ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/block/bottle/purple.png b/src/main/resources/assets/hamsters/textures/block/bottle/purple.png new file mode 100644 index 0000000000000000000000000000000000000000..b50c597b8dd73896e8bd5260a878b4e6cd0c7f5b GIT binary patch literal 925 zcmV;O17iG%P)Px&S4l)cR9J=WmQQFSRUF4ZFU}+r!_Yz7#!U!&Xq!V@mI}KIi@k|R5xogk5l^xR zdQ-f3T0MGk*Q2o8li1VZLGY$tTBwKYvMy~@P)ib%R!r$EnItC9!}LvNGB4@2_9Xp6 z$h`0S{d>RP@BI;9zPQHfw{H=~+Y4U+NHn;7dsRpC%bgAJ+jlWA84k(WWc2iHQhb?;mja_9|D3i3q<{?gNPHS2Nn+#=+2$mN0R|lK|u| zOaoACQU=p=+?5&0oC#iM@s|?Sbh4V-NXNBRiw7e4p5U*); z#p7yTX~cI?r7`}9Zh2sY6;(>rxZ3P%x8bmy8tY1O@2joY38_xTZVwDQgHUNw(WX6@ zJbz1o^_%Me%slskn3%al%Nxjr^;+$?^YYy-e!lzT@Cg~5jE9fFczq#$hi`9h$GG~v z4c>VETHMPRygL6G0GFP)2*CZ`?~%vJ^{biVo3L0c`q3U9p2#_Xg^42u3(N`!Pe%L7 zc<(H`1y4lI{Xvq32g>!+a{OG0Z=NH0B{^ z_5MNl(u(wi`0&k-$v&H*P$*C+6mT4ey}dn_mzO2L&dv@1`}_N%R;#hQyNm0(08}5C zR3Df!EBxR_J=un??FbT?IVoM&mAzh1I*ua&IW;vU=jP^ESy>4LCnqOmuh)~V>&l~5 z$lPLAUR;#IlO2)56rSt~{4NiEp6njY`7+_T++tT4Fle+=sl?LK5&*Navyn(uDT>7+ z<#IXTrxsh>TK_=1^5byhwHv3>JI6WB@&CfVJl8i2fZ_ir00000NkvXXu0mjf{wl=; literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/block/bottle/red.png b/src/main/resources/assets/hamsters/textures/block/bottle/red.png new file mode 100644 index 0000000000000000000000000000000000000000..a73b8c2e8b5ebf7f937633e83752f41002a7ebf7 GIT binary patch literal 998 zcmVPx&ph-kQR9J=Wm%DEqRTRd5cW3r7@~$$9A3?iX$#U$41YsKq5+N)QK@^r~5~x6; z&7Y7KSx}_1l#ap_5u}KSM3oL21QZmk8?X(9CCh8FHh5tMX7(|2DaLnpXJ=+N510O= ztDQOb+;hHr9{0`)5^(2*HvweQT>kFEBr*SezApa$=4${P*~JjqU}SRSMJ8%PXcRIU z03ylQXP4fhEqyto7b5az&n18NA+Oe=27lV|0mRKK6N%(TA(JG`3k~IbE+?7G1;H35 zGzcUA#JY05tykGn6%2 ze$3Es>$kZzzm(|Y_V1gC^6%ak=$7xwif+=DKIgPtOlibT2Hskf6>_8xQ-nf?N9H6^+qu&Kd zg*6V3vu0Fx7=@EIRN;CWJj+@*DMDqaYzCoKxM1XHbo#p-oI4HY5dx=$;j}pM#z`j- z&uMhWqjJ9AjCav~bMz7IxS$U%R3TOGjg}v2!$HG?dg?tXC5?LPx&T1iAfR9J=WmOXFVMi|F`R4ASlmonSRbRa_=B3py|0xb<()aX)lFbZ_5hxP-c zAD}>%PDX(&MTdTjbnBX}O9K=|6c{jM1I}Q_b|Vvs3egrxMY;~uNj!;?6W3GWKR}T8 z@OiuE?auh&!(aJv`)iVT`t&7$Bn1yWD~-&G2#vS<0RUn63L#8{Fv;bzSXNf!6(Wle zu^uB$*|TRpQPh>iqNCA0uf;>p;^S&YqyM?r2Qcp5nM-wU7BXo>A+jjrwjDnJ;|?W} z7jJBPmIKz%xPtm#awqwh+$(nAGRWsHCueML|ILjX8487)T5$j}83BNH8-9Oro~r1r ze|#g?2~+>At-Y5@zjyCv%(Jsdx~@$Wbtx1sE~3xgxjFpyycPh>W*eq-4O0qT!Bh%d z*B&YyVX_OxF)%(AEz;W-U~cI)=9A331MMjV_Trq96PL+xs}C7n*-;Zv@&hOxN6q+s z%SulRK(TTgQwbzLjNrnkpJr84S*aYe6#*O8gk z9r@g#4OO@5l(+f7XNi{* z;K45s0H}QWg)v|Gh)yu#OUk89;YE4QE!i2Lki*H?J_GZc_b111qtTe4J%92C-+und zq?H+X{P>tKgw@qD06RN}2rZj;xqix5RUttL_1y$*omOuY@sFnp!$bR3@7 zN*-ETO&H&8-lw`ID3{BW%ViwL;q>&B_4RcLu)DiEP~sUUCnp>p9^(5x0F_FON~I=U zH;&G-D7X`*N@gxxZhR z2M60m5OfX8${Jx98N^jSe8Mm?EGugSLDvw%)c)=7*9{X!g;uZEsnu!#EH5u>o~l$- zt5x>)_J;IE<1aQhzf9fvMcCTfx|G~Cu5pe37ybqQ_C77{$Q8!`0000Px&mPtfGR9J=WmO*SAMHGg=wYQG9&ccEd2W+{Gl*9_HKsi7qARG(=lmh}PE`Sin z9#AhxAP$@=6;(X|LgI=+|g-G4pHZwa5Sd27thabQaP^*iy&U zvFTjc0JNmZ)~-S4E+RXv%Kdss;F(HFk>99w0JL*wa*5TgW2hSeGMrcj^)+lkQkr%5CFINc~918 zbz&1u-Z;*znd*strP1S?u$nlxG+IHBq`wt)G8NedAjQ2zIa zp#1fKxs01=nuEzbgcaNeK&j&dVg!1-7XMy*I66jSyQey3e`>`2S9Y(fW zhH|?Of(NmM$Vs@d1w|{|T8SwmL*rh5l~LVcI9CW976!xO`THOckEy!iQ8C}xidWIb z*61VJ^Ffaq$}N@sMysQiA<5%pKPe=Im5Z?xQl5;v0qAB9O>UE9YxpiD?g)UZUtI-Y z=J}Vkhi9I`^ZVnXcHU0h`N>-sIeF`|!4tA~GCFP0-#Hz>!&g>TVzS%6{mQ#9JsbBj z0<|w803LZR?BDq%e5gpAJCoZx2`iOK$kuW8k zXI`URE>kX-u`G-2?QIqp7X`rT>M8)uW>eeT++=-y9oKaMIF(-Jbb47BA=jZ#wt;I~ zL8?Ag6|U=wAP9tISppD~lapd@ZjPm;rQX1ai3t$|fpA?{bXOt%465R0x~c^pTIx7j z&_)Bb1?{fRLrZ5>-5)_!)1jYewr#VpumHg9?5x66hN4obP^;B?^54BGXFpm_Uiu!m zaG{Ex&*wGAaWG92%d%*-TGZ?H9ueENnVz2R=^V#le0;nYh9ex|2oDPFyH~&E?d$I! z$oSJIzX!m`j)krJ0`)u}&)>oG!#mm+yZB<49d>)RV;n=*Qv44yno2#gZ7M(j0000< KMNUMnLSTZe?$aay literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/block/bowl/black.png b/src/main/resources/assets/hamsters/textures/block/bowl/black.png new file mode 100644 index 0000000000000000000000000000000000000000..c3486613e1e8f649451659e9b4e64901d569da10 GIT binary patch literal 522 zcmV+l0`>igP)Px$#7RU!R9J=Wmcee*KoEvMCu>h)nh29BNIg~DIm4Os#)((x`|t`p0gnJz#1r(! zp*=*E)sWT+wznI}9HMm{$EjRoOGWZ0t-R|Q?fkpz*|GEf-KPv-GC84&#bOS?a(P1# z9Ov(?zqMPRyW6>wCU^Av9)0DZl%SOC%&A<#bq9QS0}4RIceG9r8SXf4-}z`AXJrxP zzyPZ##PeQo9sa6ZOqtIgXQ;{K1g#Ukeg9JFbT&KZ=;$R^mlur2(>z$2RTKiS+2~rq z0fqyi2kfo9h_#)bzIBXA9bm5+lR8R?9oNPm$o2^85WITLkDp(kGJh?4jnDXB3eY+^ z=wNM+`TQ$!s!@x@91)+h*?DCe8lzdSmw4WwaREuH?GD75$S?zTn#eG-cfjp3Y+S(g z&2QAz;JO~Y;tGp_i~Z4figH^J;K?(%h>Bl(vCQ}kCn0vinj1HCCr+ z0?hsP2+BEMLS1Dtjb zsp9%(2*B5G-#IxxSiV>Gs$bcpqp6tr5yH?HMIxlWGN&*kntvgA^}34$a2;C&VT5B_ zD~3TB;W{>c5awkOWyb*7#7DCXZaE~d=e_c`*kdq@yQeE#sT(&+qR%>Dz9!Q~aw zbC=G_WD_5NJo~eibAUY)G+=GzMO5F@7f-}2%>=MkW@#pb)KzEldzkd`EgwaL=)pwW8eVN1{uWyF9j?MYSxH1f*IN^5u8{0A)7ch+%JKzUl z?$}litQ5z#a&-s%{4r`=z+eb+aCtRvES}PHfq!wWaQ58B1&qdpFjS7qZ6zd_t_o^I zz^}y-l$}=z*%fPHcyfHOl5`a1gwh1230iT5MaRXu^nYB0vGt`{Pe9|d)*2QXj8halV=M1j`*zjy7FHyA-hei4am}wm54c^_^^c zOG`^jOBvDY_2~Ee_Zs~C*&6^1qeG`-(&@~9-IF9HNn+A80U%8yvNR^k;^kN=O*CEd Z7rKMTFA#m|3@ZQt002ovPDHLkV1jUS0(1ZX delta 287 zcmV+)0pR|<1jho9F@FI`L_t(oh3%ES5rRMvMjs4=iHtD;1{PokHewaFVMZ5LU=gGi zU;qKJBMBrJz%eWGKb|J{qUBilzP-7aN1buP*!bHnrI6HxN$;0M;&nd-I_u1y4oyCD7HZ()_=y0lbO=BfvJhl%W-gP z=T@$;7k>9OjDi0fknPmRl$@nhT@XIXv5QEX0WZ1&kVVx(u?;}kAn*f(xPx$tVu*cR9J=WmQ6~-KorM+37JXSiftuQux`bbM{wn?TW{eFJb-usZ{glu1rO1c zxU0}=u=S%gAB(uq2}zpNhBly(9}Jm~$9w;oWZsK*eRdoI?00Ok7>*qP9-UXZb~Bn+ z_G(?(JUdU?+xrJn7)T*7r9cRo@F}E;lqLWMK%-`9bJwG8nF+(W>(QuL%s$;PEg~Hl zU^;QATNW3$qs+}@VeEHo=B~%di_@%07*qoM6N<$g3~(Xk^lez literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/block/bowl/cyan.png b/src/main/resources/assets/hamsters/textures/block/bowl/cyan.png new file mode 100644 index 0000000000000000000000000000000000000000..222e4cf96139b6e9b7241d3ee8464dde33a7cb33 GIT binary patch literal 562 zcmV-20?qx2P)Px$>`6pHR9J=WmO*Y4F%*VB8z+p@YO1JK@7zLnoP1x9=0=?j9V}sH) ztQot!hg!2xPIKmtoE&*I1SUcMGgBLOViG!m{7`u;`&R8i;P*)h@kH=E2~2wD1!|D^yM zo3##p>>;1WGBz>lw%qD*`ZofS9WZ030_}hWQ-OB=4w(G> zR=R*+S2w6h=K_F9CwVxlw}5$Gd*nf*bOEE`Xr6{XaK7(_%%Xnj0>;Bpas>I{tAuQe zr8Lw>&4r@l$rqF|5b6msyTWYXY4ALD)^L@=lv`qo&PlT(4FpbjoHnx4ojvYI82=O?KS{f>(l^@F{uGqYg6+mrI1o`4*=cGju;QxZvX%Q07*qoM6N<$g1_Jg A-2eap literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/block/bowl/gray.png b/src/main/resources/assets/hamsters/textures/block/bowl/gray.png new file mode 100644 index 0000000000000000000000000000000000000000..47b602002d4de039d06ef677e19bfb54a3cb1987 GIT binary patch literal 480 zcmV<60U!Q}P)Px$nn^@KR9J=WmO*ZVFc3vQ(O@Tvvq8#=ZLZPYqgTica)lg#eU8OG*;ERpjg!d6 z5?vq@AV5h3Qd{vPOM_?R`8JFPXS>~|0N{BZ>WHEU0B|@Q;QM|)Z{w}s#>8>#oX=;t zuA2`cDy>OGAR_GdpCAC>oI6@;Fvd!OT5E95p_EFiBC3f2KuU?}bc)?>SG$=iuP<*P z&-0+Q#(KT34GMw)^Z6WM7(xh*pTjbi%Oy6O%_Hk~V$%DHe^P+fx-r1|+G3tXsVgXoB5=+T1VL>XCP@M* zW$TCfELvZ)6HrQ}jIk6zX)wl8dj}kk$KD0RAMc(j2mrUbwk#Hl-UVDPU$-)} ziJOF+PNzWxOzM)?2^osJGW31F)O0M>hSCQ_9FyV>i;0W25MmesF8>7=QSoapcDkZ1 zrF^K%b;Ts=z8N*O+d%{vmA!&$%@=9&^+A3DHc`_>G^Bw1CxVFbqb}MbBO@at|C(=u W*tdD_Id}j70000Px$nmo6RJHJ_wIhe}-{b;$?l zx5(Np9U^5&WTz?$b!~iD&;cLDfGs=0RR(_26CC%<`*Zj1Ve9>8Cj&S>Q8Y2S(E$9s zpK*HR6wi&mnKwG&J=W|G2nj+#Pl1%H?^G(6+x|Oj0Cym)c#`7w#foA)NpS~)c${Wc zC#r@4!VshfKfW}^Qsc$fkJ!g2ig=Rp>FwV}rL&6z{6m||s~JJCG*%@H^J|i9XB@zG zJp@pTyo{N9^V+er#)7(NjU{C<-pK)bTjf_T72iHINB$?TgHu0e8b4>T648qigKT ztHsVFUp)p(?8%KVR+usA}!!Tchs_`aA_C+nPr$^38(=k*V zN*iR-N0cKh8!q1mLEgPucR=~i;2Px$q)9|UR9J=WmCs7UKoEz&q-nPmEkzpW#Y@3Iryjle8eTp606v6QU%{8~1w8fA zbG0CXC`w8x71T|Xcvv^xCb72KJqY<=*val>=eJ8HtwXm5zCTTtCJ59h<-)lEa3Ong6TNoO!I2UNvL+>t5XtjW zEPPk(7M$!az5kE6E8p>73Yg6KaP-=|n7`olhpN=h2XSs0zC`fw3>y_Y0$fmaUKhkL zYjr`a{{gp8b_96co^rZh6TYuTUDuk;h9v>o(TUT~TF7W@M}V7`JWq%%GG*A_nr%9o zbVFI00P}=qV$=71ivsLyyMzGqYd1Tc=?B5`U2ah_&FH&!YfFF&*_t<*x3&tB8_Px$yGcYrR9J=WmO)PIFc5~nM6ToHL4imtXgBW!NGw>f<|5pJTl75LvF?IJuK*RO zYFb)R6Sq=WR1Rs90(mc$K*}dsu{|TtZzto4)9>FU0G-Y$WsF8+03ILbbi3_z-uhd+ z^?7<4JG0pg&-3s+g;EMB#nzfqwve*L>+2W+5CqE6I>z_CEk~_mf~C zH0R*p54X2BrJKpq>-7+w&M8{QTwY$3It>Q*93LMt96k_+?KD`PDB8>$v;J0a04XId zP}q4EYdb&x>lm|gfI>57nuc*~m`>*?wfjT;9|11Fa`~3{zLx-7&G)^;-T}|g)7k}0CKJSP z_yB-?hT-O-v3YGdI`V55uvjcU($EIZkFAiG7rhq&Zdvd$A^W0`hTU#^tLRwr1*Hyz z5V+YLW&>yYVc15>)_w%kzG_9>?AM;HblH9s%`s+Gd+_yoT`Wes%59Z0TSb5i#hlOb znXL}e6R?4HT}1m7kp4tSDbjbn>DPbk4Gj$q4L^=|faJRJ4lW~_00000NkvXXu0mjf DtP<)Z literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/block/bowl/lime.png b/src/main/resources/assets/hamsters/textures/block/bowl/lime.png new file mode 100644 index 0000000000000000000000000000000000000000..ebb2121bebbc2687583123ad9c16f75aea8e002e GIT binary patch literal 566 zcmV-60?GY}P)Px$@JU2LR9J=WmCJ6^Koo|*Nqm=;0FjWaR$Vnq#Ev&%%@*|)V9A0<=!Pdi;z_D* zSRq)oAPYo736`DlBpDXYxQ>%lPUT1-<&#F9@tm3S&*jV!Z$CvEAUYYaiTG*+z?W~o zIX&u^|Bb!rH#Xzzxk$zu+XdSN#}indSeeuI1hy~GKNeU3LFkGsmH2_XVwk0pAaqF+ zsp}%@jsYg|94{1ncp*0~rq08#Eqo&zwO z>PF51+@M1TSX+4&)A#h*W1%uFfVHABEi6x%c4NGtQyf7Pj*t7i8eZ=*e^%r@oPXgVs^0c$rmNN`@f@{7mTO9$v!0B$ zrQ2Q7Y*Un49zi|ktK8Ms2IUSIN828veF`YAx8(^`rpx+1w*A0?0|yS&5wD-T=gr6G z_ZmEzET3(wD7IbvR|;mcq5w#lBc&qGRXNsiY%HtGU#yzUO$)}94gdfE07*qoM6N<$ Ef{FG9(*OVf literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/block/bowl/magenta.png b/src/main/resources/assets/hamsters/textures/block/bowl/magenta.png new file mode 100644 index 0000000000000000000000000000000000000000..03c53cd8c8b0aabdc19b711916f5c95162576235 GIT binary patch literal 540 zcmV+%0^|LOP)Px$)=5M`R9J=WmQQNjFcgPB%Z@GCAxy|3;GrmD*ESr z08U4z^tOBXduwm!t<4X8>732}5(=M4_(ZOc6zlA$)5 zP=!qNBrS_5I|djeV>+JX!`Jtfn!c#nlBWSpT6uTEJ9iCos{IR7sTr zOHE0Y+8prn`mAvQzpj4c9S)DP(Z6RLM8I8KTlV~&#s&P*qq{J)j>}^!WH`NUT)?Fs zWmiykUL|Bxtb}22ySG$yEaigI1OZ!!;tq?Bi~Tr=P@;Cytc`TGoPx$=1D|BR9J=WmO+lwFcgMACmxa}t&q^5NJz8oh7}7|9Dr+Z1oo_1&K;N)C*cBJ z&W6PZP(-H^Dt410iCHvh+@uqwRVvLQpA^ZCpYuQ4&+kQ;YYYHammK772|ye}6j|>p z`*OUpxsQcdDVVr0kuZ@0*E4&cbbW*L;o>bw0774&QwY3$ah*cwgGx-xiH0zMjvc0+ z;q{FzxG!$A`8h{&bqP8}d{_hPmXY}~gBMfuVnq-YJFzA@b^ypz(J5*py*b-i&6V4f zV=vzXB1;g^ezFANdZz04Mtbw|2zoGm&>L$v?PX!{pgn9N6xFN(_NlMN$0(o~d$x`t>ll1M0^u^82C;gT)Gf zAS!_RURS3SK0htWyLk9beGMz&X1{Vo{pp`zdONTzm)8_ObUBf796rGZ0K^a6m z0LNaTEo`@gsKE7ycfbvwLL#c8oxMtDw{`50Cr8zpUgU~)F?y`r9#dxfQt0vs>|JQm zH8uph9jJubiRipYte*(iGh|8K-fsKI$jHdZc@gW+-92#5b$Px$s!2paR9J=Wma$I5Fc5~ngvf46O9xAILSmsK3y;Cf0&m64Yw!{b2o{EJ2m~#X zCDIg%3p5O=OPZvprHKSmKFNw5pM1X^-(8&O>@otNqsXPJ0T}j2G}`|6duuG{0 zgA)WAA!uD4&c{(Tp+viB-6R=gI&iM z;{cgvjB$hzcD#}RZ)xM57WI?;Rn}h$x9}DJr-0Bbwy<+Q+5D2x+X#=YhL((PdtMm6 zzQf}X8X|v{H3h^c5SWOjjDY#pl#$H=FAvX!3%DEf@NRGJP`DZr~<&m~@=%E2T;i;Je-* zNJPooo~(4qzSerBDz_}7$w#&rEh@KV2zZ-(#-AV^^GSZ1D}vbxSVxNzQJDf}KM_I* mj4`u*8OL5xQBhIx=lBBJS*mdr^+0|A0000Px$zDYzuR9J=WmN8G`Fcimsj_TS$NaYTRQk5?N(hWB=-NFZ8yNUVk^PI#-V7r}> zFTjGBScyuJil|hYxRGiGaB$NETD6ft%1^Rl=RNuT?fCgcoE}|RfZgpbMcfS{0HWSK z-Of(--uXMb^SPZ4#Dg87kZ2@YG*QTzIkk{zA^G*^0C9SBVMDbcl+%WKD0xLJXK^eqit;QZJLd5lMu2ndRT7YV6~xisu{b_(zNd_h?U z&88&qSLg@!`|Y5G7V8(Fl>7u2k$>9#O6T|c(;?cAYvu~}Cm27)WO-)VBr{ft%7O+@ON<_Z^0000Px$tMF!vpFVPcH!Y zY6VBi707MJ2zHX|1Ia+3-z=*OnD$RuRedMJxmpMst6B<2h6SE@w+#*PUpubJlwm_+4nJ{Fe-vonJiNP zj9cv#9DspF0vjhU6W`8 zU~bJ;2fufl&wrB`!twNif!3TKpVXG2SuFT{bw#99Cjw-CH7-`#0c#d3?R*dTk<43< zKl^D3&ywrZCSw3bVFcXNwPzT#|GCWmh?_F>fvfjk$TVxvU>XRJb;0X|bj3zqkCa;* zI-cr4X@fvJWch^Uz~%KQjL;%zUqIyUKqD%D?d3^VUQd=O#$~Ms&r-2DjJA#2Mq_qY z0p_|2sx@Ecw!JneGT;MkYeZcNC~~faBwc02x{I{;^z`)fRB85KuEOQ(_W*=CAdGSY sSf*KSCU5J;7_7BeYm471r3iw6zs^U-&tv4qM*si-07*qoM6N<$g5Pog^#A|> literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/block/bowl/white.png b/src/main/resources/assets/hamsters/textures/block/bowl/white.png new file mode 100644 index 0000000000000000000000000000000000000000..d18613716e1b0418ab136882172757640e3405a2 GIT binary patch literal 405 zcmV;G0c!qPx$Pf0{UR9J=WmEDSiFc5`LN`Bf}!HYm|`u-2nt9^^IP$-44T0|u2f_vdcqt!Kn zfx`NMkm%q!nIto$s;UYe(=oT(7fI6sLQn`nvE4Fo&N^{IFbKhMy?%oH8Xyz; zRi4*_ArtnSQW-dBx2P~QnzQovm697FsWV?W^n`e zdkT8FWSy5%CIH%dZHc08HCuwmqinap3Xd5n3jYE#$G~Pte8@;BUT#4g57+yCLsPx$>`6pHR9J=WmOqZ#Kop0+F#{fKccF{KQjv>cTc$~sJ8ZpYK)FJy6lu4K zlxj~9i4LW3Hi;rdAR>Wbj7=tmF&G=KSY)I`;**{{f1c;}X2vtmV(Mc6yw(-_n2q`X z1b5)Jx9zEa+MoK&zaYY2P*YHACT2OiW7gcnKD!=b>SLtp30c2D+T9(;I2;m3Uy1d= z1b0bWHi)b+fcC+15balc=ThM9w+p1#x*`sT)F0jKb&AH9DDMU1+ditZ70aXjLXQ;Xna|E4E6K|*(m=|k44Xy>lM%gBkisMc1+q`6YGHi2!2$* z0zbdckmK8=GA6mvRA(KXzw6v+Rj$uuvfLiSR5)Kx16hu$58(G?y#;ykeSw^c!ZCE) z`|taFLa73&1Xgy2S>bG1b&~8=HFYKafr}{nwP!P3wyb?v1=Wj3+7y#fS-O2lnmv?Q zn`8^}XFkh)eO0hofmEpMB06ONo1X~F+3vOFoMze2oH=vmOdj$6Px$?MXyIR5*>Tlg)10P!NT`0ds92CNdC&P!lDakV<`oW|2jopz1^RIikKnRZ>Nf z+LGdeO!)J^O>P${)JaHJJ-gA&J-Tz|9O<8)YXHY-Q^aiMJ*rpB2~S}+I!LeE*LI_` z9k3gnXOF^QO0C`^45r&&t=Jk2Zsrx%>y*Ivw9|YgPP2znCQ4Z- zRRzFxulYF~==Q;}Sk-;9EPWv8b^H41?nOactsVf=>1e0GrGC34hG9w=%w+5i$g@b& z^kF}xEJ>0`k|dHKn9J3dOYZJmsZ^8zk2UDDk1-5W=XoL%@7psCUh2z-i+7CkHbJn! z9o^`|qcgGX7HJxhrZHi#Bn+3tamf9Bu1(99dVL>&a@oKbhI<-fy4@4H-4g%};QO;b z_io^Mw-j{JS(f5BZDuo%(qYXPr7RhZuI1C^M<(O%k|dERWeFf*u#{S@A%KkC0dc&N zN=1q9FU7KI|3QQIZ_oKWfi#Us;+3w~9kCnDM?NskDxP=C@W+)t=p0G4y7!l06Q&|| z`Cx;h9{`MEu?bHxc}3IgO6=B&|4JM@TwqsXe*>Qe0Px%2T4RhR5*>TlFe${Koo_)t4JeR{t2ob;~Ekg3QYoigEoaMy6&R%A^RMmZ%`6L z2()pq@qZ#)vSwsFU8GU%knVCeb7t;v2F`r)<-;esX$7NGrqjNC-F_=k)WVo0#$*_y zF-DUl_vmbH9mf^N*}?UEJTJiQjI50!AEkUM)rfk%Z2=aG830Q8B*`45N+?xg9uMt$ zy`mKE0^l6)i5R0Lz8^{F;+$UZO0-^zQh@+sj26#Rl4Wxl^e+L#b$!Y6OaKx7s@Zsh z>-u)J(lQ+X;;H^Om$UaLT;F+!2zj2_aygP}?G;M-C>5Yo34qb4%V>CGYrA{mx;}Ys z9s=5}BMVTiHH*|JY81X+Zv!xy^oq0DY+QKfsNsm~`jRFy8T2n%9jANrv!MR4!)gzX0U3IB=_`t*LMHlSgO@}!9kkDq-ji+rL5O0>jzaS zmmj`xXUE0urWFert=1u})*-+a2VuF!cznx7Pd3jDQPf~I8{_PU3sEYNUhhhNoPTFH z_`StJn#2-@H34MMza-1%;(1CIi&%mne1Q(Wemv#p5R6%(v-z_e_3pjdrYM;LL90!lu752KL000000NkvXXu0mjf*5naR literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/block/cage/black_middle.png b/src/main/resources/assets/hamsters/textures/block/cage/black_middle.png new file mode 100644 index 0000000000000000000000000000000000000000..75c47fddef39188315dc60e5f34d5c90d67b5afb GIT binary patch literal 599 zcmV-d0;v6oP)Px%5lKWrR5*>TlHE!hQ51#0JpM3rBiB4R^=$P@iXJ0qoNEp^JW`QvY z#%PSuM9~d8nOVni#c|efJs-~taN9#`!_Y@5pJFMbQfXL#`FsL^Qa({ML#Z4}<(N$e zcC}iP%dZ3A>~4q{qh)$Cl=exBZud;IUWihG0Ah?5&r^~lGwJtE0mOBENz+6C5&o)H z-Nto&yIg7+jDGQ0&&}mv?;YpY9wI`TCbm!rrBr@}Qa(xrD3t?XIP5SST-x&bhPbXz znwndKM!jhPO66MS8iv)Zu2dQTTwQgu-efY$YNuIs#C3g%qlxr;r!3Qj7^4Lcr2^4< zAzCjaims)7(qcUBiRUQ+UMPd_2Vdwft3=Taz3#c)+}f2=sgiLJM^oZ>N|MB^R!i## zB`FkcU%0mB;&$Sqg@k&2hkAVn-~k8uLYdL%H}`U~X=(_=DwD|wXEQ$+r2^@8&*Zpu z$e@4mfP*-iNEE?l4K^Hr(`~#N)Y5mw%N73_G~e#q$J?Ib;7<2>0C4tdxBt9j{V5Ir8T2pYxOGSrU1tmc!qL%Dc4MR7 lw6*H?fA>E(|MC7ae*mf49j7hQx&iR_ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/block/cage/black_top.png b/src/main/resources/assets/hamsters/textures/block/cage/black_top.png new file mode 100644 index 0000000000000000000000000000000000000000..3cb440d6e22cdf3bcbc85e019dda59c6f389aab4 GIT binary patch literal 565 zcmV-50?Pe~P)Px$?@2^KR5*>Tlif}lQ51#04a1oM9LxX`LaNalv5AjRFTCgzG<`^)!}tbGwJ|2O zTBeXe{^oxMPcNtxMDAR7Cwrfjv%kHLbdS$8fa5e-)oA3cooCYluVvR-NT=P^cCEE+ zuxqW2OJOjiQf&|h!)2{fZ2(X>ZWJX7Cz55c^#1%{GIj-!EQ`f3Ov&>^l({3m@5y-P zkR%XVLaP-?zXy|pMK?34BjG^$+6IJ1AwMl!a1d z09^N$-w)Tixpyd5d6z6p7Y3bnSHGTp6=HUKfvF!$F8j+?kVK5~Or^Io{^K-6E%a&?&7l2~Xz<3CEG{m&qN3`2V02;veNB{O+ z!}A_l;iR)H#c`U9MjnOziZ4o8((B#I)#U|){=FngBuZHVNEl3|QmF|befOF;o=K^s z#P_FSS(SHS@a5AP-v*GT5lKAL)v6+2pm5q+>@$vMTXO)&pnoq{mlp)Vc$op-BL{y07l;usePx$>q$gGR5*>TlfQEkK^(>3gCqAV+~pvU5V3Il)upnuwXv~x^lz}spJZ*LjWcSY zg|T!jG8(}gf(b!}OLq5wyIYG4cp)%j;p_JMo!!~@nfJK;bYBBNvr$K0o!-f%a}o(G z%J5tmNhDx+F4_mJ`Ec=4I+7^*4$_gF?~1;IBoZhj>wTs&rk)69KR+TFo)Q4FX+j!B z>S@A)v&M8ZB+owssUk}k^UX$$oV^&_e-0SFMl#~?{o^a&UA3q8Td69NU6znQ(0Dg30#|x?hj9f2~G3CR98|r51pjkKXDrHUCxf`|KGF!*&!+cF7&m0IwZLG|Hluw-aGO*nY< z;0l9Pd*0mpgdM915eXc%LVfG*4f=r(sbZ*j3~?qP&IF`TK$hu(wMN%l2LRl@QvvVo zwRPU>OnJ}CGSY0+(dnI_FhrlWW%9>i$agQ^pcnQiRXq18&IFyZOK5N$_K~VFZOi0f zIO6VZ<3BK{KKp>u?-H`f6j?mcR@tQ&c$aeE*cN)-V|+Vk=|*##rfUNLHmVLdD^p&} zaxFY00000NkvXXu0mjfpK}Ce literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/block/cage/blue_bottom.png b/src/main/resources/assets/hamsters/textures/block/cage/blue_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..777af337a4878d30ee022b9c391d6bb6de8b7052 GIT binary patch literal 614 zcmV-s0-61ZP)Px%AW1|)R5*>TlD%@%KoG}&E6LVL#`0I3#E!$@;Ug8Pcm*1s0bT*RJQoc#%rF$t zgqk8VWE`-ulQ@pC9DUf9brgvOWC9KRo7=m+-M#zmO7r=9%6g6EY|iLpq;I#krM^)k zjAEjAmaTz*K^o6Bh9P1IlC#)q*Rj%ZUb_tij-puh*luoUfYEpYfa@sEzxx>Z97aAz z;s;u%V7iJyZ;WMB<`PCRNf07 z)*WIdsf1B1fH=yQFp4FNVu}4g4);GXIzAIe*#bzlUXg!iaCh$`P1Pds1HN{;`rb}k zN|n;j{!asfX+Ri6kfz#Dc`10e0J#64iagpo(g54djo&JE`zM)wbkG5~+u0`IbR(4-9HAK9D=l zk^Px%BuPX;R5*>TlFd$2VGxF&IX&(9zEfNJLxC1BHvW*9$jVF5gm?{l3%cWayaYBH z5);BgH@J2|A^~mX0Hst;Ie+cx`CN!K5^xw0#g&ykH& z7TXPkOVyveLGrdS<5c>uA9GdL)usIO6;4zF5zII>s#KJ6wT!D3S~<8{0dUwo!s{NH zQf)@Cb3}1Mtx?4;3|(WGV3&)a9a1nqnxZ&iwpIbaDQa%5v;j=lI|1OVH^3T|LJ>PB zlZ!}_PLEugNf^Zfh*pk-Q7mB;OY8@-xATGi(Wz+V2q3jaRsNm9?e+Jx)DnRo@Oi&u z?yR(BraJTU|HFV_7!U>#WSOy4L5k%Y0NlM-LmsXl7=Y#0{4WzbhsV?WV0RzjJEu!6 zHRtGhCs+e|qLm|`_Byh?v4z+1B#h$eoxv~=w^S4il5~1ZqC~WEq(3;9)z#*IU{HVY zj{I4kY&0f|N5A!fs}=2MoT3JxQg@MsXFKNVw58_UH2)JD0Bc+u3m}sy zxz-1OcpXo+H@1lVKmY-xQg=l*H#b>ZTl*^pFYiC%8zzY|1W`g*g#Z8m07*qoM6N<$ Ef}AfAPx$@kvBMR5*>Tle<$BQ5eO~*=*Ps*}O;~7z@W&M`dYiV`J~=-(bg|WKE-uGf1I@ zSUMIAVvvnlA;e5J+`YTm$F*P*LkN|g?tW*!JNNwNTyDJFR{+p%H8HQQe|F`Z1_F!H zT?cv^2QaFt<@l>H&!3N2K2H*I^yud^J~w&$*23`4GdX=N-|_YsH|p{ zmGv5I%Y#4-D$BKBD-$h0xJLj literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/block/cage/brown.png b/src/main/resources/assets/hamsters/textures/block/cage/brown.png new file mode 100644 index 0000000000000000000000000000000000000000..56527158cf6a4768ecf9ab52dc3b5f03d0911af1 GIT binary patch literal 596 zcmV-a0;~OrP)Px%4oO5oR5*>TlRIw{K@^40G5g5cyWWlL$ij{l5m8Yf(a=)SL50K*prPOwKt)G~ z=;$c<1$0!0Jo`wX%(@ zx+CvG?M_Bmm$O-h;!Z|zHp}>V*f?vh9~!$pN=^}D*FT$;oFd%G2)WeWVHo%f6Up!0 z5WVq)0GK3#s;W^WDb2jWffw>PyaBNQHC3TVQZ_w>T;2HWo`r%UWjH54>`gB{_qsV> zJ-LrUJb*~&n7FR2Rw}GjwqWQg3|)h5;N^oY=$a};lJd=$;Uxyw&H4VtW7M?>-Za4Baa-QGeTyZ>Mm!UUMFMXczz+h1 zvA|+6mqy;CV_5)zlc)ftEL|B3V7FeyZoLWs5&%xUC289-(dqTG9+7d9qE@yMCoXa$ zIy7{R2S;sw{PY>E&L2iIK||LFfZjA<(JWAcY_ysPqmYKC^3;zwoIC%4!Q1DLkei%9 zh#BH2kap2#$+0i^Aitrb-5V@@P`ydBkOu(#=mT7ZDXXh|uu|3!0H9=xRd}+=%bMn@ i#47)ixYZ9_mDs-p*BeH=z%Z!*0000Px%K}keGR5*>TlFv>PQ5431XXwl@ZRrej2wEUSki=->(ydz;x-#(%j0>MYU%(x4 z=NtG0?p(>1g&Q>lECtH{mUjAYZto1`x_~y8=#Fo5&&hXkPVSeVti66lcp0JkisQ4I zSzTI`JF`VpU!!z_(kV)(M4b*Q?wW~-j98Y1?YLCqJQ=HXWW3PFb8Tk)0t<7Y0cf;3 z0C=uVqZ8x0leq3AQL}Ca1IXnItT-vwrC$=IQ>itYvcB=1t=+1`eJ!5r2p~$Q;yJeT z;+~W%I~YW4+mR&EQjTm9uJ!KeEUsf4ouu;NTaBCgpD*uUJ|U;h5V1&-zVQpb6oacT zd9H&u=>o8Sbjse*u?c5p#I{{jlCoJFka5}vCIy1&kZdjwU_93bKPx%K}keGR5*>Tl0Q#VVHAg-bK&0G+m_x!FF}E71W61gj;<~a3_6+k4UB`IK)-++ zadUOz6EKi4$;!Y&3_+nl3#ESoZEt(uzV}jI2M9?CE{5N9PJYA5dGg5ehb4l`7OJnP z)*EKwaZw&j7EpbS(lJUWD4oy>LsZl?BO{|?Sr)eAQjW5WTJ00#1wNi@GvVi$oeB)V zSvv&4b8XJT2-i*Fx+z-cO*0rkCYxj4Nw6;cX;C_n#@V@SY;Li8P?o5##d942MCn94 z$Ch5ylfBYD1`*qKB#yQ0wQLct^ZC^zu45Y=C-U`YgWLI6FJIohB%|txSj2JP_&Hw+ z`Ky;a*TGA<034mvI6SGEU}8dS+eO6*JB(*Q#r_+wcrr!~0d1Q-=3%mh9vZecYgFP`hj?m<~rR@W(2szV;M!>;7A z88L|LmGvwqoNU2hlmDP1xolpP)WV?pQ+S(dR hOH2R7;K$-?{sN%QL}o9^pP~Q&002ovPDHLkV1lugCx-w4 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/block/cage/brown_top.png b/src/main/resources/assets/hamsters/textures/block/cage/brown_top.png new file mode 100644 index 0000000000000000000000000000000000000000..8533aec1b0b0b6ba92d968881b232ee7a2973ec1 GIT binary patch literal 605 zcmV-j0;2tiP)Px%7fD1xR5*>TlRaOt6l{F2>|ELg0zv(q0{Rp9g$%aqgFN$MmACw zP3oG;!{au$cXrY0oH3XR>Y7RbbS54Pxhy5fMym-w@Tsc`&)tB-nfV_We0cQ~sqra< zm?8{3X%q~WOyi0NnKcdV-eBQD^)_?a3;q_&0h0 rfUV9Mw|917yAuK+0Pgqk?+pF`w-+ck`9r3{00000NkvXXu0mjfWabDq literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/block/cage/cage.png b/src/main/resources/assets/hamsters/textures/block/cage/cage.png new file mode 100644 index 0000000000000000000000000000000000000000..2f085e2e5de57935dd022f821db3d3fb31b36817 GIT binary patch literal 269 zcmV+o0rLKdP)Px#$4Nv%R5*>*lQ9m$AQXnbHpaotfhHwk>(HZha&Yq^T%um12Vm>ajie^_5Ooox zf^CeG{{;N-;C;N8bzL_DD5VHxtp#AbjQ~vdiFb)YurtOW3V|`kFFLtHgYBtQ&0u@) zRjQ7IHcc}}*KGKCI5`~mYv+@Gp4j)5GOhIt%iLut{n){EP~inO()n^)Wsve0DO9Rn zeQwJCoxxTi0m&MXrHonpDTDUfM$bysfm6r^o)EV>&IL>b^Og9iJjSu$S;)p6n#}uutkTKl>r#<^z`gN+Mz@k{o5jLu rJ?e$t+HTf~-rDRZ=AE3dt5cp!Ds=Y+&kMhR4rlOm^>bP0l+XkKwNqW` literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/block/cage/cage_middle.png b/src/main/resources/assets/hamsters/textures/block/cage/cage_middle.png new file mode 100644 index 0000000000000000000000000000000000000000..366cd855a040c1ea85ba7a7e3127f1adfa181f0a GIT binary patch literal 645 zcmV;00($+4P)Px%KS@MER5*>TlEF(GQ4oi}2{CWqk~OYmmFgiN$=t$ zV*#tRws9QWOeSN4xqzFS8=EAFRgSXi=@XmsvYr@Yq;c^>ws$r;JgP_(MWVG9K#Vcs zIF5v!wv-R{7~T#+9<%r4SL~IJW+* zFF`&)YmL?#*L4A?)oPrbo!R;MdC8~@aU7Gx32DG4NkT9e;7xnn-3@>-hI~E`faiIX zN+kf>xM%>N97PHcrIcK@no>U4qaXFe7$bmattE;giK0lFt)^`6Y*PDP6UT7`kR(q2 z1B3njeYDoJ+ij}Vs$E`QmLLcw9)w{?7>4xweFlSp&3ak!eIEer=n(^B48>xRVzCHd z0a~pV05dZ))a!Ksg1G>|#&OKTqXilljS&N_wHzK*WNl-W=Aa_;y8|6wXejV@&5yZtPx#?MXyIR5*>*lCe(1Fcd{ktO_JLF{Dy0y)AQf#FHChlbW`q}Rt-K?%_4iS};KIyB(y&oy7s>;LZ?0Tt(b$}b7 z!WY;`50Ceg3{w8d2!)u*c2oY}8Jr6ekj#i)>X^kpWw3eKL~W&V5Hw~J={F2!&o_6> zm1nM?5yR_h&3g}r9u9p5z_IW6@Ex5Pp3E%(mzhFz%O^$lU~e5TAprmY002ovPDHLk FV1jVRftmmS literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/block/cage/cyan.png b/src/main/resources/assets/hamsters/textures/block/cage/cyan.png new file mode 100644 index 0000000000000000000000000000000000000000..a7e91ac49bb629e53709da75528f26239711585a GIT binary patch literal 600 zcmV-e0;m0nP)Px%5=lfsR5*>Tlg&<3Q51#0b$ff;16U|OsREX0VnSrV#5nK?9O(-<@Cis9IWs7mR8{0-rn2epeeK%L#kDA`B7A>9`#&)6t7moJD2?_?f(#A zEN``heys`+QC%*b6Hz2LI3!hfr0or8wdB%)h$5xK^HO(X`qmxD7)R5p_4>uB=bqJ9 zVc|AA$#rPOc(t-)@~TpkS4a&Q{EWfR8UVtzWui|@PBZgzLj@9R2^t1}H=K2%K|4Q3 zlD`Dtf`QIZ+_YpzMmtwc6bUAZ0Iq9rl(Tqa*%i5TPHKEtYJCx}wWs9J3Xq>MibJb7 zv~snIqW3RpRlX=?i~t1q6<&6hdf*E mH?CKt}|K>is30000Px%Gf6~2R5*>Tl21<)K^Vq=@9uWD(_(20reX^uh64#9UWf-T-i$ZDf}eoIgYjmJ zXN?EHfbm4)H!$%aO+0zP5ELUJpxpo>TUzMOcG>NCD3(7#Pdt~IcV^!ANq+Ol*t178 zy*m)?k@#PXnwk^$+7wBoNxGUe)TCOI?)zBbmN9l#uw0B=z)Nd5JDpjhN(yo{>~f7< zrD_18RsevVQ^Y|4UYVX(#%it@(g-s&PL~6$N`6_=P)qu2L*m5+!nGwyA}x-m1due; zVk;%m*%f=ejv*r^QxM{oc>0P6$8sJ#1lKjhu_Uiwa$f(sm&*Koey6uUY$R?Ph9|`t zoxsj198ck76#)9@SK`gj#=1HsCQ~HU8n>-*_M&McwCR;*F!}2M#?JMdlCCCOEccxX z6};KI07f@_0OEqi8p*DT$rMD|Kg3?IV;${F8fpQ=@suQymL$?*n!dz~3mp01#a4Yj zZd+XfgWB^a92D-++xO9HpG+A zs8T)Sc(~&a_TA-o0Q5>TgELjDq8mO|srx}3Pf578B*EJkM4KyTbI{rrYq%nYjM(dS zq_ZowQWEb4GNQ&Wfx(TZ^K9rj=muEf)`dB6vWlqjjn3*v<4)cbDOCDH0|&7lzcJ_C zRPBVv|JVRHrwgmO(ua1u0_etBaHpjkKF;4JX$F{58EFQC2c}dW4DFR>F8qx@dZQSr T;3dr-00000NkvXXu0mjfpiv;= literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/block/cage/cyan_middle.png b/src/main/resources/assets/hamsters/textures/block/cage/cyan_middle.png new file mode 100644 index 0000000000000000000000000000000000000000..6e197ace0351df6458f13307c154c9353230571c GIT binary patch literal 630 zcmV-+0*U>JP)Px%FiAu~R5*>Tl0i!pVHn4M&&=%1zPq;WuEu7&YJ>+#q>FUu(j{VVeT6=O&>^}- zbWS?-1*DVU7m%Ps3Y|O{Vi}2OIjEVluDbKijx+mq*iaPf5Iv`d=izz&@Z%=~FP_lw z?m@Iq;(sz~WJ26)BP5X~X=~C@lWI+R;A4f`#@JcGaxrcJFRkJ1w#JPrDah5Z%QbS9 zssV_a0RVPR5eETyWjbCNtFdB8BTUaAZH}-i`DIB%E$NR9iRWhs*OnxSv^bs;K+;f) zt&~V>Pwe#t3>h(*f)F>w(^o|JUCyJ&;JSu5mSp-B7wb=ZsZ2iPXL<+3M&gE{cUYYM zA?%#O@f1#00ieHsCf@vLtg9npGDT9YaSs*Fel%)?Lpr4~O#V86v2)#{q^-#o%iW|x z1#kQTfYDn%0C7QM^<`JZWC|jO-^5;Dz&bgQG}Ho!<0(lZElH%sG<=EYXE^b{imkeQ z+(Y#r7}Q=q|zywBK=7I^*aO5 zQ>mUyJl^$B`}Xo%06L|y)0wJO(OW)Nsr_CYPf578B*E+y(dNo|51Kn-^;X1?5qo_B zY3+%vl*Idi^r^xBz~JWdNjCHZv;(Yg`%({_tRmX_LTmMdaffe<6e``PfrD62-ZXZ)^ap8){L2Q`ax^0FY>NMS|HWOv4wTyAK?Zxw$#&_4+?Cn7(zNUlSiCp35@N Q`Tzg`07*qoM6N<$f+x`?jsO4v literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/block/cage/cyan_top.png b/src/main/resources/assets/hamsters/textures/block/cage/cyan_top.png new file mode 100644 index 0000000000000000000000000000000000000000..bad82bb65e4f25b89958a3012b46c4d016214369 GIT binary patch literal 604 zcmV-i0;BzjP)Px%7D+@wR5*>Tlf6z9Q5c4wcXoDm58%S`lU2Y)O-zUsG{(X!u+kf_@Crz*?2H#6 zvG4|ru`r>tG_g<;Dhd*_5s?tlT>*g^b_Hg3c4m*ohJUfquRG_>_nq&&d0sh>URnS% zI>PY^tF;qnC#Z0`+QkW6C#cXaPSE`L_VDs_lL8-G>_>rrsM%saPEf(QkpCg=eiu<9 zXQ_gIE(s8ET{c?~aV*>2Bl%m><{GqGvRO~Wv9i%c>0n~^?tRD^OEXmK&8su(o~Nrc zb&sv|7PJzaplTVuq0I1gGF=8YXK?cdfM|Jv_|u%#*raSvi8KuH8U}Ye8n>cByEs8w zyb55wu1-_Z49WNPcb*z5;|-Mo?18~?A;cNTFUn>MQsbL4E3-JQ9i{uB0J%A%Bnp*8 zp=?l7{NXjN+81Sv5g@N&jy!N5JOt0P#IceW&(3&op03fSkNH)&Lwl!2xIAyW$8XCW zER#ebNi!s^uhXt?knYw|8rgQ&C1v_L%=9scx}U$Z06nFXAnk4(f%GRv%;*SVwT4q{ zzL%Rb+FxFfKQm3VT2T^(a&w)3ruB6>y(L+)%B;+yy-j6|QM~PIz+CUlTxA78S1;}AWX;Wc(DHF4S;jS%nOkAHqYe% qP_$Z+KQoODYMrcrT;Kh74}JrNqzLN9s+AQ00000Px%1xZ9fR5*>TlR-|~Koo}mKk`g8$aaJU3c^B_I0V<=23&z9tL{;Eth(n0*>MJL zfD|Fs(Ktzk+)V7$_6*5%QJe-SUG?o|p61Pa-}`@FUS4_tNYfO%p|yT>uBr-eBMd_X zRaGGjLp(e@Y%kwFGR9yq7{C~_%?$U1a!`E zZ*Pyr7%rDftk-J_A?Tc=`Z*=Lis$F&5JGt897m(kyLLay^Xlp|7K`t&)}ky+e|UJv zqoX4zr68q*lo9}tWf{ifu}{;KN-5NJ4Y8acczVh`0K{>OIF13pE2RJc*4izTBuQ{~ zb_M{x1MK1x^bQV=83X}Ws};4@Sg+Tt>zV*4rKGi%)>;~4cz=J7*=$Co6ai2yCw~}R zTwH8tyuH1B$KazpZ*IQA`xeF+WLf4okY2>(cQp`25%N6W)rha_8flthqHFZ}{fJUZW?9C&yF280PHQctlmx)CEEz=+ zz4z2wqiGr{rC1aNPx{S&U~ql?1=Fd9a}I6W`Y;TcB*`lsNGUO&&++*9=+iW1x7uFu z4Z(D(Jpc$HAcXi(2gBhI!{HD`QTXonP4WrBZkrvr&R9F((1G3!t@Up=0{?bgSLkn! Z{RJiJDaFz(kT(DT002ovPDHLkV1lgz2OIzZ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/block/cage/gray_bottom.png b/src/main/resources/assets/hamsters/textures/block/cage/gray_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..673533fc2c21b3834486a84140e8479a8db6a5c8 GIT binary patch literal 605 zcmV-j0;2tiP)Px%7fD1xR5*>TlFd#VF%(A69Xt+JCkc$85gh>%8{Uf7VAXxpMI~0<^AtQo-hd4f zgPb1(Qznzh8Bd72X+}_$9pCcW{%jo|84iC^*A;bLGn>uA$;pWv9vrHXC+# zcUh{hL`O%b;+&J`=Vuv>M&x-e-h0tn3n0!pF~-PhwGwMBAp}uM$$Gt(FYZxu$eU-NH1T9?bq@4UP`09%R9#mAAj>kcECYDwLATpwJRY|kfZ&`X%Q7CUBkFXzqP3Ph&*kRk zhVgj(&V#C|q}%OE2tlm1tX3;A#z;{Va@<*c0)yf32a}1VX&UOf{;vmGYi6?PwZ*SY#8^N}a+gNK++e2kp r((m^v%d*|j@Auo%BuU!hx21moUHU(mgw}HW00000NkvXXu0mjfz629% literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/block/cage/gray_middle.png b/src/main/resources/assets/hamsters/textures/block/cage/gray_middle.png new file mode 100644 index 0000000000000000000000000000000000000000..32f4563eb7bdc6b24bbf01e62a99c8b905c9b0ff GIT binary patch literal 605 zcmV-j0;2tiP)Px%7fD1xR5*>T(m_t!P!PuP{}}s)r#ciYXp~xj#0IJ7=z>#l4OZPpT~uP#ZN({k zh8zM3qvs?DTpTBQ@pJI&rbMEGO~ou{q#5a(pNvL7XquX)X_(Ds{^;mP4h{}*&f%QH zT8p)o`Fu{(G(HFd34(wy4EflWgpFloCL!wW76_)oLZi7`*oqhM}z2Yx!XB zMEG0h=jTLG$Q*LSdt_`YmHJ0r4#_u=@es(Pm)Bo zwzja=63uT3@9zr_5XbTJQm?fJz&W?+$8pT*=_!CW#sJXn91`sBf0i%|Ww~66F@~q7 zC$ZKFAWA85&WUqQs;ZLlc+7M<6|J=Z63uVlA%n}ypLpL;RTX)j`;(Is+1uOOIH>EI zx~^F+mvmj{d%d3Q?Cb!r-~A?Rn%V=TX-b-=052T$`+bU{*yI3sYb|M-a%(I>uh$o) zl;n9XS(Z^0#R~^@T}!{;7w^3oV_26hPG{Kn&wppN-1Wu z8Q0g>K21}3er-_R5Kbn>0~_maIT#EE3f_yX2T)I7|iDSbxm{AVpC~mSt2` rC4c}Dls6(-mT`7=_FozN`tp@Oh&@u*DUVS>00000NkvXXu0mjfaD*3i literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/block/cage/gray_top.png b/src/main/resources/assets/hamsters/textures/block/cage/gray_top.png new file mode 100644 index 0000000000000000000000000000000000000000..a2dfc86cfa0c8cf8bbdb4961f025692a87d53682 GIT binary patch literal 586 zcmV-Q0=4~#P)Px%1W80eR5*>Tl0i=6FcgOWzlvQMC8>x&1uQfYhu|9AfGevH_W4p2}`>?L63ZE+sLj+Y- zAq+!2Jw0tUKOZv2px5ic7_-TGy&kHnLMKU1*fb5>w&iFv!fZAp0KUDwF$e-W=eW1G zM`H}<^EsBwC4~@l&Qbjylj|EVE-oO1@Xk3tJUo19cUR8q>+hJ&e!^OdvMl}K;USNX zj-Zr+loC=(06?0icz%BNT5Bq$P}eoYe1zcjHTM7z$1&nK1^};=0svTRH%yWw!TI?) z0Qfav7oVbYaB#vP2)I}*m}ME3%O&f&CICt)X|1KTmc|%9K0abHnNTT302K4lUj~<# zmzx>y@9)1b*p>6{?gzYYVT?hVrvB{gjQjihu-2}*pe#!)77MIaE8p#Q`93NRR=*Im zZMhNYT_(TnKomvD^L*P8U)MFX))-|qI^AwWDJ9c1#O7&I>*PF0N6CmP7eSu&vOn20~linfB@JjUjCiI YACmYu_Ra<2T>t<807*qoM6N<$f_5SVxc~qF literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/block/cage/green.png b/src/main/resources/assets/hamsters/textures/block/cage/green.png new file mode 100644 index 0000000000000000000000000000000000000000..cfdf8f14e80c9f1aa357aea2aaaf1204abe67d80 GIT binary patch literal 554 zcmV+_0@eMAP)Px$Tlg&;PK@^3*Q`19{7AEN-=p>*EkYG$$xtI6~E_?wOu6za8zJiGx z*G6B#g)7+^6Hy_95EK5!X`LRLt{%F}MKjt6BrZIgx^-`=QuXB=-F<=wSemuewQ=aq z?BkeoiXsT&xGL7ZxZlmc54jj@RIOv#sG6IZj?r+4$`tkA8-DB~KzWXuO;qG4xPr1C zI@&Q5IWnjHL9r~2Z(O(!L5M#|QTO%v=Uz6~>eB|vL4hB^QH-DMNOPSA)3$*P4K_3Y zbT@O>Kac$Nc_TXwLs!zvmeI=N3S#~5b)Z*oOaO4OlV1qfwC5UXHqmf^_PXG6DRG4W z+0ZCUOJ!-P?@6h*?;P9vBTZQ&K)tNS;PxYEOyG+geSCJF!DVwjd@+eV5xqgddN=ng zx2&$U16*3-(vp5s&`(N!9+wmaJ`B-JtKt&dRRRXyJ3NaEmc<1NR7?iF69C%N4K{bH z`jnF&x{{??%kc0GhL&VQqm2!xS1%L3Zs*Flc8bzTh511&flDGs(tE>t@I8WhpDcMd@xqs4*)@Z sGY-#M{KqI!%`_J!Hu#ss!R3kl1tm@FcJHWHT>t<807*qoM6N<$f;7DP%m4rY literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/block/cage/green_bottom.png b/src/main/resources/assets/hamsters/textures/block/cage/green_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..3f8c9c63a022f50b10f342c7eb62ba084f9185b2 GIT binary patch literal 569 zcmV-90>=G`P)Px$^GQTOR5*>Tle=!zKoo|*GhXimYqOG#0*MkR5~2W7Xpkt0cnNp_3MyWKnpXhP zP$Qm!f{L_AfU>KQM3Hja>?*eL?s(TT6pj}Ip+N9A=gf@ea{l>_JbLNlV#ja@JI51u zYq=?l^FAiCn9P!xg49?}V@sCdJP%O{noWqkd&vD~xYapLr7PE)037e-)49%xndXB* z8N;xQjfEv&lDHsCVXHfFcZ`#3i#|F~(-*X~;-qgmJHlNG5zmJ_KYu}W^6e+!HE~6b ze0sre`qR2>JoiYB3q&B#aba6zKJ=K?9y(CyKmo9`m($%JyM;(eqY0_8^hRsQ`cquJ zCV;>3L`939_&$=x$l*4)TqH4t0HOmWqs+=EvvQhPdH=z%do-4oRsu+Gv?l-V!QZvCc~t5IXhK|d+zCzi9Jr6_PgfLv~uz6|sR4PxgEj+JH2%CZJZPvYJL zfN0jEdoZd0y-ST{bxxC>yhG6z(Sedq$H?0^2|K&Fj4~@aDC_Jeg+whSiqfOuH>9PN z9K>T8w;%im4<5dn;c#z+F_2{!b1)MqcK35WelhOGk}uIY8(*`#WiR}C+eI8ys`CKQ zs1K?}*&O@;C9FYHKNw1&8r3E<03DXGk`90FzRfK&%`1HeRIdVa&xRTh00000NkvXX Hu0mjfw=w{d literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/block/cage/green_middle.png b/src/main/resources/assets/hamsters/textures/block/cage/green_middle.png new file mode 100644 index 0000000000000000000000000000000000000000..8cdd93164f572ae611062c966982c5dbed03841e GIT binary patch literal 574 zcmV-E0>S->P)Px$_(?=TR5*>Tlg&<3K@@<$Gq<->Z%UKapd}y+kf0>EA#o`&anUEx2XNuaS8(ks zXk6%;uxIDOm1`3JnAl=sOJq_8#&R55;uz<7h*FTxL+Cw39=*b?%xW&;)?yxjPCJ>d)w^ao zJ~_#9xt!(P+=4Grm=X`*M`Pk17$&xa&Aui)b3wHM&! zacP2leZy~Y-M(zT_J}$uB9J7wa!I6G_L$KgI#B390nltGH1@}CuA(HDhk>#5MytsB zOWft20RDuDs?2-h`^X?f4tK#NB9Tc25FIEP#a2eKmE*|Dr_YAg(O8OF2_U`Es{A{H z=N}5_iO>sEzU?M%{hpTFmE6>Wew5OWET=8G-N0B@W;KKEM-(Ly9Vn^Sjcjj4G+T*`VkPx$=t)FDR5*>Tlg&;OQ5c4w_q63SBQ$9V+5}_)5{wBe_7ZQwg*V{BmABy9TQG6s zn&2(CaHTtAA}XZN#)QAp(M~(enKE-+3^heyrSIl^KRI8{_vAf#_yP~GGH038&WXE} zhap!~uR}Qui{RsT_ow*xB^QFN7w1^EUi8gu(`Yb2d5n6W3_p($pfp953d&MczJ-!5 z8g>j>ip)j5pRG#ciA#^69N^Dm)OvgMxi|H-@v=m8oZ&|>4DoYKX}(!v#+I;w!3G9^ z)^5u7w~@cQU}R@t;BvajDq4G9K%Crt66o#4DFBW;>9v4OW4@$H1r7S>umwJqB9{q} z4UCdFR}$wsjdH#J;AkI>G;NIlb(0AO51v733ZJFu%d4vlZtCmln=1BPbo&|Gt<QSYj5v*o9ME38{_hNa16R-Z8(t7&)&Kwi07*qoM6N<$g7*~-qyPW_ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/block/cage/light_blue.png b/src/main/resources/assets/hamsters/textures/block/cage/light_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..9a8dc5964e0ab35d2446713523d4795445aa3bef GIT binary patch literal 564 zcmV-40?Yl0P)Px$?ny*JR5*>TlRb}8Q4ofofxBG3!E$MpaGVOdvUyLNW6_W8}CVFv&QiB9OAp!P@DJgQKb5-LWK-3iE4Z;#R(x(@H_97^ajD1L$PjfWryg zPG8ns3iGsN@MVHSuH%VqBVIp{Zzl>h3B>=60FsIz17+Op2D1N2(P##eh#7o^gC}pN zL?dB6p3LOqOKXjTO}IRN@ABY&4%dUPb@ZcqNVy0@WlC^+;PqhO!*q&HCXqtUT#jsk z?A45rb_=UN9(Nb(>oii`Hew5%)ICW>ki*kJ-h5CT{S0KFO#OhkJtUVwv>1*CzTu$V zMY8Gt!NIe4KG{No(FlAWozEfVo2=*{ZA1MGKL0@9ts?2n;$bUWNN9jq%s3l#aHnGY zxQkxSY$ezE@GMVW;|g)h)@WW%Bm8^f<{h}M8-D-_4(#IfyxUg*0000Px$>PbXFR5*>TlfP~gK@i4&V;^_;&mH#pE;1oVC=ymcG^9Zk^gICK0VsKqh!>!P z8qv{F(ISe30s)p28H52D>^mF#a`sy0mSTe)M@g5FM!P%T?Cj3B-^#=15!V|&X$oJy zp>H>kYnNfHU_65)g~Js3F(e7vvXFcp9LKnIspji)5z0ka3t%fi1NANCbmGI1P4DT50~cK_*| zi*{a5XMg4OV~dk^7B2U8BGxy2L|{5a*LCd&1kuo0j4M*)x zCZ&SG&xeCYFCw;Y`9v|iZ=vtrMC##E2hjlH0gMuu&(Y;F68L7beF0==Piug!VD-di ze>s1*XT~sG#x}1)y92rXRxGZK>>gzDt?%&m6Z*y`;#HP~t!hxxu+%zd=%BG-yxBK@Wl`YxqSsp;0oo^s yJ8ta`SpSo|Lq)yf&>gBpLcQWFiiP3nukjBVp6-#1ADc@60000Px$=Sf6CR5*>TlRaarB$d1ARx8_iQ~jk@MX9KtEgR2k92ge&U?SktLMtSCm~l`E=d9( zKB8{4kSiBqlEP#GaRSo>f(YUmWf(}Y2$rSOxX^G_wG7oVtaz~Dp#Z*20CfF(2&IzF z;SjZ4g5zkt@H31gPLR)EGkNhcW#=H1af;X`0!W-7l@c~IjZ3z%@zH0+XUOv3%dh&-$$)B5z~a}OxKNu z@2WHf-v`?UKvm0HoGjqdQLj!7ZfFWcpK}n7AR56qhUF4ftss>wieqLL@4E+HV_Ir`oCbDyo$;0OPx$=}AOER5*>TlDlqGK@f(&u}^$_$5(8DQ^W-dh>8MGo|QKY1>eJ*y6Pq5dq&r&SJF~MC{8fkX_o!yyVpS;@E8lbt((mFa> z-a8K0R<#P2fGAWDUD+S#So4FwRT5Zgv3 z)43GVmbm_z%=$mj7h_4T#bh#_3n23M#m8@Z#FDpkG&z%RZ)(@tU8T#@Esr~m661?G zeSfAm8kRI0ak6R1B_L;;i><>sJMEd?+_0pOi*r6U=T^B|(n>+C8mCr{1L$nph@&ao z&HtIX7Uy}*=vNJnd5$l(jrhYz_6`(k8cFyI0VJ0|0%gK;Bia6@u24- z#r#cp@Zv*Av65jthA>2zOGy1TOC02F=$yjWpXmEdBwtuOY!xdR4UkHiUPx%21!IgR5*>TQ@u_bK^UB|F1|Y_+<|2qg5?Oih7se#dm$;BYu$v)Mu%D@r*d09uwwDPu|*Q;3i!CtuO&+|afS0$>n$e?6$xKESdp zt(0Q5`u>>*FX^n;zaxq!7!D(}T0OnHTVgJ^1}S4G6=O7tFd9jOVT`-Gd!5Nx+}Owf z0OEK8Lx?~FK&7&UN@WWGGyvS*KFsO58C+kBWJa`Px%G)Y83R5*>Tl1)z@qjBNhO*h>T7jAXY zm>L2m7+@qQ9YJyKjHtH@3n`}E`EJfRc~8zs-aK-0@`E6_#h4i1AKLBhHCbC*#+aBW ziZNz_F%$0YLc%bz3kwNZSV-WyNy0F|xx8%KN+pNZNjxt@xm>gWcX#&yXq_Yo3`)5u zl6U( z_AOUex3*Z!iR(HT^UPr2pM>E9 z!(m9X*|R%4pQTX9&Nvv2LPjIQcpUTc@@ms*CCkfc0OI%oCkO@>pjus}T3rR0;~<|; z({2Y$a{{a}&r~WoeE*q*=M_Y$lr$P0IXwJMtJRz1U^EIPpVwmTtJLdF#^XoP+L0g# zC6O>6kiqfsDOXoLqUeb*jQ+`i)+suj0T&k?yRlJ}Z1#Px%PDw;TR5*>Tk}*$OVHAd+gO|(wP(TTwNNbSjV&cE(+OdhN>EeHI=4Tk2xVv<5 zAr7uObZA3B0|Bnoh}Vna{q7az>tJi5v77I7PTt{7o;-4N^aIbkMC%CG_08&PQHsSm zw2lbF2(8CxJ?8p4AP7P;H5HSosTj5$CkQ;O)6Ke*iG9 z`@|=gD-l~>UJ~23#P@HdUT+dbp=do8KpZC_T1TRFB%U{tTJ3~h?@E-i1dzeNeFp}| z$3F>zTYNvD+3cIOwU3g^rJg+)4g-cm&1e+y_&71iq$6{4NdThg7R&Pn2B1<|pi)@? zc;P`Nlcdw}_{Rw_T0c-KrE%Q{V%cm?948@-MpyRs4rsOdFFY6y1Ic8R7&DQ2y~${F zCrVl3d4a@Y`W+Y?9v;(f_X)#$f*^d;1Emsly90jx>Y8#nFR9d%8~uI{+1>qaUayr( z>F0ZKG5?}FKfiqO$I9iR0MD+!V~bYFK;p^6y`ZQ`_0D26N7JSpZEjSlTU2&Tb{)L0000IqP)Px%4@pEpR5*>Tlg&=sKoo_~iQL#uiw#i-Kar~>OJ0j7V4ZcAh$pC6MBTFKh7DrT zEtM)oMS(~SC2CrH>AT$B{h|S&RB|v|zCW7lg_!RF zAfI<&2r)uF@1WW2Jsm#36o!{57FQ64mrq%-xB?+Y$W$sG<2a#|FoPx%1W80eR5*>Tlfh~eVHAbG(@rKcV@c9RTS8GPt#l=*kKhxy@&)uQTXr9fku- z{L9+f-GXkf`7HPayuif^TmW{OU7GdSu5Ee>7DbW`36DnT=~mHR{`<6`wL4V++O2S= zz;h4$u^dlIPII*yBl1j2vY`NZfvYSXC`$(lPe05nxc2$Gxc)e>>I9@6fg@*6nB76VgvTm(-^ixAWHFP3Fr(@_PhJ1+i%FPx%IY~r8R5*>TlFv>PQ5431r@b@G47EdBD5*qZ0tORfqQ-@f;XCNF_yTTR=+eZM zamA7~CPpP2RU%C?(j+6+IkC&uJxicO=C0_2G?{;ZPud6$xF;dnNV zX9LjO?Xvr`XX=e9QLYf{oZxVP`l^ct4CO`<*9U_!CD#HVO)@I8HvsT`#iPen0JC!# z0Z>~|6dt%kQI1G_eE!FgKFur71+&X|LfFyrJTqZen4a*X4PRBKZJn8=_G9M_O!EUna7TB!j{a8Rk* z?C+iXa-#@fVx6O>l4$W-?Q;#elRn2Iy!cCD)Qp zn8rK(xkNEcG$SmC{i|;D{+D(l-U-Qh>ZOaS(*f$ny z6TNmTn5fm?MXx;s;Bz}1pOr75xjGnN=P*KDUg{nhX6i!s=+A>@>M|Z$ZWQ_aDIEJt Z{RUDAHCgC`P~ZRn002ovPDHLkV1f>$BpLt! literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/block/cage/lime_middle.png b/src/main/resources/assets/hamsters/textures/block/cage/lime_middle.png new file mode 100644 index 0000000000000000000000000000000000000000..fc53d3f612b47acb6bd07912b0b066b11d30c6aa GIT binary patch literal 633 zcmV-<0*3vGP)Px%Gf6~2R5*>TlFd%kU=)U*(`idvDupRO83}B_U^HqpdIv68dJlRj-hmrjn7EL= zE5b&WCdP$9(a6Y8W(W?!=?sO^uhY)V=VA=W5ZoBw)qC=uKNmN0i3R+QzEY{kv5Thhmj*y-8Fh7dci>`(5T1-wkROUksaMDZw z@Lh|eR*LNz*dClVdb(d|ya@x#H8CD(kwg`8^fQx1z@mZ-Qd z_029C#B@XorRD6nE5aW=d1YfeqVr74+ow5~^|xG}zcKmdnuq~Ks&z1F%FK+5?^-yX zjpNw>)OJtU{c)l1?5YCzycXdxpM40S#o6G( zSLVZ^tWl4KX5-#ySAYxFui^lZy=pA0D^;TAU>}f1O^K|pud}?o{7)UczV(>j7G literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/block/cage/lime_top.png b/src/main/resources/assets/hamsters/textures/block/cage/lime_top.png new file mode 100644 index 0000000000000000000000000000000000000000..c6c518138c0b14d5cc3dfbd70a8e62cc66fd6b08 GIT binary patch literal 590 zcmV-U0Px%2uVaiR5*>Tlf7;eK@^3*5)*7g^|FD5^N=Mh`hGf+U(k6dxs)QaQ-Sd-JNr1bmyBhdb#aefQ{86v)Vlj zFVutfl*=kq=5Pk>DTT@$J72ozij-h6PVTZi$; z68^TfaxbepYk3y(Sv=px^IZTM^*;5T(5_WI`HLb-#sr5G^n5F4FW-F@XytAhfOadm z7I5ZKek#Y4qE4z-Z9C#Z?A3`FdX~akNyV8yJ3k@7f2Cmvwu^V;CETv7y&B^m>LtWJt$YuP7~*a{$=T z;{5XRme{afEwf%N16Y85Cjww`$z^{pn$3ufk}(^rMRt>r%-S%K=ezn@545$}V6PD> ziAVB$SAcq5qtc=)3u@ISBw?zBd{#%@So6mD4-DRZcB!2>m^ft^T3fv3Xl3PM4)T7E z)_%yhug7-%enG{ebNaN+1f6}RSzVWdGtK4!AoFm3B0x!aa}EIQH9~D|HV8VW{eard cn+a07*qoM6N<$f@TB`Px%FG)l}R5*>TlRr;WQ5eR5@9m|xr!6gMEe$0|LySQe2jj@>NALp>cXty96DJpU zCkOv*`WZwSG=@Y1CPJ{WrG(NJT6=r$pY|RHQfxsI2cPYEpPZAE=e$38efNa{D5uMe ztJ14X_`2_MUL_}mUH4r|PKx!`*4gm)PRmcPDUIGf;V_V-6&H6HNY}SSMmOHS^N@tCj5pBo{PU9w z&%G>{xA$IBKkDH|0ad?aZX}CxJv~p#PN5uyN+APkYe5CO4Ar1Murf0u%2D$5a7UhQyy07`BHGiU93_A>{f^}08HtEw zy<6ot^dxB~rQtPXDpvRp9eh}QN43_$9fouUftig@%bdzj?14%s_Ks_OIoLMKGmDao zr2#njPx%L`g(JR5*>Tl0Q!qaTv!x&)v1xU$4@pg#s31Ll_9g$<4&gMBag;18=}r;NZ&Q zOVB}N(@kbEEXI&v6eA6(6sWZP>6Ko8*WPhI7bStg&rY#F2ux(4n988k8P?21S%Nr_9o?3t{Z%#&wnT?ol&b`gAPyw! zWaT6ZWv$yFA(4z_i$06R*R}|M^8CRIJUeZIv!Og&eahwhtCzQrU$futVIlOB*p$;Z zWKxyz91rCxR7L?%JKo`Y=ck!cCCOM8{kTu7pWtjC_y*vn>ruc365}}@0D7P)7K#8A z?Hu<@cK}SiR|lY+wXmkg^OCV_X$=Ee>oy3IM1nXFK$NRQhgx)~r5SZ(X@8YkZ&$KT zRsd=BlWSn`b>Rb%&d?fm_;Oe?_a^6LQkBj7khXY?q z=@CgtWUbraBnl<#WTh3hBxR3X1A~tX?`Z7$1ZNR`JiO8al~HV;?DDz!&CC{VOVQ2& z&^!&1H;-PK%WKtK_57}kS1xpW2YVNO>(*3WfOFTc@&J&{qq;1vFVl=V0tg_@(@Px%Hc3Q5R5*>TlRr;WVHC!H=l0Uu+m@EJmIe@Mh%xBmU>uqK2z~(K?r!2>;>60AC z;#a>ZfT-a>5=KniVIT!FEx)~{G@L`iVIWB(F77apo^ObpPki$5841(Y-ayIgZ!fQW z_c~ubJbp{<*ujkgDt=erO%~-&dXAKt!nSPegbl#v@g85AJNo|QEh$Xc^ap(!{Rs2m zsH*|ytqk*420*9GGY-mE*33-bJ$j)-s3V;<<5IA)0E9Y)+3RQxilyQrOVf)08lc@h z+xZPE%TK2|ni1U}^eLrFl$|n0W=h1iZ257tC##!l?6%6HJSDbe3m{FuEBSavA|l!7 zRX7PfNt#J%cnz6|75)Q*&nq9PRJ*vtknSMR)A31}vGZd&uoE^1Csn@Jcl6TKg5+Xp z0P3e6a(+ys8a=GJ;@p^bcyu^c8}m1_0?0||U7G_yc3Wjx-CUy{b_5VW>ZjhnGx!6A Wh%x+g;6U^M0000Px%MM*?KR5*>Tl1)z&Q51%sGc#p+I~7O^<;#SIupk;&?o3?!6I{CB5BLjQxOL-S za3Q+WoqI8Cj4{EWMhF@CDAGddl-}N%&M?;vR3WUrS3z#len5)fMfOgad zAn*cOaf`q$5V!>ziMFYQN}-5SXE=+~HPM-t9n+GP#wzQFn_^-k%2xu2&a{-glANTm ztaW$E$))JHV$L#&j4Q&qp5A{>;Eq^*HjpQ)kGZP<&E?I*mo!>E9E5(J+1khrnNd{& zFF^SURa5|MwRia5`Dt&esuUfEe%7bi&+)boBMUI=2aMwbxedGk0FxLh;}rlZZkc=4 z+Wg76NFT@!g7g4^F^}|hh_W3p6j>AhF93_!dM@A(l zm$mLLCuuAtuO!X5DFt`(8a(*0{FdFl2z{0kWrKfmpo)s^lRZ8ie6>sC^HOok034jg z$g2l0?A34ea($T3P0d}J?H}%6s=dF9MxxK-#;`Yg4$alW0AVl0yI2a7Hg&&3n6&>a l_?6+&SwCRycw?Af=r_#eIY283)>Z%j002ovPDHLkV1jMuFH-;j literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/block/cage/orange.png b/src/main/resources/assets/hamsters/textures/block/cage/orange.png new file mode 100644 index 0000000000000000000000000000000000000000..1d17964c53451bfcf5cef9d2d5a5e7bf8ab54733 GIT binary patch literal 527 zcmV+q0`UEbP)Px$$w@>(R5*>Tlg(-qVHAd+cN#L8iAiZ2o&FF+aAol_TnXNQi{5~1@50M)@+s>(@b()3~7E$(S`5k@O_8#@tueFRre(Z5CkkJ3>VLF=&&q5 zm{5vC2S1q5`Q+SOE)V?}8hh2EPPJDRap>UmhFi)aX)rQps)^yKXyzrD4u56^bEyWJ%o8|Rm@-5t~JHdHEr zR|ek&pxa7leI48Vrm1!ZvJA#`Q2W5K<=q#6HXB7fIbR9b`FRm&%{5&`(otKCGL)tT z2fVU~GZAO%UzT+EUUW~9>lXcSof(5K&xKc#CAn$;^^Er4`Z|6Q(0p{kAadw`ySA;z zzUmD@oI!HUFoNNwNQN-UW#!sL)s14f^blmP3M1X@I@R3Ht2`0}1qeu7$NbHS)*DMc@LdMS zDgDo}Z9Q;QujK%w8=z^J=C#rXE7$;(<`2{GbmolWhqHlIi7ow0;(%Kd`y1oe?}rQ+ RiG~0G002ovPDHLkV1n=(`WFBI literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/block/cage/orange_bottom.png b/src/main/resources/assets/hamsters/textures/block/cage/orange_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..06337e6db792a0415cc941ba34b43d719a991f3e GIT binary patch literal 564 zcmV-40?Yl0P)Px$?ny*JR5*>TlFe?@Koo_)GcmE_P=_=@L#ZNB2?>b`9)%ZR!HOMg-h#(q!*f*X zh82hft(2fvg<4?p)7Y_t>tW$GZK1I0-OSuOy64V(bF}x;GI$WPOd&ZkuJ@>^=>9Fp z3Ro=3bI5Z@$FMvx&Uj90KqGK?Ti`|A*aZOu0YtqD2Dcpm$q7)`r&I7k@WP5LHjWbf zI}W~qnT@UT93|h;&aO!I<{~RZt0_Qvj(i_wbF@DcrEzNbPGyeRK;kSuJr^xcZc#dI zzjgc>|2o(EXB*tTcZ>{_3%PK;Qm0>EomLYuniDYb5}A7j*oZzs6a6Dftf@0Pk{=#Wk!^ zd{GPIi-s%0)DXS%rlZuc*{;{~*lcSh8rtgG-}nt$+5HXSmQ(8h0000Px$+(|@1R5*>TlD}@#P#DF3=f=c|OH)b;rbv-MLPBcATQKti9Wt>o^A@}V3ky%s z2dLDA3DkjBN>D3MEHL@g*s+80$6!cXFk8=ZrSIt8@1CEIj-QA09z-k?h(9~)K5nXW z{|2NvES6*$WEmu5Se`p`o=FX8v<%$^ud^9hs|BqVbh;(IQ_$xX%6!Gy~q`7D}1t`mq@1t~%P6ncIriO1SGW4^9#BUw#iMA(O z6sFxb#^3s%uXoS3xpQxX925&#aJ$sTR`qq-O$dAdW}ggZ+OY1%f)Y;Oi2gwAIsaPaX7P97gskP1OviAsNudpjw|L9WY;d@6N zrziqf-;t#2HA3Al`3jh)yGuP&Y!v?^mQ7E|RdTkFt@i40xO})wkB|c(*e}9#6 k(06vUC+bw^zutMuFCXUrytjq|ga7~l07*qoM6N<$g52}-)&Kwi literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/block/cage/orange_top.png b/src/main/resources/assets/hamsters/textures/block/cage/orange_top.png new file mode 100644 index 0000000000000000000000000000000000000000..25ac24ea76f6aaf124d54f5fc27e19898a77390f GIT binary patch literal 527 zcmV+q0`UEbP)Px$$w@>(R5*>Tlg(-qQ5?m8=QdEOa#gKl)6gNGaKldK)<(?nss{0xP2t#ftif*pc$T6!R zoKQ<6M-Wcvd~uhXvxj~SjjcvCr`l?WG;+Ap;i`&6>W@sH4% zejNf2fbK!Y!S}H}+%_%UgQ9?O6V%>yHkyEGtbrZ?9r~e=&+AASRxI36Clr2N@y~(w z-o?b7yvps@1!$O{#p=|(DXB1*W4b=VFTdOC={S{!0kN%#htuj)T>n%A_P)Px$^hrcPR5*>TlR-}tK@`V-4>r?oy9?SSHX<>cl%wCkkD=eelY9rxp1kQ@uUtGE z!$pEIfe_me#9Ati9a=iO-Oi?EJYZp4Ao1Y;_U2_K^L}|hF&kSBAgKD}6Svc;T5HX0 zqA0@CS`$SPKlYoKhqISDy2VnoOh>madrQ$WT5INf-xp(yB*R#?YumKiO##GOD@rM` zHkB~AEA7s)eD54%N0}&96l+syb_XJp7e79KMY-U+#HRA}-OFp=y{#`t>zgR0uvv=M zZFm2{iribS;uYs1P!K8re(yJE>>aq3)rYbeRv6hahwUD6w7%(PXP*N4=Gir&tM4+fiHwG00faya#tOzt*BIIP^cmgK;uYovki&NGib3tgdkO{LS)0n^ z*UzpoxUDbl%@+t1ra$2H+li|@S&=Xbz+@0-B>e${eu_;p#^bRom&+0?mH{~Ho#O$H zI3rxE60TJN900#!0Llv`I?YpZoZQHc393FLn_e&=P}1FN%Ff#lbPrB0<_?qqlJo~s zTJXhjF17kDacsmZ%*(KsNs`KcU|=@302mI3BuV1JJE1I8g6Ta73z#F#>DQ*KtS(7d zDgw~>d4^16%IC&Cn4~@}m6tCj^5n&fa!YfQvEIKJ2i$7xAK)z$O-1-MApigX07*qo IM6N<$g1GbpH2?qr literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/block/cage/pink_bottom.png b/src/main/resources/assets/hamsters/textures/block/cage/pink_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..bea512b0b72f6cfba0e6edb4d6790a7ae7222e82 GIT binary patch literal 617 zcmV-v0+#)WP)Px%BS}O-R5*>TlFe?@Koo_)TU%qN@stn;1(hxki&C-TZFmTFyhHbF*uev^Wy1qh zT~MhAsTCp>R0X26QRDpCjy=Ziut=Md0=u5g%$YlLM*4Kby!^n5yF!*_3{S_lxpiOk zg9gL}Bn4$&QRWrNBqdE#>o|@$j)PK)X!;AcNJ|^EYiK_}-wj|hv;dqY0Jy$GJ}K~h zAK&+hqR3WNh1Qz&dmbyQ?n;?gGCCj0{>~nw!>$k;Ay5KHnOEX^jwDGeoudOR7owCB zV~q696A>=edHxp9t65_*dHm`bH}$`{oV<94QVJ2l7-Mxq%UUzQ^&JQlXazw0ZNTtk zU>mJF;wg{PR2=umxPUE+f-npTf&jp}zB7+c3Ru?w=v5#6WCOq^{S1Id?FK7=D5YdP z9!clufSF09%qs!r9AYEHMn-Wg`#XC?y+~Zo5kQXn<6B^0Uw?!^5l?3fznt0T(+$yK zu;@WLoiUqcn6#j(DqFADCAd=uU^2d#GaxC@TW$1K8(^si^|e(7-5~&B7y{VRR0QoB zrODPx%8c9S!R5*>Tl08opQ51%s!%XhX?#_jE2eSq#j0F-Ze}o19z#n1ff1tOq)5O-+ zMtVXa3C08pcY}n$hL6DP*Uaq99cQ=}tC%I&7*6-*%{eD|@`!o!g*kVQEX(Mh4Q*@n zk?6-whzm#x%Dke?E0R%4nx@uq9B~{6r4-TlCvK6JHfYz-et>=uz)ENVI7vRNDB078@<{FnDL-7U+1dV2OtbX09%@h zpk1Rh*^~i+lEHpYcHe(yaBx23K{}pDeZD4^Yw2|NNRn7w&yjpsNSet#Fo-v{0m$>5 zG)?dJKzqbT5&dsH+j_Dny6yvTd@@4fjct4TThOlk4J+Yn*^Or6lmXnhey0Z@gM;%a uqd1m7JI5y@kb@?P)Px$_en%SR5*>Tlg~~QQ54312b$XsodN9-8!Iual%;RrW9U1$l6PS3%AM|Y%f_`a zY$O;H2(b;pT1us{xBu=;r+3nFUDQHbWToHkoG<6*o?pHrW@pa<_(hLdMa^Wc)>^Zu zFbv6PtqH@BAIJ5p=HgIGH&_o#v~=UjTMtWUty%IsPmD1V4O zL<0Y=G+XELy>*TqrJ__$tWBie8Hh|@{P_G8`K;$+o5<65FK>MJHeagSyC|iwX@b^G zcmKhL+$$Byd=7#vrmAUwt-HeJx&$jZ z0BUDFWO_`q`fCoRs>~nNgaJqtncH&!(mA=9FfvA_Gqtnczccs^r(htun{!9S00000 LNkvXXu0mjfo3RJW literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/block/cage/purple.png b/src/main/resources/assets/hamsters/textures/block/cage/purple.png new file mode 100644 index 0000000000000000000000000000000000000000..531a2f8ca6b1caac844fd023e1f8f761a7291748 GIT binary patch literal 616 zcmV-u0+;=XP)Px%B1uF+R5*>Tlg~~QQ5431rwlW5feC})jLi^1n-Jrl9WDra-1!E+fUls5@ga1j zapBU9VWIH>To{c}LNq`SK`IPT+S<}PGo`(*3N3#U7oOdBzMPwz@0_1Jy!FZeMEQX3 zDsJuc=(t_wWQDn5thikz%nkFoxN_7yITV`;q4>n6ay%?Pal1+6sX0dq4QHw_>ISBN<^3ouo|823R}V7-$mad_sI^ zVU%(KNHUG@T>v2O`sBxN1DH<0Ki}_=3zUdMzm(cFS!k`Jt)^(52q3PlBuTX-sg}K@ zCT}-CvQddexsCubIU5{jaPRt4T(M1JGI{y!{;3Sk^X1vx8~W@qN{t#z@tV0AO-V2` zLXv5cOjFi1%DPTnYYu4{Pn3)*4}cqU<5*1wO*7LJ!U+oD1b_jk)b{}xQ66ji+ub)} zbdnO~13t~KlI!O{TwBRfyecogzGk)bOOjNJYbybytZU+{Aps)`t#$sGhA7vO{c=^N z?-u?;22W<@*{Y{BOh(OUGirMh4Ea5G;5v$p(r*@v%jW7>B)&5Mz~z}SqytlTb%S+j zH0trTOT`{-b&Df-ipS)IT~wY$to1L%bvAGov3~(wj2EAv&q1^R0000Px%KuJVFR5*>TlFMpSQ51&1m7bjJoi^sgl$@4RY-`bi7X;~~6a*b~=o|O~zJk7m z=tyzk(1Fr{9XfJU5iBA^iM2H`O=xaSntgKJ4qBrrI_p1KH`c#k@yVlGujtu0N5c+# z^|D>|7bWmAgk3|}H5e0O!VVSFq-l+Hn2-q~D2a08&LU2!*0;f|LZg_TOfr)WEI_?g z1wd;>wSGukT;k$V8a8a70iMLkzReTyQ;rxDO7W;FoB1uWrJRHvBg)kRh%upP6_Z2T zmhHhVU?oOWLfez&+jAnE=-!nlC~<9QyYk}meNO9tb9u1xjD~TDAQ-wf?It8M<)O7g zxfs_vSg-GBMxe&NzJrq8AG3eO^BAXP5^LqeGaF`r0sPLOa44d z{ye}K2PvIkr@9Y-A4vjO6Ltt@GrZr(5s7jn%GHuB<>dLt*W@Zc#yF^%rg(Zvz{>Vu zmqXhYtzuHGHDu-P(i!~V@#+S}R)@Cj(zNEE9H^LPukw>mg)jEvbRb?V4#0)gY2@Mc zm-h6vU^X+#XVSsgY`;<%tDV1#(y(zH3yo3FKY`}7F+ibM#u+WyI=*<6Z2ix&cq3Ck glH^0->nQ)NU;T6|EyBm7m;e9(07*qoM6N<$f>6>dSO5S3 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/block/cage/purple_middle.png b/src/main/resources/assets/hamsters/textures/block/cage/purple_middle.png new file mode 100644 index 0000000000000000000000000000000000000000..c3437e028118daf5a55bf6288a517c9da53e6daf GIT binary patch literal 645 zcmV;00($+4P)Px%KS@MER5*>Tl2J>OVHk$5XKvr#cW$}0@lE+eEh)i@AUqKvC_+5yAM^+M3-vFe zjtYYgJ4if8&pPVJPLv1?mZ>wH_-)f~?tQm8-wrH6v6JvVdLC|g9=PvIUflmc$E7$t zZn06{bz{YA5@daB+hE%UV=TtD2u(!fjEmDFJ;YFw;O@g~#4EKU7Yrygib8K6{rSKF z)EiX*v{qE>2c*O!B_5UIeRo8ctfW}|R3=u;#l;va+lN(IC@-;EDT!?vQJxk+jIp9s zQVv{GR=VqelOzeTt|Ma)21WRzC*!YB;yLTu^6uMH&g);kJezpKzKIh}|RJ-kd0xz}OZeQ$F!s;~aD-#`?H|h9jKT3IN+SWHVO*$R<J9+KSRa5hwnZ@D^JTt7EWx2DPs?hhB(uwNl)}w39MnuCS)CSe zveI4Wz%@myq*QDBGVyry5;Ax>InQ>ZMbov3oVkz#mDFs6zxcZK-CZvPl1-)n7@8~~ z&+oi<=f4F5{^{JG56*Zy;ntZwHjqB)^e^idaR5ju+?3hnIreNMfB-TySrA!VTx4cu f=D#v{JN}5@iP|~jKx1-w00000NkvXXu0mjf$G|3e literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/block/cage/purple_top.png b/src/main/resources/assets/hamsters/textures/block/cage/purple_top.png new file mode 100644 index 0000000000000000000000000000000000000000..97b585f51cfe792f422882ea9db9e70f4e6aceec GIT binary patch literal 623 zcmV-#0+9WQP)Px%DM>^@R5*>Tlg~~QQ5431r<9qw(1t zSh#dUSZI6z7e-@*5Dk!u{HZX|(v~T`GgI2@!T>FVm43T(zMPwz-}#O_z4z7t6!IS3 zD(&p`)Iq1tdHJa!(m|(=pBmz8Y3;Omekd?Cd~pd(?QB?Ff=->(Rl84Wou=qcLza&| zv3y>gI;!%Xrp9DF??=IFqNAAWGal(ZZ49*VQ!YL( zv@uFK07Qw#&0YZ@@3`bg?*o_467{b2fN)F zF*=GVu_hDTd zDfD=|l~PZg%4h!W^w2af%>f|A%9hM6&Qp#;0R)h->D<3F_ya7xB1n30hPwa&002ov JPDHLkV1lHgA~^s6 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/block/cage/red.png b/src/main/resources/assets/hamsters/textures/block/cage/red.png new file mode 100644 index 0000000000000000000000000000000000000000..7499f07fd0572701b6a067cb79f5339c803ec7c0 GIT binary patch literal 599 zcmV-d0;v6oP)Px%5lKWrR5*>Tlf7;eK@^408BfN$iQ~kZ$T1{HAw*WBgaSHV0A7HKhJu0)iHc{S zg^nknq2LK9`4dV(5(xw*LO6I0cAU*RyE~elp@`x*KSmUsYVN(7xmVxZ!{=+a8~`jS zhha4|PsDAL;a<}m(ysQ6k_UXoqM@voTq#r z{lIq}5dc%0vq-_jY6fDQP2JY2>@6S3Jc{q0B}cuySsA`-r6#Y6zrIk>uC$A%@|t{06nFc=!}WZ z7}}gKq7YxT=7ewrz@QQyGk9FT0beMWSj|VDU!P$xs?Jw;?qjCW#P8f#`b`G_7lWA-9e28&!TG!$SyB!SO^E)= zWqL|+qu1rr?JazYBPKedrxXFOV{!%sK?lqAw1vGq2 zuy2iPx%B}qgTlCe@#K@^6+vv=9tkYFHS$iOfo6d4K{t+cY!SMU*h1E0ZGU&4mY zchIp(lW`D-U?ENtNC?Rdxp&>WYY~XxNXKdR%?IGmC_oCLr0-H` zrX5nBN#YSeVq;`#Gnv{ULAdN&7MoI&cAmxJDBG? zCfqEiZ3TVZbmE3=>Sa#ca9*&fm*+!kI_C3bcGC?2{s7Y+E4Nh!-h2Q6002ovPDHLk FV1h$+5@G-V literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/block/cage/red_middle.png b/src/main/resources/assets/hamsters/textures/block/cage/red_middle.png new file mode 100644 index 0000000000000000000000000000000000000000..97c6e6c6a39e1c966477b31fccb0caa989f574d0 GIT binary patch literal 608 zcmV-m0-ybfP)Px%8c9S!R5*>T(!EYpK^TYe=RfB#d-elY7F;$YBtk)mq0ve!8>3u;m*5?E4YqOv zmNs-2+<}SBHiUqNkHVN;VENcR>z*CYnX%v_!9Zhp+sWjeJoD3+x9_NI?=kcR`z{YF zlU2=^6GqOFIY;VY=;1go82CKINRdQI5%Y6L#OdaKXj-V5h}k$|u3irSr)dg6&A?$U z$|k04Vh-~x-?CXN7@e|*^>bB?9PG)wh5zzqk}al{Xo1JH~UfH3s1Xan1O zt&0YUwc0#8(b~ZlJ8A!hgI->!5g7%%+F6J5VyvnO>gH&9@je`UUU>t+$ma}veyfAB zEwP^tX`h{krE;Q%F21?a>|8VeuC3qYV4+rJp;qPBNiSS&|9yDb0Jye(n*%^QXouN7~rfV0Cr%zZ!gc@`}I6z&pNE#3XPx%9!W$&R5*>TlRr-sK^VrLXKt9=g#(U-9H(G{NC*j7Xy+F|K7g^Xv9Pc+vGOz6 zO6MoAv9P1F^j{2x2MI<`Vm!P>@3>p`*xkwOj0NH3k60L=>YaJ=X5RefdHHPVrUQUk z<#1ee%@gNclj5{0(u3SJDJs&#>w~O+dAg}#I+&7WG)$-OP02ELO$sr3b)MZ^GtN`K zi@xEjjtGFM%~_;iVl@LX$cFB4=OBi*IeiW=v6>fxAMDThU}h1%lrAxbPqsJCjC-EX zr?>9GZPbxCjqfIQb83WFl#h}CJf+|(1pxREwecq2bBo0hjum|LED?-_kZJ9c1AwY5 zp(;xN;7Z~UXsR`W(l7vES}079Oag#A0^Hu4gz%Q;SfpUfq+Cy%NNvX0f&l0##YAUJ zbjHx;d>)1PtTl&(BLD_t;co_y=WoCl$|Y9w(Z^S37@X(x<(>N&uQ%{Bx2Wy++_my3 zt4bo#8mZQ3nH;U$BFY^MoEsLB6S4pRxHJ=jZ?7*q0Js>8pLlVn-RjqW%E+v8sB1#> z7B16MinUIgtJ|B{iX$dEqo))Buw`-v1wjYP^|Xm@o^ePxh6Y@iZT<%aFYZ1>@_rME zHQ2YtO%x=n1BDYg@Kq6C;vUvJT{rK040!m>gOw(Dv`oi!e6jw<1^`6q_A&vmn`h_d y006h*h^yP12yIT_&>yTc$+fjLtgNj3GlO5j9VVy9F`Ekj0000Px$mq|oHR5*>TlTT~gKoG^>GnQkBBxDfEK_%BfF8K_BeA9l3wxpLr1EGgfT0{;( zg2={r6|6>D>yKra9)x4duF^{%>|u9y-|YODVU~#ifMubhJn!zGpMT>}uIqqdn2PH< zuNPd`IeMg24$rfo)XvrO+Khwn+k#oPqSl&scV94_&Iy2Zz2<0Su&Nr`_L%c|!pFz& zsH%b|Cqq_M!`W<3ZXIuLf50>+qIJrfo2#Sm_Qm=6{R1wp-=VHINRmu^f5Njf6Nb?> zP)Z|;QaL}L&~Z#`Hb59YwG0kxKLmQHeZYh0>w=?^!8FYo1Tl)DWYd5^cP*DC@9$$I zNy*``JqyF99fKfH7>^C9s)m=B-ci=R_~7Tq7$O4Sw*dgYZ$m_0m)12F3k}m8qb=1& zQ3#4c5XTA>X&dP+MbUAOSXRqo@axmGQ{!@3c4}X();v8mC;|pSj681{lqLA`lKc+_ z9~81o;JPgX&$F>!ONT=rqbQnz+hN+*zxrTb9fQ7!>od-C>^kwSiQ5|eZDRib`lk+& TU)^XN00000NkvXXu0mjfUftT3 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/block/cage/white_bottom.png b/src/main/resources/assets/hamsters/textures/block/cage/white_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..88ca6b57b75c603dd40245b1a3c8e533f6895ae1 GIT binary patch literal 470 zcmV;{0V)28P)Px$kV!;AR5*>Tlfi1+KomvKQzgqGu}Fx}#@QFrujr;f+F$6REp$`pBC9T1L^qWn zatoFnyU{2bOESDJgd-~Dr2>>0^EPz#$!)6n^rC_qeriJYF|FQ{>Jl{7dVcv*)$pi z9RtrB7AT62(b?IN_`c6}3rTW~B*|L$Jpud;6DR#Nm(j?R_1Z`rXH=Dywq?KpdPa+d z71!<7lH~f|88~0wWvD9CX#l`<8lbB8qbzIY^OBR3F`d9F^HmorqKb1rx>N_ zkFFOU-u9;)>}yb9*C_is6fk4xlbGj*D4LMxeaxb$KM{tfk2(?HH*i=D``btyf&c&j M07*qoM6N<$f)5VZ9smFU literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/block/cage/white_middle.png b/src/main/resources/assets/hamsters/textures/block/cage/white_middle.png new file mode 100644 index 0000000000000000000000000000000000000000..9a6759d266348b9351c4582a428a1af739fa0fdb GIT binary patch literal 489 zcmVPx$qe(TlgnRvqV&7-R5#mo%Lqd9K>+a&HvH_B@&V0-)D>41oFZVI*~pWSNz-vzRQi z0&KFb5ywG_!b%v%s3M-{%3`sU(dbHKJvj`=bULoi=e3-i^#9o6uD-l`^_?frjxk1< z&zBkm4FlJ056JU|(c$5q_`c6-1yOW?MA1}tH39q$6Epmni08R7ofZ;?F;!)yu4!?A zEu%EG;y6t$iZ1@0f%$qGqpA!B0RV$RfU0h?EEgn6$-zN~MruG+DOIJ!@fcB6yv=WVHi^s4FhYD*)07Z4Bm{%bEVg781(xA%cZtB z+{I`(ylno$?b{ym!ETtJpHhLX*B|o1E~E4FD>0XRCJ2Pttfb%Xl4T{HCy2B&Nt%9= fl$+Z77ccn@rPx$m`OxIR5*>TlTT~gKoG^>6P9C$BxDfEK_%BhF8vIJeA9l3wxpLr4WWk+T0{>) zN+Y|*t6(+KT7N9V^dOR0Hf{^;gE{QZ?##X)v&?f50I+TJR22R7{ryku%JW<>iZby$ z_vwJ=xqFwCD&YGzlzOh}`&~yP`n+JCuc)==WbzTy>6`%AG;0orChNMT=k81i_dmCl*Yz zUqC61IL_qsbWGQ^u-O1nbk{N1^}Y*qSKEM%_|t;Jp~);O7={VTvSQnUKtGntikFuO z(zN1W(CtOh-7|wQR2Yp+sq2rZpAE#vznB>)yh^;dJS&FJ>_$GPx$vq?ljR5*>LlfP~gK@f+(Ij`={e?TG-BO4TukWN5>gm{H0uacggik^mwmWq-G zh$vD3LPADyXA*HlP9P4BAwHjPk2@{J>fnse5)!{=cW1PtnQvy~>n;YMxxs>Fhl}qd zWJ&%_P)TSn!l3-pTSGeYmiML8)Li<;$K^w1LXxwKkaeW+c6jJw8dQ?0q`NJA;mJ4 vRW%1yY=Ff8t2VAGFj$D{UpB4?RMm}NHw@TLz*feB00000NkvXXu0mjfi1gaj literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/block/cage/yellow_bottom.png b/src/main/resources/assets/hamsters/textures/block/cage/yellow_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..b17ed9387b363d3f84edb044e9623d9ab1e58901 GIT binary patch literal 556 zcmV+{0@MA8P)Px$=1D|BR5*>TlFx1uQ5431XXZM87^+PR7|;NThN!WNzC(58d${*O+_>@$x-_Oc z8y8);aD%a?P4FKfSf!NG78n>h!*y|Op;F!Gm)x9_`{kVbo$nrLzXWv~;$s+mL@%za zNKh;hM>XPcjW~ojgs25^2Q3aF3hV%OeH)c5qP-NT6nJ?^XC7#PQEvk<_t62U1#?Dq zv>t<#gZm^{_7M_?NZ3G{>(JeKC2>>};XrNe0M=i7mn}e0~nL zk4}cjt;fvaPrNjq0eKJ$l0MqaBi;=oT{#t$TLIwY%UgQ8``RxdRscx|)zCssuAvFR zE5nrx09vI?_jp{xyZQ(KC%eIN*6@Rd;a5`=EbG|J6n!@{CVewEAj+vo9MvR_Y7*_` zq`40LPsS5Ks-g8CJm_wMcdtU!ayi=G)=R5v;upO0J&4*cZo}yb=rLL?BkpxmTz5UB zS4RV+GfytO*gtrBo_DrP^vY8{D8isIqhQ!{X}#Xo`G;!~l;#yg9Tr|%%%%^3y% z?!gO)mLTq#UB7G(lv|50000Px$@kvBMR5*>Tl21<)Q5400_suYGTH0tbr4dNb#AFsE`Vm;+&Xpg<55mfw8)H~> z<;q19S+R6Qic!*#&>(@@4ifF(nNGPbo_!cG|!sq+gN=Ys|h>0xCVt~G)o-+R4>(V>O6^c9=)>j4TvAalBZ3{)23ue zRZeQqKXjP@(h&0>GPu}*a6Kj;S_Y^4T3*|fpd4QJARj_LgvkXMi%t^63*GY9C`5WK z_t#S8E1>+OwAE4nXVxt)a|C~YR zH4H6yC0MB3-UHvp43h@E;~gzjt75_q0DFB8X}xtB%p%&jng5mzfGMW#r&nFStp|Yg zS`9gPwMCXx1suQE_k?=A4#3eiw0F^??Ro!q@o&~Q`2`Or3&lGfBvJqX002ovPDHLk FV1nA0{mlRX literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/block/cage/yellow_top.png b/src/main/resources/assets/hamsters/textures/block/cage/yellow_top.png new file mode 100644 index 0000000000000000000000000000000000000000..f7be6d2ecad7038b46a584b4a1f0433b113b1028 GIT binary patch literal 515 zcmV+e0{s1nP)Px$y-7qtR5*>LlRt0MKp4hzlz<8nk_8M%h_6ubRoK~?*t@{O%EZVA zs2Dl`LPDvM1%)C^l?IxUgf@=jb8Q{N$>5M=>a+NKkM8uozxO%$xr+vBEh|FOA(G6HFYg^r_Ypwy8DdqDe2%!6km(`P z|L%|~#P-d8M=X)z#!pX$YEA2SCi3u^UMhE;F9*+oCgceueRTZ}QV+nXg5w4_UI4(P z`;pOyp}u$@aT}1w(2gx6d}Sb(doKg6UwHyR^lN)1V9Po&y{aF`2R?z42g6DlMN( z^~lm5>KM{vI6DQMqMgf#cg-9QJs+8dhC$J5p>ofwGE&<#EdEw7?|U4*?ds;EEvemH zu0V|-IW$x9Zt-^Y7A7?lLcd5;>d=8S(}ciG zX~&ZWW(uK!7Mg*kI36-g(vQ&}E+l~rc4<>1j5Br|#{o6AR^G@$+7EVDQsQj?cs_T} zyL<0__dV^dR`UDJX!Q2Id+)pNz27_M+;h)8Zw(~u`|uSt{(JD&S>iub6K&S&rP}Noj5QC04U}2h$oW(fW$!Bt1AM9>0Cqo zk39aA@mfwj`*aNeqW%2!Gqf%?y{QAaTOfve67*xy4H z_zT%8SVfciz)Tug5|V@l0tyDG*J;r zRnGSO$@HL*hSY}q(gEK0R`oJ26%pCy;pk0vT z0H9J@038S5D&q&e>5Qk?rQ^~5epF^=P|Rf;3~9hk9N8x0H(hlsD3Q1-Gm#>Qk*k7A z(pR$Ch8NO=c8~`EB18^OqDpB2(Rf!wVVOwuTL+WGF@egH8Y6g-MdJUrSE+LI< z5tKXxl0-xz9eGs50qS;7VjwNb%Ovs(zYj*J!kAQ+ivy$e??>Wq;LjA)lLSkSZ!k=jD$A%x(p$H~Txk z*I@TnOGWXlw%mBL^@EQ9K<)go3n~nFW8P6+>tb5~yaJ%E(qt*5vx!U>Zv&N2V+x0@ z>$egryG#c@a^m}J+E&%=L`2@0??R+|!9@m#JZ@VjccuW@ULvyTU>dQg9Er4FcdQi% zB7JP@aHH3@jtz-Sz9<>8`$1LDB(=N{=^xpNnTdmlbT44dC0nsBRzFAtan#&akVLBg zKBa8bmN@dh%FIlI4~6~@j_$xWAO4*GE7ahRKKZ$psxDa_$pZq@xpgGc`JznTZn>Te zUMGmdF%r#W(2tz}8i%+2BRf%;&f)d)DXfb%s;uGbcLV?Sg7E|dO4qHP`uAeVd0RVkHjs!|AEMm6$x@SL9J?liB{K6vg zg(`;qyMc_5iD)xgYla%LRX--;EM>CQYBIGM4lA!w13#`J(+ejjF;`s#03;JV$QP;@ zNnVO%*CO&7BBgrPA=$NFkSCew0rJ1ZTy+sIoSejcO^l1tVeFngE}siIH)-1|CaKdQ z2(*;24KLUZIeB@RM1nkB>oJilps!~=l8GKhCUslML=ON*dQIdC!hWLmS`D3-e6=8A z6JfYim{gaptPGMO^x)^Ji(;F|B!ft!Yb(Uk;VT|!sqk`unH*Z12m74=7k-z@j!R)8 zS8$O@g^{!qT@a5+lfN&&X3^{Bg68JLT-M`HwY?9`L`$Sk_UI9z_x-9b4o;}W(l7D# z&)$i<_C5*#P1zo~erMCKpKKm4HKiM@-1^0@t|*&m4NWNOV2Wk7MGz7Naj(lm+aSYc zKf_y9%+iSiV}cx9((u`HvNu&ETWLnMR)sCaPaykmRBm?_g1F*M@DmfvNnmp>BC9-9 zUugtbDjEo+idm5zSh^c*6Bq19ve?EM%Vhy~-@S+=zbv_9N0HvT&9h%Y<9k*U1cAt* zrE-9oT=QOPgV*)*X6xMTUK6u&UDa&3Z8$~ic8zO{8xdWvi z$j0xYBLgST2k!Ya0AT+eA3}21plhV3Loz*xvq#2p`@Sau0N?-O-!?4mmCxk`8(W5l zR`^jz7c+SPV6EfsOc>=E};WPTpLwu$~!<>Yp}vQ7Buv+BD2lHp<}51^4i zd@Z;RJbj3cgrC0QDgeONp?3l>hm6Q6WO!Xuu$CMm>J_Ocw*#ovmk8&Oo`R%xHS@Qy!hPUaxq zVXYKa^jQwB^CF#>16F=Lq(ovo_GWRFjp$O%J#)$$Ryt8nlv=6 zB9$i>vxWb2+MGNN{G{F{0Nk|u6Ji9#`{lK85AY6}_aiCg{W`VgHM*21TUQE+*6@%^ zRi{mh_=!BHbH4xpyz?DSv`(p9X{aNU%LF0`M?4k<0383>834d=dV?U5S3fztB%z;Z zLDkDJIJ!eyK1hE6_jBnq6}FcD&>6Mz9|w_#u}z!w zue#a%BDm_x7plk?s@Qe+gGgnDkje}Ja7d8K3<(m@HUP0rWoetpN8403l^MdWyB`$i z0)S_pc%-3EHrD|(K75`kkJ90p{s>f0MSxS#Fmi3tF}*Z%xNh{vMX{orGGM0WD`jrYDo=8&(9Wcgey1k@wZZBY0<40LKyt{+>7P0&Y`ALk%2XoX!)E4y zwn58RWyo(_Gh%6M(!t5_=fOvy|H6j!v7G#WsPIX|*C^-TM{2*Kl-mJ3FMD~Q491wZ1pU11fnN+Q@U^83+4 zH`L0rWlWx$NB_u9<+M;fH-$G}`*#4qo#t&ep(#dmkWkc4SQ5ht zx>Wy5EEU5Q*TqntJ&eIwXF*9)xS6sJ2oWrCZ z0bus%KZtV!?Ng6yy^GYr4K}*5G8w9+qU(=92DVD_m{g!2J4n@z>b$x>%GaY>%A^Vz ziKXh%1C`Q3LxOg0W94&G7#!W znL)!sZEPl+(T>fzWCvZd40BoX#8NTWzBj9fFg31^8>0Pke@OZaZRtjNwk*i$r5-6e zQoGgT8dbV~osT34ywdlp)R*d}68KHi-ISnt0Bx?5&e_T-gC9L~Lk;k!9(mtn=+xt{ z-T#9nUqeK7(}EJli{(KcqAYg#o3|W`0^99#;gU_K9s%!&$X20gb79Lhg77PzSHdi} zU-d}j;V+vi1FWnbn*kS{$M-*0;|5uHN#VrpE77ve^}vq0A+Lg1nu6*N=Jmf8;5EP1{FN%w@4@ z`zX#H85a^q^%+cC@FbhId8R2{aDJhli_!GaJN}(A+cGOHm<;exVawqaB`I|F$hb=y zCDVhz_6rLQw>K_av;igNBqY1m8>JBuN7W7w{O9*cM;rqGa2&6@63GKx@I=d2x{R@V z_SDGnr5b(E@YpL(N0oz!8@yNTx)mo5j0y6nK;)wGavM6(s*q&YddyW9(bu!ym3vx6 z6b>pc@=TY?q93|YU{(06Zdp^17oroOOf=3v6-mM3syBrDRlKAXccgJ5oj5Qih_Dop zz2pTV0?#oGK#+>Sf2+y^z_H2W0D!Hie}}dB#xwxnbncwG1Cz%woZbik=#31BdeqiR zL&Oww!`}*-Ai@*vL(TD_CdI;R+CJ(so;PhDMJ1aRQb@H{o~sEmrZ;UL^~|{(k98v+ z>&9ld)mgq!ZAd=OKaW63%p3AdU%;`+ATZsr{ z@sIC+tfnHKX~lzX5grjl7UA?}@_O`JJ`bro(>%|_p@X$%=b8TcXYWK`JchYaxq&dW zus{aiPlTfSbEPsKdhVr_I|{RfOdgx1GODFRG^q&GNkF3%Dle19G|Hi&I!Tv&p^Cr$ z>bDyDlFAHWIK5FUA@Z|5o1GNxeC#t{1_1oko{yrGaLyTzmBkRBgCrL3SeH8D0{|5m8Pmg^IrSd$Ii5@)l_YX8kg4ygOO67_m zgWqicIPjGR#D1>gZoc)S4SfyjWaSdNQxS;KkALKYEnV)zSBdHnPd0v@hfBBr`pL7} zx+ZmF+6K&P{NH=+jbd9hXJ<3uki#`NfjTi#v8^9lQGtIu3$P;(l_L^S8_gE+WB2T- zaXU;mvrc8YBaX_6rDDMAFN$)rN9&}ErDAw9;{3k(3;)}3gz$@HClKIGo_I2;JVqpv zjqPUli`rL74qm4Ff~GRfGc{`ts#CD+1e$#LCF60DGA0u7|E+?J%~vToaX8Ua^qdQRWm?p5XKV)NB2RXx+Oq}%AZAzk~w{BA|Y@}74s@&IJ z5>6(LEOlh{8IQZ`bHc1vxPt0=GNjW#JuHIgbp#1&cj)RR2GZi3l&OML4NrhhM3<9? z^FV)H0Kcld4OA*iwa-SftQP4501=hwSEa8t!FCknHx=CJpB~2WH9NEcXuau-AXa5& zM!7B>fY{F^6Ol*tiOQfa#?%?7eNHTSDh2>9z0C2tkMIAKD;}NC?suZsS%tMgeOA4g z%evNe1MLr0mCsF*$VBAav7>?zrmqU=B$F;f+ftxX*@=NPO8LAX3STDm@(-RxDW7kN zJED~kLG=_vt6S{G=cBk2kABlW)eR_2=ai!tl{1je%LB=X)RdH4{=yK4oc5R6B56kT z2s0B-MzQ`8b7nL7nrWX2s)^sB%df=b%P%3JShYHI`IVwSD+S_nPrd0(!`d%SCY2M7 zd^2=oiAXB&GP)r!cjL?F=S1P8=OpS)XD~H>7?o@my|-k<2y*xuXH=)knn9~SffsS| z`CqW#z|W34Wqw&2YUn$^&P(IY9N9azQGaJ~^7&KZ_{>Con~2JZRhZ79d)+zAOlV?= zIv8RU1~@mGREB(`bQIYCt{PnJTft{>S$L05WeGz%}oB7XY=5MBqfTnWo^&h&g%qbr6xV#rpNi zl84_5Y9ku&Y9JAv3vef8kkO1~$L)Z2GL>$CYP($^^0X3s*)ac4Ao2i>q{$Y$k?C!G zkyLHTB(mw#N`P@TK6j=dw&^DFo28RNeqH$dQ{O75VdgCZzS>h^--oZL0rmbMHzdDAz)bW5RD3-sR$(~v+Wjq0}veD>dzkh3?P!R;Tp1N$G}hwN+4Qkm>) zjZualzxRISWN@^gK!T{qNW|i1KW?!9WIr%}v>4qP-Zf=IOuum74rk+7Lp%>0~2uqfuo%rndcAppFL3 z`9oMZ^Dm+gD#+oba_T=*?nO>k)3IVMyXw@LQUdX}Q+Hek`2oo!YS#@Un`z+a?de!d~$7I!5CNglCWnP^*$2oJ*yVjoaFK2jsZQZezMY)2r?0=)#> zCqt0QquS=+DgA;>F0W>LD5AS*Iw_=*KD-Sg5=owoZ%yIctFuaiwHnk{BDku*I&|U^ znodMScAn9wDjM%H`hKXKT%XsWV_ZrtH@K|^)E$UR#j}6+VAI#inLZ9|`^6%;T(jeh zv=WFDLMD<*GRZ2?q}tjEl`~XUr?Ld?G?)mXI>vJj$!YMKjkQ1{F*reTX9`*(P&t0n zRU^9PdMGO5%H)xMcUl}XCxD!-R*ol<_whQdN?;YyJzTnx$xSz*Fr7o~{4t{>q4_Za zNv;#8fou`DYIu1cj#uA<4kB6!6+!&g)1^pm7Mx{0(t}-d$yNaMD8b3OSCHv#Bnhue z1}hogWFrxAPMq#WM*W$JmOw`sK9MQA96C+yd}DTi*To=gwonI|3rPi{rX7pk6pr2ImJc&rW;!0?;(#l? z3z3I#zFNU6Pk*${$Vf<*5L&p%!AD`U*-4zQI^Tx~4df6ZLWBqrB1DJ~ zAwq-*5uy{&Fg$O^5?v0zUwS62lurSyb}UOsD_?EtmD<16OLIdk4Q(ZmZl$G)9Dd4% zSU$9kK&D`BKY`xSOeQ2z2Vu?FJ$q{Od4R#u9b$dc4_`ckWY>D+7Zx#FecigjRL?q5 z?|oNq7VDd+eLr77^n=hQS{_6I^|F-hZ{67Rlc~<5lRh>{0YXW%{D=VVZ&X~pU$fBfwa;t3Q4rQaM?g!Z@u3IYjVOPul7ts`oeUsW#5Mn5gZZu!T;+M z|J3x8{O;~Qu__m?nhX&lM2HafXzS2-&yKg%0N}{0OaHVZjS_!z=PeD#{HQ{eeHOX| z?9od z@hZIH)|8n=6%Z_Q*JZ#?TKUh03?2^CeMRA?&d%DvXFg;LnF~WNz1ELrSI?Zdra+K0`9 zec1cWC$aaNPd02*nRu*Q)aC6FS^DBJ^u=QsPHz;X;pE}JO zlv253wGHTP7XX4hG?WjTQyI`Z6+;OWB1DJ~Awq-*5h6s05FtW@2od69!~X+Lie@?S S@6=HM0000Px$M@d9MR5*>Tk) zT;SABt8VnHCimX+&ABu1M|Hj{PABtkhaaA9e+Ouz>-Na=G_3cO5<&L<3czl^Z3Cv0 zIkxR0L>>ZM&aSJWINq{(ya7N+5#(h?S!Qhj5Drex84kx>jIIFKM0XWvwOo*72Y^5W zENyn(9)Mv6jC0Q)9Zgmj$ML=Z0C}E<_1I0t@o{h8>!Xyc-p2wEA~%NXvGsZX_H3ju z08$jBNyKWoFpS!Kzg_~6CJ`^u+5p%9QWh1x4gvI|Rr0;QQR@Jl4#r5O$ci*P8_lX_ znnW~}WCtv(8z?0y%j~$qZoeff(w3>`kBpu5&DvZg0B{_Su4N;Y2zAsSRtbPMKttg8 r&-JhRtOZI*>gE=p32Lft{5O3785E=?sJzvi00000NkvXXu0mjf#to`< literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/item/ball/blue.png b/src/main/resources/assets/hamsters/textures/item/ball/blue.png new file mode 100644 index 0000000000000000000000000000000000000000..0c91ae9aae3083192aff6437552771ecf48ce1c8 GIT binary patch literal 449 zcmV;y0Y3hTP)Px$dr3q=R5*>Tl08qtP!xurwwlIZga%|WI%tf8iNr9lIIuIaJ2>_SIQj$p0UaIO z9hqD(VIk2$69!`-5z!dIKpUX)S%=!Dw^bK?r;~Hf`<(Z-7yc;eyQY>eeLLJO7k&qL z##myRL9cHF&&I>9{_*+(z^r*31!(ya@{-Ej9vJ|8`K&*5UvJXBDg)q5TDmi=;+Rzc zix7h%@%Q^)|5z9|gfKDQ7~3gSEe(LGrBSssqi$PF;|xpQJMbTp6wkrp8cd!IFX|6h(cPsXfDZvs rQo^tL>gmin1kDjZ1Qb%x_;30IuaKBy7Y0k700000NkvXXu0mjfKgz$S literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/item/ball/brown.png b/src/main/resources/assets/hamsters/textures/item/ball/brown.png new file mode 100644 index 0000000000000000000000000000000000000000..a9c2553c850cd260a39547bb5445024e4ade9b25 GIT binary patch literal 436 zcmV;l0ZaagP)Px$Zb?KzR5*>Tl1)njQ51%s5j7GKK@l|5g%E@-1ZmSMg!bW2sNHP+9c^b|tstOLE3g@jV3(~Y*WofL eR>Lp+xA+9ybeQCLAuJdG0000(o literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/item/ball/cyan.png b/src/main/resources/assets/hamsters/textures/item/ball/cyan.png new file mode 100644 index 0000000000000000000000000000000000000000..6bcbcba5443eb939d6e3a0feed4b7808dc61c597 GIT binary patch literal 435 zcmV;k0ZjghP)Px$ZAnByR5*>TlCes|P!xv0w4nxSk=72$;2>ggaBy&P6goK--y%XcpTbRO7GFS+ z;^ZVaICK)}P(+m4!69ueZLulF7!!vyA-5?mdZxp<|Nou;axeU`q(wuyT3aY~Pmg{F zgvLxUk24q<@w1fsuKRB<0DN7XB>{4^Mrt{SXH5(Mtx}Fe!`3U#?KuGc)YAQakMFyi z036@qSrcPva|^9fMk^K2N(BH4+iR%$aRBJ|#AM<2OfescLn9#czP1xIib8sKUrgW( zMn*jLd<|Q#fnj|EY&%L306xZo*nAo$`p@S_F@*rI$4F+Au5lt5L$i5#4S-}e@f&pk zAOlGDIHJcP0A8mZ_5SP%@tGV6r;bjeZm@S49ZF_1xbr+vQFLq@fHZ*ja8GJw72qHx zJCIWYbxwtxiez=gG_HFU{sURSXS2H3X&ZFfi#G?Q$LGRV4&N3<5uR!`i(-e{6MzJ0 duHwdjs~>e=k%BHmqc{Kn002ovPDHLkV1jMPvHAc2 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/item/ball/gray.png b/src/main/resources/assets/hamsters/textures/item/ball/gray.png new file mode 100644 index 0000000000000000000000000000000000000000..227bd41911087681dd91b3b9c17f9b4567b3c0bc GIT binary patch literal 396 zcmV;70dxL|P)Px$MoC0LR5*>Tk}-% zup2ZHEVgmNJR{re{?*IN`@i=mGw?@!eQMTq{c(7=+x-rR#yrmnAvEc`$Kz35uU7!} z`~4J9*ENg9g1+w?fU+#dA@4oM;}L+{?N)VN$LVweV3uy_`@S*8P?jY{QBV{G0LB=$ z+bsZH*NJ4axINGFaX1&dZK^UVs{y^_NZQBaKJWXJX5fA|9oOrg@irzdH_xrtS+qPM+*W$aawG*IH zsv3p?fDGV#KBKh;*koB2YqZvAtqCEBG|%VrJKlqNN?$IQm2<9f&VAhcQkC|_RgPz? qloChv>W#7E_6gt}^sdzSZ~6gqN1G7W4An&d0000Px$K1oDDR5*>Tk}*reKorM+2{siZbZ7;ol!9P4addKUb#(40$OpCS}=}TemmvUhW(&NYU2_1AuYe5Xg0OqOI}|as zkTY;v1S-|5bV2_Za#0ugef!R4vJn>!K(EF1U@P?td%gPPJOXF{7zpS+msge70+s6A ih--iPx$hDk(0R5*>TlD{tlVI0Okt)rqXnoBAMnn}NrIdEdT2zp4o>Tu1;_yGYr*V9WS^t3PD# zuw^b7M_7j5A>gIxrEhKK1VPXsD;a?c0i>1=s8@>EH>aAixb7Vmj3a`u3>_(&Q0tWv z&dCN{0QT7q&Au^!`475@CsP2#lPTiK6wcGV(5CTT-FN3e@~8Lo52==+YnGuSE1933 zqWXDZl-<9Tq6y)vzBsjBDFJv>*cK2B3c_#vH+%wH8krWFsJt2g0000Px$dPzhTlD|s=VHn3hnJA@j*$oAfR2aD3>um_(Cs&bWC3TpEKBaNV+4eHBe?=VI20kB z-WC(|dZy-$J*`%O0c!5&&}iU5E$_z;FG)hAzV7>_~Px$cu7P-R5*>Tl08qtP!xtA;7Te1%ZEk?!7#Wu;Xg2OV8F%Qf6&dcNoq^p& z2L}^JH;99aCPYH;6I(=V^ePT;YcCKNeW%mY_dMrq?}a}qG^<%Yh|V;h?7sgFP=m>| z!0Adm`0nGyv>vY)0Jx}LPXo#aQDSC@fjhJTHY*w5bk%k_ujT-Ff0fqY!J~C{2S7Nu zW#A6&m6BkylA&bgDVccyR`Vu1dxMeZ!PAn3)%Ijs_+~W-XmxJA1%NOj6gHOi1Ws4l z!Pt|!YP+NVQ;Z|MPd`N%;LVxW%ni3aRo^tEmO@DYcuowbxk#;!|E)pD>G2Z)oq7SM z*`Ezi^xA$wGmHjO))*^p;3udjKS|Jrda-{aZ7T2EOF*NZkVwq|e2KPx$en~_@R5*>TlD|s=VI0OknRpi3Q9@yG*w$2yMzi1$N<MH2N^UZR|4H0T}osOvPEMGha1 z0SNe0Do(|io0uh=$}l`1VR$|QKw>7r*0K(O_$W%v0&aS2H0CY4LO_}qMl=AFP?V*q zjNCxH3&UT#8>K=C04<)xX?%Ju0sybgnzUTItoF>;&o@#F$v`w~z0$`O*>065@B`)Yq^%p%?HjUNk6_3i>7Fs;nW2l6py3_as zU=ZNy@tn!V{wVZ}|Of+0000Px$NJ&INR5*>Tl08qtKp4k=J%Ny5AWRs>5@+LRf-7G@CKp}p2kP$PB)jQKqoa|; z$A14Z3LchHMC4t<$goe%M3T?W+W7!0-`9>` s-EFt2U)7Px$bxA})R5*>Tl0Qg7Q51*2Oo`AGyhRfta8RCzygx-EM1$VPyDBYp;KI4*p5J$V+p<+n)mF}M(w;C0OX!8<^hd-fwfQs+c7nOy31TTRKCPfQQRqi(Yh0#cq##Q_KhBAjhzWe1Ki z)V#K5!>RWGNXIf*W7Bov1F+36x%=g9E^oc+l8YI@h?Z_}eO{7-8YkQ l*S45G2bcxThFAD+@dNRzl%b&I`YQkc002ovPDHLkV1k;g!s-A3 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/item/ball/purple.png b/src/main/resources/assets/hamsters/textures/item/ball/purple.png new file mode 100644 index 0000000000000000000000000000000000000000..736510456580008f037c95cc964a3bf8d413fb48 GIT binary patch literal 449 zcmV;y0Y3hTP)Px$dr3q=R5*>Tl1)njVHAa*W(G5I#1I^$DB23O5JQ9(?OR6CKL}>s(q+G4pnnj# z3nFOMLWodW7zk|&tq?QIuhcO=TIfvks+kYK^+#tbHg={mCo=aF#us6o{`Sm~+q4YMTZ?EF85-`NAU?&nW=D%y+%jc;Kpd z0)XV4(rTN=VlY4~93>QX5emBiSPrgou(3DfG#&(Jk~Q7yQEjr-2ng}IyaIr%sBCHb zqJvtaZa8g^BVTwN?#CaY*ZtX#1W*}#3gqlE-bHBNKwMqUybF9RL~N zzI2H;y9BUZanGYkJ^(byhbH+b4yuBiLBDfu{R73RuDBNTS~+bbNl%?Tg6_-%RgRdihaKDR00000NkvXXu0mjf7dOK% literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/item/ball/red.png b/src/main/resources/assets/hamsters/textures/item/ball/red.png new file mode 100644 index 0000000000000000000000000000000000000000..f3e5163c0a544ebc396e571983cd18e427e3a0fb GIT binary patch literal 431 zcmV;g0Z{&lP)Px$X-PyuR5*>rlCe(0P!xtg;Fdsyqyr{2EN;Yv0gZ!$JA;dxK0}|tN6;7O>WZ6- zZ-9w|5ll=-69y6k!GPMN0u@SeC~bOMMic*}$?3W0{O3El7yetR=uflO0ARP6V{AJ{ z^vw3AdT(I^aNT=J8Z>JS)JzI%wKf3GkM_bMvpeACPx$Wl2OqR5*>Tl08eqKpe(@)!f5cMK(6$GOWL@9*-5?Mu zN(LdOW^~VacZ}|14}j|F;k6P< z3cwkT7RUPNc3-6y0nz{;!x7zwCmL2W{MRU2El=FAnzTE1f`Ky%-7n7S5+N=q6?JKr z4i=vi*SI{dnMc)1xY@9pl#2SCp`xgU5H0}A0M`9A>uZ|;yWd}s%X^2J%WLHF8ZZ4f zsm*LQy$jw!I_jRyt{Ux*ZMHjhVzLh-I+vbuaJP!0N>}C2!rDRloI%_uj;Qe8@B`x9 Vkb>tS-0}bb002ovPDHLkV1n(x!P5W$ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/item/ball/yellow.png b/src/main/resources/assets/hamsters/textures/item/ball/yellow.png new file mode 100644 index 0000000000000000000000000000000000000000..1397b6bf317316d17a1c5a465b0a2c05bfee8ca7 GIT binary patch literal 414 zcmV;P0b%}$P)Px$SV=@dR5*>Tk}*reP!xr~S8Hh@4y8k(qZGl#rQqOSa4CYDI67n#I`|Vh2yQ_f z9bAOs;^yoiWT`_3Lk1meg%ZU;Yb!j5m)E?P1|0N2$mQmq@1EoZ{wR^x9CY)CH&1>6 zXk)n!(-EHe>}`Vk@}%m6s~o_f3#&DlkCk!#Fl9%9GdglERiDhgEOR#OsB z(i8=N=-nQkjc=Cf=-y7DRRoAWAbbYDBNy*#Lc&Y6-S2}Rh4&@j`mW3-&ck#(5Xl_o+!u)K<^PY)&#&Vb7&+d(x|KJb!4W2*|)gW|3T5D zR~_m4f$;nwe{&+&>|0+%pRH4|k1FXcV(aZofGj90)A(=t0hl*|7uvo>Px$2}wjjR5*>zlCeqyK@>&LN&;>gOAA4ej4Y%REK&%92yPMBQn0ZIRw?|4{R2Vv z8>~h414JxLIz=Yg4Z%jp7X&tvXCZ6|c_Z8D?dIKk&&-2?zn14R8c`wulBEF5-XGL# z%~hV80BIiKnSgpe#0SwJYk)?SNO9I(naxcACQu>j3jkg&769}|ZL;x%o557gZD_-f zZjFPj&GNk8+~fAVT^#`MSu9-EiqsXRv!YU21xS|CA6?QL{8--j8G!4Mi_`mvx04C4S33aI^C6O@&d*dT3`4QjinUhaI2L1!_^pokt&X@lYeZvA h8P4TAFsdKghXeZEnbu=w%w<{C1yAoHhg?1*!KUFSwV9`(uszz=X}|o2)J>&`0397 z&jSSYHr$3e>3fSOKm7kT7bL)A@IP6iAy2@{;hIGc14DtTP2i&#Hf5lP7(8A5T-G@y GGywoYv0+dE diff --git a/src/main/resources/assets/hamsters/textures/item/bottle/black.png b/src/main/resources/assets/hamsters/textures/item/bottle/black.png new file mode 100644 index 0000000000000000000000000000000000000000..e115b2ac6a30c66e43853509fad83ac69ee78e88 GIT binary patch literal 422 zcmV;X0a^ZuP)Px$U`a$lR5*>Tk~>NRVHAbGdE~)_n7{-@gM~7U3$U^gt0@8&cH$Cj+=ylkDHH;3 zz$KW%$|goc5FwAhFk_NQGBdx0&fq)*K~MMJd(YvX^I!NQl&oU4Tm!)KJv`sT4?F;t zOE)#EW|1{54}zm=t**+SZ3}z(kPjfS5|Sx1Ev$f#C?~AyrCpF z(G!BqT}Q61@5E|G$;2p`48^ld+D-|CxVpUopwkU_czojW>?m_CruG${ydU-1$gAAF zxpcZg)IZ%b0hI3+QXz(TT?9Y1Vu)Grd=FjI>CYCwB4-NBm!E5&pV$C6;{gE27uT5r zu?*_b%7 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/item/bottle/blue.png b/src/main/resources/assets/hamsters/textures/item/bottle/blue.png new file mode 100644 index 0000000000000000000000000000000000000000..a5598cb5c748394e9de96205cf2a66890282b85a GIT binary patch literal 419 zcmV;U0bKrxP)Px$T}ebiR5*>TlEF#>Q51&1TMh=o7{*YbCE2uTXb~+U2y*E{dWjYVJw(tdTnVm% z+PDbc<1p>3=_w1a=sjG>>9GR5+FayR36VbFH`|=nl=E(CrKs1x6zf< z0i8EjE*}+qX23fofcSaF2_Tcn5Hpf=?S=%%=koyUpVq(4T3q0^Xa9q)-H@KKR4P#{ z7U|hbPx$R!KxbR5*>Tl1)oOK@^6c3BL;R4rEqFL1ZnWpm5bDT7`t$enGV9e*`UBxXzvJ z`~j`ohD7ZIGYSK>P#mQ)Z{)PFE8Gu3sIwX7%=plQf7nBLg?8|Pd zUoP#Km)Rc-0caUSD^qAd%YY^^=XU{oPO}jX(`vW1jK)}qNMv21UMt)+gr1%ZiG<@O zJ}0r&ZtIP;HCsR<;PL3o-~V9djhJ8(_lIn;>88(K*`&;JK~<5J#7u09%C4_)LFw zm;st6o1TEdmn4%(7H6j@*BTliolXOgIo`A802$CinPT`Hlxq!b8FRTD*=!c$y$X1n zU4VEzE>fwKw)XQ8Lo`1p@PB{cWwu551-JyIQpq#>zts-{;eo*U)}V<10000Px$V@X6oR5*>TlD$hpVHC!Hx6-657$k&9MRbjpz@VXmJ}3kSSD~SxrG}>H-)PaH zf51_wtu=_C4=iYC2tSgL3d3sgMJ&3fAuO)iIq!L%bDoz6{s_&f>58udAgYR} zDkufO$Hk#-w!?`mo?Zaabg!V40D`X5Il0*S0#|&U4*vjVr6dvv(;XV4p1VPNyuvIN zpf9NLd~dm=t69;kl*B!^Z0SiLj1~wZCwtPo)F#lt@#+i!nd}s~LXpJjk>i~04*;?o z3rzSt-*sqYnBA4N_5}bQ-pt>gEU;J*RYlXilxuHoksSr(sZ1tovVDFAKs|Q@z}ED< zqkzRi|9cIPx$Q%OWYR5*>TlCerdF%*WsD_*cDitTUg7tbmyLqVxSn2fq0)YN-$`f-wdm1aBYnUo~d}CX)&M;ga`Px$N=ZaPR5*>TlD$d;K@>*Mu3@8?7%)K$!9v`CpdvPQDbfX81Yg8LOIsgcpCKSZ zO3|0lO0?3bMNneMPm#!yHO^R!S)AP!1A1W??#w;k%y+r)$1vg!^JTS*;n(t2-nog^ znsIPq1^{U$k-|p;(zGDE@ryvd45=K9JY>26#S&yU!ODT~kya)uk_amf+Q?!_KT8*Y z0(7pCVcQXbakvK_09SW{`-dmaF4kk~B0T^&J^ElPGacl`m1Pe1-zFCTc=5$gS6XNm z#1PCRyn6mbaICIKw1lM)d%g3t$Y+4v1P;(cmB931U|ZAS{~^?H>0&-euT-f=8ck_B1-0000Px$Xh}ptR5*>Tk}*p{VHAd+8=(?$O^8e+B)Za&4M9_6EfF_x@gLaO9F0MHi(6|r zh5dqRtj(6vhSaDK)6a-f1icsXYf`x0s|odP=X~cp=X{43{wT#M8A@CMVAQLab%EIs z05orpZM9=g%^r0cK)SuN(rgF`NSEqoa`j;N2BE|i{@@IvT$6!Fl;yCSY{8(CyXGTz zi8{BWG)fPaO~(6)qFj^P@hwX(5Q!3qM9G~U%Ko7?Kv#R4Z2&TX4uz*@ZpxZto$Uqy zM|y`9ucsG>7v|aB_#Pbq@Md-fJq-pJ^(p|OWg=SUNC3+X%(|dix+jxgPx$Y)M2xR5*>Tk}*p{Q5462R+zp76*D2Bkghf8BH`9h4k2M62z~RqxDuenwMq~i3*q1KoB-Az26Faeh5#hbx(y6*!S5&;g6VmKULcFr6MYVQ6KXGYc)YdjGtB@X zkxdhGJ7#%!Cqy`Vwm1NwHJbeNWC(+Wq1HojdT48-g~XPCPPakjd4lqE2SBY_(;xR! zmH>l=@#g?wCazA!K>gPx$Vo5|nR5*>Tlg~;5Q54316QlSqvPf(SE72A$6m#RkMOzm_K@Twd7QI7n;4`>% z)vj8$7NXh&WmpML5~YxiIx~1%h{8Bi2=(pGJ?Hzuckj9IM@epnDK!Cr(X%jn7N%|i z(70+jW*6MdzOW7;yg^x*x+MVN3CP6uqrU@EYJ!!mK7&p`D47O1Rb%(CO?W$msas-k z-EctUS>or5U*uHH)>1MJlnmUTEsNRM4!}gm*$)7!p%ITyb?)A>u5*q%065KmvA5)# z);ozfNBQ>r0Dz`3`l)4;ErQXr@CIdCePb@O17P+n^!EYPhY{6o1c2Au@eZWdu3Z7P z2>xLRz+ncsyf|Px$Z%IT!R5*>Tl21zlVGxI(6$3YF1%o0;$Xvr93Xuqf?m`9~`T$)!cN?3O-q2@O8&hL3=h9CSfB)eiFatJ_MZ_qY0 zbVCCmdv{^!b=Zj~oHBqIl_!L5XaW$j%fsgE#?KQZB8T|Lrm3`QBC2>!w;%@q*&z?B-nbe`*1Ihmi^b&@9eVs@xJj&Dr)@ zZUEpuSt8_i_40tUw7=fawNpL!eH*`EQiSPb9F97gb+-N!u~`!b=URe+ukWS7U{T+<50 zhmuGplK^Bg8Pe%AiysRB$S#kh8=A$=CV;A{Qam0P-}&66PkN~}aSH`IG4#1gRaHwv fxm>p0{ompfDP)HlzS-|z00000NkvXXu0mjfuI#>= literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/item/bottle/orange.png b/src/main/resources/assets/hamsters/textures/item/bottle/orange.png new file mode 100644 index 0000000000000000000000000000000000000000..00ba91a277f0e2d968a07e1bfd3615ed0d2e02c8 GIT binary patch literal 427 zcmV;c0aX5pP)Px$Wl2OqR5*>Tk}*reP!xr~1X~I%C{k@HE;h*`3hE$I3W8IHLI*b|aq|y2xatom z_yV@W+zEn&n&+0J8^{ zGd=)U<{*HT!^rWN3n0=7gykRrk&44%Iy!xVaxO|b>0;WlP%=Zbtf1MJFgg+L+Mpy| z$*^VLB!LM`TNZkLfR+_rPst29$qzAXSxn;R!u|lDbJho--f(FePZV!9LUDl!07mB{ zw&r8rT~k)6pY~=K0O$zCWp1$13!Wp|J6<~~O?owwshmM$Iuyd0$B!Q}cZJesefR4M^b ztyZa2D(v(kz?f_~!8rQ_R8^GPx$eMv+?R5*>Tl1obhVHAcRQ<$QQ;0?+mqzQ=#sznGD1Q8fW8wn!l7f7qxwCl2L zBlHUrf)HvQ1Z`{)fe^SU$BGDzbjHO{$hh!pQ3*QJ1?t_M^PTtMdk+WxD4SLDV0;?@ z%_yN6DrG|jVDItNG}~fj?sQ53!Yz44*-!-_T#|>?zBv=X-fZsi`_M|d2#)xeoDR|3 z<)-b$gQ8z=_WS%>L5G)1{jTnDG!qN?qF9K|HuQocK7vHqKRXi5u}y$aDY0-FG3fOKr-_W*!Gwf5E1*8t5Z0q|U@@?5F@3ed0v%}`PF zYhJQzET3KhP|IcjI1Eqy{DTKc1E`yCKFk1PyT{)H!r?I9i9wWMJBz6u@=-S(8#C{q zOp%LH3YX+DU2a2!%+sxi$KwDblSvYZ1oK7!0GH&kl?~N&&J6%rmTi$pM10mm-hSIt t;g#-MJ62|Bx++f^(pN5Ci}K002ovPDHLkV1kkq#qaPx$Z%IT!R5*>TlD|trQ5?lTPfg7w6w$&;q8F5qAoOc!sLev08~RJ4EvThI+FP8$ zXo!}^hBlpA3Nxd@{6YDmf|t+NyA6`?e6JAdESK;1o^$T^T)yx}NOsM1Y#)Gjt4Ui^ z&@}~si~5m;>#!3KNj?BE;0Xv_Qv@JfZa*vGjo&9o$MzW>^ixw65qCz3jD)CE8(e)p z@cLXJ=!r;At%_+9SFdADRm9rpyr~y=Mj;gCvT-7MAGH{KV==b?K)z^jdv}j__u7_c z`2&FT*)oYCZ?~SBoM7y5y?+CMN6q-@$^=t{cB{#NCqP}*`Vw0WGzIm&OulGfY!?8i zR2u+%Y|Ypjm?9XydgtsB0~B}8e>X@blT0s-<4wG9>eyrTAk60REI@Y;TyDQ*b4?M- z^&64NWB|zJa%8hvM&IT-M7LkkHN~>dCIeZPrBo^E00000NkvXXu0mjfoK?VE literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/item/bottle/red.png b/src/main/resources/assets/hamsters/textures/item/bottle/red.png new file mode 100644 index 0000000000000000000000000000000000000000..7a67558d71a16b21a3172c2d9aaa96dd85a9a073 GIT binary patch literal 413 zcmV;O0b>4%P)Px$S4l)cR5*>rlCetyVHn1LXK5#8782YdWPNRg3ewQh>fqkc)E^K84Gz)RR$%`? zkW*MhjjgQ(Ikad-LMRFjXQFrBmDiHOoo6@%J=^Qz2w^_PkN1l+8`{?O7HrI4KnHcLD|r( zolw}ei^~deMd70MY&jnt0`%3ny9A(F?D6vYM&fAS^`6IV8MwbC9+U_3%5sF}+4cAU zfU40Ob!3w*Ld)n9@J&(IjIqqa0JBTA)8e7nV{>;4fMDAM;PK$Z6<~{?&iDZa=KPNt zVB&E5cR(_kB(kxNo>*gV{u9oRiCvun40;go`i6>Ui%_iBtV|{YKrWXfo6WMSYQX3w z+5kcbDV0iD{dp<0AT`?+g60=)W^lAh2r+b_R4Tb<|1*69{ltEF5qVPT00000NkvXX Hu0mjfI(NIk literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/item/bottle/white.png b/src/main/resources/assets/hamsters/textures/item/bottle/white.png new file mode 100644 index 0000000000000000000000000000000000000000..f42aee9a9b42df3d6b8bce94b74e9264aabe4aba GIT binary patch literal 433 zcmV;i0Z#sjP)Px$Ye_^wR5*>Tl0QpAVHAfSEyzvpwHhLb>P;g8X|&0~!NMR2{16R6-=Lr&Xvojt zmJl>FMMGPGE;VR>ZV@OKr0#u-D8=Bu4Wgj;8d06?J?Hm(IOn_v{un;5FG)-r1b<+hH=rvD^ajKP?N+jbfrx%Gt=lE>E z{lnc>barNYbT~r!`l90*>?PhCRkgm6>B=RNaT3Wmd%OFpcWf7+9fs2Y;L;xkAm&(} zI@b;W-i90&f`P7F8}uUpfZ25VmHGp0yVYi`-lSG<{sJH^3dPojg+GAs2Z%XV-}zmD zr{~9x8K6|EbZYYC_Px$SV=@dR5*>TlCev}KorJ*CnALgODYsmL9B662}(i1!J!CdsOan@xVZXHxY}88 zDNY?+{0|&DC|!zR(HQAq(GI3VN~O@ALugBq6ASv_xV!hh?|b)-5B?ZJmApFich~DL zA9j8xBiJz&Sx*2Ubq(oyLi%UP=|;4l2$NH3XgJ7>3HlbeB`8;*Yzxw}QaEoS@RISc zV#7i1oCI?j6Eddc;#$aX(}+Mn>Sh~&`&f_XmsgH!t4dtt4*Pa&%_VOjQvFRbc1?U6TPx#{YgYYR5*?8k+D*PKoEvM2$&cIlL^ML39V9Uod@uVeF!I(mO5HyU~nLum?NA; z=13qUwS|9kw|nz{yL$`>Moe>z_1yWl=Xk8|||paxGMs*)%Pqs>%k)(vPm^lckZ8 zYr*x+U2V$JWqlWUtN_lPk&zcGq%3xTERED{I44OW-rk=Zm7T!_07GZOEC^Y=JSpA1 z*=}<@_8UfR2ABom!C2OQkR;o=9_}BzzJSk<*VBM3UE+Gv8l-dk5_#N+>n&V*Q^a?w z0Inv%K_!vLPx$6G=otR5*?8kugidKp2LfGpUM*DcDZMR&;O>3eusA)cgYncL#R|7e@z27k`O^ z{sM99AO#^qhlVD_p(H~th*)AghmzQ&v9p8EboU+a^WEJC|A>4+tKTdP#O`IWAPJU? zGLZ~aQCM4D6Yx^^3gr?b=dsar!AGiQ?F7AuIfS1ST z#e&JmV`ZzFijvwap=}il^yN?ly=z4e$_H0-okH8Px$5J^NqR5*?8kugidKp2LflQdv-2v{ts2u^~nf>2yKIp{9^3GMEWaqr~rFK`oF zN}+>N=u{|8XsB?5$&dujA>^8*v9p8kboasYeBa#%{}JWF;L_L$3_p@;K?WXJ7C{)Q zD%hx*B8j7dNVhv{Hki9B6@(#It(JxsYpKuDcNKtLZ-|cLGxp+*VD7F||KXm|Y{~Q6 zw9xtbC>_W?Zqn`XY*Pstr4p^`I5hxl%S47zi7LzZzkteo z|Nrk_FLC3I(t}xb_x3ezc>A;UKMxSR5xUg#-)D}*zj-&?4IUi7JNv)tCNIf*v6W{& zBqwTjo%QKDB_Qr0W#GZK%g9Fi><|88TW)44flCupE83O`vZ*k~8t!RLIzopr09V!Z literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/item/bowl/gray.png b/src/main/resources/assets/hamsters/textures/item/bowl/gray.png new file mode 100644 index 0000000000000000000000000000000000000000..56db4bceb87655ff68d33c397d69001f67699b92 GIT binary patch literal 291 zcmV+;0o?wHP)Px#-AP12R5*?8kvocoKomre@DM>n^Nw6YLq~2xa3wCpeF!eYNN^2CcLCA}VxTXX zcKp4Wbb_gUig=HeJG0JM?=#z&j4qPq6lm4_GI>b-&>aD1bVqor4%BvS!*%I z>?RR8o;QFbNj$AJecyirL}bhJ91)?e>r--?rhAAnhN`MI*Z##tN~xRC>DbKa1aNiB zvV52TbY1s5;A<8)=%@P*Sl88S+jaxUvh0>5A`HU-Kp2MJG)=%^jaq8};y7j;$Hz4W pLEz2v3_#!aXTTNoNzV9p^ac%oT74qKS}6bk002ovPDHLkV1kJKdbR)n literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/item/bowl/green.png b/src/main/resources/assets/hamsters/textures/item/bowl/green.png new file mode 100644 index 0000000000000000000000000000000000000000..2a18fcff259930beef83bd4762ad43dbafc460b7 GIT binary patch literal 309 zcmV-50m}Y~P)Px#?@2^KR5*?8kw0s~Kp2OgyV`_Oii27dH^EUlIyty@l75JOsD26k1|6InMVth; z!+^~oK_pRg9g=I3(>QnVx7>Swp65My;T~Zhw1&5V&3B2wfKOF8?9kWX2M2MEilU0S zY_=tyiuGX!-9ZL<>#Pn`B7Ut)5%psHMNZ(USigU`thOP`aj~;gPu7<<4EipUuTY!c zOZ%JMhFbs)3<+$flHaVhApoP#%ZC8dS$JFEt)bb;MCL4?K$QrjMEG;GKZn}eW%ocq z^pn1I5OF$Px$6iGxuR5*?8k-ba9Kp2Oglh6ziB`6U=QHpMH>*`W!*W%{rBu;MaB2LA{{s&HO zy1FX3WbM{$EkWrJ8d`$V3@OSv$i?PEX9u6K>@ZM&7~ykge@Shx3SRCO*-T2j4UBSU#JA5=7|dhS~(fj9hG&#$j?7Xj{{;#@5y z==EdvcJ)N0YV-K6Q!H5EL%4Sr(gp0JcCM4}I!xRL07^@1V)ixy=Ek^KX#!wa+eE>0 s;TSc;6z@?8z_i;*3$mi0P{F^$Ct>+l?P1&TGynhq07*qoM6N<$g5%Px$7)eAyR5*?8k-ba9Kp2Og!}?Jbf>5xi6@}`WDVwFx!Ku(f{Wly`9Gx5mg@S*E zpy1S@5F9gQZ38L&fCd7RL0fe=2f1iI?CjugI^MhIdEdK(|A=^@Q9qdp+}+=#3lx~k zY50C1)8M7-yqHctBBG4iEbedNbcWLR1L}=~5VGxVxON>+0&Emkg<({%toFCS=?vxZ z*%5=@m}c`f(s_GR2Vl3jPPJCz{PaSq=`+Mq*vThAm1?b&xK>0k=#2rmy1q<#0eF0P znk}&HF1o%Kid5}qT*pfnh`FgS&6YIH7Ul9`qLb@*^hY)T%UMmlPJ%B^9Waav0GhT& w5Im=T@Y2}qz?p1Yr1JOBUy07*qoM6N<$f-caWUH||9 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/item/bowl/lime.png b/src/main/resources/assets/hamsters/textures/item/bowl/lime.png new file mode 100644 index 0000000000000000000000000000000000000000..8c11c08a1f0fbb638f9d34ae1004bc44ea59ccf1 GIT binary patch literal 356 zcmV-q0h|7bP)Px$9!W$&R5*?8kv~hrKp2Og*o!TtMN5THBtg(Y2hq*3(6N)dLpK+{ftw$~#m#Tf zNpKPR4N@H1p@Jlo5KwGw2+>C4pck7zIy?BA-h1z!=icMsKT5i>+u8gTxV^l~7f7(G zy)bi&Q69Wp36xi_ln@EIX>5mBLlMo~A_pBOhOB-V*N&-201YEhCQS{y=Y9*Up@@!7 zeMaLc*Jstl&8r&~02=!?t#+OB}D{s#?Cl>W3J6A{NQsVjNQkysV(0J}ZN6EgE!T=kO^rs$=R*?mfUmEemDte~RO8 z)SDUr<+VBfgPQw|qEt}A;0*w~=OzVd(NB@!-^mACcw9Ry4bczj&b=Kk8MKl2+K8yzDfCKx&#oSt~N`78%BNa22EjqZmJpSJUa zw!aFKFHhDso0!6UoP3a;q&?OV^htq|B0_G=5^jt z#nI+_+|D+w;?Exy7u|M&$KU1OOGrpeSY+tH_{cucFR<)RV3@rvvS3j3^P6Px#|4BqaR5*=eU>F6A=mHC@*zjsdIQ9#>0Wgh1{Qnrsc7kfVeoOMi{WM#Pk`80WV)d=%uB< zFcdN{FfbfBjuGal2Hd{K$e^n9A8rs#3>n;g#){p5FMt0rPCvr>pWz4tL#EAd44dvg zV`bQN55gAbW?+2z6~cxaA0+_^I4S;r49{>xqaX(Zlv?D{qhiRQ|H1JJO6O)X54RKXRLRp{D=MFeOq}x`W=)o zySwL4*TW;P5A%S4(;KCp_jUUc6A~P{j>SZF{6E6#A`w?t(QGR9GvcSD{oj8lK<+m9 n`7tkq`2z1D)&wbbeg=jWDKVNHZ2Jm<0mk6z>gTe~DWM4f-aeHC literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/item/bowl/purple.png b/src/main/resources/assets/hamsters/textures/item/bowl/purple.png new file mode 100644 index 0000000000000000000000000000000000000000..50ed242ef2f0129ca5a7ad6d6ead0b5930aa6810 GIT binary patch literal 351 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D%zB|TjnLo9le z6C_xBUNF@~*;bh5>K2NX`9J^MmI?qI=#r(7+JAcgbuq>g=f@w2vV zs`&E7H_oW%90Dpku;94P`Gm}ra~Jk5eq(>;s}4_wgJ00Z#)nF)+$1)b7#;s0*2UOA z?|ym$5NLdTaY&4X=lJ=#NAeF`e!gB}iR#e@YzL1_IJk5_|3>KpUtg;~o_Id{zww@= zgbjk+$2PpYbibWv{=IpP8A-w^e?GsqWoBj$GO_A#HvoYTo4X8Z{`_UjHZj`#!RX)L t&odi=;NgMOqAS=INVjkwFyWJ9VBpG&^1f`4_!byq44$rjF6*2UngBnPpRND^ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/item/bowl/red.png b/src/main/resources/assets/hamsters/textures/item/bowl/red.png new file mode 100644 index 0000000000000000000000000000000000000000..cbe566162f1bd3a7002ac43f8a4c296e32ffcf74 GIT binary patch literal 347 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D%zMLk^{Lo9le z6C_xBUNAk?`c+|Ca&KqHU4|KMoML5d;`Md^jxU?p-r4){^!|7awv7i=N?ltd^!8VN z|9^D;e4frjn+klz_x)?zeExsM$N7zojgF1|?S>96vl0)_Ue3V`Qn>%{v8IR5zAonx zEkD2b#u`0^LkEB$;e_HrfxJZr1a_pJuAlLG=7qT{*J<`H5?nSDXo%t+7skWUIw$7L zzCPc`00`E6|9DW0g-83m&4K&_t?Tzo^6ZFw$ae6^go8ij^*2Z#_%nTC;n8mG|KUKj zE*>uuZj}5x&fPX!{vJrP!G}$o4D0^!cJfx3uyr{6(K~kR?1xv^!`ECqaq`fqAAk9e pxJuu%aW!SQs}RGmtndQ^!_Rq?TJof-fD literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/item/bowl/white.png b/src/main/resources/assets/hamsters/textures/item/bowl/white.png new file mode 100644 index 0000000000000000000000000000000000000000..b9eef31d909b11aaf7a44bdcffe96d8af71f695f GIT binary patch literal 341 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D%z`8{16Lo9le z6C_xBUNFh(YJbdHv4Zn>9)r)~DO)rSZ(hFsfAVD=g%ihrJp8LJ()@sJO?>r~htIyM z|Cf}Ikl6I;(1Tg)Vyk)5|4zjvZuXNSGA#bAIoK8eljvc)I$ztaD0e0sv@kiMRj& literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/item/bowl/yellow.png b/src/main/resources/assets/hamsters/textures/item/bowl/yellow.png new file mode 100644 index 0000000000000000000000000000000000000000..7f87c8f6310f50c80a18383b0d2e77b59770eeec GIT binary patch literal 307 zcmV-30nGl1P)Px#?MXyIR5*?8k)aF1KorKmhby9GU{OrNY!MdB{sAIbM2un;4E_lU!n#q!IQ%OX z1}m3`Nwf%8CdOwtj_urLHu$B-yZ8O>dw0NJ^w~I0z8j{e5`Z?^EkNGDMdo@9lsrw4 zr4QR(;3~lK1`HOdNd{>h2?ee>pruRjLQVl!0UqxNGG=U7=4QQ)3e@WY&Wx}gf^~We zAF?}?Gio`r+>@CA87sr)tOrfQ<-obV2?zkYpMrERt4Ne3sDSo9F??V?%6~#6fGAcs z+jS_72002ovPDHLk FV1kU1fCK;l literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hamsters/textures/item/hamster_ball.png b/src/main/resources/assets/hamsters/textures/item/hamster_ball.png deleted file mode 100644 index bc1e2c30e7d46fc565ac401ea77e75b16325b5c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 346 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D%zMLb;`Lo9le z6C^SYba*dH`8n0~#GiQ{b1fF}G-URC3Tf+}yYFj%;^%3(JRlG~%PEj2$?f`@RclT> zNK`zNaN_(yg_8#leR%X-o-H%cjm_QLwC(Tle8U3n4%U4;DywXL_=R_I`&^wN!SmDd zK~2iGwq7)fWBdDi z$6s;nU^HJBpT6St?WRS7%PMbv+g)H<9q!|9*uXk-@xqmzNgN>cm%G^megF;8NYc2N z@nZho6P8NC=k^!=wQBo5FV5ybLEYn!ijbrh#!YIxzP=*%i+8gfW;F;uFsCce7^uDL lZ3M4_IS1PXQ$9Hc2AxR>Ph~5