@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,91 @@
|
|
|
1
|
+
import { n as ResourceLocator } from "./locator-ycZzh_6z.js";
|
|
2
|
+
import { o as identity } from "./vector-CCxLae_T.js";
|
|
3
|
+
import { o as evaluateItemModel } from "./definition-3MBm8ar_.js";
|
|
4
|
+
//#region src/items/discovery.ts
|
|
5
|
+
/**
|
|
6
|
+
* Era-adaptive item discovery — the piece no single renderchest tag has:
|
|
7
|
+
* 1.21.4+ `items/*.json` definitions when a namespace ships them, otherwise the
|
|
8
|
+
* classic `models/item/*.json` scan (v2.5.2 behavior). Both yield item ids of
|
|
9
|
+
* the form `<ns>:<name>`.
|
|
10
|
+
*/
|
|
11
|
+
var ItemResolutionError = class extends Error {};
|
|
12
|
+
async function discoverItems(resources, namespace) {
|
|
13
|
+
const seen = /* @__PURE__ */ new Set();
|
|
14
|
+
const items = [];
|
|
15
|
+
for (const locator of await resources.listResources("itemDefinition", namespace)) {
|
|
16
|
+
const id = locator.toString();
|
|
17
|
+
if (!seen.has(id)) {
|
|
18
|
+
seen.add(id);
|
|
19
|
+
items.push({
|
|
20
|
+
id,
|
|
21
|
+
source: "definition"
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
const registered = namespace === "minecraft" ? null : await langRegistry(resources, namespace);
|
|
26
|
+
for (const locator of await resources.listResources("model", namespace)) {
|
|
27
|
+
if (!locator.path.startsWith("item/")) continue;
|
|
28
|
+
const name = locator.path.slice(5);
|
|
29
|
+
if (registered && !registered.has(name.replaceAll("/", ".")) && !name.endsWith("_trim")) continue;
|
|
30
|
+
const id = new ResourceLocator(locator.namespace, name).toString();
|
|
31
|
+
if (!seen.has(id)) {
|
|
32
|
+
seen.add(id);
|
|
33
|
+
items.push({
|
|
34
|
+
id,
|
|
35
|
+
source: "model"
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return items;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Item/block names with a translation key in the namespace's en_us.json — the
|
|
43
|
+
* closest thing to the game's item registry a jar contains (datagen writes a
|
|
44
|
+
* key per registered item). Null (no gating) when the namespace has no modern
|
|
45
|
+
* lang file or no item/block keys: 1.7.10-era mods use unkeyed .lang files.
|
|
46
|
+
*/
|
|
47
|
+
async function langRegistry(resources, namespace) {
|
|
48
|
+
const raw = await resources.getResource("lang", new ResourceLocator(namespace, "en_us"));
|
|
49
|
+
if (!raw) return null;
|
|
50
|
+
let lang;
|
|
51
|
+
try {
|
|
52
|
+
lang = JSON.parse(raw.toString("utf8"));
|
|
53
|
+
} catch {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
const names = /* @__PURE__ */ new Set();
|
|
57
|
+
const prefixes = [`item.${namespace}.`, `block.${namespace}.`];
|
|
58
|
+
for (const key of Object.keys(lang)) for (const prefix of prefixes) if (key.startsWith(prefix)) {
|
|
59
|
+
names.add(key.slice(prefix.length));
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
return names.size > 0 ? names : null;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Resolve an item id to the models to render. Definitions are evaluated with
|
|
66
|
+
* static-icon properties; plain model items render the model with no tints
|
|
67
|
+
* (legacy hard-coded tint tables are layered on by the caller for old eras).
|
|
68
|
+
*/
|
|
69
|
+
async function resolveItem(resources, id, properties) {
|
|
70
|
+
const locator = ResourceLocator.parse(id);
|
|
71
|
+
const definition = await resources.getResource("itemDefinition", locator);
|
|
72
|
+
if (definition !== null) {
|
|
73
|
+
let parsed;
|
|
74
|
+
try {
|
|
75
|
+
parsed = JSON.parse(definition.toString("utf8"));
|
|
76
|
+
} catch {
|
|
77
|
+
throw new ItemResolutionError(`Item definition is not valid JSON: ${id}`);
|
|
78
|
+
}
|
|
79
|
+
if (parsed.model === void 0) throw new ItemResolutionError(`Item definition has no model node: ${id}`);
|
|
80
|
+
return evaluateItemModel(parsed.model, properties);
|
|
81
|
+
}
|
|
82
|
+
const modelLocator = new ResourceLocator(locator.namespace, `item/${locator.path}`);
|
|
83
|
+
if (await resources.hasResource("model", modelLocator)) return [{
|
|
84
|
+
model: modelLocator.toString(),
|
|
85
|
+
tints: [],
|
|
86
|
+
transform: identity()
|
|
87
|
+
}];
|
|
88
|
+
throw new ItemResolutionError(`No item definition or item model for ${id}`);
|
|
89
|
+
}
|
|
90
|
+
//#endregion
|
|
91
|
+
export { discoverItems as n, resolveItem as r, ItemResolutionError as t };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { a as ResourceManager } from "./manager-CoZaeQTu.js";
|
|
2
|
+
import { i as ItemRenderInstruction, r as ItemProperties } from "./definition-BwX6Xxv0.js";
|
|
3
|
+
//#region src/items/discovery.d.ts
|
|
4
|
+
declare class ItemResolutionError extends Error {}
|
|
5
|
+
interface DiscoveredItem {
|
|
6
|
+
/** Output id, e.g. `minecraft:stone`. */
|
|
7
|
+
id: string;
|
|
8
|
+
source: 'definition' | 'model';
|
|
9
|
+
}
|
|
10
|
+
declare function discoverItems(resources: ResourceManager, namespace: string): Promise<DiscoveredItem[]>;
|
|
11
|
+
/**
|
|
12
|
+
* Resolve an item id to the models to render. Definitions are evaluated with
|
|
13
|
+
* static-icon properties; plain model items render the model with no tints
|
|
14
|
+
* (legacy hard-coded tint tables are layered on by the caller for old eras).
|
|
15
|
+
*/
|
|
16
|
+
declare function resolveItem(resources: ResourceManager, id: string, properties?: ItemProperties): Promise<ItemRenderInstruction[]>;
|
|
17
|
+
//#endregion
|
|
18
|
+
export { resolveItem as i, ItemResolutionError as n, discoverItems as r, DiscoveredItem as t };
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { existsSync } from "node:fs";
|
|
3
|
+
import { mkdir, readFile, rename, writeFile } from "node:fs/promises";
|
|
4
|
+
//#region src/versions/download.ts
|
|
5
|
+
/**
|
|
6
|
+
* Client jar acquisition: resolves versions through mcversions.net's index
|
|
7
|
+
* (stable + snapshot channels) and downloads from Mojang, caching by version.
|
|
8
|
+
* Shared by the CLI's --version flag and the test fixtures.
|
|
9
|
+
*/
|
|
10
|
+
async function downloadClientJar(version, cacheDir) {
|
|
11
|
+
const jarPath = path.join(cacheDir, `${version}-client.jar`);
|
|
12
|
+
if (existsSync(jarPath)) return jarPath;
|
|
13
|
+
await mkdir(cacheDir, { recursive: true });
|
|
14
|
+
const indexPath = path.join(cacheDir, "mcversions.json");
|
|
15
|
+
let index;
|
|
16
|
+
if (existsSync(indexPath)) index = JSON.parse(await readFile(indexPath, "utf8"));
|
|
17
|
+
else {
|
|
18
|
+
const response = await fetch("https://mcversions.net/mcversions.json");
|
|
19
|
+
if (!response.ok) throw new Error(`mcversions.net index fetch failed: ${response.status}`);
|
|
20
|
+
const body = Buffer.from(await response.arrayBuffer());
|
|
21
|
+
await writeFile(indexPath, body);
|
|
22
|
+
index = JSON.parse(body.toString("utf8"));
|
|
23
|
+
}
|
|
24
|
+
const entry = index.stable[version] ?? index.snapshot[version];
|
|
25
|
+
if (!entry) throw new Error(`Version ${version} not found in the mcversions index`);
|
|
26
|
+
const download = await fetch(entry.client);
|
|
27
|
+
if (!download.ok) throw new Error(`Client jar download failed for ${version}: ${download.status}`);
|
|
28
|
+
const partial = `${jarPath}.partial`;
|
|
29
|
+
await writeFile(partial, Buffer.from(await download.arrayBuffer()));
|
|
30
|
+
await rename(partial, jarPath);
|
|
31
|
+
return jarPath;
|
|
32
|
+
}
|
|
33
|
+
//#endregion
|
|
34
|
+
export { downloadClientJar as t };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { a as TRIM_DARKER_MATERIALS, i as POTTERY_SHERDS, n as DynamicItem, o as TRIM_MATERIALS, r as DynamicResources, s as builtinDynamicResources, t as ARMOR_ITEM_TYPES } from "../generators-CCB8h0mP.js";
|
|
2
|
+
export { ARMOR_ITEM_TYPES, DynamicItem, DynamicResources, POTTERY_SHERDS, TRIM_DARKER_MATERIALS, TRIM_MATERIALS, builtinDynamicResources };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { t as FloatTexture } from "./blend-Qvrn6YgK.js";
|
|
2
|
+
//#region src/output/encode.d.ts
|
|
3
|
+
interface EncodedIcon {
|
|
4
|
+
png: Buffer;
|
|
5
|
+
webp?: Buffer;
|
|
6
|
+
avif?: Buffer;
|
|
7
|
+
}
|
|
8
|
+
interface EncodeOptions {
|
|
9
|
+
webp?: boolean;
|
|
10
|
+
/** Off by default: measure size/time before enabling — 64px icons rarely benefit. */
|
|
11
|
+
avif?: boolean;
|
|
12
|
+
}
|
|
13
|
+
interface EncodedAnimatedIcon extends EncodedIcon {
|
|
14
|
+
/** GIF for legacy browsers, only produced for animated icons. */
|
|
15
|
+
gif?: Buffer;
|
|
16
|
+
/** Whether the avif buffer carries the animation or fell back to frame 0. */
|
|
17
|
+
avifAnimated?: boolean;
|
|
18
|
+
}
|
|
19
|
+
interface AnimatedEncodeOptions extends EncodeOptions {
|
|
20
|
+
gif?: boolean;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Encode a multi-frame icon: animated WebP (universal), optional GIF for
|
|
24
|
+
* legacy browsers, PNG as the static first frame (matching upstream's
|
|
25
|
+
* fallback), and AVIF animated where the local libvips supports it —
|
|
26
|
+
* otherwise a static first frame.
|
|
27
|
+
*/
|
|
28
|
+
declare function encodeAnimatedIcon(frames: FloatTexture[], delaysMs: number[], options?: AnimatedEncodeOptions): Promise<EncodedAnimatedIcon>;
|
|
29
|
+
declare function encodeIcon(texture: FloatTexture, options?: EncodeOptions): Promise<EncodedIcon>;
|
|
30
|
+
//#endregion
|
|
31
|
+
export { encodeAnimatedIcon as a, EncodedIcon as i, EncodeOptions as n, encodeIcon as o, EncodedAnimatedIcon as r, AnimatedEncodeOptions as t };
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { o as toByteTexture } from "./blend-CHP2-j9U.js";
|
|
2
|
+
import sharp from "sharp";
|
|
3
|
+
//#region src/output/encode.ts
|
|
4
|
+
/**
|
|
5
|
+
* Icon encoding via sharp. Defaults reproduce the ui pipeline's post-pass so no
|
|
6
|
+
* separate optimization step is needed: lossless everywhere, strictly-smaller
|
|
7
|
+
* candidates only.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Encode a multi-frame icon: animated WebP (universal), optional GIF for
|
|
11
|
+
* legacy browsers, PNG as the static first frame (matching upstream's
|
|
12
|
+
* fallback), and AVIF animated where the local libvips supports it —
|
|
13
|
+
* otherwise a static first frame.
|
|
14
|
+
*/
|
|
15
|
+
async function encodeAnimatedIcon(frames, delaysMs, options = {}) {
|
|
16
|
+
if (frames.length === 1) return encodeIcon(frames[0], options);
|
|
17
|
+
const { width, height } = frames[0];
|
|
18
|
+
const pages = await Promise.all(frames.map((frame) => {
|
|
19
|
+
const bytes = toByteTexture(frame);
|
|
20
|
+
return sharp(Buffer.from(bytes.data.buffer, bytes.data.byteOffset, bytes.data.length), { raw: {
|
|
21
|
+
width,
|
|
22
|
+
height,
|
|
23
|
+
channels: 4
|
|
24
|
+
} }).png({ compressionLevel: 0 }).toBuffer();
|
|
25
|
+
}));
|
|
26
|
+
const animated = () => sharp(pages, { join: { animated: true } });
|
|
27
|
+
const result = { png: (await encodeIcon(frames[0], { webp: false })).png };
|
|
28
|
+
if (options.webp !== false) result.webp = await animated().webp({
|
|
29
|
+
lossless: true,
|
|
30
|
+
effort: 6,
|
|
31
|
+
loop: 0,
|
|
32
|
+
delay: delaysMs
|
|
33
|
+
}).toBuffer();
|
|
34
|
+
if (options.gif) result.gif = await animated().gif({
|
|
35
|
+
loop: 0,
|
|
36
|
+
delay: delaysMs
|
|
37
|
+
}).toBuffer();
|
|
38
|
+
if (options.avif) try {
|
|
39
|
+
result.avif = await animated().avif({
|
|
40
|
+
lossless: true,
|
|
41
|
+
effort: 6
|
|
42
|
+
}).toBuffer();
|
|
43
|
+
result.avifAnimated = true;
|
|
44
|
+
} catch {
|
|
45
|
+
result.avif = (await encodeIcon(frames[0], {
|
|
46
|
+
webp: false,
|
|
47
|
+
avif: true
|
|
48
|
+
})).avif;
|
|
49
|
+
result.avifAnimated = false;
|
|
50
|
+
}
|
|
51
|
+
return result;
|
|
52
|
+
}
|
|
53
|
+
/** Distinct RGBA colors, up to a cap (palette PNGs hold at most 256). */
|
|
54
|
+
function countColors(data, cap) {
|
|
55
|
+
const seen = /* @__PURE__ */ new Set();
|
|
56
|
+
for (let offset = 0; offset < data.length; offset += 4) {
|
|
57
|
+
seen.add(((data[offset] * 256 + data[offset + 1]) * 256 + data[offset + 2]) * 256 + data[offset + 3]);
|
|
58
|
+
if (seen.size > cap) return seen.size;
|
|
59
|
+
}
|
|
60
|
+
return seen.size;
|
|
61
|
+
}
|
|
62
|
+
async function encodeIcon(texture, options = {}) {
|
|
63
|
+
const bytes = toByteTexture(texture);
|
|
64
|
+
const raw = sharp(Buffer.from(bytes.data.buffer, bytes.data.byteOffset, bytes.data.length), { raw: {
|
|
65
|
+
width: bytes.width,
|
|
66
|
+
height: bytes.height,
|
|
67
|
+
channels: 4
|
|
68
|
+
} });
|
|
69
|
+
const paletteSafe = countColors(bytes.data, 256) <= 256;
|
|
70
|
+
const result = { png: await raw.clone().png({
|
|
71
|
+
compressionLevel: 9,
|
|
72
|
+
effort: 10,
|
|
73
|
+
palette: paletteSafe
|
|
74
|
+
}).toBuffer() };
|
|
75
|
+
if (options.webp !== false) result.webp = await raw.clone().webp({
|
|
76
|
+
lossless: true,
|
|
77
|
+
effort: 6
|
|
78
|
+
}).toBuffer();
|
|
79
|
+
if (options.avif) result.avif = await raw.clone().avif({
|
|
80
|
+
lossless: true,
|
|
81
|
+
effort: 6
|
|
82
|
+
}).toBuffer();
|
|
83
|
+
return result;
|
|
84
|
+
}
|
|
85
|
+
//#endregion
|
|
86
|
+
export { encodeIcon as n, encodeAnimatedIcon as t };
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
import { n as ResourceLocator } from "./locator-ycZzh_6z.js";
|
|
2
|
+
import { i as renderModel } from "./renderer-CmOz6WI9.js";
|
|
3
|
+
//#region src/render/entity-fallback.ts
|
|
4
|
+
/**
|
|
5
|
+
* Heuristic rendering for mod items that parent `builtin/entity` — chests,
|
|
6
|
+
* mob heads, banners, shulker boxes drawn by Java code in-game. The sweep
|
|
7
|
+
* found 351 of these across the top mods (quark's lootr chests, spectrum's
|
|
8
|
+
* mob heads, deeperdarker's chests). We map them onto the builtin geometry by
|
|
9
|
+
* name, preferring the mod's own entity texture when one matches; a generic
|
|
10
|
+
* chest icon for a chest item beats no icon, but nothing here ever guesses
|
|
11
|
+
* across item kinds.
|
|
12
|
+
*/
|
|
13
|
+
/** Tokens too generic to identify a texture on their own. */
|
|
14
|
+
const FILLER_TOKENS = /* @__PURE__ */ new Set([
|
|
15
|
+
"chest",
|
|
16
|
+
"chests",
|
|
17
|
+
"trapped",
|
|
18
|
+
"big",
|
|
19
|
+
"small",
|
|
20
|
+
"the",
|
|
21
|
+
"of"
|
|
22
|
+
]);
|
|
23
|
+
/** Double-chest halves, lid states, boat sheets, seasonal skins — never icon textures. */
|
|
24
|
+
const SKIP_TOKENS = /* @__PURE__ */ new Set([
|
|
25
|
+
"left",
|
|
26
|
+
"right",
|
|
27
|
+
"open",
|
|
28
|
+
"opened",
|
|
29
|
+
"christmas",
|
|
30
|
+
"boat",
|
|
31
|
+
"raft",
|
|
32
|
+
"minecart"
|
|
33
|
+
]);
|
|
34
|
+
function tokens(name) {
|
|
35
|
+
return name.split(/[./_]/).filter((token) => token.length > 1);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Find the mod's own chest sheet for a chest-like item by token overlap over
|
|
39
|
+
* the FULL texture path — mods keep variant sheets in per-wood directories
|
|
40
|
+
* (quark's `quark_variant_chests/acacia/normal.png`), not just under entity/.
|
|
41
|
+
*/
|
|
42
|
+
async function findChestTexture(resources, namespace, itemName) {
|
|
43
|
+
const wanted = tokens(itemName).filter((token) => !FILLER_TOKENS.has(token));
|
|
44
|
+
const wantTrapped = itemName.includes("trapped");
|
|
45
|
+
let best = null;
|
|
46
|
+
let bestScore = 0;
|
|
47
|
+
let bestNoise = Infinity;
|
|
48
|
+
for (const locator of await resources.listResources("texture", namespace)) {
|
|
49
|
+
if (!locator.path.includes("chest")) continue;
|
|
50
|
+
const candidate = tokens(locator.path);
|
|
51
|
+
if (candidate.some((token) => SKIP_TOKENS.has(token))) continue;
|
|
52
|
+
if (wantTrapped !== (candidate.includes("trapped") || candidate.includes("trap"))) continue;
|
|
53
|
+
let score = 0;
|
|
54
|
+
for (const token of wanted) if (candidate.includes(token)) score++;
|
|
55
|
+
if (wanted.length > 0 && score === 0) continue;
|
|
56
|
+
if (best === null || score > bestScore || score === bestScore && candidate.length < bestNoise) {
|
|
57
|
+
best = locator;
|
|
58
|
+
bestScore = score;
|
|
59
|
+
bestNoise = candidate.length;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return best;
|
|
63
|
+
}
|
|
64
|
+
/** Clone a resolved model with one texture variable rebound. */
|
|
65
|
+
function withTexture(model, name, locator) {
|
|
66
|
+
return {
|
|
67
|
+
...model,
|
|
68
|
+
textures: {
|
|
69
|
+
...model.textures,
|
|
70
|
+
[name]: locator.toString()
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
const WHITE_BANNER = {
|
|
75
|
+
r: 246 / 255,
|
|
76
|
+
g: 252 / 255,
|
|
77
|
+
b: 251 / 255
|
|
78
|
+
};
|
|
79
|
+
/** Vanilla DyeColor diffuse colors, keyed by the dye name mods prefix with. */
|
|
80
|
+
const DYE_COLORS = {
|
|
81
|
+
white: 16383998,
|
|
82
|
+
orange: 16351261,
|
|
83
|
+
magenta: 13061821,
|
|
84
|
+
light_blue: 3847130,
|
|
85
|
+
yellow: 16701501,
|
|
86
|
+
lime: 8439583,
|
|
87
|
+
pink: 15961002,
|
|
88
|
+
gray: 4673362,
|
|
89
|
+
light_gray: 10329495,
|
|
90
|
+
cyan: 1481884,
|
|
91
|
+
purple: 8991416,
|
|
92
|
+
blue: 3949738,
|
|
93
|
+
brown: 8606770,
|
|
94
|
+
green: 6192150,
|
|
95
|
+
red: 11546150,
|
|
96
|
+
black: 1908001
|
|
97
|
+
};
|
|
98
|
+
const DYE_PREFIX = new RegExp(`^(${Object.keys(DYE_COLORS).join("|")})_(.+)$`);
|
|
99
|
+
/**
|
|
100
|
+
* Dyed variants of vanilla items whose models mods generate at runtime (quark's
|
|
101
|
+
* `black_frame_empty` parents a block model that exists nowhere on disk): render
|
|
102
|
+
* the vanilla base item tinted with the dye color. Suffixes like `_empty`/`_map`
|
|
103
|
+
* are state variants of the same icon.
|
|
104
|
+
*/
|
|
105
|
+
async function renderDyedVariantFallback(id, models, textures, options) {
|
|
106
|
+
const locator = ResourceLocator.parse(id);
|
|
107
|
+
if (locator.namespace === "minecraft") return null;
|
|
108
|
+
const name = locator.path.split("/").pop() ?? locator.path;
|
|
109
|
+
const match = DYE_PREFIX.exec(name);
|
|
110
|
+
if (!match) return null;
|
|
111
|
+
const base = match[2].replace(/_(?:empty|map)$/, "");
|
|
112
|
+
const color = DYE_COLORS[match[1]];
|
|
113
|
+
const tint = {
|
|
114
|
+
r: (color >>> 16 & 255) / 255,
|
|
115
|
+
g: (color >>> 8 & 255) / 255,
|
|
116
|
+
b: (color & 255) / 255
|
|
117
|
+
};
|
|
118
|
+
for (const candidate of [`minecraft:item/${base}`, `minecraft:item/item_${base}`]) try {
|
|
119
|
+
const model = await models.load(candidate);
|
|
120
|
+
return await renderModel(model, textures, {
|
|
121
|
+
...options,
|
|
122
|
+
tints: [tint]
|
|
123
|
+
});
|
|
124
|
+
} catch {
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
/** Non-body entity sheets that would skew a mob's dominant colors. */
|
|
130
|
+
const EGG_SKIP_TOKENS = /* @__PURE__ */ new Set([
|
|
131
|
+
"eyes",
|
|
132
|
+
"glow",
|
|
133
|
+
"emissive",
|
|
134
|
+
"overlay",
|
|
135
|
+
"saddle",
|
|
136
|
+
"armor",
|
|
137
|
+
"markings"
|
|
138
|
+
]);
|
|
139
|
+
/**
|
|
140
|
+
* Derive spawn-egg tints from the mob's entity texture. Mod egg colors live
|
|
141
|
+
* in item-registration code, so the two dominant colors of the entity skin
|
|
142
|
+
* stand in: primary = biggest color cluster, secondary = biggest cluster
|
|
143
|
+
* visually distinct from it. Returns null when no entity texture matches —
|
|
144
|
+
* the egg then renders untinted, as before.
|
|
145
|
+
*/
|
|
146
|
+
async function spawnEggTints(id, resources, textures) {
|
|
147
|
+
const locator = ResourceLocator.parse(id);
|
|
148
|
+
if (locator.namespace === "minecraft") return null;
|
|
149
|
+
const name = locator.path.split("/").pop() ?? locator.path;
|
|
150
|
+
const mob = /^spawn_egg_(.+)$/.exec(name)?.[1] ?? /^(.+)_spawn_egg$/.exec(name)?.[1];
|
|
151
|
+
if (!mob) return null;
|
|
152
|
+
const wanted = mob.split("_").filter((token) => token.length > 1);
|
|
153
|
+
let best = null;
|
|
154
|
+
let bestScore = 0;
|
|
155
|
+
let bestNoise = Infinity;
|
|
156
|
+
for (const candidate of await resources.listResources("texture", locator.namespace)) {
|
|
157
|
+
if (!candidate.path.startsWith("entity/")) continue;
|
|
158
|
+
const parts = candidate.path.split(/[./_]/).filter((token) => token.length > 1);
|
|
159
|
+
if (parts.some((token) => EGG_SKIP_TOKENS.has(token))) continue;
|
|
160
|
+
let score = 0;
|
|
161
|
+
for (const token of wanted) if (parts.includes(token)) score++;
|
|
162
|
+
if (score === 0) continue;
|
|
163
|
+
if (score > bestScore || score === bestScore && parts.length < bestNoise) {
|
|
164
|
+
best = candidate;
|
|
165
|
+
bestScore = score;
|
|
166
|
+
bestNoise = parts.length;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
const skin = best ? await textures.load(best) : null;
|
|
170
|
+
if (!skin) return null;
|
|
171
|
+
const buckets = /* @__PURE__ */ new Map();
|
|
172
|
+
for (let offset = 0; offset < skin.data.length; offset += 4) {
|
|
173
|
+
if (skin.data[offset + 3] <= 128) continue;
|
|
174
|
+
const key = skin.data[offset] >> 5 << 6 | skin.data[offset + 1] >> 5 << 3 | skin.data[offset + 2] >> 5;
|
|
175
|
+
const bucket = buckets.get(key) ?? [
|
|
176
|
+
0,
|
|
177
|
+
0,
|
|
178
|
+
0,
|
|
179
|
+
0
|
|
180
|
+
];
|
|
181
|
+
bucket[0] += skin.data[offset];
|
|
182
|
+
bucket[1] += skin.data[offset + 1];
|
|
183
|
+
bucket[2] += skin.data[offset + 2];
|
|
184
|
+
bucket[3]++;
|
|
185
|
+
buckets.set(key, bucket);
|
|
186
|
+
}
|
|
187
|
+
const clusters = buckets.values().toArray().toSorted((a, b) => b[3] - a[3]).map(([r, g, b, count]) => {
|
|
188
|
+
return {
|
|
189
|
+
r: r / count / 255,
|
|
190
|
+
g: g / count / 255,
|
|
191
|
+
b: b / count / 255,
|
|
192
|
+
count
|
|
193
|
+
};
|
|
194
|
+
});
|
|
195
|
+
if (clusters.length === 0) return null;
|
|
196
|
+
const primary = clusters[0];
|
|
197
|
+
const distance = (a, b) => Math.hypot(a.r - b.r, a.g - b.g, a.b - b.b);
|
|
198
|
+
const secondary = clusters.find((cluster) => distance(cluster, primary) > .25) ?? {
|
|
199
|
+
r: primary.r * .6,
|
|
200
|
+
g: primary.g * .6,
|
|
201
|
+
b: primary.b * .6
|
|
202
|
+
};
|
|
203
|
+
return [{
|
|
204
|
+
r: primary.r,
|
|
205
|
+
g: primary.g,
|
|
206
|
+
b: primary.b
|
|
207
|
+
}, {
|
|
208
|
+
r: secondary.r,
|
|
209
|
+
g: secondary.g,
|
|
210
|
+
b: secondary.b
|
|
211
|
+
}];
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Render a code-rendered (builtin/entity) item through builtin geometry when
|
|
215
|
+
* its name identifies the kind. Returns null when no heuristic applies —
|
|
216
|
+
* this must never guess across kinds.
|
|
217
|
+
*/
|
|
218
|
+
async function renderEntityFallback(id, models, textures, resources, options) {
|
|
219
|
+
const locator = ResourceLocator.parse(id);
|
|
220
|
+
const name = locator.path.split("/").pop() ?? locator.path;
|
|
221
|
+
const headMatch = /^(.+?)_(?:head|skull)$/.exec(name);
|
|
222
|
+
if (headMatch) {
|
|
223
|
+
const parts = headMatch[1].replace(/^(?:carved|wall|floor)_/, "").split("_");
|
|
224
|
+
for (let keep = parts.length; keep >= 1 && keep >= parts.length - 2; keep--) try {
|
|
225
|
+
const model = await models.load(`mobheads:item/${parts.slice(0, keep).join("_")}`);
|
|
226
|
+
return await renderModel(model, textures, options);
|
|
227
|
+
} catch {
|
|
228
|
+
continue;
|
|
229
|
+
}
|
|
230
|
+
return null;
|
|
231
|
+
}
|
|
232
|
+
if (name.includes("chest") && !name.includes("chestplate")) {
|
|
233
|
+
const variant = name.includes("ender") ? "ender" : name.includes("trapped") ? "trapped" : "normal";
|
|
234
|
+
const candidates = [[`renderchest:item/chest/${variant === "normal" ? "chest" : `${variant}_chest`}`, null], ["renderchest:item/chest", `minecraft:entity/chest/${variant}`]];
|
|
235
|
+
const modTexture = await findChestTexture(resources, locator.namespace, name);
|
|
236
|
+
for (const [modelPath, defaultTexture] of candidates) try {
|
|
237
|
+
const model = await models.load(modelPath);
|
|
238
|
+
let rebound = model;
|
|
239
|
+
if (modTexture && await textures.load(modTexture)) rebound = withTexture(model, "texture", modTexture);
|
|
240
|
+
else if (defaultTexture) rebound = withTexture(model, "texture", ResourceLocator.parse(defaultTexture));
|
|
241
|
+
return await renderModel(rebound, textures, options);
|
|
242
|
+
} catch {
|
|
243
|
+
continue;
|
|
244
|
+
}
|
|
245
|
+
return null;
|
|
246
|
+
}
|
|
247
|
+
if (name.includes("shulker_box")) try {
|
|
248
|
+
const model = await models.load("renderchest:item/shulker_box");
|
|
249
|
+
return await renderModel(model, textures, options);
|
|
250
|
+
} catch {
|
|
251
|
+
return null;
|
|
252
|
+
}
|
|
253
|
+
if (name.endsWith("banner")) try {
|
|
254
|
+
const model = await models.load("renderchest:item/banner");
|
|
255
|
+
return await renderModel(model, textures, {
|
|
256
|
+
...options,
|
|
257
|
+
tints: [WHITE_BANNER]
|
|
258
|
+
});
|
|
259
|
+
} catch {
|
|
260
|
+
return null;
|
|
261
|
+
}
|
|
262
|
+
return null;
|
|
263
|
+
}
|
|
264
|
+
//#endregion
|
|
265
|
+
export { renderEntityFallback as n, spawnEggTints as r, renderDyedVariantFallback as t };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { t as FloatTexture } from "./blend-Qvrn6YgK.js";
|
|
2
|
+
import { t as Mat4 } from "./vector-DRKRi4--.js";
|
|
3
|
+
import { n as FaceGeometry } from "./geometry-BSVmKx5b.js";
|
|
4
|
+
import { r as LightSource } from "./lighting-3FGRC3Af.js";
|
|
5
|
+
import { t as FaceBuffer } from "./rasterizer-CVOlRsuw.js";
|
|
6
|
+
//#region src/render/face.d.ts
|
|
7
|
+
interface TintColor {
|
|
8
|
+
r: number;
|
|
9
|
+
g: number;
|
|
10
|
+
b: number;
|
|
11
|
+
}
|
|
12
|
+
interface RenderableFace {
|
|
13
|
+
geometry: FaceGeometry;
|
|
14
|
+
texture: FloatTexture;
|
|
15
|
+
light: LightSource;
|
|
16
|
+
tint: TintColor | null;
|
|
17
|
+
/** Untransformed model-space max Z — upstream's stable pre-sort key. */
|
|
18
|
+
maxZ: number;
|
|
19
|
+
}
|
|
20
|
+
declare function faceMaxZ(geometry: FaceGeometry): number;
|
|
21
|
+
/** Returns null when the face is culled, degenerate, or has a zero-area UV. */
|
|
22
|
+
declare function renderFace(face: RenderableFace, width: number, height: number, transformation: Mat4): FaceBuffer | null;
|
|
23
|
+
//#endregion
|
|
24
|
+
export { renderFace as i, TintColor as n, faceMaxZ as r, RenderableFace as t };
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { c as normalize, g as transformVector, h as transformDirection, m as sub, r as dot, t as cross } from "./vector-CCxLae_T.js";
|
|
2
|
+
import { a as tintTexture, n as cloneFloatTexture, r as darkenTexture } from "./blend-CHP2-j9U.js";
|
|
3
|
+
import { i as phpRound, n as createFaceBuffer, r as drawTexturedTriangle, t as RowCursor } from "./rasterizer-ABgsWTYN.js";
|
|
4
|
+
//#region src/render/face.ts
|
|
5
|
+
/**
|
|
6
|
+
* Face rendering: cull, transform, project, tint, darken, rasterize — a faithful
|
|
7
|
+
* port of upstream Face::render (docs/research/renderchest-spec.md §4).
|
|
8
|
+
*/
|
|
9
|
+
function faceMaxZ(geometry) {
|
|
10
|
+
return Math.max(geometry.vertices[0][2], geometry.vertices[1][2], geometry.vertices[2][2], geometry.vertices[3][2]);
|
|
11
|
+
}
|
|
12
|
+
function linearDepth(z) {
|
|
13
|
+
return (z + 1) / 3;
|
|
14
|
+
}
|
|
15
|
+
function faceNormal(v0, v1, v2) {
|
|
16
|
+
const normal = cross(sub(v2, v0), sub(v1, v0));
|
|
17
|
+
if (normal[0] === 0 && normal[1] === 0 && normal[2] === 0) return null;
|
|
18
|
+
return normalize(normal);
|
|
19
|
+
}
|
|
20
|
+
/** Returns null when the face is culled, degenerate, or has a zero-area UV. */
|
|
21
|
+
function renderFace(face, width, height, transformation) {
|
|
22
|
+
const { geometry } = face;
|
|
23
|
+
const uvWidth = geometry.uv2[0] - geometry.uv1[0];
|
|
24
|
+
const uvHeight = geometry.uv2[1] - geometry.uv1[1];
|
|
25
|
+
if (uvWidth === 0 || uvHeight === 0) return null;
|
|
26
|
+
const [mv0, mv1, mv2, mv3] = geometry.vertices;
|
|
27
|
+
let normal = geometry.shadeDirectionOverride ?? faceNormal(mv0, mv1, mv2);
|
|
28
|
+
if (normal === null) return null;
|
|
29
|
+
normal = normalize(transformDirection(transformation, normal));
|
|
30
|
+
if (dot([
|
|
31
|
+
0,
|
|
32
|
+
0,
|
|
33
|
+
-1
|
|
34
|
+
], normal) >= -.01) return null;
|
|
35
|
+
let shadeDirection = normal;
|
|
36
|
+
if (geometry.shadeDirectionOverride) shadeDirection = normalize(transformDirection(transformation, geometry.shadeDirectionOverride));
|
|
37
|
+
const v0 = transformVector(transformation, mv0);
|
|
38
|
+
const v1 = transformVector(transformation, mv1);
|
|
39
|
+
const v2 = transformVector(transformation, mv2);
|
|
40
|
+
const v3 = transformVector(transformation, mv3);
|
|
41
|
+
const projected = [
|
|
42
|
+
v0,
|
|
43
|
+
v1,
|
|
44
|
+
v2,
|
|
45
|
+
v3
|
|
46
|
+
].map((v) => {
|
|
47
|
+
return {
|
|
48
|
+
x: phpRound((v[0] - .5) * width + width / 2),
|
|
49
|
+
y: phpRound(height - ((v[1] - .5) * height + height / 2))
|
|
50
|
+
};
|
|
51
|
+
});
|
|
52
|
+
const texture = cloneFloatTexture(face.texture);
|
|
53
|
+
const absU1 = geometry.uv1[0] * texture.width;
|
|
54
|
+
const absV1 = geometry.uv1[1] * texture.height;
|
|
55
|
+
const absU2 = geometry.uv2[0] * texture.width;
|
|
56
|
+
const absV2 = geometry.uv2[1] * texture.height;
|
|
57
|
+
if (geometry.tintIndex !== null && face.tint !== null) tintTexture(texture, face.tint.r, face.tint.g, face.tint.b);
|
|
58
|
+
darkenTexture(texture, 1 - face.light.lightLevelForNormal(shadeDirection), absU1, absV1, absU2, absV2);
|
|
59
|
+
const uvs = [
|
|
60
|
+
[geometry.uv1[0], geometry.uv1[1]],
|
|
61
|
+
[geometry.uv1[0] + uvWidth, geometry.uv1[1]],
|
|
62
|
+
[geometry.uv1[0] + uvWidth, geometry.uv1[1] + uvHeight],
|
|
63
|
+
[geometry.uv1[0], geometry.uv1[1] + uvHeight]
|
|
64
|
+
];
|
|
65
|
+
const rotations = Math.floor(geometry.rotation / 90);
|
|
66
|
+
for (let i = 0; i < rotations; i++) {
|
|
67
|
+
const last = uvs.pop();
|
|
68
|
+
if (last) uvs.unshift(last);
|
|
69
|
+
}
|
|
70
|
+
const buffer = createFaceBuffer(width, height);
|
|
71
|
+
const depths = [
|
|
72
|
+
linearDepth(v0[2]),
|
|
73
|
+
linearDepth(v1[2]),
|
|
74
|
+
linearDepth(v2[2]),
|
|
75
|
+
linearDepth(v3[2])
|
|
76
|
+
];
|
|
77
|
+
const point = (i) => {
|
|
78
|
+
return {
|
|
79
|
+
x: projected[i].x,
|
|
80
|
+
y: projected[i].y,
|
|
81
|
+
u: uvs[i][0],
|
|
82
|
+
v: uvs[i][1],
|
|
83
|
+
depth: depths[i]
|
|
84
|
+
};
|
|
85
|
+
};
|
|
86
|
+
const cursor = new RowCursor();
|
|
87
|
+
drawTexturedTriangle(point(0), point(2), point(3), buffer, texture, cursor);
|
|
88
|
+
drawTexturedTriangle(point(0), point(1), point(2), buffer, texture, cursor);
|
|
89
|
+
return buffer;
|
|
90
|
+
}
|
|
91
|
+
//#endregion
|
|
92
|
+
export { renderFace as n, faceMaxZ as t };
|