@nodecraft/rendermite 0.0.1 → 1.0.1
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 +92 -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-3u49i-eD.js +108 -0
- package/dist/encode-C5kdAm45.d.ts +34 -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-BK7Q8WZ3.d.ts +54 -0
- package/dist/run-Dr6BfyN9.js +316 -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,108 @@
|
|
|
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
|
+
/** Losslessly transcode an existing PNG resource into the formats referenced by generated CSS. */
|
|
10
|
+
async function encodeRasterAsset(source, formats) {
|
|
11
|
+
const image = sharp(source);
|
|
12
|
+
const unique = [...new Set(formats)];
|
|
13
|
+
const encoded = await Promise.all(unique.map(async (format) => {
|
|
14
|
+
switch (format) {
|
|
15
|
+
case "png": return [format, await image.clone().png({
|
|
16
|
+
compressionLevel: 9,
|
|
17
|
+
effort: 10
|
|
18
|
+
}).toBuffer()];
|
|
19
|
+
case "webp": return [format, await image.clone().webp({
|
|
20
|
+
lossless: true,
|
|
21
|
+
effort: 6
|
|
22
|
+
}).toBuffer()];
|
|
23
|
+
case "avif": return [format, await image.clone().avif({
|
|
24
|
+
lossless: true,
|
|
25
|
+
effort: 6
|
|
26
|
+
}).toBuffer()];
|
|
27
|
+
}
|
|
28
|
+
}));
|
|
29
|
+
return new Map(encoded);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Encode a multi-frame icon: animated WebP (universal), optional GIF for
|
|
33
|
+
* legacy browsers, PNG as the static first frame (matching upstream's
|
|
34
|
+
* fallback), and AVIF animated where the local libvips supports it —
|
|
35
|
+
* otherwise a static first frame.
|
|
36
|
+
*/
|
|
37
|
+
async function encodeAnimatedIcon(frames, delaysMs, options = {}) {
|
|
38
|
+
if (frames.length === 1) return encodeIcon(frames[0], options);
|
|
39
|
+
const { width, height } = frames[0];
|
|
40
|
+
const pages = await Promise.all(frames.map((frame) => {
|
|
41
|
+
const bytes = toByteTexture(frame);
|
|
42
|
+
return sharp(Buffer.from(bytes.data.buffer, bytes.data.byteOffset, bytes.data.length), { raw: {
|
|
43
|
+
width,
|
|
44
|
+
height,
|
|
45
|
+
channels: 4
|
|
46
|
+
} }).png({ compressionLevel: 0 }).toBuffer();
|
|
47
|
+
}));
|
|
48
|
+
const animated = () => sharp(pages, { join: { animated: true } });
|
|
49
|
+
const result = { png: (await encodeIcon(frames[0], { webp: false })).png };
|
|
50
|
+
if (options.webp !== false) result.webp = await animated().webp({
|
|
51
|
+
lossless: true,
|
|
52
|
+
effort: 6,
|
|
53
|
+
loop: 0,
|
|
54
|
+
delay: delaysMs
|
|
55
|
+
}).toBuffer();
|
|
56
|
+
if (options.gif) result.gif = await animated().gif({
|
|
57
|
+
loop: 0,
|
|
58
|
+
delay: delaysMs
|
|
59
|
+
}).toBuffer();
|
|
60
|
+
if (options.avif) try {
|
|
61
|
+
result.avif = await animated().avif({
|
|
62
|
+
lossless: true,
|
|
63
|
+
effort: 6
|
|
64
|
+
}).toBuffer();
|
|
65
|
+
result.avifAnimated = true;
|
|
66
|
+
} catch {
|
|
67
|
+
result.avif = (await encodeIcon(frames[0], {
|
|
68
|
+
webp: false,
|
|
69
|
+
avif: true
|
|
70
|
+
})).avif;
|
|
71
|
+
result.avifAnimated = false;
|
|
72
|
+
}
|
|
73
|
+
return result;
|
|
74
|
+
}
|
|
75
|
+
/** Distinct RGBA colors, up to a cap (palette PNGs hold at most 256). */
|
|
76
|
+
function countColors(data, cap) {
|
|
77
|
+
const seen = /* @__PURE__ */ new Set();
|
|
78
|
+
for (let offset = 0; offset < data.length; offset += 4) {
|
|
79
|
+
seen.add(((data[offset] * 256 + data[offset + 1]) * 256 + data[offset + 2]) * 256 + data[offset + 3]);
|
|
80
|
+
if (seen.size > cap) return seen.size;
|
|
81
|
+
}
|
|
82
|
+
return seen.size;
|
|
83
|
+
}
|
|
84
|
+
async function encodeIcon(texture, options = {}) {
|
|
85
|
+
const bytes = toByteTexture(texture);
|
|
86
|
+
const raw = sharp(Buffer.from(bytes.data.buffer, bytes.data.byteOffset, bytes.data.length), { raw: {
|
|
87
|
+
width: bytes.width,
|
|
88
|
+
height: bytes.height,
|
|
89
|
+
channels: 4
|
|
90
|
+
} });
|
|
91
|
+
const paletteSafe = countColors(bytes.data, 256) <= 256;
|
|
92
|
+
const result = { png: await raw.clone().png({
|
|
93
|
+
compressionLevel: 9,
|
|
94
|
+
effort: 10,
|
|
95
|
+
palette: paletteSafe
|
|
96
|
+
}).toBuffer() };
|
|
97
|
+
if (options.webp !== false) result.webp = await raw.clone().webp({
|
|
98
|
+
lossless: true,
|
|
99
|
+
effort: 6
|
|
100
|
+
}).toBuffer();
|
|
101
|
+
if (options.avif) result.avif = await raw.clone().avif({
|
|
102
|
+
lossless: true,
|
|
103
|
+
effort: 6
|
|
104
|
+
}).toBuffer();
|
|
105
|
+
return result;
|
|
106
|
+
}
|
|
107
|
+
//#endregion
|
|
108
|
+
export { encodeIcon as n, encodeRasterAsset as r, encodeAnimatedIcon as t };
|
|
@@ -0,0 +1,34 @@
|
|
|
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
|
+
type RasterAssetFormat = 'png' | 'webp' | 'avif';
|
|
23
|
+
/** Losslessly transcode an existing PNG resource into the formats referenced by generated CSS. */
|
|
24
|
+
declare function encodeRasterAsset(source: Buffer, formats: readonly RasterAssetFormat[]): Promise<Map<RasterAssetFormat, Buffer>>;
|
|
25
|
+
/**
|
|
26
|
+
* Encode a multi-frame icon: animated WebP (universal), optional GIF for
|
|
27
|
+
* legacy browsers, PNG as the static first frame (matching upstream's
|
|
28
|
+
* fallback), and AVIF animated where the local libvips supports it —
|
|
29
|
+
* otherwise a static first frame.
|
|
30
|
+
*/
|
|
31
|
+
declare function encodeAnimatedIcon(frames: FloatTexture[], delaysMs: number[], options?: AnimatedEncodeOptions): Promise<EncodedAnimatedIcon>;
|
|
32
|
+
declare function encodeIcon(texture: FloatTexture, options?: EncodeOptions): Promise<EncodedIcon>;
|
|
33
|
+
//#endregion
|
|
34
|
+
export { RasterAssetFormat as a, encodeRasterAsset as c, EncodedIcon as i, EncodeOptions as n, encodeAnimatedIcon as o, EncodedAnimatedIcon as r, encodeIcon as s, AnimatedEncodeOptions 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 };
|