@nodecraft/rendermite 0.0.1 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +25 -0
- package/README.md +91 -0
- package/assets/README.md +17 -0
- package/assets/builtin/minecraft/atlases/misc.json +24 -0
- package/assets/builtin/minecraft/items/black_banner.json +12 -0
- package/assets/builtin/minecraft/items/black_shulker_box.json +6 -0
- package/assets/builtin/minecraft/items/blue_banner.json +12 -0
- package/assets/builtin/minecraft/items/blue_shulker_box.json +6 -0
- package/assets/builtin/minecraft/items/brown_banner.json +12 -0
- package/assets/builtin/minecraft/items/brown_shulker_box.json +6 -0
- package/assets/builtin/minecraft/items/chest.json +6 -0
- package/assets/builtin/minecraft/items/conduit.json +6 -0
- package/assets/builtin/minecraft/items/copper_chest.json +6 -0
- package/assets/builtin/minecraft/items/copper_golem_statue.json +6 -0
- package/assets/builtin/minecraft/items/creeper_head.json +6 -0
- package/assets/builtin/minecraft/items/cyan_banner.json +12 -0
- package/assets/builtin/minecraft/items/cyan_shulker_box.json +6 -0
- package/assets/builtin/minecraft/items/decorated_pot.json +6 -0
- package/assets/builtin/minecraft/items/dragon_head.json +6 -0
- package/assets/builtin/minecraft/items/ender_chest.json +6 -0
- package/assets/builtin/minecraft/items/exposed_copper_chest.json +6 -0
- package/assets/builtin/minecraft/items/exposed_copper_golem_statue.json +6 -0
- package/assets/builtin/minecraft/items/gray_banner.json +12 -0
- package/assets/builtin/minecraft/items/gray_shulker_box.json +6 -0
- package/assets/builtin/minecraft/items/green_banner.json +12 -0
- package/assets/builtin/minecraft/items/green_shulker_box.json +6 -0
- package/assets/builtin/minecraft/items/light_blue_banner.json +12 -0
- package/assets/builtin/minecraft/items/light_blue_shulker_box.json +6 -0
- package/assets/builtin/minecraft/items/light_gray_banner.json +12 -0
- package/assets/builtin/minecraft/items/light_gray_shulker_box.json +6 -0
- package/assets/builtin/minecraft/items/lime_banner.json +12 -0
- package/assets/builtin/minecraft/items/lime_shulker_box.json +6 -0
- package/assets/builtin/minecraft/items/magenta_banner.json +12 -0
- package/assets/builtin/minecraft/items/magenta_shulker_box.json +6 -0
- package/assets/builtin/minecraft/items/orange_banner.json +12 -0
- package/assets/builtin/minecraft/items/orange_shulker_box.json +6 -0
- package/assets/builtin/minecraft/items/oxidized_copper_chest.json +6 -0
- package/assets/builtin/minecraft/items/oxidized_copper_golem_statue.json +6 -0
- package/assets/builtin/minecraft/items/piglin_head.json +6 -0
- package/assets/builtin/minecraft/items/pink_banner.json +12 -0
- package/assets/builtin/minecraft/items/pink_shulker_box.json +6 -0
- package/assets/builtin/minecraft/items/player_head.json +6 -0
- package/assets/builtin/minecraft/items/purple_banner.json +12 -0
- package/assets/builtin/minecraft/items/purple_shulker_box.json +6 -0
- package/assets/builtin/minecraft/items/rc_filled_map_base.json +6 -0
- package/assets/builtin/minecraft/items/rc_filled_map_overlay.json +7 -0
- package/assets/builtin/minecraft/items/rc_firework_star_base.json +6 -0
- package/assets/builtin/minecraft/items/rc_firework_star_overlay.json +6 -0
- package/assets/builtin/minecraft/items/rc_potion_bottle.json +6 -0
- package/assets/builtin/minecraft/items/rc_potion_bottle_lingering.json +6 -0
- package/assets/builtin/minecraft/items/rc_potion_bottle_splash.json +6 -0
- package/assets/builtin/minecraft/items/rc_potion_content.json +6 -0
- package/assets/builtin/minecraft/items/rc_tipped_arrow_base.json +6 -0
- package/assets/builtin/minecraft/items/rc_tipped_arrow_head.json +6 -0
- package/assets/builtin/minecraft/items/red_banner.json +12 -0
- package/assets/builtin/minecraft/items/red_shulker_box.json +6 -0
- package/assets/builtin/minecraft/items/shield.json +6 -0
- package/assets/builtin/minecraft/items/shulker_box.json +6 -0
- package/assets/builtin/minecraft/items/skeleton_skull.json +6 -0
- package/assets/builtin/minecraft/items/trapped_chest.json +6 -0
- package/assets/builtin/minecraft/items/waxed_copper_chest.json +6 -0
- package/assets/builtin/minecraft/items/waxed_copper_golem_statue.json +6 -0
- package/assets/builtin/minecraft/items/waxed_exposed_copper_chest.json +6 -0
- package/assets/builtin/minecraft/items/waxed_exposed_copper_golem_statue.json +6 -0
- package/assets/builtin/minecraft/items/waxed_oxidized_copper_chest.json +6 -0
- package/assets/builtin/minecraft/items/waxed_oxidized_copper_golem_statue.json +6 -0
- package/assets/builtin/minecraft/items/waxed_weathered_copper_chest.json +6 -0
- package/assets/builtin/minecraft/items/waxed_weathered_copper_golem_statue.json +6 -0
- package/assets/builtin/minecraft/items/weathered_copper_chest.json +6 -0
- package/assets/builtin/minecraft/items/weathered_copper_golem_statue.json +6 -0
- package/assets/builtin/minecraft/items/white_banner.json +12 -0
- package/assets/builtin/minecraft/items/white_shulker_box.json +6 -0
- package/assets/builtin/minecraft/items/wither_skeleton_skull.json +6 -0
- package/assets/builtin/minecraft/items/yellow_banner.json +12 -0
- package/assets/builtin/minecraft/items/yellow_shulker_box.json +6 -0
- package/assets/builtin/minecraft/items/zombie_head.json +6 -0
- package/assets/builtin/minecraft/models/item/generated.json +30 -0
- package/assets/builtin/minecraft/textures/item/empty.png +0 -0
- package/assets/builtin/minecraft/textures/item/unknown.png +0 -0
- package/assets/builtin/mobheads/items/allay.json +6 -0
- package/assets/builtin/mobheads/items/armadillo.json +6 -0
- package/assets/builtin/mobheads/items/axolotl.json +6 -0
- package/assets/builtin/mobheads/items/bat.json +6 -0
- package/assets/builtin/mobheads/items/bee.json +6 -0
- package/assets/builtin/mobheads/items/blaze.json +6 -0
- package/assets/builtin/mobheads/items/bogged.json +6 -0
- package/assets/builtin/mobheads/items/breeze.json +6 -0
- package/assets/builtin/mobheads/items/camel.json +6 -0
- package/assets/builtin/mobheads/items/camel_husk.json +6 -0
- package/assets/builtin/mobheads/items/cat.json +6 -0
- package/assets/builtin/mobheads/items/cave_spider.json +6 -0
- package/assets/builtin/mobheads/items/chicken.json +6 -0
- package/assets/builtin/mobheads/items/cod.json +6 -0
- package/assets/builtin/mobheads/items/copper_golem.json +6 -0
- package/assets/builtin/mobheads/items/cow.json +6 -0
- package/assets/builtin/mobheads/items/creaking.json +6 -0
- package/assets/builtin/mobheads/items/creeper.json +6 -0
- package/assets/builtin/mobheads/items/dolphin.json +6 -0
- package/assets/builtin/mobheads/items/donkey.json +6 -0
- package/assets/builtin/mobheads/items/drowned.json +6 -0
- package/assets/builtin/mobheads/items/elder_guardian.json +6 -0
- package/assets/builtin/mobheads/items/ender_dragon.json +6 -0
- package/assets/builtin/mobheads/items/enderman.json +6 -0
- package/assets/builtin/mobheads/items/endermite.json +6 -0
- package/assets/builtin/mobheads/items/evoker.json +6 -0
- package/assets/builtin/mobheads/items/fox.json +6 -0
- package/assets/builtin/mobheads/items/frog.json +6 -0
- package/assets/builtin/mobheads/items/ghast.json +6 -0
- package/assets/builtin/mobheads/items/giant.json +6 -0
- package/assets/builtin/mobheads/items/glow_squid.json +6 -0
- package/assets/builtin/mobheads/items/goat.json +6 -0
- package/assets/builtin/mobheads/items/guardian.json +6 -0
- package/assets/builtin/mobheads/items/happy_ghast.json +6 -0
- package/assets/builtin/mobheads/items/hoglin.json +6 -0
- package/assets/builtin/mobheads/items/horse.json +6 -0
- package/assets/builtin/mobheads/items/husk.json +6 -0
- package/assets/builtin/mobheads/items/illusioner.json +6 -0
- package/assets/builtin/mobheads/items/iron_golem.json +6 -0
- package/assets/builtin/mobheads/items/llama.json +6 -0
- package/assets/builtin/mobheads/items/magma_cube.json +6 -0
- package/assets/builtin/mobheads/items/mannequin.json +6 -0
- package/assets/builtin/mobheads/items/mooshroom.json +6 -0
- package/assets/builtin/mobheads/items/mule.json +6 -0
- package/assets/builtin/mobheads/items/nautilus.json +6 -0
- package/assets/builtin/mobheads/items/ocelot.json +6 -0
- package/assets/builtin/mobheads/items/panda.json +6 -0
- package/assets/builtin/mobheads/items/parched.json +6 -0
- package/assets/builtin/mobheads/items/parrot.json +6 -0
- package/assets/builtin/mobheads/items/phantom.json +6 -0
- package/assets/builtin/mobheads/items/pig.json +6 -0
- package/assets/builtin/mobheads/items/piglin.json +6 -0
- package/assets/builtin/mobheads/items/piglin_brute.json +6 -0
- package/assets/builtin/mobheads/items/pillager.json +6 -0
- package/assets/builtin/mobheads/items/player.json +6 -0
- package/assets/builtin/mobheads/items/polar_bear.json +6 -0
- package/assets/builtin/mobheads/items/pufferfish.json +6 -0
- package/assets/builtin/mobheads/items/rabbit.json +6 -0
- package/assets/builtin/mobheads/items/ravager.json +6 -0
- package/assets/builtin/mobheads/items/salmon.json +6 -0
- package/assets/builtin/mobheads/items/sheep.json +6 -0
- package/assets/builtin/mobheads/items/shulker.json +6 -0
- package/assets/builtin/mobheads/items/silverfish.json +6 -0
- package/assets/builtin/mobheads/items/skeleton.json +6 -0
- package/assets/builtin/mobheads/items/skeleton_horse.json +6 -0
- package/assets/builtin/mobheads/items/slime.json +6 -0
- package/assets/builtin/mobheads/items/sniffer.json +6 -0
- package/assets/builtin/mobheads/items/snow_golem.json +6 -0
- package/assets/builtin/mobheads/items/spider.json +6 -0
- package/assets/builtin/mobheads/items/squid.json +6 -0
- package/assets/builtin/mobheads/items/stray.json +6 -0
- package/assets/builtin/mobheads/items/strider.json +6 -0
- package/assets/builtin/mobheads/items/sulfur_cube.json +6 -0
- package/assets/builtin/mobheads/items/tadpole.json +6 -0
- package/assets/builtin/mobheads/items/trader_llama.json +6 -0
- package/assets/builtin/mobheads/items/tropical_fish.json +14 -0
- package/assets/builtin/mobheads/items/turtle.json +6 -0
- package/assets/builtin/mobheads/items/vex.json +6 -0
- package/assets/builtin/mobheads/items/villager.json +6 -0
- package/assets/builtin/mobheads/items/vindicator.json +6 -0
- package/assets/builtin/mobheads/items/wandering_trader.json +6 -0
- package/assets/builtin/mobheads/items/warden.json +6 -0
- package/assets/builtin/mobheads/items/witch.json +6 -0
- package/assets/builtin/mobheads/items/wither.json +6 -0
- package/assets/builtin/mobheads/items/wither_skeleton.json +6 -0
- package/assets/builtin/mobheads/items/wolf.json +6 -0
- package/assets/builtin/mobheads/items/zoglin.json +6 -0
- package/assets/builtin/mobheads/items/zombie.json +6 -0
- package/assets/builtin/mobheads/items/zombie_horse.json +6 -0
- package/assets/builtin/mobheads/items/zombie_nautilus.json +6 -0
- package/assets/builtin/mobheads/items/zombie_villager.json +6 -0
- package/assets/builtin/mobheads/items/zombified_piglin.json +6 -0
- package/assets/builtin/mobheads/models/item/allay.json +6 -0
- package/assets/builtin/mobheads/models/item/armadillo.json +41 -0
- package/assets/builtin/mobheads/models/item/axolotl.json +36 -0
- package/assets/builtin/mobheads/models/item/base/camel.json +59 -0
- package/assets/builtin/mobheads/models/item/base/cat.json +52 -0
- package/assets/builtin/mobheads/models/item/base/cow.json +56 -0
- package/assets/builtin/mobheads/models/item/base/donkey.json +68 -0
- package/assets/builtin/mobheads/models/item/base/guardian.json +272 -0
- package/assets/builtin/mobheads/models/item/base/head_32_32.json +19 -0
- package/assets/builtin/mobheads/models/item/base/head_64_32.json +34 -0
- package/assets/builtin/mobheads/models/item/base/head_64_64.json +34 -0
- package/assets/builtin/mobheads/models/item/base/head_64_64_overlay.json +34 -0
- package/assets/builtin/mobheads/models/item/base/head_display.json +8 -0
- package/assets/builtin/mobheads/models/item/base/hoglin.json +81 -0
- package/assets/builtin/mobheads/models/item/base/horse.json +80 -0
- package/assets/builtin/mobheads/models/item/base/llama.json +64 -0
- package/assets/builtin/mobheads/models/item/base/nautilus.json +213 -0
- package/assets/builtin/mobheads/models/item/base/piglin.json +80 -0
- package/assets/builtin/mobheads/models/item/base/spider.json +32 -0
- package/assets/builtin/mobheads/models/item/base/squid.json +116 -0
- package/assets/builtin/mobheads/models/item/base/villager.json +43 -0
- package/assets/builtin/mobheads/models/item/bat.json +41 -0
- package/assets/builtin/mobheads/models/item/bee.json +59 -0
- package/assets/builtin/mobheads/models/item/blaze.json +6 -0
- package/assets/builtin/mobheads/models/item/bogged.json +113 -0
- package/assets/builtin/mobheads/models/item/breeze.json +49 -0
- package/assets/builtin/mobheads/models/item/camel.json +6 -0
- package/assets/builtin/mobheads/models/item/camel_husk.json +6 -0
- package/assets/builtin/mobheads/models/item/cat.json +6 -0
- package/assets/builtin/mobheads/models/item/cave_spider.json +6 -0
- package/assets/builtin/mobheads/models/item/chicken.json +62 -0
- package/assets/builtin/mobheads/models/item/cod.json +98 -0
- package/assets/builtin/mobheads/models/item/copper_golem.json +85 -0
- package/assets/builtin/mobheads/models/item/cow.json +6 -0
- package/assets/builtin/mobheads/models/item/creaking.json +120 -0
- package/assets/builtin/mobheads/models/item/creeper.json +6 -0
- package/assets/builtin/mobheads/models/item/dolphin.json +33 -0
- package/assets/builtin/mobheads/models/item/donkey.json +6 -0
- package/assets/builtin/mobheads/models/item/drowned.json +8 -0
- package/assets/builtin/mobheads/models/item/elder_guardian.json +6 -0
- package/assets/builtin/mobheads/models/item/ender_dragon.json +113 -0
- package/assets/builtin/mobheads/models/item/enderman.json +41 -0
- package/assets/builtin/mobheads/models/item/endermite.json +59 -0
- package/assets/builtin/mobheads/models/item/evoker.json +6 -0
- package/assets/builtin/mobheads/models/item/fox.json +55 -0
- package/assets/builtin/mobheads/models/item/frog.json +159 -0
- package/assets/builtin/mobheads/models/item/ghast.json +131 -0
- package/assets/builtin/mobheads/models/item/giant.json +6 -0
- package/assets/builtin/mobheads/models/item/glow_squid.json +6 -0
- package/assets/builtin/mobheads/models/item/goat.json +56 -0
- package/assets/builtin/mobheads/models/item/guardian.json +6 -0
- package/assets/builtin/mobheads/models/item/happy_ghast.json +131 -0
- package/assets/builtin/mobheads/models/item/hoglin.json +6 -0
- package/assets/builtin/mobheads/models/item/horse.json +6 -0
- package/assets/builtin/mobheads/models/item/husk.json +6 -0
- package/assets/builtin/mobheads/models/item/illusioner.json +6 -0
- package/assets/builtin/mobheads/models/item/iron_golem.json +34 -0
- package/assets/builtin/mobheads/models/item/llama.json +7 -0
- package/assets/builtin/mobheads/models/item/magma_cube.json +100 -0
- package/assets/builtin/mobheads/models/item/mooshroom.json +6 -0
- package/assets/builtin/mobheads/models/item/mule.json +6 -0
- package/assets/builtin/mobheads/models/item/nautilus.json +6 -0
- package/assets/builtin/mobheads/models/item/ocelot.json +6 -0
- package/assets/builtin/mobheads/models/item/panda.json +61 -0
- package/assets/builtin/mobheads/models/item/parched.json +6 -0
- package/assets/builtin/mobheads/models/item/parrot.json +73 -0
- package/assets/builtin/mobheads/models/item/phantom.json +33 -0
- package/assets/builtin/mobheads/models/item/pig.json +35 -0
- package/assets/builtin/mobheads/models/item/piglin.json +6 -0
- package/assets/builtin/mobheads/models/item/piglin_brute.json +6 -0
- package/assets/builtin/mobheads/models/item/pillager.json +6 -0
- package/assets/builtin/mobheads/models/item/player.json +6 -0
- package/assets/builtin/mobheads/models/item/polar_bear.json +61 -0
- package/assets/builtin/mobheads/models/item/pufferfish.json +113 -0
- package/assets/builtin/mobheads/models/item/rabbit.json +50 -0
- package/assets/builtin/mobheads/models/item/ravager.json +75 -0
- package/assets/builtin/mobheads/models/item/salmon.json +80 -0
- package/assets/builtin/mobheads/models/item/sheep.json +34 -0
- package/assets/builtin/mobheads/models/item/shulker.json +109 -0
- package/assets/builtin/mobheads/models/item/silverfish.json +148 -0
- package/assets/builtin/mobheads/models/item/skeleton.json +6 -0
- package/assets/builtin/mobheads/models/item/skeleton_horse.json +6 -0
- package/assets/builtin/mobheads/models/item/slime.json +69 -0
- package/assets/builtin/mobheads/models/item/sniffer.json +85 -0
- package/assets/builtin/mobheads/models/item/snow_golem.json +24 -0
- package/assets/builtin/mobheads/models/item/spider.json +6 -0
- package/assets/builtin/mobheads/models/item/squid.json +6 -0
- package/assets/builtin/mobheads/models/item/stray.json +8 -0
- package/assets/builtin/mobheads/models/item/strider.json +101 -0
- package/assets/builtin/mobheads/models/item/sulfur_cube.json +38 -0
- package/assets/builtin/mobheads/models/item/tadpole.json +31 -0
- package/assets/builtin/mobheads/models/item/trader_llama.json +7 -0
- package/assets/builtin/mobheads/models/item/tropical_fish.json +141 -0
- package/assets/builtin/mobheads/models/item/turtle.json +23 -0
- package/assets/builtin/mobheads/models/item/vex.json +23 -0
- package/assets/builtin/mobheads/models/item/villager.json +6 -0
- package/assets/builtin/mobheads/models/item/vindicator.json +6 -0
- package/assets/builtin/mobheads/models/item/wandering_trader.json +6 -0
- package/assets/builtin/mobheads/models/item/warden.json +92 -0
- package/assets/builtin/mobheads/models/item/witch.json +110 -0
- package/assets/builtin/mobheads/models/item/wither.json +22 -0
- package/assets/builtin/mobheads/models/item/wither_skeleton.json +6 -0
- package/assets/builtin/mobheads/models/item/wolf.json +59 -0
- package/assets/builtin/mobheads/models/item/zoglin.json +6 -0
- package/assets/builtin/mobheads/models/item/zombie.json +6 -0
- package/assets/builtin/mobheads/models/item/zombie_horse.json +6 -0
- package/assets/builtin/mobheads/models/item/zombie_nautilus.json +6 -0
- package/assets/builtin/mobheads/models/item/zombie_villager.json +6 -0
- package/assets/builtin/mobheads/models/item/zombified_piglin.json +6 -0
- package/assets/builtin/renderchest/atlases/items.json +9 -0
- package/assets/builtin/renderchest/items/empty.json +5 -0
- package/assets/builtin/renderchest/items/unknown.json +6 -0
- package/assets/builtin/renderchest/models/item/banner.json +50 -0
- package/assets/builtin/renderchest/models/item/chest/chest.json +6 -0
- package/assets/builtin/renderchest/models/item/chest/copper_chest.json +6 -0
- package/assets/builtin/renderchest/models/item/chest/ender_chest.json +6 -0
- package/assets/builtin/renderchest/models/item/chest/exposed_copper_chest.json +6 -0
- package/assets/builtin/renderchest/models/item/chest/oxidized_copper_chest.json +6 -0
- package/assets/builtin/renderchest/models/item/chest/trapped_chest.json +6 -0
- package/assets/builtin/renderchest/models/item/chest/weathered_copper_chest.json +6 -0
- package/assets/builtin/renderchest/models/item/chest.json +47 -0
- package/assets/builtin/renderchest/models/item/conduit.json +24 -0
- package/assets/builtin/renderchest/models/item/copper_golem_statue/copper_golem_statue.json +6 -0
- package/assets/builtin/renderchest/models/item/copper_golem_statue/exposed_copper_golem_statue.json +6 -0
- package/assets/builtin/renderchest/models/item/copper_golem_statue/oxidized_copper_golem_statue.json +6 -0
- package/assets/builtin/renderchest/models/item/copper_golem_statue/weathered_copper_golem_statue.json +6 -0
- package/assets/builtin/renderchest/models/item/copper_golem_statue.json +132 -0
- package/assets/builtin/renderchest/models/item/decorated_pot.json +69 -0
- package/assets/builtin/renderchest/models/item/decorated_pot_base.json +37 -0
- package/assets/builtin/renderchest/models/item/decorated_pot_overlay.json +14 -0
- package/assets/builtin/renderchest/models/item/empty.json +6 -0
- package/assets/builtin/renderchest/models/item/filled_map/base.json +6 -0
- package/assets/builtin/renderchest/models/item/filled_map/overlay.json +6 -0
- package/assets/builtin/renderchest/models/item/firework_star/base.json +6 -0
- package/assets/builtin/renderchest/models/item/firework_star/overlay.json +6 -0
- package/assets/builtin/renderchest/models/item/potion/arrow_base.json +6 -0
- package/assets/builtin/renderchest/models/item/potion/arrow_head.json +6 -0
- package/assets/builtin/renderchest/models/item/potion/bottle.json +6 -0
- package/assets/builtin/renderchest/models/item/potion/bottle_lingering.json +6 -0
- package/assets/builtin/renderchest/models/item/potion/bottle_splash.json +6 -0
- package/assets/builtin/renderchest/models/item/potion/content.json +6 -0
- package/assets/builtin/renderchest/models/item/shield.json +41 -0
- package/assets/builtin/renderchest/models/item/shulker_box/black_shulker_box.json +6 -0
- package/assets/builtin/renderchest/models/item/shulker_box/blue_shulker_box.json +6 -0
- package/assets/builtin/renderchest/models/item/shulker_box/brown_shulker_box.json +6 -0
- package/assets/builtin/renderchest/models/item/shulker_box/cyan_shulker_box.json +6 -0
- package/assets/builtin/renderchest/models/item/shulker_box/gray_shulker_box.json +6 -0
- package/assets/builtin/renderchest/models/item/shulker_box/green_shulker_box.json +6 -0
- package/assets/builtin/renderchest/models/item/shulker_box/light_blue_shulker_box.json +6 -0
- package/assets/builtin/renderchest/models/item/shulker_box/light_gray_shulker_box.json +6 -0
- package/assets/builtin/renderchest/models/item/shulker_box/lime_shulker_box.json +6 -0
- package/assets/builtin/renderchest/models/item/shulker_box/magenta_shulker_box.json +6 -0
- package/assets/builtin/renderchest/models/item/shulker_box/orange_shulker_box.json +6 -0
- package/assets/builtin/renderchest/models/item/shulker_box/pink_shulker_box.json +6 -0
- package/assets/builtin/renderchest/models/item/shulker_box/purple_shulker_box.json +6 -0
- package/assets/builtin/renderchest/models/item/shulker_box/red_shulker_box.json +6 -0
- package/assets/builtin/renderchest/models/item/shulker_box/shulker_box.json +6 -0
- package/assets/builtin/renderchest/models/item/shulker_box/white_shulker_box.json +6 -0
- package/assets/builtin/renderchest/models/item/shulker_box/yellow_shulker_box.json +6 -0
- package/assets/builtin/renderchest/models/item/shulker_box.json +98 -0
- package/assets/builtin/renderchest/models/item/unknown.json +6 -0
- package/assets/builtin/renderchest/textures/item/empty.png +0 -0
- package/assets/builtin/renderchest/textures/item/unknown.png +0 -0
- package/assets/builtin-bed-compat/minecraft/models/item/black_bed.json +6 -0
- package/assets/builtin-bed-compat/minecraft/models/item/blue_bed.json +6 -0
- package/assets/builtin-bed-compat/minecraft/models/item/brown_bed.json +6 -0
- package/assets/builtin-bed-compat/minecraft/models/item/cyan_bed.json +6 -0
- package/assets/builtin-bed-compat/minecraft/models/item/gray_bed.json +6 -0
- package/assets/builtin-bed-compat/minecraft/models/item/green_bed.json +6 -0
- package/assets/builtin-bed-compat/minecraft/models/item/light_blue_bed.json +6 -0
- package/assets/builtin-bed-compat/minecraft/models/item/light_gray_bed.json +6 -0
- package/assets/builtin-bed-compat/minecraft/models/item/lime_bed.json +6 -0
- package/assets/builtin-bed-compat/minecraft/models/item/magenta_bed.json +6 -0
- package/assets/builtin-bed-compat/minecraft/models/item/orange_bed.json +6 -0
- package/assets/builtin-bed-compat/minecraft/models/item/pink_bed.json +6 -0
- package/assets/builtin-bed-compat/minecraft/models/item/purple_bed.json +6 -0
- package/assets/builtin-bed-compat/minecraft/models/item/red_bed.json +6 -0
- package/assets/builtin-bed-compat/minecraft/models/item/white_bed.json +6 -0
- package/assets/builtin-bed-compat/minecraft/models/item/yellow_bed.json +6 -0
- package/assets/builtin-bed-compat/renderchest/models/item/bed.json +72 -0
- package/assets/builtin-legacy/minecraft/atlases/misc.json +19 -0
- package/assets/builtin-legacy/minecraft/models/item/black_banner.json +3 -0
- package/assets/builtin-legacy/minecraft/models/item/black_bed.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/black_shulker_box.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/blue_banner.json +3 -0
- package/assets/builtin-legacy/minecraft/models/item/blue_bed.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/blue_shulker_box.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/brown_banner.json +3 -0
- package/assets/builtin-legacy/minecraft/models/item/brown_bed.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/brown_shulker_box.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/chest.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/conduit.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/creeper_head.json +3 -0
- package/assets/builtin-legacy/minecraft/models/item/cyan_banner.json +3 -0
- package/assets/builtin-legacy/minecraft/models/item/cyan_bed.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/cyan_shulker_box.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/decorated_pot.json +3 -0
- package/assets/builtin-legacy/minecraft/models/item/dragon_head.json +3 -0
- package/assets/builtin-legacy/minecraft/models/item/empty.json +3 -0
- package/assets/builtin-legacy/minecraft/models/item/ender_chest.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/gray_banner.json +3 -0
- package/assets/builtin-legacy/minecraft/models/item/gray_bed.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/gray_shulker_box.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/green_banner.json +3 -0
- package/assets/builtin-legacy/minecraft/models/item/green_bed.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/green_shulker_box.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/light_blue_banner.json +3 -0
- package/assets/builtin-legacy/minecraft/models/item/light_blue_bed.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/light_blue_shulker_box.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/light_gray_banner.json +3 -0
- package/assets/builtin-legacy/minecraft/models/item/light_gray_bed.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/light_gray_shulker_box.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/lime_banner.json +3 -0
- package/assets/builtin-legacy/minecraft/models/item/lime_bed.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/lime_shulker_box.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/magenta_banner.json +3 -0
- package/assets/builtin-legacy/minecraft/models/item/magenta_bed.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/magenta_shulker_box.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/orange_banner.json +3 -0
- package/assets/builtin-legacy/minecraft/models/item/orange_bed.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/orange_shulker_box.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/piglin_head.json +3 -0
- package/assets/builtin-legacy/minecraft/models/item/pink_banner.json +3 -0
- package/assets/builtin-legacy/minecraft/models/item/pink_bed.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/pink_shulker_box.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/player_head.json +3 -0
- package/assets/builtin-legacy/minecraft/models/item/purple_banner.json +3 -0
- package/assets/builtin-legacy/minecraft/models/item/purple_bed.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/purple_shulker_box.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_boots_amethyst_trim.json +7 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_boots_base.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_boots_copper_trim.json +7 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_boots_diamond_trim.json +7 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_boots_emerald_trim.json +7 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_boots_gold_trim.json +7 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_boots_iron_trim.json +7 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_boots_lapis_trim.json +7 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_boots_netherite_trim.json +7 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_boots_overlay.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_boots_quartz_trim.json +7 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_boots_redstone_trim.json +7 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_chestplate_amethyst_trim.json +7 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_chestplate_base.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_chestplate_copper_trim.json +7 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_chestplate_diamond_trim.json +7 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_chestplate_emerald_trim.json +7 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_chestplate_gold_trim.json +7 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_chestplate_iron_trim.json +7 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_chestplate_lapis_trim.json +7 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_chestplate_netherite_trim.json +7 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_chestplate_overlay.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_chestplate_quartz_trim.json +7 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_chestplate_redstone_trim.json +7 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_helmet_amethyst_trim.json +7 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_helmet_base.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_helmet_copper_trim.json +7 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_helmet_diamond_trim.json +7 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_helmet_emerald_trim.json +7 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_helmet_gold_trim.json +7 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_helmet_iron_trim.json +7 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_helmet_lapis_trim.json +7 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_helmet_netherite_trim.json +7 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_helmet_overlay.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_helmet_quartz_trim.json +7 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_helmet_redstone_trim.json +7 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_leggings_amethyst_trim.json +7 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_leggings_base.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_leggings_copper_trim.json +7 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_leggings_diamond_trim.json +7 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_leggings_emerald_trim.json +7 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_leggings_gold_trim.json +7 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_leggings_iron_trim.json +7 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_leggings_lapis_trim.json +7 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_leggings_netherite_trim.json +7 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_leggings_overlay.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_leggings_quartz_trim.json +7 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_leather_leggings_redstone_trim.json +7 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_pot_b_angler_pottery_sherd.json +9 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_pot_b_archer_pottery_sherd.json +9 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_pot_b_arms_up_pottery_sherd.json +9 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_pot_b_blade_pottery_sherd.json +9 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_pot_b_brewer_pottery_sherd.json +9 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_pot_b_brick.json +9 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_pot_b_burn_pottery_sherd.json +9 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_pot_b_danger_pottery_sherd.json +9 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_pot_b_explorer_pottery_sherd.json +9 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_pot_b_friend_pottery_sherd.json +9 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_pot_b_heart_pottery_sherd.json +9 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_pot_b_heartbreak_pottery_sherd.json +9 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_pot_b_howl_pottery_sherd.json +9 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_pot_b_miner_pottery_sherd.json +9 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_pot_b_mourner_pottery_sherd.json +9 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_pot_b_plenty_pottery_sherd.json +9 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_pot_b_prize_pottery_sherd.json +9 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_pot_b_sheaf_pottery_sherd.json +9 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_pot_b_shelter_pottery_sherd.json +9 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_pot_b_skull_pottery_sherd.json +9 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_pot_b_snort_pottery_sherd.json +9 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_pot_o_angler_pottery_sherd.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_pot_o_archer_pottery_sherd.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_pot_o_arms_up_pottery_sherd.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_pot_o_blade_pottery_sherd.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_pot_o_brewer_pottery_sherd.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_pot_o_brick.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_pot_o_burn_pottery_sherd.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_pot_o_danger_pottery_sherd.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_pot_o_explorer_pottery_sherd.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_pot_o_friend_pottery_sherd.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_pot_o_heart_pottery_sherd.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_pot_o_heartbreak_pottery_sherd.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_pot_o_howl_pottery_sherd.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_pot_o_miner_pottery_sherd.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_pot_o_mourner_pottery_sherd.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_pot_o_plenty_pottery_sherd.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_pot_o_prize_pottery_sherd.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_pot_o_sheaf_pottery_sherd.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_pot_o_shelter_pottery_sherd.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_pot_o_skull_pottery_sherd.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_pot_o_snort_pottery_sherd.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_potion_bottle.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_potion_bottle_lingering.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_potion_bottle_splash.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_potion_content.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_tipped_arrow_base.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/rc_tipped_arrow_head.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/red_banner.json +3 -0
- package/assets/builtin-legacy/minecraft/models/item/red_bed.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/red_shulker_box.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/shield.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/shulker_box.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/skeleton_skull.json +3 -0
- package/assets/builtin-legacy/minecraft/models/item/trapped_chest.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/unknown.json +3 -0
- package/assets/builtin-legacy/minecraft/models/item/white_banner.json +3 -0
- package/assets/builtin-legacy/minecraft/models/item/white_bed.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/white_shulker_box.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/wither_skeleton_skull.json +3 -0
- package/assets/builtin-legacy/minecraft/models/item/yellow_banner.json +3 -0
- package/assets/builtin-legacy/minecraft/models/item/yellow_bed.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/yellow_shulker_box.json +6 -0
- package/assets/builtin-legacy/minecraft/models/item/zombie_head.json +3 -0
- package/assets/builtin-legacy/mobheads/models/item/allay.json +6 -0
- package/assets/builtin-legacy/mobheads/models/item/armadillo.json +41 -0
- package/assets/builtin-legacy/mobheads/models/item/axolotl.json +36 -0
- package/assets/builtin-legacy/mobheads/models/item/base/cat.json +52 -0
- package/assets/builtin-legacy/mobheads/models/item/base/cow.json +43 -0
- package/assets/builtin-legacy/mobheads/models/item/base/donkey.json +68 -0
- package/assets/builtin-legacy/mobheads/models/item/base/guardian.json +272 -0
- package/assets/builtin-legacy/mobheads/models/item/base/head_32_32.json +19 -0
- package/assets/builtin-legacy/mobheads/models/item/base/head_64_32.json +19 -0
- package/assets/builtin-legacy/mobheads/models/item/base/head_64_64.json +19 -0
- package/assets/builtin-legacy/mobheads/models/item/base/head_display.json +8 -0
- package/assets/builtin-legacy/mobheads/models/item/base/hoglin.json +81 -0
- package/assets/builtin-legacy/mobheads/models/item/base/horse.json +80 -0
- package/assets/builtin-legacy/mobheads/models/item/base/llama.json +64 -0
- package/assets/builtin-legacy/mobheads/models/item/base/piglin.json +80 -0
- package/assets/builtin-legacy/mobheads/models/item/base/spider.json +32 -0
- package/assets/builtin-legacy/mobheads/models/item/base/squid.json +116 -0
- package/assets/builtin-legacy/mobheads/models/item/base/villager.json +43 -0
- package/assets/builtin-legacy/mobheads/models/item/bat.json +41 -0
- package/assets/builtin-legacy/mobheads/models/item/bee.json +59 -0
- package/assets/builtin-legacy/mobheads/models/item/blaze.json +6 -0
- package/assets/builtin-legacy/mobheads/models/item/breeze.json +49 -0
- package/assets/builtin-legacy/mobheads/models/item/camel.json +62 -0
- package/assets/builtin-legacy/mobheads/models/item/cat.json +6 -0
- package/assets/builtin-legacy/mobheads/models/item/cave_spider.json +6 -0
- package/assets/builtin-legacy/mobheads/models/item/chicken.json +46 -0
- package/assets/builtin-legacy/mobheads/models/item/cod.json +98 -0
- package/assets/builtin-legacy/mobheads/models/item/cow.json +6 -0
- package/assets/builtin-legacy/mobheads/models/item/creeper.json +6 -0
- package/assets/builtin-legacy/mobheads/models/item/dolphin.json +33 -0
- package/assets/builtin-legacy/mobheads/models/item/donkey.json +6 -0
- package/assets/builtin-legacy/mobheads/models/item/drowned.json +35 -0
- package/assets/builtin-legacy/mobheads/models/item/elder_guardian.json +6 -0
- package/assets/builtin-legacy/mobheads/models/item/ender_dragon.json +113 -0
- package/assets/builtin-legacy/mobheads/models/item/enderman.json +41 -0
- package/assets/builtin-legacy/mobheads/models/item/endermite.json +59 -0
- package/assets/builtin-legacy/mobheads/models/item/evoker.json +6 -0
- package/assets/builtin-legacy/mobheads/models/item/fox.json +55 -0
- package/assets/builtin-legacy/mobheads/models/item/frog.json +159 -0
- package/assets/builtin-legacy/mobheads/models/item/ghast.json +131 -0
- package/assets/builtin-legacy/mobheads/models/item/giant.json +6 -0
- package/assets/builtin-legacy/mobheads/models/item/glow_squid.json +6 -0
- package/assets/builtin-legacy/mobheads/models/item/goat.json +56 -0
- package/assets/builtin-legacy/mobheads/models/item/guardian.json +6 -0
- package/assets/builtin-legacy/mobheads/models/item/hoglin.json +6 -0
- package/assets/builtin-legacy/mobheads/models/item/horse.json +6 -0
- package/assets/builtin-legacy/mobheads/models/item/husk.json +6 -0
- package/assets/builtin-legacy/mobheads/models/item/illusioner.json +6 -0
- package/assets/builtin-legacy/mobheads/models/item/iron_golem.json +34 -0
- package/assets/builtin-legacy/mobheads/models/item/llama.json +7 -0
- package/assets/builtin-legacy/mobheads/models/item/magma_cube.json +52 -0
- package/assets/builtin-legacy/mobheads/models/item/mooshroom.json +6 -0
- package/assets/builtin-legacy/mobheads/models/item/mule.json +6 -0
- package/assets/builtin-legacy/mobheads/models/item/ocelot.json +6 -0
- package/assets/builtin-legacy/mobheads/models/item/panda.json +61 -0
- package/assets/builtin-legacy/mobheads/models/item/parrot.json +73 -0
- package/assets/builtin-legacy/mobheads/models/item/phantom.json +33 -0
- package/assets/builtin-legacy/mobheads/models/item/pig.json +35 -0
- package/assets/builtin-legacy/mobheads/models/item/piglin.json +6 -0
- package/assets/builtin-legacy/mobheads/models/item/piglin_brute.json +6 -0
- package/assets/builtin-legacy/mobheads/models/item/pillager.json +6 -0
- package/assets/builtin-legacy/mobheads/models/item/player.json +6 -0
- package/assets/builtin-legacy/mobheads/models/item/polar_bear.json +61 -0
- package/assets/builtin-legacy/mobheads/models/item/pufferfish.json +113 -0
- package/assets/builtin-legacy/mobheads/models/item/rabbit.json +59 -0
- package/assets/builtin-legacy/mobheads/models/item/ravager.json +75 -0
- package/assets/builtin-legacy/mobheads/models/item/salmon.json +80 -0
- package/assets/builtin-legacy/mobheads/models/item/sheep.json +34 -0
- package/assets/builtin-legacy/mobheads/models/item/shulker.json +109 -0
- package/assets/builtin-legacy/mobheads/models/item/silverfish.json +148 -0
- package/assets/builtin-legacy/mobheads/models/item/skeleton.json +6 -0
- package/assets/builtin-legacy/mobheads/models/item/skeleton_horse.json +6 -0
- package/assets/builtin-legacy/mobheads/models/item/slime.json +69 -0
- package/assets/builtin-legacy/mobheads/models/item/sniffer.json +85 -0
- package/assets/builtin-legacy/mobheads/models/item/snow_golem.json +24 -0
- package/assets/builtin-legacy/mobheads/models/item/spider.json +6 -0
- package/assets/builtin-legacy/mobheads/models/item/squid.json +6 -0
- package/assets/builtin-legacy/mobheads/models/item/stray.json +35 -0
- package/assets/builtin-legacy/mobheads/models/item/strider.json +101 -0
- package/assets/builtin-legacy/mobheads/models/item/tadpole.json +31 -0
- package/assets/builtin-legacy/mobheads/models/item/trader_llama.json +7 -0
- package/assets/builtin-legacy/mobheads/models/item/tropical_fish.json +141 -0
- package/assets/builtin-legacy/mobheads/models/item/turtle.json +23 -0
- package/assets/builtin-legacy/mobheads/models/item/vex.json +23 -0
- package/assets/builtin-legacy/mobheads/models/item/villager.json +6 -0
- package/assets/builtin-legacy/mobheads/models/item/vindicator.json +6 -0
- package/assets/builtin-legacy/mobheads/models/item/wandering_trader.json +6 -0
- package/assets/builtin-legacy/mobheads/models/item/warden.json +92 -0
- package/assets/builtin-legacy/mobheads/models/item/witch.json +110 -0
- package/assets/builtin-legacy/mobheads/models/item/wither.json +22 -0
- package/assets/builtin-legacy/mobheads/models/item/wither_skeleton.json +6 -0
- package/assets/builtin-legacy/mobheads/models/item/wolf.json +59 -0
- package/assets/builtin-legacy/mobheads/models/item/zoglin.json +6 -0
- package/assets/builtin-legacy/mobheads/models/item/zombie.json +6 -0
- package/assets/builtin-legacy/mobheads/models/item/zombie_horse.json +6 -0
- package/assets/builtin-legacy/mobheads/models/item/zombie_villager.json +6 -0
- package/assets/builtin-legacy/mobheads/models/item/zombified_piglin.json +6 -0
- package/assets/builtin-legacy/renderchest/atlases/items.json +9 -0
- package/assets/builtin-legacy/renderchest/models/item/banner.json +53 -0
- package/assets/builtin-legacy/renderchest/models/item/bed.json +72 -0
- package/assets/builtin-legacy/renderchest/models/item/chest.json +49 -0
- package/assets/builtin-legacy/renderchest/models/item/conduit.json +24 -0
- package/assets/builtin-legacy/renderchest/models/item/decorated_pot.json +69 -0
- package/assets/builtin-legacy/renderchest/models/item/decorated_pot_base.json +34 -0
- package/assets/builtin-legacy/renderchest/models/item/decorated_pot_overlay.json +14 -0
- package/assets/builtin-legacy/renderchest/models/item/empty.json +6 -0
- package/assets/builtin-legacy/renderchest/models/item/shield.json +38 -0
- package/assets/builtin-legacy/renderchest/models/item/shulker_box.json +103 -0
- package/assets/builtin-legacy/renderchest/models/item/unknown.json +6 -0
- package/assets/builtin-legacy/renderchest/textures/item/empty.png +0 -0
- package/assets/builtin-legacy/renderchest/textures/item/unknown.png +0 -0
- package/dist/atlas/registry.d.ts +8 -0
- package/dist/atlas/registry.js +2 -0
- package/dist/atlas/sources.d.ts +2 -0
- package/dist/atlas/sources.js +2 -0
- package/dist/blend-CHP2-j9U.js +90 -0
- package/dist/blend-Qvrn6YgK.d.ts +36 -0
- package/dist/builtin-C8GZEN40.js +16 -0
- package/dist/builtin.d.ts +5 -0
- package/dist/builtin.js +2 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +174 -0
- package/dist/compose-cph4bfdr.js +27 -0
- package/dist/definition-3MBm8ar_.js +117 -0
- package/dist/definition-BwX6Xxv0.d.ts +34 -0
- package/dist/discovery-BzaOti7l.js +91 -0
- package/dist/discovery-CmNYzKPr.d.ts +18 -0
- package/dist/download-D9aARBFp.js +34 -0
- package/dist/dynamic/generators.d.ts +2 -0
- package/dist/dynamic/generators.js +2 -0
- package/dist/encode-BDB_VIHN.d.ts +31 -0
- package/dist/encode-BdTHbOp-.js +86 -0
- package/dist/entity-fallback-CodtI6v8.js +265 -0
- package/dist/face-DC6cNMdz.d.ts +24 -0
- package/dist/face-Wfia-_Yx.js +92 -0
- package/dist/fluid-bucket-D-GpUQjg.js +88 -0
- package/dist/generators-CCB8h0mP.d.ts +23 -0
- package/dist/generators-CcVRG30y.js +145 -0
- package/dist/geo-B5VqGulc.js +333 -0
- package/dist/geometry-BSVmKx5b.d.ts +28 -0
- package/dist/geometry-uIDha8S4.js +229 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.js +20 -0
- package/dist/item-styles-DJ3LWZS2.js +174 -0
- package/dist/items/definition.d.ts +2 -0
- package/dist/items/definition.js +2 -0
- package/dist/items/discovery.d.ts +2 -0
- package/dist/items/discovery.js +2 -0
- package/dist/jar-6T3xdgaL.d.ts +21 -0
- package/dist/jar-Bt3i0ls4.js +119 -0
- package/dist/legacy-reshape-CewShfF3.js +203 -0
- package/dist/legacy-tints-B09J0Rxh.js +169 -0
- package/dist/lighting--5myudVu.js +83 -0
- package/dist/lighting-3FGRC3Af.d.ts +42 -0
- package/dist/loader-C-eqwp3M.js +359 -0
- package/dist/loader-CBzn3Koc.js +228 -0
- package/dist/loader-TFFNV4Jl.d.ts +88 -0
- package/dist/loader-lCkMRDH4.d.ts +69 -0
- package/dist/locator-jDbdUeTd.d.ts +24 -0
- package/dist/locator-ycZzh_6z.js +54 -0
- package/dist/manager-CoZaeQTu.d.ts +88 -0
- package/dist/manager-dfI7b9N4.js +150 -0
- package/dist/minify-CIV6enbr.d.ts +11 -0
- package/dist/minify-bjMRmr5J.js +31 -0
- package/dist/models/loader.d.ts +2 -0
- package/dist/models/loader.js +2 -0
- package/dist/models/types.d.ts +2 -0
- package/dist/models/types.js +11 -0
- package/dist/mods/prepare.d.ts +2 -0
- package/dist/mods/prepare.js +2 -0
- package/dist/mods/synthesize.d.ts +10 -0
- package/dist/mods/synthesize.js +2 -0
- package/dist/output/encode.d.ts +2 -0
- package/dist/output/encode.js +2 -0
- package/dist/output/item-styles.d.ts +10 -0
- package/dist/output/item-styles.js +2 -0
- package/dist/output/minify.d.ts +2 -0
- package/dist/output/minify.js +2 -0
- package/dist/output/stylesheet.d.ts +2 -0
- package/dist/output/stylesheet.js +2 -0
- package/dist/prepare-Bvc5ve2m.js +68 -0
- package/dist/prepare-DROxBZp1.js +112 -0
- package/dist/prepare-DnnGGv9k.d.ts +25 -0
- package/dist/prepare-wfWtaz_X.d.ts +45 -0
- package/dist/rasterizer-ABgsWTYN.js +139 -0
- package/dist/rasterizer-CVOlRsuw.d.ts +41 -0
- package/dist/registry-C9E7jyzG.js +28 -0
- package/dist/render/blend.d.ts +2 -0
- package/dist/render/blend.js +2 -0
- package/dist/render/compose.d.ts +6 -0
- package/dist/render/compose.js +2 -0
- package/dist/render/entity-fallback.d.ts +30 -0
- package/dist/render/entity-fallback.js +2 -0
- package/dist/render/face.d.ts +2 -0
- package/dist/render/face.js +2 -0
- package/dist/render/fluid-bucket.d.ts +14 -0
- package/dist/render/fluid-bucket.js +2 -0
- package/dist/render/geo.d.ts +54 -0
- package/dist/render/geo.js +2 -0
- package/dist/render/geometry.d.ts +2 -0
- package/dist/render/geometry.js +2 -0
- package/dist/render/legacy-tints.d.ts +12 -0
- package/dist/render/legacy-tints.js +2 -0
- package/dist/render/lighting.d.ts +2 -0
- package/dist/render/lighting.js +2 -0
- package/dist/render/obj.d.ts +24 -0
- package/dist/render/obj.js +2 -0
- package/dist/render/rasterizer.d.ts +2 -0
- package/dist/render/rasterizer.js +2 -0
- package/dist/render/renderer.d.ts +2 -0
- package/dist/render/renderer.js +2 -0
- package/dist/render/tints.d.ts +2 -0
- package/dist/render/tints.js +2 -0
- package/dist/render/vector.d.ts +2 -0
- package/dist/render/vector.js +2 -0
- package/dist/renderer-CmOz6WI9.js +507 -0
- package/dist/renderer-DQfv6axF.d.ts +44 -0
- package/dist/resources/jar.d.ts +2 -0
- package/dist/resources/jar.js +2 -0
- package/dist/resources/locator.d.ts +2 -0
- package/dist/resources/locator.js +2 -0
- package/dist/resources/manager.d.ts +2 -0
- package/dist/resources/manager.js +2 -0
- package/dist/resources/synthetic.d.ts +2 -0
- package/dist/resources/synthetic.js +2 -0
- package/dist/run-CEaRhk4A.js +298 -0
- package/dist/run-D2XL05Zl.d.ts +54 -0
- package/dist/run.d.ts +3 -0
- package/dist/run.js +3 -0
- package/dist/sources-Bxk-WOzH.js +202 -0
- package/dist/sources-DH9dk3KF.d.ts +104 -0
- package/dist/stylesheet-CovT3B2S.js +71 -0
- package/dist/stylesheet-i-t_7sZ7.d.ts +53 -0
- package/dist/synthesize-CRgSEmEp.js +128 -0
- package/dist/synthetic-CDsj--li.d.ts +34 -0
- package/dist/synthetic-DC2bSnGe.js +0 -0
- package/dist/textures/loader.d.ts +2 -0
- package/dist/textures/loader.js +2 -0
- package/dist/tints-FQlxTzUL.js +108 -0
- package/dist/tints-Fr6WoPaU.d.ts +22 -0
- package/dist/types-COGbtA1t.d.ts +69 -0
- package/dist/vector-CCxLae_T.js +190 -0
- package/dist/vector-DRKRi4--.d.ts +43 -0
- package/dist/versions/download.d.ts +9 -0
- package/dist/versions/download.js +2 -0
- package/dist/versions/legacy-reshape.d.ts +9 -0
- package/dist/versions/legacy-reshape.js +2 -0
- package/dist/versions/prepare.d.ts +2 -0
- package/dist/versions/prepare.js +2 -0
- package/dist/workers/pool.d.ts +23 -0
- package/dist/workers/pool.js +67 -0
- package/package.json +71 -22
|
@@ -0,0 +1,507 @@
|
|
|
1
|
+
import { n as ResourceLocator } from "./locator-ycZzh_6z.js";
|
|
2
|
+
import { c as normalize, g as transformVector, m as sub, n as displayMatrix, o as identity, r as dot, s as multiply, t as cross } from "./vector-CCxLae_T.js";
|
|
3
|
+
import { i as resolveTexture } from "./loader-C-eqwp3M.js";
|
|
4
|
+
import { a as tintTexture, n as cloneFloatTexture, r as darkenTexture, s as toFloatTexture, t as blendPixel } from "./blend-CHP2-j9U.js";
|
|
5
|
+
import { t as combineFaceBuffers } from "./compose-cph4bfdr.js";
|
|
6
|
+
import { i as phpRound, n as createFaceBuffer, r as drawTexturedTriangle, t as RowCursor } from "./rasterizer-ABgsWTYN.js";
|
|
7
|
+
import { n as renderFace, t as faceMaxZ } from "./face-Wfia-_Yx.js";
|
|
8
|
+
import { t as paintBucketFluid } from "./fluid-bucket-D-GpUQjg.js";
|
|
9
|
+
import { r as buildElementFaces } from "./geometry-uIDha8S4.js";
|
|
10
|
+
import { c as lightsForProfile } from "./lighting--5myudVu.js";
|
|
11
|
+
//#region src/render/obj.ts
|
|
12
|
+
/**
|
|
13
|
+
* Forge/NeoForge OBJ model rendering — the class the old pipeline left
|
|
14
|
+
* permanently broken ("the geometry is in a different file format"). Parses
|
|
15
|
+
* OBJ + MTL out of the asset tree and rasterizes the triangles through the
|
|
16
|
+
* same projection/lighting as JSON elements, with a z-tested shared buffer
|
|
17
|
+
* (per-triangle painter buffers would be quadratic in triangle count).
|
|
18
|
+
*/
|
|
19
|
+
/** Parse OBJ text into triangles (polygon faces are fan-triangulated). */
|
|
20
|
+
function parseObj(text, flipV) {
|
|
21
|
+
const positions = [];
|
|
22
|
+
const uvs = [];
|
|
23
|
+
const triangles = [];
|
|
24
|
+
const materialLibs = [];
|
|
25
|
+
let material = "";
|
|
26
|
+
for (const rawLine of text.split("\n")) {
|
|
27
|
+
const line = rawLine.trim();
|
|
28
|
+
if (line === "" || line.startsWith("#")) continue;
|
|
29
|
+
const parts = line.split(/\s+/);
|
|
30
|
+
switch (parts[0]) {
|
|
31
|
+
case "v":
|
|
32
|
+
positions.push([
|
|
33
|
+
Number(parts[1]),
|
|
34
|
+
Number(parts[2]),
|
|
35
|
+
Number(parts[3])
|
|
36
|
+
]);
|
|
37
|
+
break;
|
|
38
|
+
case "vt": {
|
|
39
|
+
const u = Number(parts[1]);
|
|
40
|
+
const v = Number(parts[2] ?? 0);
|
|
41
|
+
uvs.push([u, flipV ? 1 - v : v]);
|
|
42
|
+
break;
|
|
43
|
+
}
|
|
44
|
+
case "usemtl":
|
|
45
|
+
material = parts.slice(1).join(" ");
|
|
46
|
+
break;
|
|
47
|
+
case "mtllib":
|
|
48
|
+
materialLibs.push(parts.slice(1).join(" "));
|
|
49
|
+
break;
|
|
50
|
+
case "f": {
|
|
51
|
+
const corners = parts.slice(1).map((corner) => {
|
|
52
|
+
const [vIndex, vtIndex] = corner.split("/", 2);
|
|
53
|
+
const position = Number(vIndex);
|
|
54
|
+
const uvIndex = vtIndex === void 0 || vtIndex === "" ? 0 : Number(vtIndex);
|
|
55
|
+
const uv = uvIndex === 0 ? void 0 : uvs[uvIndex > 0 ? uvIndex - 1 : uvs.length + uvIndex];
|
|
56
|
+
return {
|
|
57
|
+
position: positions[position > 0 ? position - 1 : positions.length + position],
|
|
58
|
+
uv: uv ?? [0, 0]
|
|
59
|
+
};
|
|
60
|
+
});
|
|
61
|
+
for (let i = 2; i < corners.length; i++) {
|
|
62
|
+
if (!corners[0]?.position || !corners[i - 1]?.position || !corners[i]?.position) continue;
|
|
63
|
+
triangles.push({
|
|
64
|
+
positions: [
|
|
65
|
+
corners[0].position,
|
|
66
|
+
corners[i - 1].position,
|
|
67
|
+
corners[i].position
|
|
68
|
+
],
|
|
69
|
+
uvs: [
|
|
70
|
+
corners[0].uv,
|
|
71
|
+
corners[i - 1].uv,
|
|
72
|
+
corners[i].uv
|
|
73
|
+
],
|
|
74
|
+
material
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return {
|
|
82
|
+
triangles,
|
|
83
|
+
materialLibs
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
/** map_Kd texture per material name out of an MTL library. */
|
|
87
|
+
function parseMtl(text) {
|
|
88
|
+
const materials = /* @__PURE__ */ new Map();
|
|
89
|
+
let current = "";
|
|
90
|
+
for (const rawLine of text.split("\n")) {
|
|
91
|
+
const parts = rawLine.trim().split(/\s+/);
|
|
92
|
+
if (parts[0] === "newmtl") current = parts.slice(1).join(" ");
|
|
93
|
+
else if (parts[0] === "map_Kd" && current) materials.set(current, parts.slice(1).join(" "));
|
|
94
|
+
}
|
|
95
|
+
return materials;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Resolve a material name to a texture locator: `#key` and MTL map_Kd values
|
|
99
|
+
* go through the model's texture map (Forge binds materials that way); bare
|
|
100
|
+
* names fall back to a direct locator.
|
|
101
|
+
*/
|
|
102
|
+
function materialTexture(model, materials, material) {
|
|
103
|
+
const mapped = materials.get(material) ?? material;
|
|
104
|
+
if (mapped.startsWith("#")) return resolveTexture(model, mapped);
|
|
105
|
+
const viaMap = resolveTexture(model, `#${mapped}`);
|
|
106
|
+
if (viaMap) return viaMap;
|
|
107
|
+
return ResourceLocator.tryParse(mapped);
|
|
108
|
+
}
|
|
109
|
+
async function renderObjModel(model, resources, textures, options) {
|
|
110
|
+
if (!model.obj) throw new ItemRenderError(`renderObjModel called without obj geometry: ${model.locator}`);
|
|
111
|
+
const objLocator = ResourceLocator.parse(model.obj.model);
|
|
112
|
+
const objSource = await resources.getResource("raw", objLocator);
|
|
113
|
+
if (!objSource) throw new ItemRenderError(`OBJ file not found: ${model.obj.model} for ${model.locator}`);
|
|
114
|
+
const parsed = parseObj(objSource.toString("utf8"), model.obj.flipV);
|
|
115
|
+
if (parsed.triangles.length === 0) throw new ItemRenderError(`OBJ has no faces: ${model.obj.model}`);
|
|
116
|
+
const materials = /* @__PURE__ */ new Map();
|
|
117
|
+
const objDirectory = objLocator.path.split("/").slice(0, -1).join("/");
|
|
118
|
+
for (const lib of parsed.materialLibs) {
|
|
119
|
+
const libPath = lib.includes("/") ? lib : `${objDirectory}/${lib}`;
|
|
120
|
+
const libLocator = ResourceLocator.tryParse(`${objLocator.namespace}:${libPath}`);
|
|
121
|
+
const source = libLocator ? await resources.getResource("raw", libLocator) : null;
|
|
122
|
+
if (source) for (const [name, texture] of parseMtl(source.toString("utf8"))) materials.set(name, texture);
|
|
123
|
+
}
|
|
124
|
+
const lights = lightsForProfile(options.lightingProfile);
|
|
125
|
+
const light = model.elementsGuiLight === "side" ? lights.side : lights.front;
|
|
126
|
+
const gui = model.display.gui;
|
|
127
|
+
const guiMatrix = displayMatrix(gui?.rotation ?? [
|
|
128
|
+
0,
|
|
129
|
+
0,
|
|
130
|
+
0
|
|
131
|
+
], gui?.translation ?? [
|
|
132
|
+
0,
|
|
133
|
+
0,
|
|
134
|
+
0
|
|
135
|
+
], gui?.scale ?? [
|
|
136
|
+
1,
|
|
137
|
+
1,
|
|
138
|
+
1
|
|
139
|
+
]);
|
|
140
|
+
const transformation = multiply(guiMatrix, options.itemTransform ?? identity());
|
|
141
|
+
const renderSize = options.size * options.quality;
|
|
142
|
+
const out = createFaceBuffer(renderSize, renderSize);
|
|
143
|
+
const shaded = /* @__PURE__ */ new Map();
|
|
144
|
+
for (const triangle of parsed.triangles) {
|
|
145
|
+
const transformed = triangle.positions.map((position) => transformVector(transformation, position));
|
|
146
|
+
const rawNormal = cross(sub(transformed[1], transformed[0]), sub(transformed[2], transformed[0]));
|
|
147
|
+
if (rawNormal[0] === 0 && rawNormal[1] === 0 && rawNormal[2] === 0) continue;
|
|
148
|
+
const normal = normalize(rawNormal);
|
|
149
|
+
if (dot([
|
|
150
|
+
0,
|
|
151
|
+
0,
|
|
152
|
+
-1
|
|
153
|
+
], normal) >= -.01) continue;
|
|
154
|
+
const level = light.lightLevelForNormal(normal);
|
|
155
|
+
const bucket = Math.round(level * 64);
|
|
156
|
+
const locator = materialTexture(model, materials, triangle.material);
|
|
157
|
+
if (!locator) throw new ItemRenderError(`Unresolvable OBJ material ${triangle.material} in ${model.locator}`);
|
|
158
|
+
const key = `${locator} ${bucket}`;
|
|
159
|
+
let texture = shaded.get(key);
|
|
160
|
+
if (!texture) {
|
|
161
|
+
const base = await textures.load(locator) ?? await textures.load(new ResourceLocator(locator.namespace, `item/${locator.path}`));
|
|
162
|
+
if (!base) throw new ItemRenderError(`Missing texture ${locator} referenced by ${model.obj.model}`);
|
|
163
|
+
texture = cloneFloatTexture(toFloatTexture(base));
|
|
164
|
+
darkenTexture(texture, 1 - bucket / 64, 0, 0, texture.width, texture.height);
|
|
165
|
+
shaded.set(key, texture);
|
|
166
|
+
}
|
|
167
|
+
const scratch = createFaceBuffer(renderSize, renderSize);
|
|
168
|
+
const cursor = new RowCursor();
|
|
169
|
+
const point = (index) => {
|
|
170
|
+
return {
|
|
171
|
+
x: phpRound((transformed[index][0] - .5) * renderSize + renderSize / 2),
|
|
172
|
+
y: phpRound(renderSize - ((transformed[index][1] - .5) * renderSize + renderSize / 2)),
|
|
173
|
+
u: triangle.uvs[index][0],
|
|
174
|
+
v: triangle.uvs[index][1],
|
|
175
|
+
depth: (transformed[index][2] + 1) / 3
|
|
176
|
+
};
|
|
177
|
+
};
|
|
178
|
+
drawTexturedTriangle(point(0), point(1), point(2), scratch, texture, cursor);
|
|
179
|
+
for (let pixel = 0; pixel < renderSize * renderSize; pixel++) {
|
|
180
|
+
const offset = pixel * 4;
|
|
181
|
+
const alpha = scratch.colors[offset + 3];
|
|
182
|
+
if (alpha <= 0) continue;
|
|
183
|
+
if (scratch.depths[pixel] >= out.depths[pixel] || out.colors[offset + 3] === 0) {
|
|
184
|
+
if (alpha >= 1 || out.colors[offset + 3] === 0) {
|
|
185
|
+
out.colors[offset] = scratch.colors[offset];
|
|
186
|
+
out.colors[offset + 1] = scratch.colors[offset + 1];
|
|
187
|
+
out.colors[offset + 2] = scratch.colors[offset + 2];
|
|
188
|
+
out.colors[offset + 3] = alpha;
|
|
189
|
+
} else blendPixel(out.colors, offset, scratch.colors[offset], scratch.colors[offset + 1], scratch.colors[offset + 2], alpha);
|
|
190
|
+
out.depths[pixel] = Math.max(out.depths[pixel], scratch.depths[pixel]);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
return {
|
|
195
|
+
width: renderSize,
|
|
196
|
+
height: renderSize,
|
|
197
|
+
data: out.colors
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
//#endregion
|
|
201
|
+
//#region src/render/renderer.ts
|
|
202
|
+
/**
|
|
203
|
+
* Item rendering entry: flat generated items (2D layer compositing) and 3D
|
|
204
|
+
* element models (transform → rasterize → per-pixel composite), both rendered
|
|
205
|
+
* at size × quality then box-downscaled, matching upstream ItemRenderTask.
|
|
206
|
+
*/
|
|
207
|
+
var ItemRenderError = class extends Error {};
|
|
208
|
+
const TICK_MS = 50;
|
|
209
|
+
const MAX_ANIMATION_FRAMES = 128;
|
|
210
|
+
function gcd(left, right) {
|
|
211
|
+
return right === 0 ? left : gcd(right, left % right);
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Render every animation frame of a model (a single frame for unanimated
|
|
215
|
+
* items). The tick loop mirrors upstream: total ticks = lcm of the involved
|
|
216
|
+
* textures' lengths, identical frames are skipped, and interpolated textures
|
|
217
|
+
* are capped at 128 emitted frames.
|
|
218
|
+
*/
|
|
219
|
+
async function renderModelFrames(model, textures, options) {
|
|
220
|
+
assertDrawable(model);
|
|
221
|
+
if (model.obj || model.fluid) return {
|
|
222
|
+
frames: [await renderModel(model, textures, options)],
|
|
223
|
+
delaysMs: [TICK_MS]
|
|
224
|
+
};
|
|
225
|
+
const references = /* @__PURE__ */ new Set();
|
|
226
|
+
if (model.builtinParent === "builtin/generated") {
|
|
227
|
+
for (const name of Object.keys(model.textures)) if (/^layer\d+$/.test(name)) references.add(`#${name}`);
|
|
228
|
+
} else for (const element of model.elements) for (const face of Object.values(element.faces)) if (face?.texture) references.add(face.texture);
|
|
229
|
+
const animated = /* @__PURE__ */ new Map();
|
|
230
|
+
const skipped = /* @__PURE__ */ new Set();
|
|
231
|
+
for (const reference of references) {
|
|
232
|
+
if (model.builtinParent !== "builtin/generated" && reference.startsWith("#") && resolveTexture(model, reference) === null) {
|
|
233
|
+
skipped.add(reference);
|
|
234
|
+
continue;
|
|
235
|
+
}
|
|
236
|
+
animated.set(reference, await loadAnimatedTexture(model, textures, reference));
|
|
237
|
+
}
|
|
238
|
+
let ticks = 1;
|
|
239
|
+
let interpolated = false;
|
|
240
|
+
for (const texture of animated.values()) {
|
|
241
|
+
ticks = ticks / gcd(ticks, texture.tickLength) * texture.tickLength;
|
|
242
|
+
interpolated ||= texture.interpolated;
|
|
243
|
+
}
|
|
244
|
+
const maxSkippable = interpolated ? Math.ceil(ticks / MAX_ANIMATION_FRAMES) : null;
|
|
245
|
+
const frames = [];
|
|
246
|
+
const emitTicks = [];
|
|
247
|
+
let lastKey = null;
|
|
248
|
+
let sinceLast = 0;
|
|
249
|
+
for (let tick = 0; tick < ticks; tick++) {
|
|
250
|
+
sinceLast++;
|
|
251
|
+
const key = animated.values().map((texture) => texture.resolveFrame(tick).frame).toArray().join(",");
|
|
252
|
+
if (lastKey !== null && key === lastKey && !interpolated && tick !== ticks - 1) continue;
|
|
253
|
+
if (lastKey !== null && interpolated && maxSkippable !== null && sinceLast < maxSkippable && key === lastKey) continue;
|
|
254
|
+
const supplier = async (reference) => {
|
|
255
|
+
if (skipped.has(reference)) return null;
|
|
256
|
+
const texture = animated.get(reference);
|
|
257
|
+
if (!texture) throw new ItemRenderError(`Untracked texture reference ${reference} in ${model.locator}`);
|
|
258
|
+
return texture.at(tick);
|
|
259
|
+
};
|
|
260
|
+
const renderSize = options.size * options.quality;
|
|
261
|
+
const full = model.builtinParent === "builtin/generated" ? await renderGeneratedItemWith(model, supplier, renderSize, options.tints) : await renderElementModelWith(model, supplier, renderSize, options);
|
|
262
|
+
frames.push(options.quality === 1 ? full : boxDownscale(full, options.quality));
|
|
263
|
+
emitTicks.push(tick);
|
|
264
|
+
lastKey = key;
|
|
265
|
+
sinceLast = 0;
|
|
266
|
+
}
|
|
267
|
+
return {
|
|
268
|
+
frames,
|
|
269
|
+
delaysMs: emitTicks.map((tick, index) => {
|
|
270
|
+
const next = index + 1 < emitTicks.length ? emitTicks[index + 1] : ticks;
|
|
271
|
+
return Math.max(TICK_MS, (next - tick) * TICK_MS);
|
|
272
|
+
})
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
async function loadAnimatedTexture(model, textures, reference) {
|
|
276
|
+
const locator = resolveTexture(model, reference);
|
|
277
|
+
if (locator) {
|
|
278
|
+
const texture = await textures.loadAnimated(locator);
|
|
279
|
+
if (texture) return texture;
|
|
280
|
+
}
|
|
281
|
+
if (!reference.startsWith("#") && model.textures[reference] !== void 0) {
|
|
282
|
+
const variable = resolveTexture(model, `#${reference}`);
|
|
283
|
+
if (variable) {
|
|
284
|
+
const texture = await textures.loadAnimated(variable);
|
|
285
|
+
if (texture) return texture;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
throw new ItemRenderError(`Missing texture ${locator ?? reference} referenced by ${model.locator}`);
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Models with neither generated layers nor elements have no drawable geometry
|
|
292
|
+
* (OBJ loaders, code-built block entities) — fail loudly rather than shipping
|
|
293
|
+
* a transparent icon that still counts as "has an icon" downstream.
|
|
294
|
+
*/
|
|
295
|
+
function assertDrawable(model) {
|
|
296
|
+
if (model.obj) return;
|
|
297
|
+
if (model.builtinParent !== null && model.builtinParent !== "builtin/generated") throw new ItemRenderError(`Unsupported builtin parent ${model.builtinParent} in ${model.locator}`);
|
|
298
|
+
if (model.builtinParent === null && model.elements.length === 0) throw new ItemRenderError(`No drawable geometry in ${model.locator} (code-rendered model)`);
|
|
299
|
+
if (model.builtinParent === "builtin/generated" && !Object.keys(model.textures).some((name) => /^layer\d+$/.test(name))) throw new ItemRenderError(`Generated model without layers in ${model.locator} (would render invisible)`);
|
|
300
|
+
}
|
|
301
|
+
async function renderModel(model, textures, options) {
|
|
302
|
+
assertDrawable(model);
|
|
303
|
+
if (model.obj) {
|
|
304
|
+
if (!options.resources) throw new ItemRenderError(`OBJ model ${model.locator} needs RenderOptions.resources for file access`);
|
|
305
|
+
const full = await renderObjModel(model, options.resources, textures, options);
|
|
306
|
+
return options.quality === 1 ? full : boxDownscale(full, options.quality);
|
|
307
|
+
}
|
|
308
|
+
const renderSize = options.size * options.quality;
|
|
309
|
+
if (model.fluid && model.builtinParent === "builtin/generated") {
|
|
310
|
+
const filled = await renderFluidBucket(model, textures, renderSize, options.resources);
|
|
311
|
+
if (filled) return options.quality === 1 ? filled : boxDownscale(filled, options.quality);
|
|
312
|
+
}
|
|
313
|
+
const full = model.builtinParent === "builtin/generated" ? await renderGeneratedItem(model, textures, renderSize, options.tints) : await renderElementModel(model, textures, renderSize, options);
|
|
314
|
+
return options.quality === 1 ? full : boxDownscale(full, options.quality);
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* fluid_container buckets: bucket sprite with the contained fluid painted into
|
|
318
|
+
* the water-bucket fill region. Null when the fluid resolves to nothing, in
|
|
319
|
+
* which case the plain bucket renders as before.
|
|
320
|
+
*/
|
|
321
|
+
async function renderFluidBucket(model, textures, renderSize, resources) {
|
|
322
|
+
const locator = resolveTexture(model, "#layer0");
|
|
323
|
+
const base = locator ? await textures.load(locator) : null;
|
|
324
|
+
if (!base || !model.fluid) return null;
|
|
325
|
+
const copy = {
|
|
326
|
+
width: base.width,
|
|
327
|
+
height: base.height,
|
|
328
|
+
data: new Uint8ClampedArray(base.data)
|
|
329
|
+
};
|
|
330
|
+
if (!await paintBucketFluid(copy, model.fluid, textures, resources)) return null;
|
|
331
|
+
return pointResize(toFloatTexture(copy), renderSize, renderSize);
|
|
332
|
+
}
|
|
333
|
+
async function loadTexture(model, textures, reference) {
|
|
334
|
+
const locator = resolveTexture(model, reference);
|
|
335
|
+
if (locator) {
|
|
336
|
+
const texture = await textures.load(locator);
|
|
337
|
+
if (texture) return {
|
|
338
|
+
locator,
|
|
339
|
+
texture
|
|
340
|
+
};
|
|
341
|
+
}
|
|
342
|
+
if (!reference.startsWith("#") && model.textures[reference] !== void 0) {
|
|
343
|
+
const variable = resolveTexture(model, `#${reference}`);
|
|
344
|
+
if (variable) {
|
|
345
|
+
const texture = await textures.load(variable);
|
|
346
|
+
if (texture) return {
|
|
347
|
+
locator: variable,
|
|
348
|
+
texture
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
throw new ItemRenderError(`Missing texture ${locator ?? reference} referenced by ${model.locator}`);
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Flat generated item: numerically-sorted layerN textures, tinted by layer index,
|
|
356
|
+
* point-upscaled to the render size, source-over composited. GUI display transforms
|
|
357
|
+
* and lighting deliberately do not apply (upstream behavior).
|
|
358
|
+
*/
|
|
359
|
+
async function renderGeneratedItem(model, textures, renderSize, tints) {
|
|
360
|
+
const supplier = async (reference) => {
|
|
361
|
+
return (await loadTexture(model, textures, reference)).texture;
|
|
362
|
+
};
|
|
363
|
+
return renderGeneratedItemWith(model, supplier, renderSize, tints);
|
|
364
|
+
}
|
|
365
|
+
async function renderGeneratedItemWith(model, supplier, renderSize, tints) {
|
|
366
|
+
const layerNames = Object.keys(model.textures).map((name) => /^layer(\d+)$/.exec(name)).filter((match) => match !== null).toSorted((a, b) => Number(a[1]) - Number(b[1]));
|
|
367
|
+
const out = new Float64Array(renderSize * renderSize * 4);
|
|
368
|
+
for (const match of layerNames) {
|
|
369
|
+
const layerIndex = Number(match[1]);
|
|
370
|
+
const texture = await supplier(`#${match[0]}`);
|
|
371
|
+
if (!texture) throw new ItemRenderError(`Missing texture #${match[0]} referenced by ${model.locator}`);
|
|
372
|
+
const float = toFloatTexture(texture);
|
|
373
|
+
const tint = tints?.[layerIndex] ?? null;
|
|
374
|
+
if (tint) tintTexture(float, tint.r, tint.g, tint.b);
|
|
375
|
+
const resized = pointResize(float, renderSize, renderSize);
|
|
376
|
+
for (let offset = 0; offset < out.length; offset += 4) {
|
|
377
|
+
const alpha = resized.data[offset + 3];
|
|
378
|
+
if (alpha > 0) blendPixel(out, offset, resized.data[offset], resized.data[offset + 1], resized.data[offset + 2], alpha);
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
return {
|
|
382
|
+
width: renderSize,
|
|
383
|
+
height: renderSize,
|
|
384
|
+
data: out
|
|
385
|
+
};
|
|
386
|
+
}
|
|
387
|
+
async function renderElementModel(model, textures, renderSize, options) {
|
|
388
|
+
const supplier = async (reference) => {
|
|
389
|
+
if (reference.startsWith("#") && resolveTexture(model, reference) === null) return null;
|
|
390
|
+
return (await loadTexture(model, textures, reference)).texture;
|
|
391
|
+
};
|
|
392
|
+
return renderElementModelWith(model, supplier, renderSize, options);
|
|
393
|
+
}
|
|
394
|
+
async function renderElementModelWith(model, supplier, renderSize, options) {
|
|
395
|
+
const lights = lightsForProfile(options.lightingProfile);
|
|
396
|
+
const light = model.elementsGuiLight === "side" ? lights.side : lights.front;
|
|
397
|
+
const faces = [];
|
|
398
|
+
let skippedFaces = 0;
|
|
399
|
+
for (const element of model.elements) for (const geometry of buildElementFaces(element)) {
|
|
400
|
+
const texture = await supplier(geometry.textureRef);
|
|
401
|
+
if (!texture) {
|
|
402
|
+
skippedFaces++;
|
|
403
|
+
continue;
|
|
404
|
+
}
|
|
405
|
+
faces.push({
|
|
406
|
+
geometry,
|
|
407
|
+
texture: toFloatTexture(texture),
|
|
408
|
+
light,
|
|
409
|
+
tint: geometry.tintIndex !== null ? options.tints?.[geometry.tintIndex] ?? null : null,
|
|
410
|
+
maxZ: faceMaxZ(geometry)
|
|
411
|
+
});
|
|
412
|
+
}
|
|
413
|
+
if (faces.length === 0 && skippedFaces > 0) throw new ItemRenderError(`Every face texture unresolved in ${model.locator} (would render invisible)`);
|
|
414
|
+
faces.sort((a, b) => a.maxZ - b.maxZ);
|
|
415
|
+
const gui = model.display.gui;
|
|
416
|
+
const guiMatrix = displayMatrix(gui?.rotation ?? [
|
|
417
|
+
0,
|
|
418
|
+
0,
|
|
419
|
+
0
|
|
420
|
+
], gui?.translation ?? [
|
|
421
|
+
0,
|
|
422
|
+
0,
|
|
423
|
+
0
|
|
424
|
+
], gui?.scale ?? [
|
|
425
|
+
1,
|
|
426
|
+
1,
|
|
427
|
+
1
|
|
428
|
+
]);
|
|
429
|
+
const transformation = multiply(guiMatrix, options.itemTransform ?? identity());
|
|
430
|
+
const buffers = [];
|
|
431
|
+
for (const face of faces) {
|
|
432
|
+
const buffer = renderFace(face, renderSize, renderSize, transformation);
|
|
433
|
+
if (buffer) buffers.push(buffer);
|
|
434
|
+
}
|
|
435
|
+
return combineFaceBuffers(renderSize, renderSize, buffers);
|
|
436
|
+
}
|
|
437
|
+
/** Nearest-neighbour resize matching Imagick FILTER_POINT (destination-center sampling). */
|
|
438
|
+
function pointResize(texture, width, height) {
|
|
439
|
+
const data = new Float64Array(width * height * 4);
|
|
440
|
+
for (let y = 0; y < height; y++) {
|
|
441
|
+
let srcY = Math.floor((y + .5) * texture.height / height);
|
|
442
|
+
srcY = srcY >= texture.height ? texture.height - 1 : srcY;
|
|
443
|
+
for (let x = 0; x < width; x++) {
|
|
444
|
+
let srcX = Math.floor((x + .5) * texture.width / width);
|
|
445
|
+
srcX = srcX >= texture.width ? texture.width - 1 : srcX;
|
|
446
|
+
const src = (srcY * texture.width + srcX) * 4;
|
|
447
|
+
const dst = (y * width + x) * 4;
|
|
448
|
+
data[dst] = texture.data[src];
|
|
449
|
+
data[dst + 1] = texture.data[src + 1];
|
|
450
|
+
data[dst + 2] = texture.data[src + 2];
|
|
451
|
+
data[dst + 3] = texture.data[src + 3];
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
return {
|
|
455
|
+
width,
|
|
456
|
+
height,
|
|
457
|
+
data
|
|
458
|
+
};
|
|
459
|
+
}
|
|
460
|
+
/**
|
|
461
|
+
* Box downscale matching ImageMagick 6 ResizeImage with an alpha channel: two
|
|
462
|
+
* passes (horizontal then vertical), each computing alpha-weighted colors
|
|
463
|
+
* (color = Σ(aᵢ·cᵢ)/Σ(aᵢ), alpha = mean) and storing every intermediate as a
|
|
464
|
+
* Q16 quantum with round-half-up. Verified against Imagick FILTER_BOX output.
|
|
465
|
+
*/
|
|
466
|
+
function boxDownscale(texture, factor) {
|
|
467
|
+
return boxPass(boxPass(texture, factor, true), factor, false);
|
|
468
|
+
}
|
|
469
|
+
function boxPass(texture, factor, isHorizontal) {
|
|
470
|
+
const width = isHorizontal ? Math.round(texture.width / factor) : texture.width;
|
|
471
|
+
const height = isHorizontal ? texture.height : Math.round(texture.height / factor);
|
|
472
|
+
const data = new Float64Array(width * height * 4);
|
|
473
|
+
for (let y = 0; y < height; y++) for (let x = 0; x < width; x++) {
|
|
474
|
+
let r = 0;
|
|
475
|
+
let g = 0;
|
|
476
|
+
let b = 0;
|
|
477
|
+
let alphaSum = 0;
|
|
478
|
+
for (let i = 0; i < factor; i++) {
|
|
479
|
+
const srcX = isHorizontal ? x * factor + i : x;
|
|
480
|
+
const src = ((isHorizontal ? y : y * factor + i) * texture.width + srcX) * 4;
|
|
481
|
+
const alpha = Math.round(texture.data[src + 3] * 65535);
|
|
482
|
+
r += Math.round(texture.data[src] * 65535) * alpha;
|
|
483
|
+
g += Math.round(texture.data[src + 1] * 65535) * alpha;
|
|
484
|
+
b += Math.round(texture.data[src + 2] * 65535) * alpha;
|
|
485
|
+
alphaSum += alpha;
|
|
486
|
+
}
|
|
487
|
+
const dst = (y * width + x) * 4;
|
|
488
|
+
if (alphaSum > 0) {
|
|
489
|
+
data[dst] = clampQuantum(r / alphaSum) / 65535;
|
|
490
|
+
data[dst + 1] = clampQuantum(g / alphaSum) / 65535;
|
|
491
|
+
data[dst + 2] = clampQuantum(b / alphaSum) / 65535;
|
|
492
|
+
}
|
|
493
|
+
data[dst + 3] = clampQuantum(alphaSum / factor) / 65535;
|
|
494
|
+
}
|
|
495
|
+
return {
|
|
496
|
+
width,
|
|
497
|
+
height,
|
|
498
|
+
data
|
|
499
|
+
};
|
|
500
|
+
}
|
|
501
|
+
/** ClampToQuantum on a value already in quantum units: floor(x + 0.5), clamped. */
|
|
502
|
+
function clampQuantum(quantum) {
|
|
503
|
+
const rounded = Math.floor(quantum + .5);
|
|
504
|
+
return rounded < 0 ? 0 : Math.min(rounded, 65535);
|
|
505
|
+
}
|
|
506
|
+
//#endregion
|
|
507
|
+
export { renderModelFrames as a, renderObjModel as c, renderModel as i, boxDownscale as n, parseMtl as o, pointResize as r, parseObj as s, ItemRenderError as t };
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { a as ResourceManager } from "./manager-CoZaeQTu.js";
|
|
2
|
+
import { i as TextureLoader } from "./loader-TFFNV4Jl.js";
|
|
3
|
+
import { r as ResolvedModel } from "./loader-lCkMRDH4.js";
|
|
4
|
+
import { t as FloatTexture } from "./blend-Qvrn6YgK.js";
|
|
5
|
+
import { t as Mat4 } from "./vector-DRKRi4--.js";
|
|
6
|
+
import { a as LightingProfileName } from "./lighting-3FGRC3Af.js";
|
|
7
|
+
import { n as TintColor } from "./face-DC6cNMdz.js";
|
|
8
|
+
//#region src/render/renderer.d.ts
|
|
9
|
+
interface RenderOptions {
|
|
10
|
+
size: number;
|
|
11
|
+
quality: number;
|
|
12
|
+
lightingProfile: LightingProfileName;
|
|
13
|
+
/** Accumulated item-definition transformation (inner matrix). */
|
|
14
|
+
itemTransform?: Mat4;
|
|
15
|
+
/** Tint colors by index (face tintindex / generated layer number). */
|
|
16
|
+
tints?: Array<TintColor | null>;
|
|
17
|
+
/** Needed for OBJ models, which read .obj/.mtl files from the asset tree. */
|
|
18
|
+
resources?: ResourceManager;
|
|
19
|
+
}
|
|
20
|
+
declare class ItemRenderError extends Error {}
|
|
21
|
+
interface RenderedFrames {
|
|
22
|
+
frames: FloatTexture[];
|
|
23
|
+
/** Display duration per frame in milliseconds (50ms per game tick). */
|
|
24
|
+
delaysMs: number[];
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Render every animation frame of a model (a single frame for unanimated
|
|
28
|
+
* items). The tick loop mirrors upstream: total ticks = lcm of the involved
|
|
29
|
+
* textures' lengths, identical frames are skipped, and interpolated textures
|
|
30
|
+
* are capped at 128 emitted frames.
|
|
31
|
+
*/
|
|
32
|
+
declare function renderModelFrames(model: ResolvedModel, textures: TextureLoader, options: RenderOptions): Promise<RenderedFrames>;
|
|
33
|
+
declare function renderModel(model: ResolvedModel, textures: TextureLoader, options: RenderOptions): Promise<FloatTexture>;
|
|
34
|
+
/** Nearest-neighbour resize matching Imagick FILTER_POINT (destination-center sampling). */
|
|
35
|
+
declare function pointResize(texture: FloatTexture, width: number, height: number): FloatTexture;
|
|
36
|
+
/**
|
|
37
|
+
* Box downscale matching ImageMagick 6 ResizeImage with an alpha channel: two
|
|
38
|
+
* passes (horizontal then vertical), each computing alpha-weighted colors
|
|
39
|
+
* (color = Σ(aᵢ·cᵢ)/Σ(aᵢ), alpha = mean) and storing every intermediate as a
|
|
40
|
+
* Q16 quantum with round-half-up. Verified against Imagick FILTER_BOX output.
|
|
41
|
+
*/
|
|
42
|
+
declare function boxDownscale(texture: FloatTexture, factor: number): FloatTexture;
|
|
43
|
+
//#endregion
|
|
44
|
+
export { pointResize as a, boxDownscale as i, RenderOptions as n, renderModel as o, RenderedFrames as r, renderModelFrames as s, ItemRenderError as t };
|